Revert "Generate runtime stubs in droidstubs" am: d40c591487

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2989229

Change-Id: I5ec47c526dc411dea82104a91b61857e30d3c11f
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Jihoon Kang 2024-03-05 23:38:46 +00:00 committed by Automerger Merge Worker
commit 05b152f271
3 changed files with 9 additions and 85 deletions

View file

@ -222,8 +222,6 @@ type Javadoc struct {
stubsSrcJar android.WritablePath stubsSrcJar android.WritablePath
exportableStubsSrcJar android.WritablePath exportableStubsSrcJar android.WritablePath
runtimeStubsSrcJar android.WritablePath
} }
func (j *Javadoc) OutputFiles(tag string) (android.Paths, error) { func (j *Javadoc) OutputFiles(tag string) (android.Paths, error) {

View file

@ -227,7 +227,6 @@ type currentApiTimestampProvider interface {
type annotationFlagsParams struct { type annotationFlagsParams struct {
migratingNullability bool migratingNullability bool
validatingNullability bool validatingNullability bool
extractAnnotations bool
nullabilityWarningsFile android.WritablePath nullabilityWarningsFile android.WritablePath
annotationsZip android.WritablePath annotationsZip android.WritablePath
} }
@ -255,7 +254,6 @@ type stubsCommandConfigParams struct {
validatingNullability bool validatingNullability bool
annotationsEnabled bool annotationsEnabled bool
apiLevelsAnnotationsEnabled bool apiLevelsAnnotationsEnabled bool
extractAnnotations bool
} }
// droidstubs passes sources files through Metalava to generate stub .java files that only contain the API to be // droidstubs passes sources files through Metalava to generate stub .java files that only contain the API to be
@ -540,9 +538,7 @@ func (d *Droidstubs) annotationsFlags(ctx android.ModuleContext, cmd *android.Ru
cmd.FlagWithOutput("--nullability-warnings-txt ", params.nullabilityWarningsFile) cmd.FlagWithOutput("--nullability-warnings-txt ", params.nullabilityWarningsFile)
} }
if params.extractAnnotations { cmd.FlagWithOutput("--extract-annotations ", params.annotationsZip)
cmd.FlagWithOutput("--extract-annotations ", params.annotationsZip)
}
if len(d.properties.Merge_annotations_dirs) != 0 { if len(d.properties.Merge_annotations_dirs) != 0 {
d.mergeAnnoDirFlags(ctx, cmd) d.mergeAnnoDirFlags(ctx, cmd)
@ -588,9 +584,7 @@ func (d *Droidstubs) apiLevelsAnnotationsFlags(ctx android.ModuleContext, cmd *a
} else if stubsType == Exportable { } else if stubsType == Exportable {
apiVersions = s.exportableArtifacts.apiVersionsXml apiVersions = s.exportableArtifacts.apiVersionsXml
} else { } else {
// if the stubs type does not generate api-versions.xml file, default to using the ctx.ModuleErrorf("%s stubs type does not generate api-versions.xml file", stubsType.String())
// everything artifacts
apiVersions = s.everythingArtifacts.apiVersionsXml
} }
} else { } else {
ctx.PropertyErrorf("api_levels_module", ctx.PropertyErrorf("api_levels_module",
@ -824,7 +818,6 @@ func (d *Droidstubs) commonMetalavaStubCmd(ctx android.ModuleContext, rule *andr
annotationParams := annotationFlagsParams{ annotationParams := annotationFlagsParams{
migratingNullability: params.stubConfig.migratingNullability, migratingNullability: params.stubConfig.migratingNullability,
validatingNullability: params.stubConfig.validatingNullability, validatingNullability: params.stubConfig.validatingNullability,
extractAnnotations: params.stubConfig.extractAnnotations,
nullabilityWarningsFile: params.nullabilityWarningsFile, nullabilityWarningsFile: params.nullabilityWarningsFile,
annotationsZip: params.annotationsZip, annotationsZip: params.annotationsZip,
} }
@ -1073,38 +1066,6 @@ func (d *Droidstubs) exportableStubCmd(ctx android.ModuleContext, params stubsCo
d.optionalStubCmd(ctx, optionalCmdParams) d.optionalStubCmd(ctx, optionalCmdParams)
} }
// Sandbox rule for generating runtime stubs
func (d *Droidstubs) runtimeStubCmd(ctx android.ModuleContext, params stubsCommandConfigParams) {
// We are only interested in generating the stubs srcjar,
// not other artifacts for the runtime stubs
params.checkApi = false
params.writeSdkValues = false
params.validatingNullability = false
params.extractAnnotations = false
params.apiLevelsAnnotationsEnabled = false
optionalCmdParams := stubsCommandParams{
stubConfig: params,
}
d.Javadoc.runtimeStubsSrcJar = android.PathForModuleOut(ctx, params.stubsType.String(), ctx.ModuleName()+"-"+"stubs.srcjar")
optionalCmdParams.stubsSrcJar = d.Javadoc.runtimeStubsSrcJar
// If aconfig_declarations property is not defined, all flagged apis symbols are stripped
// as no aconfig flags are enabled. In such case, the runtime stubs are identical to the
// exportable stubs, thus no additional metalava invocation is needed.
if len(d.properties.Aconfig_declarations) == 0 {
rule := android.NewRuleBuilder(pctx, ctx)
rule.Command().
Text("cp").Flag("-f").
Input(d.exportableStubsSrcJar).Output(d.runtimeStubsSrcJar)
rule.Build(fmt.Sprintf("metalava_%s", params.stubsType.String()), "metalava merged")
} else {
d.optionalStubCmd(ctx, optionalCmdParams)
}
}
func (d *Droidstubs) optionalStubCmd(ctx android.ModuleContext, params stubsCommandParams) { func (d *Droidstubs) optionalStubCmd(ctx android.ModuleContext, params stubsCommandParams) {
params.srcJarDir = android.PathForModuleOut(ctx, params.stubConfig.stubsType.String(), "srcjars") params.srcJarDir = android.PathForModuleOut(ctx, params.stubConfig.stubsType.String(), "srcjars")
@ -1176,8 +1137,6 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) {
annotationsEnabled := Bool(d.properties.Annotations_enabled) annotationsEnabled := Bool(d.properties.Annotations_enabled)
extractAnnotations := annotationsEnabled
migratingNullability := annotationsEnabled && String(d.properties.Previous_api) != "" migratingNullability := annotationsEnabled && String(d.properties.Previous_api) != ""
validatingNullability := annotationsEnabled && (strings.Contains(String(d.Javadoc.properties.Args), "--validate-nullability-from-merged-stubs") || validatingNullability := annotationsEnabled && (strings.Contains(String(d.Javadoc.properties.Args), "--validate-nullability-from-merged-stubs") ||
String(d.properties.Validate_nullability_from_list) != "") String(d.properties.Validate_nullability_from_list) != "")
@ -1199,26 +1158,17 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) {
validatingNullability: validatingNullability, validatingNullability: validatingNullability,
annotationsEnabled: annotationsEnabled, annotationsEnabled: annotationsEnabled,
apiLevelsAnnotationsEnabled: apiLevelsAnnotationsEnabled, apiLevelsAnnotationsEnabled: apiLevelsAnnotationsEnabled,
extractAnnotations: extractAnnotations,
} }
stubCmdParams.stubsType = Everything stubCmdParams.stubsType = Everything
// Create default (i.e. "everything" stubs) rule for metalava // Create default (i.e. "everything" stubs) rule for metalava
d.everythingStubCmd(ctx, stubCmdParams) d.everythingStubCmd(ctx, stubCmdParams)
// The module generates "exportable" stubs regardless of whether // The module generates "exportable" (and "runtime" eventually) stubs regardless of whether
// aconfig_declarations property is defined or not. If the property is not defined, the module simply // aconfig_declarations property is defined or not. If the property is not defined, the module simply
// strips all flagged apis to generate the "exportable" stubs // strips all flagged apis to generate the "exportable" stubs
stubCmdParams.stubsType = Exportable stubCmdParams.stubsType = Exportable
d.exportableStubCmd(ctx, stubCmdParams) d.exportableStubCmd(ctx, stubCmdParams)
// "runtime" stubs do not generate any other artifacts than the stubs.
// Therefore, metalava does not have to run for "runtime" configuration
// when the module does not generate stubs.
if stubCmdParams.generateStubs {
stubCmdParams.stubsType = Runtime
d.runtimeStubCmd(ctx, stubCmdParams)
}
if apiCheckEnabled(ctx, d.properties.Check_api.Current, "current") { if apiCheckEnabled(ctx, d.properties.Check_api.Current, "current") {
if len(d.Javadoc.properties.Out) > 0 { if len(d.Javadoc.properties.Out) > 0 {

View file

@ -397,47 +397,23 @@ func TestAconfigDeclarations(t *testing.T) {
"bar", "bar",
], ],
} }
droidstubs {
name: "baz",
srcs: ["a/A.java"],
api_surface: "public",
check_api: {
current: {
api_file: "a/current.txt",
removed_api_file: "a/removed.txt",
}
},
}
`) `)
// Check that droidstubs depend on aconfig_declarations // Check that droidstubs depend on aconfig_declarations
android.AssertBoolEquals(t, "foo expected to depend on bar", android.AssertBoolEquals(t, "foo expected to depend on bar",
CheckModuleHasDependency(t, result.TestContext, "foo", "android_common", "bar"), true) CheckModuleHasDependency(t, result.TestContext, "foo", "android_common", "bar"), true)
fooModule := result.ModuleForTests("foo", "android_common") m := result.ModuleForTests("foo", "android_common")
android.AssertStringDoesContain(t, "foo generates revert annotations file", android.AssertStringDoesContain(t, "foo generates revert annotations file",
strings.Join(fooModule.AllOutputs(), ""), "revert-annotations-exportable.txt") strings.Join(m.AllOutputs(), ""), "revert-annotations-exportable.txt")
// revert-annotations.txt passed to exportable stubs generation metalava command // revert-annotations.txt passed to exportable stubs generation metalava command
exportableManifest := fooModule.Output("metalava_exportable.sbox.textproto") manifest := m.Output("metalava_exportable.sbox.textproto")
exportableCmdline := String(android.RuleBuilderSboxProtoForTests(t, result.TestContext, exportableManifest).Commands[0].Command) cmdline := String(android.RuleBuilderSboxProtoForTests(t, result.TestContext, manifest).Commands[0].Command)
android.AssertStringDoesContain(t, "flagged api hide command not included", exportableCmdline, "revert-annotations-exportable.txt") android.AssertStringDoesContain(t, "flagged api hide command not included", cmdline, "revert-annotations-exportable.txt")
android.AssertStringDoesContain(t, "foo generates exportable stubs jar", android.AssertStringDoesContain(t, "foo generates exportable stubs jar",
strings.Join(fooModule.AllOutputs(), ""), "exportable/foo-stubs.srcjar") strings.Join(m.AllOutputs(), ""), "exportable/foo-stubs.srcjar")
// revert-annotations.txt passed to runtime stubs generation metalava command
runtimeManifest := fooModule.Output("metalava_runtime.sbox.textproto")
runtimeCmdline := String(android.RuleBuilderSboxProtoForTests(t, result.TestContext, runtimeManifest).Commands[0].Command)
android.AssertStringDoesContain(t, "flagged api hide command not included", runtimeCmdline, "revert-annotations-runtime.txt")
android.AssertStringDoesContain(t, "foo generates runtime stubs jar",
strings.Join(fooModule.AllOutputs(), ""), "runtime/foo-stubs.srcjar")
// If aconfig_declarations property is not defined, the runtime stubs is a copy of the exportable stubs
bazModule := result.ModuleForTests("baz", "android_common")
bazRuntimeCmdline := bazModule.Rule("metalava_runtime").RuleParams.Command
android.AssertStringDoesContain(t, "copy command should include the input stub", bazRuntimeCmdline, "exportable/baz-stubs.srcjar")
} }
func TestReleaseExportRuntimeApis(t *testing.T) { func TestReleaseExportRuntimeApis(t *testing.T) {