diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/aar.go | 47 | ||||
-rw-r--r-- | java/app.go | 16 | ||||
-rw-r--r-- | java/app_test.go | 173 | ||||
-rw-r--r-- | java/base.go | 97 | ||||
-rw-r--r-- | java/device_host_converter_test.go | 13 | ||||
-rw-r--r-- | java/dex.go | 34 | ||||
-rw-r--r-- | java/dex_test.go | 18 | ||||
-rw-r--r-- | java/dexpreopt.go | 31 | ||||
-rw-r--r-- | java/fuzz_test.go | 4 | ||||
-rw-r--r-- | java/java.go | 52 | ||||
-rw-r--r-- | java/java_test.go | 106 | ||||
-rw-r--r-- | java/jdeps.go | 2 | ||||
-rw-r--r-- | java/kotlin_test.go | 79 | ||||
-rw-r--r-- | java/lint.go | 19 | ||||
-rw-r--r-- | java/platform_compat_config.go | 30 | ||||
-rw-r--r-- | java/ravenwood.go | 8 | ||||
-rw-r--r-- | java/robolectric.go | 9 | ||||
-rw-r--r-- | java/sdk.go | 4 | ||||
-rw-r--r-- | java/sdk_library_test.go | 39 | ||||
-rw-r--r-- | java/sdk_test.go | 18 | ||||
-rw-r--r-- | java/support_libraries.go | 15 | ||||
-rw-r--r-- | java/testing.go | 2 |
22 files changed, 413 insertions, 403 deletions
diff --git a/java/aar.go b/java/aar.go index f7c5c13de..0e27cb8fd 100644 --- a/java/aar.go +++ b/java/aar.go @@ -217,7 +217,7 @@ func (p propagateRROEnforcementTransitionMutator) Mutate(ctx android.BottomUpMut } func (a *aapt) useResourceProcessorBusyBox(ctx android.BaseModuleContext) bool { - return BoolDefault(a.aaptProperties.Use_resource_processor, ctx.Config().UseResourceProcessorByDefault()) && + return BoolDefault(a.aaptProperties.Use_resource_processor, true) && // TODO(b/331641946): remove this when ResourceProcessorBusyBox supports generating shared libraries. !slices.Contains(a.aaptProperties.Aaptflags, "--shared-lib") && // Use the legacy resource processor in kythe builds. @@ -945,6 +945,12 @@ type AndroidLibraryInfo struct { var AndroidLibraryInfoProvider = blueprint.NewProvider[AndroidLibraryInfo]() +type AARImportInfo struct { + // Empty for now +} + +var AARImportInfoProvider = blueprint.NewProvider[AARImportInfo]() + type AndroidLibrary struct { Library aapt @@ -1479,12 +1485,7 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { completeStaticLibsResourceJars := depset.New(depset.PREORDER, nil, transitiveStaticLibsResourceJars) var implementationJarFile android.Path - var combineJars android.Paths - if ctx.Config().UseTransitiveJarsInClasspath() { - combineJars = completeStaticLibsImplementationJars.ToList() - } else { - combineJars = append(android.Paths{classpathFile}, staticJars...) - } + combineJars := completeStaticLibsImplementationJars.ToList() if len(combineJars) > 1 { implementationJarOutputPath := android.PathForModuleOut(ctx, "combined", jarName) @@ -1495,12 +1496,8 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { } var resourceJarFile android.Path - var resourceJars android.Paths - if ctx.Config().UseTransitiveJarsInClasspath() { - resourceJars = completeStaticLibsResourceJars.ToList() - } else { - resourceJars = staticResourceJars - } + resourceJars := completeStaticLibsResourceJars.ToList() + if len(resourceJars) > 1 { combinedJar := android.PathForModuleOut(ctx, "res-combined", jarName) TransformJarsToJar(ctx, combinedJar, "for resources", resourceJars, android.OptionalPath{}, @@ -1511,12 +1508,8 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { } // merge implementation jar with resources if necessary - var implementationAndResourcesJars android.Paths - if ctx.Config().UseTransitiveJarsInClasspath() { - implementationAndResourcesJars = append(slices.Clone(resourceJars), combineJars...) - } else { - implementationAndResourcesJars = android.PathsIfNonNil(resourceJarFile, implementationJarFile) - } + implementationAndResourcesJars := append(slices.Clone(resourceJars), combineJars...) + var implementationAndResourcesJar android.Path if len(implementationAndResourcesJars) > 1 { combinedJar := android.PathForModuleOut(ctx, "withres", jarName) @@ -1531,12 +1524,7 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { // Save the output file with no relative path so that it doesn't end up in a subdirectory when used as a resource a.implementationAndResourcesJarFile = implementationAndResourcesJar.WithoutRel() - var headerJars android.Paths - if ctx.Config().UseTransitiveJarsInClasspath() { - headerJars = completeStaticLibsHeaderJars.ToList() - } else { - headerJars = append(android.Paths{classpathFile}, staticHeaderJars...) - } + headerJars := completeStaticLibsHeaderJars.ToList() if len(headerJars) > 1 { headerJarFile := android.PathForModuleOut(ctx, "turbine-combined", jarName) TransformJarsToJar(ctx, headerJarFile, "combine header jars", headerJars, android.OptionalPath{}, false, nil, nil) @@ -1545,12 +1533,7 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { a.headerJarFile = headerJars[0] } - if ctx.Config().UseTransitiveJarsInClasspath() { - ctx.CheckbuildFile(classpathFile) - } else { - ctx.CheckbuildFile(a.headerJarFile) - ctx.CheckbuildFile(a.implementationJarFile) - } + ctx.CheckbuildFile(classpathFile) javaInfo := &JavaInfo{ HeaderJars: android.PathsIfNonNil(a.headerJarFile), @@ -1594,6 +1577,8 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { JniPackages: a.jniPackages, }) + android.SetProvider(ctx, AARImportInfoProvider, AARImportInfo{}) + ctx.SetOutputFiles([]android.Path{a.implementationAndResourcesJarFile}, "") ctx.SetOutputFiles([]android.Path{a.aarPath}, ".aar") diff --git a/java/app.go b/java/app.go index 9b10bf3cd..827b23526 100644 --- a/java/app.go +++ b/java/app.go @@ -452,6 +452,16 @@ func (a *AndroidApp) GenerateAndroidBuildActions(ctx android.ModuleContext) { android.SetProvider(ctx, AppInfoProvider, appInfo) a.requiredModuleNames = a.getRequiredModuleNames(ctx) + + if a.dexer.proguardDictionary.Valid() { + android.SetProvider(ctx, ProguardProvider, ProguardInfo{ + ModuleName: ctx.ModuleName(), + Class: "APPS", + ProguardDictionary: a.dexer.proguardDictionary.Path(), + ProguardUsageZip: a.dexer.proguardUsageZip.Path(), + ClassesJar: a.implementationAndResourcesJar, + }) + } } func (a *AndroidApp) getRequiredModuleNames(ctx android.ModuleContext) []string { @@ -1114,6 +1124,11 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) { android.SetProvider(ctx, JavaInfoProvider, javaInfo) } + android.SetProvider(ctx, android.ApexBundleDepsDataProvider, android.ApexBundleDepsData{ + FlatListPath: a.FlatListPath(), + Updatable: a.Updatable(), + }) + moduleInfoJSON := ctx.ModuleInfoJSON() moduleInfoJSON.Class = []string{"APPS"} if !a.embeddedJniLibs { @@ -1636,6 +1651,7 @@ func (a *AndroidTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { a.data = append(a.data, android.PathsForModuleSrc(ctx, a.testProperties.Device_common_data)...) a.data = append(a.data, android.PathsForModuleSrc(ctx, a.testProperties.Device_first_data)...) a.data = append(a.data, android.PathsForModuleSrc(ctx, a.testProperties.Device_first_prefer32_data)...) + a.data = append(a.data, android.PathsForModuleSrc(ctx, a.testProperties.Host_common_data)...) // Install test deps if !ctx.Config().KatiEnabled() { diff --git a/java/app_test.go b/java/app_test.go index 4f23f61a4..5f5f04d78 100644 --- a/java/app_test.go +++ b/java/app_test.go @@ -887,15 +887,24 @@ func TestAndroidResourceProcessor(t *testing.T) { }, appSrcJars: []string{"out/soong/.intermediates/app/android_common/gen/android/R.srcjar"}, appClasspath: []string{ - "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", - "out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar", - "out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar", - "out/soong/.intermediates/direct_import/android_common/turbine-combined/direct_import.jar", + "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine/android_stubs_current.jar", + "out/soong/.intermediates/shared/android_common/turbine/shared.jar", + "out/soong/.intermediates/shared_transitive_static/android_common/turbine/shared_transitive_static.jar", + "out/soong/.intermediates/direct/android_common/turbine/direct.jar", + "out/soong/.intermediates/transitive/android_common/turbine/transitive.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", + "out/soong/.intermediates/direct_import/android_common/aar/direct_import.jar", + "out/soong/.intermediates/direct_import_dep/android_common/aar/direct_import_dep.jar", }, appCombined: []string{ "out/soong/.intermediates/app/android_common/javac/app.jar", - "out/soong/.intermediates/direct/android_common/combined/direct.jar", - "out/soong/.intermediates/direct_import/android_common/combined/direct_import.jar", + "out/soong/.intermediates/direct/android_common/javac/direct.jar", + "out/soong/.intermediates/transitive/android_common/javac/transitive.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", + "out/soong/.intermediates/direct_import/android_common/aar/direct_import.jar", + "out/soong/.intermediates/direct_import_dep/android_common/aar/direct_import_dep.jar", }, directResources: nil, @@ -908,21 +917,23 @@ func TestAndroidResourceProcessor(t *testing.T) { directImports: []string{"out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk"}, directSrcJars: []string{"out/soong/.intermediates/direct/android_common/gen/android/R.srcjar"}, directClasspath: []string{ - "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", - "out/soong/.intermediates/transitive/android_common/turbine-combined/transitive.jar", - "out/soong/.intermediates/transitive_import/android_common/turbine-combined/transitive_import.jar", + "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine/android_stubs_current.jar", + "out/soong/.intermediates/transitive/android_common/turbine/transitive.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", }, directCombined: []string{ "out/soong/.intermediates/direct/android_common/javac/direct.jar", "out/soong/.intermediates/transitive/android_common/javac/transitive.jar", - "out/soong/.intermediates/transitive_import/android_common/combined/transitive_import.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", }, transitiveResources: []string{"out/soong/.intermediates/transitive/android_common/aapt2/transitive/res/values_strings.arsc.flat"}, transitiveOverlays: nil, transitiveImports: []string{"out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk"}, transitiveSrcJars: []string{"out/soong/.intermediates/transitive/android_common/gen/android/R.srcjar"}, - transitiveClasspath: []string{"out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar"}, + transitiveClasspath: []string{"out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine/android_stubs_current.jar"}, transitiveCombined: nil, sharedResources: nil, @@ -936,9 +947,9 @@ func TestAndroidResourceProcessor(t *testing.T) { }, sharedSrcJars: []string{"out/soong/.intermediates/shared/android_common/gen/android/R.srcjar"}, sharedClasspath: []string{ - "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", - "out/soong/.intermediates/shared_transitive_shared/android_common/turbine-combined/shared_transitive_shared.jar", - "out/soong/.intermediates/shared_transitive_static/android_common/turbine-combined/shared_transitive_static.jar", + "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine/android_stubs_current.jar", + "out/soong/.intermediates/shared_transitive_shared/android_common/turbine/shared_transitive_shared.jar", + "out/soong/.intermediates/shared_transitive_static/android_common/turbine/shared_transitive_static.jar", }, sharedCombined: []string{ "out/soong/.intermediates/shared/android_common/javac/shared.jar", @@ -985,17 +996,26 @@ func TestAndroidResourceProcessor(t *testing.T) { }, appSrcJars: nil, appClasspath: []string{ - "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", + "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine/android_stubs_current.jar", "out/soong/.intermediates/app/android_common/busybox/R.jar", - "out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar", - "out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar", - "out/soong/.intermediates/direct_import/android_common/turbine-combined/direct_import.jar", + "out/soong/.intermediates/shared/android_common/turbine/shared.jar", + "out/soong/.intermediates/shared_transitive_static/android_common/turbine/shared_transitive_static.jar", + "out/soong/.intermediates/direct/android_common/turbine/direct.jar", + "out/soong/.intermediates/transitive/android_common/turbine/transitive.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", + "out/soong/.intermediates/direct_import/android_common/aar/direct_import.jar", + "out/soong/.intermediates/direct_import_dep/android_common/aar/direct_import_dep.jar", }, appCombined: []string{ "out/soong/.intermediates/app/android_common/javac/app.jar", "out/soong/.intermediates/app/android_common/busybox/R.jar", - "out/soong/.intermediates/direct/android_common/combined/direct.jar", - "out/soong/.intermediates/direct_import/android_common/combined/direct_import.jar", + "out/soong/.intermediates/direct/android_common/javac/direct.jar", + "out/soong/.intermediates/transitive/android_common/javac/transitive.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", + "out/soong/.intermediates/direct_import/android_common/aar/direct_import.jar", + "out/soong/.intermediates/direct_import_dep/android_common/aar/direct_import_dep.jar", }, directResources: nil, @@ -1008,18 +1028,20 @@ func TestAndroidResourceProcessor(t *testing.T) { }, directSrcJars: nil, directClasspath: []string{ - "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", + "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine/android_stubs_current.jar", "out/soong/.intermediates/direct/android_common/busybox/R.jar", "out/soong/.intermediates/transitive/android_common/busybox/R.jar", "out/soong/.intermediates/transitive_import_dep/android_common/busybox/R.jar", "out/soong/.intermediates/transitive_import/android_common/busybox/R.jar", - "out/soong/.intermediates/transitive/android_common/turbine-combined/transitive.jar", - "out/soong/.intermediates/transitive_import/android_common/turbine-combined/transitive_import.jar", + "out/soong/.intermediates/transitive/android_common/turbine/transitive.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", }, directCombined: []string{ "out/soong/.intermediates/direct/android_common/javac/direct.jar", "out/soong/.intermediates/transitive/android_common/javac/transitive.jar", - "out/soong/.intermediates/transitive_import/android_common/combined/transitive_import.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", }, transitiveResources: []string{"out/soong/.intermediates/transitive/android_common/aapt2/transitive/res/values_strings.arsc.flat"}, @@ -1027,7 +1049,7 @@ func TestAndroidResourceProcessor(t *testing.T) { transitiveImports: []string{"out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk"}, transitiveSrcJars: nil, transitiveClasspath: []string{ - "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", + "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine/android_stubs_current.jar", "out/soong/.intermediates/transitive/android_common/busybox/R.jar", }, transitiveCombined: nil, @@ -1041,12 +1063,12 @@ func TestAndroidResourceProcessor(t *testing.T) { }, sharedSrcJars: nil, sharedClasspath: []string{ - "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", + "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine/android_stubs_current.jar", "out/soong/.intermediates/shared/android_common/busybox/R.jar", "out/soong/.intermediates/shared_transitive_static/android_common/busybox/R.jar", "out/soong/.intermediates/shared_transitive_shared/android_common/busybox/R.jar", - "out/soong/.intermediates/shared_transitive_shared/android_common/turbine-combined/shared_transitive_shared.jar", - "out/soong/.intermediates/shared_transitive_static/android_common/turbine-combined/shared_transitive_static.jar", + "out/soong/.intermediates/shared_transitive_shared/android_common/turbine/shared_transitive_shared.jar", + "out/soong/.intermediates/shared_transitive_static/android_common/turbine/shared_transitive_static.jar", }, sharedCombined: []string{ "out/soong/.intermediates/shared/android_common/javac/shared.jar", @@ -1090,18 +1112,27 @@ func TestAndroidResourceProcessor(t *testing.T) { }, appSrcJars: nil, appClasspath: []string{ - "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", + "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine/android_stubs_current.jar", // R.jar has to come before direct.jar "out/soong/.intermediates/app/android_common/busybox/R.jar", - "out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar", - "out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar", - "out/soong/.intermediates/direct_import/android_common/turbine-combined/direct_import.jar", + "out/soong/.intermediates/shared/android_common/turbine/shared.jar", + "out/soong/.intermediates/shared_transitive_static/android_common/turbine/shared_transitive_static.jar", + "out/soong/.intermediates/direct/android_common/turbine/direct.jar", + "out/soong/.intermediates/transitive/android_common/turbine/transitive.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", + "out/soong/.intermediates/direct_import/android_common/aar/direct_import.jar", + "out/soong/.intermediates/direct_import_dep/android_common/aar/direct_import_dep.jar", }, appCombined: []string{ "out/soong/.intermediates/app/android_common/javac/app.jar", "out/soong/.intermediates/app/android_common/busybox/R.jar", - "out/soong/.intermediates/direct/android_common/combined/direct.jar", - "out/soong/.intermediates/direct_import/android_common/combined/direct_import.jar", + "out/soong/.intermediates/direct/android_common/javac/direct.jar", + "out/soong/.intermediates/transitive/android_common/javac/transitive.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", + "out/soong/.intermediates/direct_import/android_common/aar/direct_import.jar", + "out/soong/.intermediates/direct_import_dep/android_common/aar/direct_import_dep.jar", }, dontVerifyDirect: true, @@ -1133,15 +1164,24 @@ func TestAndroidResourceProcessor(t *testing.T) { }, appSrcJars: []string{"out/soong/.intermediates/app/android_common/gen/android/R.srcjar"}, appClasspath: []string{ - "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", - "out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar", - "out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar", - "out/soong/.intermediates/direct_import/android_common/turbine-combined/direct_import.jar", + "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine/android_stubs_current.jar", + "out/soong/.intermediates/shared/android_common/turbine/shared.jar", + "out/soong/.intermediates/shared_transitive_static/android_common/turbine/shared_transitive_static.jar", + "out/soong/.intermediates/direct/android_common/turbine/direct.jar", + "out/soong/.intermediates/transitive/android_common/turbine/transitive.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", + "out/soong/.intermediates/direct_import/android_common/aar/direct_import.jar", + "out/soong/.intermediates/direct_import_dep/android_common/aar/direct_import_dep.jar", }, appCombined: []string{ "out/soong/.intermediates/app/android_common/javac/app.jar", - "out/soong/.intermediates/direct/android_common/combined/direct.jar", - "out/soong/.intermediates/direct_import/android_common/combined/direct_import.jar", + "out/soong/.intermediates/direct/android_common/javac/direct.jar", + "out/soong/.intermediates/transitive/android_common/javac/transitive.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", + "out/soong/.intermediates/direct_import/android_common/aar/direct_import.jar", + "out/soong/.intermediates/direct_import_dep/android_common/aar/direct_import_dep.jar", }, directResources: nil, @@ -1154,17 +1194,19 @@ func TestAndroidResourceProcessor(t *testing.T) { }, directSrcJars: nil, directClasspath: []string{ - "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", + "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine/android_stubs_current.jar", "out/soong/.intermediates/direct/android_common/busybox/R.jar", "out/soong/.intermediates/transitive_import_dep/android_common/busybox/R.jar", "out/soong/.intermediates/transitive_import/android_common/busybox/R.jar", - "out/soong/.intermediates/transitive/android_common/turbine-combined/transitive.jar", - "out/soong/.intermediates/transitive_import/android_common/turbine-combined/transitive_import.jar", + "out/soong/.intermediates/transitive/android_common/turbine/transitive.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", }, directCombined: []string{ "out/soong/.intermediates/direct/android_common/javac/direct.jar", "out/soong/.intermediates/transitive/android_common/javac/transitive.jar", - "out/soong/.intermediates/transitive_import/android_common/combined/transitive_import.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", }, dontVerifyTransitive: true, @@ -1195,15 +1237,24 @@ func TestAndroidResourceProcessor(t *testing.T) { }, appSrcJars: []string{"out/soong/.intermediates/app/android_common/gen/android/R.srcjar"}, appClasspath: []string{ - "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", - "out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar", - "out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar", - "out/soong/.intermediates/direct_import/android_common/turbine-combined/direct_import.jar", + "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine/android_stubs_current.jar", + "out/soong/.intermediates/shared/android_common/turbine/shared.jar", + "out/soong/.intermediates/shared_transitive_static/android_common/turbine/shared_transitive_static.jar", + "out/soong/.intermediates/direct/android_common/turbine/direct.jar", + "out/soong/.intermediates/transitive/android_common/turbine/transitive.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", + "out/soong/.intermediates/direct_import/android_common/aar/direct_import.jar", + "out/soong/.intermediates/direct_import_dep/android_common/aar/direct_import_dep.jar", }, appCombined: []string{ "out/soong/.intermediates/app/android_common/javac/app.jar", - "out/soong/.intermediates/direct/android_common/combined/direct.jar", - "out/soong/.intermediates/direct_import/android_common/combined/direct_import.jar", + "out/soong/.intermediates/direct/android_common/javac/direct.jar", + "out/soong/.intermediates/transitive/android_common/javac/transitive.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", + "out/soong/.intermediates/direct_import/android_common/aar/direct_import.jar", + "out/soong/.intermediates/direct_import_dep/android_common/aar/direct_import_dep.jar", }, directResources: nil, @@ -1216,14 +1267,16 @@ func TestAndroidResourceProcessor(t *testing.T) { directImports: []string{"out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk"}, directSrcJars: []string{"out/soong/.intermediates/direct/android_common/gen/android/R.srcjar"}, directClasspath: []string{ - "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", - "out/soong/.intermediates/transitive/android_common/turbine-combined/transitive.jar", - "out/soong/.intermediates/transitive_import/android_common/turbine-combined/transitive_import.jar", + "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine/android_stubs_current.jar", + "out/soong/.intermediates/transitive/android_common/turbine/transitive.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", }, directCombined: []string{ "out/soong/.intermediates/direct/android_common/javac/direct.jar", "out/soong/.intermediates/transitive/android_common/javac/transitive.jar", - "out/soong/.intermediates/transitive_import/android_common/combined/transitive_import.jar", + "out/soong/.intermediates/transitive_import/android_common/aar/transitive_import.jar", + "out/soong/.intermediates/transitive_import_dep/android_common/aar/transitive_import_dep.jar", }, transitiveResources: []string{"out/soong/.intermediates/transitive/android_common/aapt2/transitive/res/values_strings.arsc.flat"}, @@ -1231,7 +1284,7 @@ func TestAndroidResourceProcessor(t *testing.T) { transitiveImports: []string{"out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk"}, transitiveSrcJars: nil, transitiveClasspath: []string{ - "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", + "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine/android_stubs_current.jar", "out/soong/.intermediates/transitive/android_common/busybox/R.jar", }, transitiveCombined: nil, @@ -1480,7 +1533,6 @@ func TestAndroidResourceOverlays(t *testing.T) { "device/vendor/blah/overlay/bar/res/values/strings.xml", }, {"lib", "android_common"}: { - "out/soong/.intermediates/lib2/android_common/package-res.apk", "lib/res/res/values/strings.xml", "device/vendor/blah/overlay/lib/res/values/strings.xml", }, @@ -1515,12 +1567,10 @@ func TestAndroidResourceOverlays(t *testing.T) { "device/vendor/blah/overlay/bar/res/values/strings.xml", }, {"lib", "android_common"}: { - "out/soong/.intermediates/lib2/android_common/package-res.apk", "lib/res/res/values/strings.xml", "device/vendor/blah/overlay/lib/res/values/strings.xml", }, {"lib", "android_common_rro"}: { - "out/soong/.intermediates/lib2/android_common_rro/package-res.apk", "lib/res/res/values/strings.xml", }, }, @@ -1560,7 +1610,6 @@ func TestAndroidResourceOverlays(t *testing.T) { }, {"bar", "android_common"}: {"device/vendor/blah/static_overlay/bar/res/values/strings.xml"}, {"lib", "android_common"}: { - "out/soong/.intermediates/lib2/android_common/package-res.apk", "lib/res/res/values/strings.xml", }, }, @@ -3000,14 +3049,14 @@ func TestOverrideAndroidAppDependency(t *testing.T) { // Verify baz, which depends on the overridden module foo, has the correct classpath javac arg. javac := ctx.ModuleForTests(t, "baz", "android_common").Rule("javac") - fooTurbine := "out/soong/.intermediates/foo/android_common/turbine-combined/foo.jar" + fooTurbine := "out/soong/.intermediates/foo/android_common/turbine/foo.jar" if !strings.Contains(javac.Args["classpath"], fooTurbine) { t.Errorf("baz classpath %v does not contain %q", javac.Args["classpath"], fooTurbine) } // Verify qux, which depends on the overriding module bar, has the correct classpath javac arg. javac = ctx.ModuleForTests(t, "qux", "android_common").Rule("javac") - barTurbine := "out/soong/.intermediates/foo/android_common_bar/turbine-combined/foo.jar" + barTurbine := "out/soong/.intermediates/foo/android_common_bar/turbine/foo.jar" if !strings.Contains(javac.Args["classpath"], barTurbine) { t.Errorf("qux classpath %v does not contain %q", javac.Args["classpath"], barTurbine) } @@ -3084,7 +3133,7 @@ func TestOverrideAndroidTest(t *testing.T) { // Check if javac classpath has the correct jar file path. This checks instrumentation_for overrides. javac := variant.Rule("javac") - turbine := filepath.Join("out", "soong", ".intermediates", "foo", expected.targetVariant, "turbine-combined", "foo.jar") + turbine := filepath.Join("out", "soong", ".intermediates", "foo", expected.targetVariant, "turbine", "foo.jar") if !strings.Contains(javac.Args["classpath"], turbine) { t.Errorf("classpath %q does not contain %q", javac.Args["classpath"], turbine) } diff --git a/java/base.go b/java/base.go index fccc80691..0833831fc 100644 --- a/java/base.go +++ b/java/base.go @@ -1298,15 +1298,11 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath } j.headerJarFile = combinedHeaderJarFile - if ctx.Config().UseTransitiveJarsInClasspath() { - if len(localHeaderJars) > 0 { - ctx.CheckbuildFile(localHeaderJars...) - } else { - // There are no local sources or resources in this module, so there is nothing to checkbuild. - ctx.UncheckedModule() - } + if len(localHeaderJars) > 0 { + ctx.CheckbuildFile(localHeaderJars...) } else { - ctx.CheckbuildFile(j.headerJarFile) + // There are no local sources or resources in this module, so there is nothing to checkbuild. + ctx.UncheckedModule() } j.outputFile = j.headerJarFile @@ -1604,12 +1600,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath completeStaticLibsResourceJars := depset.New(depset.PREORDER, localResourceJars, deps.transitiveStaticLibsResourceJars) var combinedResourceJar android.Path - var resourceJars android.Paths - if ctx.Config().UseTransitiveJarsInClasspath() { - resourceJars = completeStaticLibsResourceJars.ToList() - } else { - resourceJars = append(slices.Clone(localResourceJars), deps.staticResourceJars...) - } + resourceJars := completeStaticLibsResourceJars.ToList() if len(resourceJars) == 1 { combinedResourceJar = resourceJars[0] } else if len(resourceJars) > 0 { @@ -1630,12 +1621,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath completeStaticLibsImplementationJars := depset.New(depset.PREORDER, localImplementationJars, deps.transitiveStaticLibsImplementationJars) - var jars android.Paths - if ctx.Config().UseTransitiveJarsInClasspath() { - jars = completeStaticLibsImplementationJars.ToList() - } else { - jars = append(slices.Clone(localImplementationJars), deps.staticJars...) - } + jars := completeStaticLibsImplementationJars.ToList() jars = append(jars, extraDepCombinedJars...) @@ -1766,7 +1752,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath headerJarFile := android.PathForModuleOut(ctx, "javac-header", jarName) convertImplementationJarToHeaderJar(ctx, j.implementationJarFile, headerJarFile) j.headerJarFile = headerJarFile - if len(localImplementationJars) == 1 && ctx.Config().UseTransitiveJarsInClasspath() { + if len(localImplementationJars) == 1 { localHeaderJarFile := android.PathForModuleOut(ctx, "local-javac-header", jarName) convertImplementationJarToHeaderJar(ctx, localImplementationJars[0], localHeaderJarFile) localHeaderJars = append(localHeaderJars, localHeaderJarFile) @@ -1796,16 +1782,10 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath // merge implementation jar with resources if necessary var implementationAndResourcesJarsToCombine android.Paths - if ctx.Config().UseTransitiveJarsInClasspath() { - resourceJars := completeStaticLibsResourceJars.ToList() - if len(resourceJars) > 0 { - implementationAndResourcesJarsToCombine = append(resourceJars, completeStaticLibsImplementationJarsToCombine.ToList()...) - implementationAndResourcesJarsToCombine = append(implementationAndResourcesJarsToCombine, extraDepCombinedJars...) - } - } else { - if combinedResourceJar != nil { - implementationAndResourcesJarsToCombine = android.Paths{combinedResourceJar, outputFile} - } + combinedResourceJars := completeStaticLibsResourceJars.ToList() + if len(combinedResourceJars) > 0 { + implementationAndResourcesJarsToCombine = slices.Concat(combinedResourceJars, + completeStaticLibsImplementationJarsToCombine.ToList(), extraDepCombinedJars) } if len(implementationAndResourcesJarsToCombine) > 0 { @@ -1855,18 +1835,9 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath } // merge dex jar with resources if necessary - var dexAndResourceJarsToCombine android.Paths - if ctx.Config().UseTransitiveJarsInClasspath() { - resourceJars := completeStaticLibsResourceJars.ToList() - if len(resourceJars) > 0 { - dexAndResourceJarsToCombine = append(android.Paths{dexOutputFile}, resourceJars...) - } - } else { - if combinedResourceJar != nil { - dexAndResourceJarsToCombine = android.Paths{dexOutputFile, combinedResourceJar} - } - } - if len(dexAndResourceJarsToCombine) > 0 { + if len(combinedResourceJars) > 0 { + dexAndResourceJarsToCombine := append(android.Paths{dexOutputFile}, combinedResourceJars...) + combinedJar := android.PathForModuleOut(ctx, "dex-withres", jarName) TransformJarsToJar(ctx, combinedJar, "for dex resources", dexAndResourceJarsToCombine, android.OptionalPath{}, false, nil, nil) @@ -1938,18 +1909,13 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath j.collectTransitiveSrcFiles(ctx, srcFiles) - if ctx.Config().UseTransitiveJarsInClasspath() { - if len(localImplementationJars) > 0 || len(localResourceJars) > 0 || len(localHeaderJars) > 0 { - ctx.CheckbuildFile(localImplementationJars...) - ctx.CheckbuildFile(localResourceJars...) - ctx.CheckbuildFile(localHeaderJars...) - } else { - // There are no local sources or resources in this module, so there is nothing to checkbuild. - ctx.UncheckedModule() - } + if len(localImplementationJars) > 0 || len(localResourceJars) > 0 || len(localHeaderJars) > 0 { + ctx.CheckbuildFile(localImplementationJars...) + ctx.CheckbuildFile(localResourceJars...) + ctx.CheckbuildFile(localHeaderJars...) } else { - ctx.CheckbuildFile(j.implementationJarFile) - ctx.CheckbuildFile(j.headerJarFile) + // There are no local sources or resources in this module, so there is nothing to checkbuild. + ctx.UncheckedModule() } // Save the output file with no relative path so that it doesn't end up in a subdirectory when used as a resource @@ -2116,13 +2082,8 @@ func (j *Module) compileJavaHeader(ctx android.ModuleContext, srcFiles, srcJars // Combine any static header libraries into classes-header.jar. If there is only // one input jar this step will be skipped. - var jars android.Paths - if ctx.Config().UseTransitiveJarsInClasspath() { - depSet := depset.New(depset.PREORDER, localHeaderJars, deps.transitiveStaticLibsHeaderJars) - jars = depSet.ToList() - } else { - jars = append(slices.Clone(localHeaderJars), deps.staticHeaderJars...) - } + depSet := depset.New(depset.PREORDER, localHeaderJars, deps.transitiveStaticLibsHeaderJars) + jars := depSet.ToList() // we cannot skip the combine step for now if there is only one jar // since we have to strip META-INF/TRANSITIVE dir from turbine.jar @@ -2634,14 +2595,12 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { deps.transitiveStaticLibsImplementationJars = transitiveStaticJarsImplementationLibs deps.transitiveStaticLibsResourceJars = transitiveStaticJarsResourceLibs - if ctx.Config().UseTransitiveJarsInClasspath() { - depSet := depset.New(depset.PREORDER, nil, transitiveClasspathHeaderJars) - deps.classpath = depSet.ToList() - depSet = depset.New(depset.PREORDER, nil, transitiveBootClasspathHeaderJars) - deps.bootClasspath = depSet.ToList() - depSet = depset.New(depset.PREORDER, nil, transitiveJava9ClasspathHeaderJars) - deps.java9Classpath = depSet.ToList() - } + depSet := depset.New(depset.PREORDER, nil, transitiveClasspathHeaderJars) + deps.classpath = depSet.ToList() + depSet = depset.New(depset.PREORDER, nil, transitiveBootClasspathHeaderJars) + deps.bootClasspath = depSet.ToList() + depSet = depset.New(depset.PREORDER, nil, transitiveJava9ClasspathHeaderJars) + deps.java9Classpath = depSet.ToList() if ctx.Device() { sdkDep := decodeSdkDep(ctx, android.SdkContext(j)) diff --git a/java/device_host_converter_test.go b/java/device_host_converter_test.go index 197bb9f95..42e3b4678 100644 --- a/java/device_host_converter_test.go +++ b/java/device_host_converter_test.go @@ -15,10 +15,11 @@ package java import ( - "android/soong/android" "slices" "strings" "testing" + + "android/soong/android" ) func TestDeviceForHost(t *testing.T) { @@ -54,12 +55,12 @@ func TestDeviceForHost(t *testing.T) { ctx, config := testJava(t, bp) deviceModule := ctx.ModuleForTests(t, "device_module", "android_common") - deviceTurbineCombined := deviceModule.Output("turbine-combined/device_module.jar") + deviceTurbine := deviceModule.Output("turbine/device_module.jar") deviceJavac := deviceModule.Output("javac/device_module.jar") deviceRes := deviceModule.Output("res/device_module.jar") deviceImportModule := ctx.ModuleForTests(t, "device_import_module", "android_common") - deviceImportCombined := deviceImportModule.Output("combined/device_import_module.jar") + deviceImportCombined := deviceImportModule.Output("local-combined/device_import_module.jar") hostModule := ctx.ModuleForTests(t, "host_module", config.BuildOSCommonTarget.String()) hostJavac := hostModule.Output("javac/host_module.jar") @@ -69,7 +70,7 @@ func TestDeviceForHost(t *testing.T) { // check classpath of host module with dependency on device_for_host_module expectedClasspath := "-classpath " + strings.Join(android.Paths{ - deviceTurbineCombined.Output, + deviceTurbine.Output, deviceImportCombined.Output, }.Strings(), ":") @@ -137,11 +138,11 @@ func TestHostForDevice(t *testing.T) { hostModule := ctx.ModuleForTests(t, "host_module", config.BuildOSCommonTarget.String()) hostJavac := hostModule.Output("javac/host_module.jar") - hostJavacHeader := hostModule.Output("javac-header/host_module.jar") + hostJavacHeader := hostModule.Output("local-javac-header/host_module.jar") hostRes := hostModule.Output("res/host_module.jar") hostImportModule := ctx.ModuleForTests(t, "host_import_module", config.BuildOSCommonTarget.String()) - hostImportCombined := hostImportModule.Output("combined/host_import_module.jar") + hostImportCombined := hostImportModule.Output("local-combined/host_import_module.jar") deviceModule := ctx.ModuleForTests(t, "device_module", "android_common") deviceJavac := deviceModule.Output("javac/device_module.jar") diff --git a/java/dex.go b/java/dex.go index c9d3f376d..ed2df2103 100644 --- a/java/dex.go +++ b/java/dex.go @@ -435,6 +435,11 @@ func (d *dexer) r8Flags(ctx android.ModuleContext, dexParams *compileDexParams, android.PathForSource(ctx, "build/make/core/proguard.flags"), } + if ctx.Config().UseR8GlobalCheckNotNullFlags() { + flagFiles = append(flagFiles, android.PathForSource(ctx, + "build/make/core/proguard/checknotnull.flags")) + } + flagFiles = append(flagFiles, d.extraProguardFlagsFiles...) // TODO(ccross): static android library proguard files @@ -583,7 +588,6 @@ func (d *dexer) compileDex(ctx android.ModuleContext, dexParams *compileDexParam var description string var artProfileOutputPath *android.OutputPath var implicitOutputs android.WritablePaths - var flags []string var deps android.Paths args := map[string]string{ "zipFlags": zipFlags, @@ -610,18 +614,13 @@ func (d *dexer) compileDex(ctx android.ModuleContext, dexParams *compileDexParam description = "r8" debugMode := android.InList("--debug", commonFlags) r8Flags, r8Deps, r8ArtProfileOutputPath := d.r8Flags(ctx, dexParams, debugMode) - flags = append(flags, r8Flags...) deps = append(deps, r8Deps...) args["r8Flags"] = strings.Join(append(commonFlags, r8Flags...), " ") if r8ArtProfileOutputPath != nil { artProfileOutputPath = r8ArtProfileOutputPath - implicitOutputs = append( - implicitOutputs, - artProfileOutputPath, - ) // Add the implicit r8 Art profile output to args so that r8RE knows // about this implicit output - args["outR8ArtProfile"] = artProfileOutputPath.String() + args["outR8ArtProfile"] = r8ArtProfileOutputPath.String() } args["outDict"] = proguardDictionary.String() args["outConfig"] = proguardConfiguration.String() @@ -642,16 +641,11 @@ func (d *dexer) compileDex(ctx android.ModuleContext, dexParams *compileDexParam if useD8 { description = "d8" d8Flags, d8Deps, d8ArtProfileOutputPath := d.d8Flags(ctx, dexParams) - flags = append(flags, d8Flags...) deps = append(deps, d8Deps...) deps = append(deps, commonDeps...) args["d8Flags"] = strings.Join(append(commonFlags, d8Flags...), " ") if d8ArtProfileOutputPath != nil { artProfileOutputPath = d8ArtProfileOutputPath - implicitOutputs = append( - implicitOutputs, - artProfileOutputPath, - ) } // If we are generating both d8 and r8, only use RBE when both are enabled. switch { @@ -667,6 +661,12 @@ func (d *dexer) compileDex(ctx android.ModuleContext, dexParams *compileDexParam rule = d8 } } + if artProfileOutputPath != nil { + implicitOutputs = append( + implicitOutputs, + artProfileOutputPath, + ) + } ctx.Build(pctx, android.BuildParams{ Rule: rule, Description: description, @@ -697,3 +697,13 @@ func (d *dexer) compileDex(ctx android.ModuleContext, dexParams *compileDexParam return javalibJar, artProfileOutputPath } + +type ProguardInfo struct { + ModuleName string + Class string + ProguardDictionary android.Path + ProguardUsageZip android.Path + ClassesJar android.Path +} + +var ProguardProvider = blueprint.NewProvider[ProguardInfo]() diff --git a/java/dex_test.go b/java/dex_test.go index 2126e42e8..66d801dcc 100644 --- a/java/dex_test.go +++ b/java/dex_test.go @@ -70,16 +70,17 @@ func TestR8(t *testing.T) { appR8 := app.Rule("r8") stableAppR8 := stableApp.Rule("r8") corePlatformAppR8 := corePlatformApp.Rule("r8") - libHeader := lib.Output("turbine-combined/lib.jar").Output - staticLibHeader := staticLib.Output("turbine-combined/static_lib.jar").Output + libHeader := lib.Output("turbine/lib.jar").Output + libCombinedHeader := lib.Output("turbine-combined/lib.jar").Output + staticLibHeader := staticLib.Output("turbine/static_lib.jar").Output android.AssertStringDoesContain(t, "expected lib header jar in app javac classpath", appJavac.Args["classpath"], libHeader.String()) android.AssertStringDoesContain(t, "expected static_lib header jar in app javac classpath", appJavac.Args["classpath"], staticLibHeader.String()) - android.AssertStringDoesContain(t, "expected lib header jar in app r8 classpath", - appR8.Args["r8Flags"], libHeader.String()) + android.AssertStringDoesContain(t, "expected lib combined header jar in app r8 classpath", + appR8.Args["r8Flags"], libCombinedHeader.String()) android.AssertStringDoesNotContain(t, "expected no static_lib header jar in app r8 classpath", appR8.Args["r8Flags"], staticLibHeader.String()) android.AssertStringDoesContain(t, "expected -ignorewarnings in app r8 flags", @@ -331,16 +332,17 @@ func TestD8(t *testing.T) { fooJavac := foo.Rule("javac") fooD8 := foo.Rule("d8") appD8 := app.Rule("d8") - libHeader := lib.Output("turbine-combined/lib.jar").Output - staticLibHeader := staticLib.Output("turbine-combined/static_lib.jar").Output + libHeader := lib.Output("turbine/lib.jar").Output + libCombinedHeader := lib.Output("turbine-combined/lib.jar").Output + staticLibHeader := staticLib.Output("turbine/static_lib.jar").Output android.AssertStringDoesContain(t, "expected lib header jar in foo javac classpath", fooJavac.Args["classpath"], libHeader.String()) android.AssertStringDoesContain(t, "expected static_lib header jar in foo javac classpath", fooJavac.Args["classpath"], staticLibHeader.String()) - android.AssertStringDoesContain(t, "expected lib header jar in foo d8 classpath", - fooD8.Args["d8Flags"], libHeader.String()) + android.AssertStringDoesContain(t, "expected lib combined header jar in foo d8 classpath", + fooD8.Args["d8Flags"], libCombinedHeader.String()) android.AssertStringDoesNotContain(t, "expected no static_lib header jar in foo javac classpath", fooD8.Args["d8Flags"], staticLibHeader.String()) diff --git a/java/dexpreopt.go b/java/dexpreopt.go index 5755dec23..b21cfc968 100644 --- a/java/dexpreopt.go +++ b/java/dexpreopt.go @@ -565,6 +565,10 @@ func (d *dexpreopter) dexpreopt(ctx android.ModuleContext, libName string, dexJa if !isApexSystemServerJar { d.builtInstalled = dexpreoptRule.Installs().String() } + + if isSystemServerJar { + checkSystemServerOrder(ctx, libName) + } } func getModuleInstallPathInfo(ctx android.ModuleContext, fullInstallPath string) (android.InstallPath, string, string) { @@ -631,3 +635,30 @@ func (d *dexpreopter) GetRewrittenProfile() android.Path { func (d *dexpreopter) SetRewrittenProfile(p android.Path) { d.rewrittenProfile = p } + +// Check the order of jars on the system server classpath and give a warning/error if a jar precedes +// one of its dependencies. This is not an error, but a missed optimization, as dexpreopt won't +// have the dependency jar in the class loader context, and it won't be able to resolve any +// references to its classes and methods. +func checkSystemServerOrder(ctx android.ModuleContext, libName string) { + config := dexpreopt.GetGlobalConfig(ctx) + jars := config.AllSystemServerClasspathJars(ctx) + jarIndex := config.AllSystemServerJars(ctx).IndexOfJar(libName) + ctx.WalkDeps(func(dep android.Module, parent android.Module) bool { + tag := ctx.OtherModuleDependencyTag(dep) + // Ideally this should only be walking relevant dependencies, but to maintain existing behavior + // for now just exclude any known irrelevant dependencies that would lead to incorrect errors. + if _, ok := tag.(bootclasspathDependencyTag); ok { + return false + } + depIndex := jars.IndexOfJar(dep.Name()) + if jarIndex < depIndex && !config.BrokenSuboptimalOrderOfSystemServerJars { + jar := jars.Jar(jarIndex) + dep := jars.Jar(depIndex) + ctx.ModuleErrorf("non-optimal order of jars on the system server classpath:"+ + " '%s' precedes its dependency '%s', so dexpreopt is unable to resolve any"+ + " references from '%s' to '%s'.\n", jar, dep, jar, dep) + } + return true + }) +} diff --git a/java/fuzz_test.go b/java/fuzz_test.go index 8cbe873ad..735b8da93 100644 --- a/java/fuzz_test.go +++ b/java/fuzz_test.go @@ -72,8 +72,8 @@ func TestJavaFuzz(t *testing.T) { } baz := result.ModuleForTests(t, "baz", osCommonTarget).Rule("javac").Output.String() - barOut := filepath.Join("out", "soong", ".intermediates", "bar", osCommonTarget, "javac-header", "bar.jar") - bazOut := filepath.Join("out", "soong", ".intermediates", "baz", osCommonTarget, "javac-header", "baz.jar") + barOut := filepath.Join("out", "soong", ".intermediates", "bar", osCommonTarget, "local-javac-header", "bar.jar") + bazOut := filepath.Join("out", "soong", ".intermediates", "baz", osCommonTarget, "local-javac-header", "baz.jar") android.AssertStringDoesContain(t, "foo classpath", javac.Args["classpath"], barOut) android.AssertStringDoesContain(t, "foo classpath", javac.Args["classpath"], bazOut) diff --git a/java/java.go b/java/java.go index 45e55d53c..38361bfa7 100644 --- a/java/java.go +++ b/java/java.go @@ -432,6 +432,9 @@ type JavaInfo struct { DexJarBuildPath OptionalDexJarPath DexpreopterInfo *DexpreopterInfo + + XrefJavaFiles android.Paths + XrefKotlinFiles android.Paths } var JavaInfoProvider = blueprint.NewProvider[*JavaInfo]() @@ -1172,6 +1175,16 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) { buildComplianceMetadata(ctx) j.createApiXmlFile(ctx) + + if j.dexer.proguardDictionary.Valid() { + android.SetProvider(ctx, ProguardProvider, ProguardInfo{ + ModuleName: ctx.ModuleName(), + Class: "JAVA_LIBRARIES", + ProguardDictionary: j.dexer.proguardDictionary.Path(), + ProguardUsageZip: j.dexer.proguardUsageZip.Path(), + ClassesJar: j.implementationAndResourcesJar, + }) + } } func (j *Library) javaLibraryModuleInfoJSON(ctx android.ModuleContext) *android.ModuleInfoJSON { @@ -1539,6 +1552,11 @@ type testProperties struct { // host test. Device_first_prefer32_data []string `android:"path_device_first_prefer32"` + // Same as data, but will add dependencies on modules using the host's os variation and + // the common arch variation. Useful for a device test that wants to depend on a host + // module, for example to include a custom Tradefed test runner. + Host_common_data []string `android:"path_host_common"` + // Flag to indicate whether or not to create test config automatically. If AndroidTest.xml // doesn't exist next to the Android.bp, this attribute doesn't need to be set to true // explicitly. @@ -1837,6 +1855,7 @@ func (j *Test) generateAndroidBuildActionsWithConfig(ctx android.ModuleContext, j.data = append(j.data, android.PathsForModuleSrc(ctx, j.testProperties.Device_common_data)...) j.data = append(j.data, android.PathsForModuleSrc(ctx, j.testProperties.Device_first_data)...) j.data = append(j.data, android.PathsForModuleSrc(ctx, j.testProperties.Device_first_prefer32_data)...) + j.data = append(j.data, android.PathsForModuleSrc(ctx, j.testProperties.Host_common_data)...) j.extraTestConfigs = android.PathsForModuleSrc(ctx, j.testProperties.Test_options.Extra_test_configs) @@ -3072,12 +3091,7 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) { // file of the module to be named jarName. var outputFile android.Path combinedImplementationJar := android.PathForModuleOut(ctx, "combined", jarName) - var implementationJars android.Paths - if ctx.Config().UseTransitiveJarsInClasspath() { - implementationJars = completeStaticLibsImplementationJars.ToList() - } else { - implementationJars = append(slices.Clone(localJars), staticJars...) - } + implementationJars := completeStaticLibsImplementationJars.ToList() TransformJarsToJar(ctx, combinedImplementationJar, "combine prebuilt implementation jars", implementationJars, android.OptionalPath{}, false, j.properties.Exclude_files, j.properties.Exclude_dirs) outputFile = combinedImplementationJar @@ -3100,12 +3114,7 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) { if reuseImplementationJarAsHeaderJar { headerJar = outputFile } else { - var headerJars android.Paths - if ctx.Config().UseTransitiveJarsInClasspath() { - headerJars = completeStaticLibsHeaderJars.ToList() - } else { - headerJars = append(slices.Clone(localJars), staticHeaderJars...) - } + headerJars := completeStaticLibsHeaderJars.ToList() headerOutputFile := android.PathForModuleOut(ctx, "turbine-combined", jarName) TransformJarsToJar(ctx, headerOutputFile, "combine prebuilt header jars", headerJars, android.OptionalPath{}, false, j.properties.Exclude_files, j.properties.Exclude_dirs) @@ -3169,11 +3178,7 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) { j.exportAidlIncludeDirs = android.PathsForModuleSrc(ctx, j.properties.Aidl.Export_include_dirs) - if ctx.Config().UseTransitiveJarsInClasspath() { - ctx.CheckbuildFile(localJars...) - } else { - ctx.CheckbuildFile(outputFile) - } + ctx.CheckbuildFile(localJars...) if ctx.Device() { // Shared libraries deapexed from prebuilt apexes are no longer supported. @@ -3647,10 +3652,10 @@ type kytheExtractJavaSingleton struct { func (ks *kytheExtractJavaSingleton) GenerateBuildActions(ctx android.SingletonContext) { var xrefTargets android.Paths var xrefKotlinTargets android.Paths - ctx.VisitAllModules(func(module android.Module) { - if javaModule, ok := module.(xref); ok { - xrefTargets = append(xrefTargets, javaModule.XrefJavaFiles()...) - xrefKotlinTargets = append(xrefKotlinTargets, javaModule.XrefKotlinFiles()...) + ctx.VisitAllModuleProxies(func(module android.ModuleProxy) { + if javaInfo, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok { + xrefTargets = append(xrefTargets, javaInfo.XrefJavaFiles...) + xrefKotlinTargets = append(xrefKotlinTargets, javaInfo.XrefKotlinFiles...) } }) // TODO(asmundak): perhaps emit a rule to output a warning if there were no xrefTargets @@ -3851,4 +3856,9 @@ func setExtraJavaInfo(ctx android.ModuleContext, module android.Module, javaInfo ApexSystemServerDexJars: di.ApexSystemServerDexJars(), } } + + if xr, ok := module.(xref); ok { + javaInfo.XrefJavaFiles = xr.XrefJavaFiles() + javaInfo.XrefKotlinFiles = xr.XrefKotlinFiles() + } } diff --git a/java/java_test.go b/java/java_test.go index f097762eb..a6290a628 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -110,7 +110,7 @@ func defaultModuleToPath(name string) string { case strings.HasSuffix(name, ".jar"): return name default: - return filepath.Join("out", "soong", ".intermediates", defaultJavaDir, name, "android_common", "turbine-combined", name+".jar") + return filepath.Join("out", "soong", ".intermediates", defaultJavaDir, name, "android_common", "turbine", name+".jar") } } @@ -240,11 +240,6 @@ func TestSimple(t *testing.T) { srcs: ["d.java"], }` - frameworkTurbineCombinedJars := []string{ - "out/soong/.intermediates/default/java/ext/android_common/turbine-combined/ext.jar", - "out/soong/.intermediates/default/java/framework/android_common/turbine-combined/framework.jar", - } - frameworkTurbineJars := []string{ "out/soong/.intermediates/default/java/ext/android_common/turbine/ext.jar", "out/soong/.intermediates/default/java/framework/android_common/turbine/framework.jar", @@ -270,43 +265,6 @@ func TestSimple(t *testing.T) { preparer: android.NullFixturePreparer, fooJavacInputs: []string{"a.java"}, fooJavacClasspath: slices.Concat( - frameworkTurbineCombinedJars, - []string{ - "out/soong/.intermediates/bar/android_common/turbine-combined/bar.jar", - "out/soong/.intermediates/baz/android_common/turbine-combined/baz.jar", - }, - ), - fooCombinedInputs: []string{ - "out/soong/.intermediates/foo/android_common/javac/foo.jar", - "out/soong/.intermediates/baz/android_common/combined/baz.jar", - }, - - fooHeaderCombinedInputs: []string{ - "out/soong/.intermediates/foo/android_common/turbine/foo.jar", - "out/soong/.intermediates/baz/android_common/turbine-combined/baz.jar", - }, - - barJavacInputs: []string{"b.java"}, - barJavacClasspath: slices.Concat( - frameworkTurbineCombinedJars, - []string{ - "out/soong/.intermediates/quz/android_common/turbine-combined/quz.jar", - }, - ), - barCombinedInputs: []string{ - "out/soong/.intermediates/bar/android_common/javac/bar.jar", - "out/soong/.intermediates/quz/android_common/javac/quz.jar", - }, - barHeaderCombinedInputs: []string{ - "out/soong/.intermediates/bar/android_common/turbine/bar.jar", - "out/soong/.intermediates/quz/android_common/turbine-combined/quz.jar", - }, - }, - { - name: "transitive classpath", - preparer: PrepareForTestWithTransitiveClasspathEnabled, - fooJavacInputs: []string{"a.java"}, - fooJavacClasspath: slices.Concat( frameworkTurbineJars, []string{ "out/soong/.intermediates/bar/android_common/turbine/bar.jar", @@ -627,6 +585,29 @@ func TestTest(t *testing.T) { } } +func TestHostCommonData(t *testing.T) { + t.Parallel() + ctx, _ := testJava(t, ` + java_library_host { + name: "host", + srcs: ["a.java"], + } + + java_test { + name: "foo", + srcs: ["a.java"], + host_common_data: [":host"], + } + `) + + foo := ctx.ModuleForTests(t, "foo", "android_common").Module().(*Test) + host := ctx.ModuleForTests(t, "host", ctx.Config().BuildOSCommonTarget.String()).Module().(*Library) + + if g, w := foo.data.RelativeToTop().Strings(), []string{host.outputFile.RelativeToTop().String()}; !slices.Equal(g, w) { + t.Errorf("expected test data %q, got %q\n", w, g) + } +} + func TestHostBinaryNoJavaDebugInfoOverride(t *testing.T) { t.Parallel() bp := ` @@ -726,11 +707,11 @@ func TestPrebuilts(t *testing.T) { javac := fooModule.Rule("javac") combineJar := ctx.ModuleForTests(t, "foo", "android_common").Description("for javac") barModule := ctx.ModuleForTests(t, "bar", "android_common") - barJar := barModule.Output("combined/bar.jar").Output + barJar := barModule.Output("local-combined/bar.jar").Output bazModule := ctx.ModuleForTests(t, "baz", "android_common") - bazJar := bazModule.Output("combined/baz.jar").Output + bazJar := bazModule.Output("local-combined/baz.jar").Output sdklibStubsJar := ctx.ModuleForTests(t, "sdklib.stubs", "android_common"). - Output("combined/sdklib.stubs.jar").Output + Output("local-combined/sdklib.stubs.jar").Output fooLibrary := fooModule.Module().(*Library) assertDeepEquals(t, "foo unique sources incorrect", @@ -858,7 +839,7 @@ func TestDefaults(t *testing.T) { t.Errorf(`foo inputs %v != ["a.java"]`, javac.Inputs) } - barTurbine := filepath.Join("out", "soong", ".intermediates", "bar", "android_common", "turbine-combined", "bar.jar") + barTurbine := filepath.Join("out", "soong", ".intermediates", "bar", "android_common", "turbine", "bar.jar") if !strings.Contains(javac.Args["classpath"], barTurbine) { t.Errorf("foo classpath %v does not contain %q", javac.Args["classpath"], barTurbine) } @@ -1047,7 +1028,7 @@ func TestIncludeSrcs(t *testing.T) { t.Errorf("bar combined resource jars %v does not contain %q", w, g) } - if g, w := barResCombined.Output.String(), bar.Inputs.Strings(); !inList(g, w) { + if g, w := barRes.Output.String(), bar.Inputs.Strings(); !inList(g, w) { t.Errorf("bar combined jars %v does not contain %q", w, g) } @@ -1131,7 +1112,7 @@ func TestTurbine(t *testing.T) { android.AssertPathsRelativeToTopEquals(t, "foo inputs", []string{"a.java"}, fooTurbine.Inputs) - fooHeaderJar := filepath.Join("out", "soong", ".intermediates", "foo", "android_common", "turbine-combined", "foo.jar") + fooHeaderJar := filepath.Join("out", "soong", ".intermediates", "foo", "android_common", "turbine", "foo.jar") barTurbineJar := filepath.Join("out", "soong", ".intermediates", "bar", "android_common", "turbine", "bar.jar") android.AssertStringDoesContain(t, "bar turbine classpath", barTurbine.Args["turbineFlags"], fooHeaderJar) android.AssertStringDoesContain(t, "bar javac classpath", barJavac.Args["classpath"], fooHeaderJar) @@ -1251,16 +1232,18 @@ func TestJavaImport(t *testing.T) { source := ctx.ModuleForTests(t, "source_library", "android_common") sourceJar := source.Output("javac/source_library.jar") - sourceHeaderJar := source.Output("turbine-combined/source_library.jar") + sourceHeaderJar := source.Output("turbine/source_library.jar") + sourceCombinedHeaderJar := source.Output("turbine-combined/source_library.jar") sourceJavaInfo, _ := android.OtherModuleProvider(ctx, source.Module(), JavaInfoProvider) // The source library produces separate implementation and header jars android.AssertPathsRelativeToTopEquals(t, "source library implementation jar", []string{sourceJar.Output.String()}, sourceJavaInfo.ImplementationAndResourcesJars) android.AssertPathsRelativeToTopEquals(t, "source library header jar", - []string{sourceHeaderJar.Output.String()}, sourceJavaInfo.HeaderJars) + []string{sourceCombinedHeaderJar.Output.String()}, sourceJavaInfo.HeaderJars) importWithNoDeps := ctx.ModuleForTests(t, "import_with_no_deps", "android_common") + importWithNoDepsLocalJar := importWithNoDeps.Output("local-combined/import_with_no_deps.jar") importWithNoDepsJar := importWithNoDeps.Output("combined/import_with_no_deps.jar") importWithNoDepsJavaInfo, _ := android.OtherModuleProvider(ctx, importWithNoDeps.Module(), JavaInfoProvider) @@ -1270,10 +1253,14 @@ func TestJavaImport(t *testing.T) { android.AssertPathsRelativeToTopEquals(t, "import with no deps header jar", []string{importWithNoDepsJar.Output.String()}, importWithNoDepsJavaInfo.HeaderJars) android.AssertPathsRelativeToTopEquals(t, "import with no deps combined inputs", - []string{"no_deps.jar"}, importWithNoDepsJar.Inputs) + []string{importWithNoDepsLocalJar.Output.String()}, importWithNoDepsJar.Inputs) + android.AssertPathsRelativeToTopEquals(t, "import with no deps local combined inputs", + []string{"no_deps.jar"}, importWithNoDepsLocalJar.Inputs) importWithSourceDeps := ctx.ModuleForTests(t, "import_with_source_deps", "android_common") + importWithSourceDepsLocalJar := importWithSourceDeps.Output("local-combined/import_with_source_deps.jar") importWithSourceDepsJar := importWithSourceDeps.Output("combined/import_with_source_deps.jar") + importWithSourceDepsLocalHeaderJar := importWithSourceDeps.Output("local-combined/import_with_source_deps.jar") importWithSourceDepsHeaderJar := importWithSourceDeps.Output("turbine-combined/import_with_source_deps.jar") importWithSourceDepsJavaInfo, _ := android.OtherModuleProvider(ctx, importWithSourceDeps.Module(), JavaInfoProvider) @@ -1283,11 +1270,16 @@ func TestJavaImport(t *testing.T) { android.AssertPathsRelativeToTopEquals(t, "import with source deps header jar", []string{importWithSourceDepsHeaderJar.Output.String()}, importWithSourceDepsJavaInfo.HeaderJars) android.AssertPathsRelativeToTopEquals(t, "import with source deps combined implementation jar inputs", - []string{"source_deps.jar", sourceJar.Output.String()}, importWithSourceDepsJar.Inputs) + []string{importWithSourceDepsLocalJar.Output.String(), sourceJar.Output.String()}, importWithSourceDepsJar.Inputs) android.AssertPathsRelativeToTopEquals(t, "import with source deps combined header jar inputs", - []string{"source_deps.jar", sourceHeaderJar.Output.String()}, importWithSourceDepsHeaderJar.Inputs) + []string{importWithSourceDepsLocalHeaderJar.Output.String(), sourceHeaderJar.Output.String()}, importWithSourceDepsHeaderJar.Inputs) + android.AssertPathsRelativeToTopEquals(t, "import with source deps local combined implementation jar inputs", + []string{"source_deps.jar"}, importWithSourceDepsLocalJar.Inputs) + android.AssertPathsRelativeToTopEquals(t, "import with source deps local combined header jar inputs", + []string{"source_deps.jar"}, importWithSourceDepsLocalHeaderJar.Inputs) importWithImportDeps := ctx.ModuleForTests(t, "import_with_import_deps", "android_common") + importWithImportDepsLocalJar := importWithImportDeps.Output("local-combined/import_with_import_deps.jar") importWithImportDepsJar := importWithImportDeps.Output("combined/import_with_import_deps.jar") importWithImportDepsJavaInfo, _ := android.OtherModuleProvider(ctx, importWithImportDeps.Module(), JavaInfoProvider) @@ -1297,7 +1289,9 @@ func TestJavaImport(t *testing.T) { android.AssertPathsRelativeToTopEquals(t, "import with import deps header jar", []string{importWithImportDepsJar.Output.String()}, importWithImportDepsJavaInfo.HeaderJars) android.AssertPathsRelativeToTopEquals(t, "import with import deps combined implementation jar inputs", - []string{"import_deps.jar", importWithNoDepsJar.Output.String()}, importWithImportDepsJar.Inputs) + []string{importWithImportDepsLocalJar.Output.String(), importWithNoDepsLocalJar.Output.String()}, importWithImportDepsJar.Inputs) + android.AssertPathsRelativeToTopEquals(t, "import with import deps local combined implementation jar inputs", + []string{"import_deps.jar"}, importWithImportDepsLocalJar.Inputs) } var compilerFlagsTestCases = []struct { @@ -1364,6 +1358,7 @@ func TestCompilerFlags(t *testing.T) { // TODO(jungjw): Consider making this more robust by ignoring path order. func checkPatchModuleFlag(t *testing.T, ctx *android.TestContext, moduleName string, expected string) { + t.Helper() variables := ctx.ModuleForTests(t, moduleName, "android_common").VariablesForTestsRelativeToTop() flags := strings.Split(variables["javacFlags"], " ") got := "" @@ -3107,7 +3102,6 @@ func TestCoverage(t *testing.T) { result := android.GroupFixturePreparers( PrepareForTestWithJavaDefaultModules, prepareForTestWithFrameworkJacocoInstrumentation, - PrepareForTestWithTransitiveClasspathEnabled, ).RunTestWithBp(t, ` android_app { name: "foo", diff --git a/java/jdeps.go b/java/jdeps.go index 927c1694d..07f8c4378 100644 --- a/java/jdeps.go +++ b/java/jdeps.go @@ -99,7 +99,7 @@ func (j *jdepsGeneratorSingleton) GenerateBuildActions(ctx android.SingletonCont Rule: android.Touch, Output: jfpath, }) - ctx.DistForGoal("general-tests", j.outputPath) + ctx.DistForGoals([]string{"general-tests", "dist_files"}, j.outputPath) } func createJsonFile(moduleInfos map[string]android.IdeInfo, jfpath android.WritablePath) error { diff --git a/java/kotlin_test.go b/java/kotlin_test.go index c7b1ece98..4b56cff1c 100644 --- a/java/kotlin_test.go +++ b/java/kotlin_test.go @@ -50,13 +50,6 @@ func TestKotlin(t *testing.T) { srcs: ["d.kt"], }` - kotlinStdlibTurbineCombinedJars := []string{ - "out/soong/.intermediates/default/java/kotlin-stdlib/android_common/turbine-combined/kotlin-stdlib.jar", - "out/soong/.intermediates/default/java/kotlin-stdlib-jdk7/android_common/turbine-combined/kotlin-stdlib-jdk7.jar", - "out/soong/.intermediates/default/java/kotlin-stdlib-jdk8/android_common/turbine-combined/kotlin-stdlib-jdk8.jar", - "out/soong/.intermediates/default/java/kotlin-annotations/android_common/turbine-combined/kotlin-annotations.jar", - } - kotlinStdlibTurbineJars := []string{ "out/soong/.intermediates/default/java/kotlin-stdlib/android_common/turbine/kotlin-stdlib.jar", "out/soong/.intermediates/default/java/kotlin-stdlib-jdk7/android_common/turbine/kotlin-stdlib-jdk7.jar", @@ -71,21 +64,11 @@ func TestKotlin(t *testing.T) { "out/soong/.intermediates/default/java/kotlin-annotations/android_common/javac/kotlin-annotations.jar", } - bootclasspathTurbineCombinedJars := []string{ - "out/soong/.intermediates/default/java/stable.core.platform.api.stubs/android_common/turbine-combined/stable.core.platform.api.stubs.jar", - "out/soong/.intermediates/default/java/core-lambda-stubs/android_common/turbine-combined/core-lambda-stubs.jar", - } - bootclasspathTurbineJars := []string{ "out/soong/.intermediates/default/java/stable.core.platform.api.stubs/android_common/turbine/stable.core.platform.api.stubs.jar", "out/soong/.intermediates/default/java/core-lambda-stubs/android_common/turbine/core-lambda-stubs.jar", } - frameworkTurbineCombinedJars := []string{ - "out/soong/.intermediates/default/java/ext/android_common/turbine-combined/ext.jar", - "out/soong/.intermediates/default/java/framework/android_common/turbine-combined/framework.jar", - } - frameworkTurbineJars := []string{ "out/soong/.intermediates/default/java/ext/android_common/turbine/ext.jar", "out/soong/.intermediates/default/java/framework/android_common/turbine/framework.jar", @@ -109,68 +92,8 @@ func TestKotlin(t *testing.T) { barHeaderCombinedInputs []string }{ { - name: "normal", - preparer: android.NullFixturePreparer, - fooKotlincInputs: []string{"a.java", "b.kt"}, - fooJavacInputs: []string{"a.java"}, - fooKotlincClasspath: slices.Concat( - bootclasspathTurbineCombinedJars, - frameworkTurbineCombinedJars, - []string{"out/soong/.intermediates/quz/android_common/turbine-combined/quz.jar"}, - kotlinStdlibTurbineCombinedJars, - ), - fooJavacClasspath: slices.Concat( - []string{"out/soong/.intermediates/foo/android_common/kotlin_headers/foo.jar"}, - frameworkTurbineCombinedJars, - []string{"out/soong/.intermediates/quz/android_common/turbine-combined/quz.jar"}, - kotlinStdlibTurbineCombinedJars, - ), - fooCombinedInputs: slices.Concat( - []string{ - "out/soong/.intermediates/foo/android_common/kotlin/foo.jar", - "out/soong/.intermediates/foo/android_common/javac/foo.jar", - "out/soong/.intermediates/quz/android_common/combined/quz.jar", - }, - kotlinStdlibJavacJars, - ), - fooHeaderCombinedInputs: slices.Concat( - []string{ - "out/soong/.intermediates/foo/android_common/turbine/foo.jar", - "out/soong/.intermediates/foo/android_common/kotlin_headers/foo.jar", - "out/soong/.intermediates/quz/android_common/turbine-combined/quz.jar", - }, - kotlinStdlibTurbineCombinedJars, - ), - - barKotlincInputs: []string{"b.kt"}, - barKotlincClasspath: slices.Concat( - bootclasspathTurbineCombinedJars, - frameworkTurbineCombinedJars, - []string{ - "out/soong/.intermediates/foo/android_common/turbine-combined/foo.jar", - "out/soong/.intermediates/baz/android_common/turbine-combined/baz.jar", - }, - kotlinStdlibTurbineCombinedJars, - ), - barCombinedInputs: slices.Concat( - []string{ - "out/soong/.intermediates/bar/android_common/kotlin/bar.jar", - "out/soong/.intermediates/baz/android_common/combined/baz.jar", - }, - kotlinStdlibJavacJars, - []string{}, - ), - barHeaderCombinedInputs: slices.Concat( - []string{ - "out/soong/.intermediates/bar/android_common/kotlin_headers/bar.jar", - "out/soong/.intermediates/baz/android_common/turbine-combined/baz.jar", - }, - kotlinStdlibTurbineCombinedJars, - ), - }, - { name: "transitive classpath", - preparer: PrepareForTestWithTransitiveClasspathEnabled, + preparer: android.NullFixturePreparer, fooKotlincInputs: []string{"a.java", "b.kt"}, fooJavacInputs: []string{"a.java"}, fooKotlincClasspath: slices.Concat( diff --git a/java/lint.go b/java/lint.go index 66f7f8549..c31dfd005 100644 --- a/java/lint.go +++ b/java/lint.go @@ -595,12 +595,12 @@ func (l *lintSingleton) GenerateBuildActions(ctx android.SingletonContext) { l.copyLintDependencies(ctx) } -func findModuleOrErr(ctx android.SingletonContext, moduleName string) android.Module { - var res android.Module - ctx.VisitAllModules(func(m android.Module) { +func findModuleOrErr(ctx android.SingletonContext, moduleName string) *android.ModuleProxy { + var res *android.ModuleProxy + ctx.VisitAllModuleProxies(func(m android.ModuleProxy) { if ctx.ModuleName(m) == moduleName { if res == nil { - res = m + res = &m } else { ctx.Errorf("lint: multiple %s modules found: %s and %s", moduleName, ctx.ModuleSubDir(m), ctx.ModuleSubDir(res)) @@ -635,13 +635,13 @@ func (l *lintSingleton) copyLintDependencies(ctx android.SingletonContext) { ctx.Build(pctx, android.BuildParams{ Rule: android.CpIfChanged, - Input: android.OutputFileForModule(ctx, sdkAnnotations, ""), + Input: android.OutputFileForModule(ctx, *sdkAnnotations, ""), Output: copiedLintDatabaseFilesPath(ctx, files.annotationCopiedName), }) ctx.Build(pctx, android.BuildParams{ Rule: android.CpIfChanged, - Input: android.OutputFileForModule(ctx, apiVersionsDb, ".api_versions.xml"), + Input: android.OutputFileForModule(ctx, *apiVersionsDb, ".api_versions.xml"), Output: copiedLintDatabaseFilesPath(ctx, files.apiVersionsCopiedName), }) } @@ -658,12 +658,13 @@ func (l *lintSingleton) generateLintReportZips(ctx android.SingletonContext) { var outputs []*LintInfo var dirs []string - ctx.VisitAllModules(func(m android.Module) { - if ctx.Config().KatiEnabled() && !m.ExportedToMake() { + ctx.VisitAllModuleProxies(func(m android.ModuleProxy) { + commonInfo, _ := android.OtherModuleProvider(ctx, m, android.CommonModuleInfoKey) + if ctx.Config().KatiEnabled() && !commonInfo.ExportedToMake { return } - if apex, ok := m.(android.ApexModule); ok && apex.NotAvailableForPlatform() { + if commonInfo.IsApexModule && commonInfo.NotAvailableForPlatform { apexInfo, _ := android.OtherModuleProvider(ctx, m, android.ApexInfoProvider) if apexInfo.IsForPlatform() { // There are stray platform variants of modules in apexes that are not available for diff --git a/java/platform_compat_config.go b/java/platform_compat_config.go index 363521a7f..ab4f8f81f 100644 --- a/java/platform_compat_config.go +++ b/java/platform_compat_config.go @@ -99,6 +99,14 @@ type platformCompatConfigMetadataProvider interface { includeInMergedXml() bool } +type PlatformCompatConfigMetadataInfo struct { + CompatConfigMetadata android.Path + // Whether to include it in the "merged" XML (merged_compat_config.xml) or not. + IncludeInMergedXml bool +} + +var PlatformCompatConfigMetadataInfoProvider = blueprint.NewProvider[PlatformCompatConfigMetadataInfo]() + type PlatformCompatConfigIntf interface { android.Module @@ -136,6 +144,11 @@ func (p *platformCompatConfig) GenerateAndroidBuildActions(ctx android.ModuleCon CompatConfig: p.CompatConfig(), SubDir: p.SubDir(), }) + + android.SetProvider(ctx, PlatformCompatConfigMetadataInfoProvider, PlatformCompatConfigMetadataInfo{ + CompatConfigMetadata: p.compatConfigMetadata(), + IncludeInMergedXml: p.includeInMergedXml(), + }) } func (p *platformCompatConfig) AndroidMkEntries() []android.AndroidMkEntries { @@ -238,6 +251,11 @@ var _ platformCompatConfigMetadataProvider = (*prebuiltCompatConfigModule)(nil) func (module *prebuiltCompatConfigModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { module.metadataFile = module.prebuilt.SingleSourcePath(ctx) + + android.SetProvider(ctx, PlatformCompatConfigMetadataInfoProvider, PlatformCompatConfigMetadataInfo{ + CompatConfigMetadata: module.compatConfigMetadata(), + IncludeInMergedXml: module.includeInMergedXml(), + }) } // A prebuilt version of platform_compat_config that provides the metadata. @@ -258,18 +276,18 @@ func (p *platformCompatConfigSingleton) GenerateBuildActions(ctx android.Singlet var compatConfigMetadata android.Paths - ctx.VisitAllModules(func(module android.Module) { - if !module.Enabled(ctx) { + ctx.VisitAllModuleProxies(func(module android.ModuleProxy) { + if !android.OtherModuleProviderOrDefault(ctx, module, android.CommonModuleInfoKey).Enabled { return } - if c, ok := module.(platformCompatConfigMetadataProvider); ok { - if !android.IsModulePreferred(module) { + if c, ok := android.OtherModuleProvider(ctx, module, PlatformCompatConfigMetadataInfoProvider); ok { + if !android.IsModulePreferredProxy(ctx, module) { return } - if !c.includeInMergedXml() { + if !c.IncludeInMergedXml { return } - metadata := c.compatConfigMetadata() + metadata := c.CompatConfigMetadata compatConfigMetadata = append(compatConfigMetadata, metadata) } }) diff --git a/java/ravenwood.go b/java/ravenwood.go index 3b6c80bc6..c4078c587 100644 --- a/java/ravenwood.go +++ b/java/ravenwood.go @@ -267,6 +267,10 @@ func (r *ravenwoodTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { moduleInfoJSON.TestConfig = append(moduleInfoJSON.TestConfig, r.testConfig.String()) } moduleInfoJSON.CompatibilitySuites = []string{"general-tests", "ravenwood-tests"} + + android.SetProvider(ctx, android.TestSuiteInfoProvider, android.TestSuiteInfo{ + TestSuites: r.TestSuites(), + }) } func (r *ravenwoodTest) AndroidMkEntries() []android.AndroidMkEntries { @@ -384,6 +388,10 @@ func (r *ravenwoodLibgroup) GenerateAndroidBuildActions(ctx android.ModuleContex // Normal build should perform install steps ctx.Phony(r.BaseModuleName(), android.PathForPhony(ctx, r.BaseModuleName()+"-install")) + + android.SetProvider(ctx, android.TestSuiteInfoProvider, android.TestSuiteInfo{ + TestSuites: r.TestSuites(), + }) } // collectTransitiveJniDeps returns all JNI dependencies, including transitive diff --git a/java/robolectric.go b/java/robolectric.go index 43e17f9ea..be369f780 100644 --- a/java/robolectric.go +++ b/java/robolectric.go @@ -168,6 +168,7 @@ func (r *robolectricTest) GenerateAndroidBuildActions(ctx android.ModuleContext) r.data = append(r.data, android.PathsForModuleSrc(ctx, r.testProperties.Device_common_data)...) r.data = append(r.data, android.PathsForModuleSrc(ctx, r.testProperties.Device_first_data)...) r.data = append(r.data, android.PathsForModuleSrc(ctx, r.testProperties.Device_first_prefer32_data)...) + r.data = append(r.data, android.PathsForModuleSrc(ctx, r.testProperties.Host_common_data)...) var ok bool var instrumentedApp *JavaInfo @@ -279,6 +280,10 @@ func (r *robolectricTest) GenerateAndroidBuildActions(ctx android.ModuleContext) } else { moduleInfoJSON.CompatibilitySuites = append(moduleInfoJSON.CompatibilitySuites, "null-suite") } + + android.SetProvider(ctx, android.TestSuiteInfoProvider, android.TestSuiteInfo{ + TestSuites: r.TestSuites(), + }) } func generateSameDirRoboTestConfigJar(ctx android.ModuleContext, outputFile android.ModuleOutPath) { @@ -416,6 +421,10 @@ func (r *robolectricRuntimes) GenerateAndroidBuildActions(ctx android.ModuleCont android.SetProvider(ctx, RobolectricRuntimesInfoProvider, RobolectricRuntimesInfo{ Runtimes: r.runtimes, }) + + android.SetProvider(ctx, android.TestSuiteInfoProvider, android.TestSuiteInfo{ + TestSuites: r.TestSuites(), + }) } func (r *robolectricRuntimes) InstallInTestcases() bool { return true } diff --git a/java/sdk.go b/java/sdk.go index 27b2434c5..ab1c653d1 100644 --- a/java/sdk.go +++ b/java/sdk.go @@ -274,7 +274,7 @@ func createNonUpdatableFrameworkAidl(ctx android.SingletonContext) { func createFrameworkAidl(stubsModules []string, path android.WritablePath, ctx android.SingletonContext) *android.RuleBuilder { stubsJars := make([]android.Paths, len(stubsModules)) - ctx.VisitAllModules(func(module android.Module) { + ctx.VisitAllModuleProxies(func(module android.ModuleProxy) { // Collect dex jar paths for the modules listed above. if j, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok { name := ctx.ModuleName(module) @@ -358,7 +358,7 @@ func createAPIFingerprint(ctx android.SingletonContext) { "api_fingerprint", } count := 0 - ctx.VisitAllModules(func(module android.Module) { + ctx.VisitAllModuleProxies(func(module android.ModuleProxy) { name := ctx.ModuleName(module) if android.InList(name, apiTxtFileModules) { cmd.Inputs(android.OutputFilesForModule(ctx, module, "")) diff --git a/java/sdk_library_test.go b/java/sdk_library_test.go index 2cb827dc2..6d27e54d0 100644 --- a/java/sdk_library_test.go +++ b/java/sdk_library_test.go @@ -149,7 +149,7 @@ func TestJavaSdkLibrary(t *testing.T) { bazJavac := result.ModuleForTests(t, "baz", "android_common").Rule("javac") // tests if baz is actually linked to the stubs lib - android.AssertStringDoesContain(t, "baz javac classpath", bazJavac.Args["classpath"], "foo.stubs.system.jar") + android.AssertStringDoesContain(t, "baz javac classpath", bazJavac.Args["classpath"], "foo.stubs.system.from-text.jar") // ... and not to the impl lib android.AssertStringDoesNotContain(t, "baz javac classpath", bazJavac.Args["classpath"], "foo.jar") // test if baz is not linked to the system variant of foo @@ -157,15 +157,15 @@ func TestJavaSdkLibrary(t *testing.T) { bazTestJavac := result.ModuleForTests(t, "baz-test", "android_common").Rule("javac") // tests if baz-test is actually linked to the test stubs lib - android.AssertStringDoesContain(t, "baz-test javac classpath", bazTestJavac.Args["classpath"], "foo.stubs.test.jar") + android.AssertStringDoesContain(t, "baz-test javac classpath", bazTestJavac.Args["classpath"], "foo.stubs.test.from-text.jar") baz29Javac := result.ModuleForTests(t, "baz-29", "android_common").Rule("javac") // tests if baz-29 is actually linked to the system 29 stubs lib - android.AssertStringDoesContain(t, "baz-29 javac classpath", baz29Javac.Args["classpath"], "prebuilts/sdk/sdk_system_29_foo/android_common/combined/sdk_system_29_foo.jar") + android.AssertStringDoesContain(t, "baz-29 javac classpath", baz29Javac.Args["classpath"], "prebuilts/sdk/sdk_system_29_foo/android_common/local-combined/sdk_system_29_foo.jar") bazModule30Javac := result.ModuleForTests(t, "baz-module-30", "android_common").Rule("javac") // tests if "baz-module-30" is actually linked to the module 30 stubs lib - android.AssertStringDoesContain(t, "baz-module-30 javac classpath", bazModule30Javac.Args["classpath"], "prebuilts/sdk/sdk_module-lib_30_foo/android_common/combined/sdk_module-lib_30_foo.jar") + android.AssertStringDoesContain(t, "baz-module-30 javac classpath", bazModule30Javac.Args["classpath"], "prebuilts/sdk/sdk_module-lib_30_foo/android_common/local-combined/sdk_module-lib_30_foo.jar") // test if baz has exported SDK lib names foo and bar to qux qux := result.ModuleForTests(t, "qux", "android_common") @@ -422,7 +422,7 @@ func TestJavaSdkLibrary_StubOrImplOnlyLibs(t *testing.T) { android.AssertStringContainsEquals(t, "bad classpath for "+sdklib, sdklibCp, "/"+dep+".jar", expected) combineJarInputs := result.ModuleForTests(t, sdklib, "android_common").Rule("combineJar").Inputs.Strings() - depPath := filepath.Join("out", "soong", ".intermediates", dep, "android_common", "turbine-combined", dep+".jar") + depPath := filepath.Join("out", "soong", ".intermediates", dep, "android_common", "turbine", dep+".jar") android.AssertStringListContainsEquals(t, "bad combined inputs for "+sdklib, combineJarInputs, depPath, combined) } for _, expectation := range expectations { @@ -458,7 +458,7 @@ func TestJavaSdkLibrary_DoNotAccessImplWhenItIsNotBuilt(t *testing.T) { // The bar library should depend on the stubs jar. barLibrary := result.ModuleForTests(t, "bar", "android_common").Rule("javac") - if expected, actual := `^-classpath .*:out/soong/[^:]*/turbine-combined/foo\.stubs\.jar$`, barLibrary.Args["classpath"]; !regexp.MustCompile(expected).MatchString(actual) { + if expected, actual := `^-classpath .*:out/soong/[^:]*/foo\.stubs\.from-text/foo\.stubs\.from-text\.jar$`, barLibrary.Args["classpath"]; !regexp.MustCompile(expected).MatchString(actual) { t.Errorf("expected %q, found %#q", expected, actual) } } @@ -494,7 +494,7 @@ func TestJavaSdkLibrary_AccessOutputFiles_NoAnnotations(t *testing.T) { PrepareForTestWithJavaSdkLibraryFiles, FixtureWithLastReleaseApis("foo"), ). - ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`module "bar" variant "android_common": unsupported module reference tag ".public.annotations.zip"`)). + ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`module "bar" variant "android_common": unsupported output tag ".public.annotations.zip"`)). RunTestWithBp(t, ` java_sdk_library { name: "foo", @@ -520,7 +520,7 @@ func TestJavaSdkLibrary_AccessOutputFiles_MissingScope(t *testing.T) { PrepareForTestWithJavaSdkLibraryFiles, FixtureWithLastReleaseApis("foo"), ). - ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`module "bar" variant "android_common": unsupported module reference tag ".system.stubs.source"`)). + ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`module "bar" variant "android_common": unsupported output tag ".system.stubs.source"`)). RunTestWithBp(t, ` java_sdk_library { name: "foo", @@ -791,7 +791,7 @@ func TestJavaSdkLibrary_SystemServer_AccessToStubScopeLibs(t *testing.T) { stubsPath := func(name string, scope *apiScope) string { name = scope.stubsLibraryModuleName(name) - return fmt.Sprintf("out/soong/.intermediates/%[1]s/android_common/turbine-combined/%[1]s.jar", name) + return fmt.Sprintf("out/soong/.intermediates/%[1]s.from-text/android_common/%[1]s.from-text/%[1]s.from-text.jar", name) } // The bar library should depend on the highest (where system server is highest and public is @@ -853,7 +853,7 @@ func TestJavaSdkLibraryImport(t *testing.T) { fooModule := result.ModuleForTests(t, "foo"+scope, "android_common") javac := fooModule.Rule("javac") - sdklibStubsJar := result.ModuleForTests(t, "sdklib.stubs"+scope, "android_common").Output("combined/sdklib.stubs" + scope + ".jar").Output + sdklibStubsJar := result.ModuleForTests(t, "sdklib.stubs"+scope, "android_common").Output("local-combined/sdklib.stubs" + scope + ".jar").Output android.AssertStringDoesContain(t, "foo classpath", javac.Args["classpath"], sdklibStubsJar.String()) } @@ -1002,7 +1002,7 @@ func testJavaSdkLibraryImport_Preferred(t *testing.T, prefer string, preparer an public := result.ModuleForTests(t, "public", "android_common") rule := public.Output("javac/public.jar") inputs := rule.Implicits.Strings() - expected := "out/soong/.intermediates/prebuilt_sdklib.stubs/android_common/combined/sdklib.stubs.jar" + expected := "out/soong/.intermediates/prebuilt_sdklib.stubs/android_common/local-combined/sdklib.stubs.jar" if !android.InList(expected, inputs) { t.Errorf("expected %q to contain %q", inputs, expected) } @@ -1124,12 +1124,12 @@ func TestSdkLibraryImport_MetadataModuleSupersedesPreferred(t *testing.T) { inputs := rule.Implicits.Strings() expectedInputs := []string{ // source - "out/soong/.intermediates/sdklib.prebuilt_preferred_using_legacy_flags.stubs/android_common/turbine-combined/sdklib.prebuilt_preferred_using_legacy_flags.stubs.jar", - "out/soong/.intermediates/sdklib.prebuilt_preferred_using_legacy_flags.stubs.system/android_common/turbine-combined/sdklib.prebuilt_preferred_using_legacy_flags.stubs.system.jar", + "out/soong/.intermediates/sdklib.prebuilt_preferred_using_legacy_flags.stubs.from-text/android_common/sdklib.prebuilt_preferred_using_legacy_flags.stubs.from-text/sdklib.prebuilt_preferred_using_legacy_flags.stubs.from-text.jar", + "out/soong/.intermediates/sdklib.prebuilt_preferred_using_legacy_flags.stubs.system.from-text/android_common/sdklib.prebuilt_preferred_using_legacy_flags.stubs.system.from-text/sdklib.prebuilt_preferred_using_legacy_flags.stubs.system.from-text.jar", // prebuilt - "out/soong/.intermediates/prebuilt_sdklib.source_preferred_using_legacy_flags.stubs/android_common/combined/sdklib.source_preferred_using_legacy_flags.stubs.jar", - "out/soong/.intermediates/prebuilt_sdklib.source_preferred_using_legacy_flags.stubs.system/android_common/combined/sdklib.source_preferred_using_legacy_flags.stubs.system.jar", + "out/soong/.intermediates/prebuilt_sdklib.source_preferred_using_legacy_flags.stubs/android_common/local-combined/sdklib.source_preferred_using_legacy_flags.stubs.jar", + "out/soong/.intermediates/prebuilt_sdklib.source_preferred_using_legacy_flags.stubs.system/android_common/local-combined/sdklib.source_preferred_using_legacy_flags.stubs.system.jar", } for _, expected := range expectedInputs { if !android.InList(expected, inputs) { @@ -1578,7 +1578,8 @@ func TestStubResolutionOfJavaSdkLibraryInLibs(t *testing.T) { public := result.ModuleForTests(t, "mymodule", "android_common") rule := public.Output("javac/mymodule.jar") inputs := rule.Implicits.Strings() - android.AssertStringListContains(t, "Could not find the expected stub on classpath", inputs, "out/soong/.intermediates/sdklib.stubs/android_common/turbine-combined/sdklib.stubs.jar") + android.AssertStringListContains(t, "Could not find the expected stub on classpath", inputs, + "out/soong/.intermediates/sdklib.stubs.from-text/android_common/sdklib.stubs.from-text/sdklib.stubs.from-text.jar") } // test that rdep gets resolved to the correct version of a java_sdk_library (source or a specific prebuilt) @@ -1636,17 +1637,17 @@ func TestMultipleSdkLibraryPrebuilts(t *testing.T) { { desc: "Source library is selected using apex_contributions", selectedDependencyName: "sdklib", - expectedStubPath: "out/soong/.intermediates/sdklib.stubs/android_common/turbine-combined/sdklib.stubs.jar", + expectedStubPath: "out/soong/.intermediates/sdklib.stubs.from-text/android_common/sdklib.stubs.from-text/sdklib.stubs.from-text.jar", }, { desc: "Prebuilt library v1 is selected using apex_contributions", selectedDependencyName: "prebuilt_sdklib.v1", - expectedStubPath: "out/soong/.intermediates/prebuilt_sdklib.v1.stubs/android_common/combined/sdklib.stubs.jar", + expectedStubPath: "out/soong/.intermediates/prebuilt_sdklib.v1.stubs/android_common/local-combined/sdklib.stubs.jar", }, { desc: "Prebuilt library v2 is selected using apex_contributions", selectedDependencyName: "prebuilt_sdklib.v2", - expectedStubPath: "out/soong/.intermediates/prebuilt_sdklib.v2.stubs/android_common/combined/sdklib.stubs.jar", + expectedStubPath: "out/soong/.intermediates/prebuilt_sdklib.v2.stubs/android_common/local-combined/sdklib.stubs.jar", }, } diff --git a/java/sdk_test.go b/java/sdk_test.go index 49983ada2..6386a00d5 100644 --- a/java/sdk_test.go +++ b/java/sdk_test.go @@ -391,21 +391,16 @@ func TestClasspath(t *testing.T) { t.Run("basic", func(t *testing.T) { t.Parallel() - testClasspathTestCases(t, classpathTestcases, false, false) + testClasspathTestCases(t, classpathTestcases, false) }) t.Run("Always_use_prebuilt_sdks=true", func(t *testing.T) { t.Parallel() - testClasspathTestCases(t, classpathTestcases, true, false) - }) - - t.Run("UseTransitiveJarsInClasspath", func(t *testing.T) { - t.Parallel() - testClasspathTestCases(t, classpathTestcases, false, true) + testClasspathTestCases(t, classpathTestcases, true) }) } -func testClasspathTestCases(t *testing.T, classpathTestcases []classpathTestCase, alwaysUsePrebuiltSdks, useTransitiveJarsInClasspath bool) { +func testClasspathTestCases(t *testing.T, classpathTestcases []classpathTestCase, alwaysUsePrebuiltSdks bool) { for _, testcase := range classpathTestcases { if testcase.forAlwaysUsePrebuiltSdks != nil && *testcase.forAlwaysUsePrebuiltSdks != alwaysUsePrebuiltSdks { continue @@ -446,10 +441,8 @@ func testClasspathTestCases(t *testing.T, classpathTestcases []classpathTestCase switch { case e == `""`, strings.HasSuffix(e, ".jar"): ret[i] = e - case useTransitiveJarsInClasspath: - ret[i] = filepath.Join("out", "soong", ".intermediates", defaultJavaDir, e, "android_common", "turbine", e+".jar") default: - ret[i] = filepath.Join("out", "soong", ".intermediates", defaultJavaDir, e, "android_common", "turbine-combined", e+".jar") + ret[i] = filepath.Join("out", "soong", ".intermediates", defaultJavaDir, e, "android_common", "turbine", e+".jar") } } return ret @@ -544,9 +537,6 @@ func testClasspathTestCases(t *testing.T, classpathTestcases []classpathTestCase variables.Always_use_prebuilt_sdks = proptools.BoolPtr(true) }) } - if useTransitiveJarsInClasspath { - preparer = PrepareForTestWithTransitiveClasspathEnabled - } fixtureFactory := android.GroupFixturePreparers( prepareForJavaTest, diff --git a/java/support_libraries.go b/java/support_libraries.go index c483fc17a..f76eb116e 100644 --- a/java/support_libraries.go +++ b/java/support_libraries.go @@ -28,7 +28,7 @@ func init() { func supportLibrariesMakeVarsProvider(ctx android.MakeVarsContext) { var supportAars, supportJars []string - ctx.VisitAllModules(func(module android.Module) { + ctx.VisitAllModuleProxies(func(module android.ModuleProxy) { dir := ctx.ModuleDir(module) switch { case strings.HasPrefix(dir, "prebuilts/sdk/current/extras"), @@ -47,11 +47,16 @@ func supportLibrariesMakeVarsProvider(ctx android.MakeVarsContext) { return } - switch module.(type) { - case *AndroidLibrary, *AARImport: + _, isAndroidLibrary := android.OtherModuleProvider(ctx, module, AndroidLibraryInfoProvider) + _, isAARImport := android.OtherModuleProvider(ctx, module, AARImportInfoProvider) + if isAndroidLibrary || isAARImport { supportAars = append(supportAars, name) - case *Library, *Import: - supportJars = append(supportJars, name) + } else { + _, isJavaLibrary := android.OtherModuleProvider(ctx, module, JavaLibraryInfoProvider) + _, isJavaPlugin := android.OtherModuleProvider(ctx, module, JavaPluginInfoProvider) + if isJavaLibrary && !isJavaPlugin { + supportJars = append(supportJars, name) + } } }) diff --git a/java/testing.go b/java/testing.go index 35319ae58..3abbb8453 100644 --- a/java/testing.go +++ b/java/testing.go @@ -825,5 +825,3 @@ func FixtureSetBootImageInstallDirOnDevice(name string, installDir string) andro config.installDir = installDir }) } - -var PrepareForTestWithTransitiveClasspathEnabled = android.PrepareForTestWithBuildFlag("RELEASE_USE_TRANSITIVE_JARS_IN_CLASSPATH", "true") |