Prepare to generate "runtime" stubs in droidstubs
In order to prepare generating "runtime" stubs in droidstubs, this change performs some cleanups, which are: - Modify droidstubs providers methods to take a StubsType enum as an input, in order to remove exportable-specific providers. The methods are also modifed to return an error when the artifact is not provided for the input StubsType. - Wrap droidstubs artifact to a struct. This removes artifacts common to all stubs types from being written out as a individual module property (e.g. exportableAnnotationsZip -> exportableArtifacts.annotationsZip) Test: m nothing --no-skip-soong-tests Bug: 319162970 Change-Id: I6d6c57c5417ca71eab5ddda7981b71fd84fa6ee1
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
package java
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"path"
|
||||
"path/filepath"
|
||||
@@ -752,75 +753,78 @@ func (paths *scopePaths) extractExportableStubsLibraryInfoFromDependency(ctx and
|
||||
}
|
||||
}
|
||||
|
||||
func (paths *scopePaths) treatDepAsApiStubsProvider(dep android.Module, action func(provider ApiStubsProvider)) error {
|
||||
func (paths *scopePaths) treatDepAsApiStubsProvider(dep android.Module, action func(provider ApiStubsProvider) error) error {
|
||||
if apiStubsProvider, ok := dep.(ApiStubsProvider); ok {
|
||||
action(apiStubsProvider)
|
||||
return nil
|
||||
} else {
|
||||
return fmt.Errorf("expected module that implements ApiStubsProvider, e.g. droidstubs")
|
||||
}
|
||||
}
|
||||
|
||||
func (paths *scopePaths) treatDepAsExportableApiStubsProvider(dep android.Module, action func(provider ExportableApiStubsProvider)) error {
|
||||
if exportableApiStubsProvider, ok := dep.(ExportableApiStubsProvider); ok {
|
||||
action(exportableApiStubsProvider)
|
||||
err := action(apiStubsProvider)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
} else {
|
||||
return fmt.Errorf("expected module that implements ExportableApiStubsSrcProvider, e.g. droidstubs")
|
||||
}
|
||||
}
|
||||
|
||||
func (paths *scopePaths) treatDepAsApiStubsSrcProvider(dep android.Module, action func(provider ApiStubsSrcProvider)) error {
|
||||
func (paths *scopePaths) treatDepAsApiStubsSrcProvider(dep android.Module, action func(provider ApiStubsSrcProvider) error) error {
|
||||
if apiStubsProvider, ok := dep.(ApiStubsSrcProvider); ok {
|
||||
action(apiStubsProvider)
|
||||
err := action(apiStubsProvider)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
} else {
|
||||
return fmt.Errorf("expected module that implements ApiStubsSrcProvider, e.g. droidstubs")
|
||||
}
|
||||
}
|
||||
|
||||
func (paths *scopePaths) extractApiInfoFromApiStubsProvider(provider ApiStubsProvider) {
|
||||
paths.annotationsZip = android.OptionalPathForPath(provider.AnnotationsZip())
|
||||
paths.currentApiFilePath = android.OptionalPathForPath(provider.ApiFilePath())
|
||||
paths.removedApiFilePath = android.OptionalPathForPath(provider.RemovedApiFilePath())
|
||||
}
|
||||
func (paths *scopePaths) extractApiInfoFromApiStubsProvider(provider ApiStubsProvider, stubsType StubsType) error {
|
||||
var annotationsZip, currentApiFilePath, removedApiFilePath android.Path
|
||||
annotationsZip, annotationsZipErr := provider.AnnotationsZip(stubsType)
|
||||
currentApiFilePath, currentApiFilePathErr := provider.ApiFilePath(stubsType)
|
||||
removedApiFilePath, removedApiFilePathErr := provider.RemovedApiFilePath(stubsType)
|
||||
|
||||
func (paths *scopePaths) extractApiInfoFromExportableApiStubsProvider(provider ExportableApiStubsProvider) {
|
||||
paths.annotationsZip = android.OptionalPathForPath(provider.ExportableAnnotationsZip())
|
||||
paths.currentApiFilePath = android.OptionalPathForPath(provider.ExportableApiFilePath())
|
||||
paths.removedApiFilePath = android.OptionalPathForPath(provider.ExportableRemovedApiFilePath())
|
||||
combinedError := errors.Join(annotationsZipErr, currentApiFilePathErr, removedApiFilePathErr)
|
||||
|
||||
if combinedError == nil {
|
||||
paths.annotationsZip = android.OptionalPathForPath(annotationsZip)
|
||||
paths.currentApiFilePath = android.OptionalPathForPath(currentApiFilePath)
|
||||
paths.removedApiFilePath = android.OptionalPathForPath(removedApiFilePath)
|
||||
}
|
||||
return combinedError
|
||||
}
|
||||
|
||||
func (paths *scopePaths) extractApiInfoFromDep(ctx android.ModuleContext, dep android.Module) error {
|
||||
return paths.treatDepAsApiStubsProvider(dep, func(provider ApiStubsProvider) {
|
||||
paths.extractApiInfoFromApiStubsProvider(provider)
|
||||
return paths.treatDepAsApiStubsProvider(dep, func(provider ApiStubsProvider) error {
|
||||
return paths.extractApiInfoFromApiStubsProvider(provider, Everything)
|
||||
})
|
||||
}
|
||||
|
||||
func (paths *scopePaths) extractStubsSourceInfoFromApiStubsProviders(provider ApiStubsSrcProvider) {
|
||||
paths.stubsSrcJar = android.OptionalPathForPath(provider.StubsSrcJar())
|
||||
}
|
||||
|
||||
func (paths *scopePaths) extractStubsSourceInfoFromExportableApiStubsProviders(provider ExportableApiStubsSrcProvider) {
|
||||
paths.stubsSrcJar = android.OptionalPathForPath(provider.ExportableStubsSrcJar())
|
||||
func (paths *scopePaths) extractStubsSourceInfoFromApiStubsProviders(provider ApiStubsSrcProvider, stubsType StubsType) error {
|
||||
stubsSrcJar, err := provider.StubsSrcJar(stubsType)
|
||||
if err == nil {
|
||||
paths.stubsSrcJar = android.OptionalPathForPath(stubsSrcJar)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (paths *scopePaths) extractStubsSourceInfoFromDep(ctx android.ModuleContext, dep android.Module) error {
|
||||
return paths.treatDepAsApiStubsSrcProvider(dep, func(provider ApiStubsSrcProvider) {
|
||||
paths.extractStubsSourceInfoFromApiStubsProviders(provider)
|
||||
return paths.treatDepAsApiStubsSrcProvider(dep, func(provider ApiStubsSrcProvider) error {
|
||||
return paths.extractStubsSourceInfoFromApiStubsProviders(provider, Everything)
|
||||
})
|
||||
}
|
||||
|
||||
func (paths *scopePaths) extractStubsSourceAndApiInfoFromApiStubsProvider(ctx android.ModuleContext, dep android.Module) error {
|
||||
if ctx.Config().ReleaseHiddenApiExportableStubs() {
|
||||
return paths.treatDepAsExportableApiStubsProvider(dep, func(provider ExportableApiStubsProvider) {
|
||||
paths.extractApiInfoFromExportableApiStubsProvider(provider)
|
||||
paths.extractStubsSourceInfoFromExportableApiStubsProviders(provider)
|
||||
return paths.treatDepAsApiStubsProvider(dep, func(provider ApiStubsProvider) error {
|
||||
extractApiInfoErr := paths.extractApiInfoFromApiStubsProvider(provider, Exportable)
|
||||
extractStubsSourceInfoErr := paths.extractStubsSourceInfoFromApiStubsProviders(provider, Exportable)
|
||||
return errors.Join(extractApiInfoErr, extractStubsSourceInfoErr)
|
||||
})
|
||||
}
|
||||
return paths.treatDepAsApiStubsProvider(dep, func(provider ApiStubsProvider) {
|
||||
paths.extractApiInfoFromApiStubsProvider(provider)
|
||||
paths.extractStubsSourceInfoFromApiStubsProviders(provider)
|
||||
return paths.treatDepAsApiStubsProvider(dep, func(provider ApiStubsProvider) error {
|
||||
extractApiInfoErr := paths.extractApiInfoFromApiStubsProvider(provider, Everything)
|
||||
extractStubsSourceInfoErr := paths.extractStubsSourceInfoFromApiStubsProviders(provider, Everything)
|
||||
return errors.Join(extractApiInfoErr, extractStubsSourceInfoErr)
|
||||
})
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user