Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4f18cfdd authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Revert "Revert "Enable from-text stub generation in non-sdk java..."" into main

parents b320ab28 b0f4c023
Loading
Loading
Loading
Loading
+0 −11
Original line number Diff line number Diff line
@@ -1979,17 +1979,6 @@ func (c *config) SetBuildFromTextStub(b bool) {
	c.productVariables.Build_from_text_stub = boolPtr(b)
}

func (c *config) SetApiLibraries(libs []string) {
	c.apiLibraries = make(map[string]struct{})
	for _, lib := range libs {
		c.apiLibraries[lib] = struct{}{}
	}
}

func (c *config) GetApiLibraries() map[string]struct{} {
	return c.apiLibraries
}

func (c *deviceConfig) CheckVendorSeappViolations() bool {
	return Bool(c.config.productVariables.CheckVendorSeappViolations)
}
+0 −6
Original line number Diff line number Diff line
@@ -10016,9 +10016,6 @@ func TestApexLintBcpFragmentSdkLibDeps(t *testing.T) {
		java.PrepareForTestWithJavaSdkLibraryFiles,
		java.PrepareForTestWithJacocoInstrumentation,
		java.FixtureWithLastReleaseApis("foo"),
		android.FixtureModifyConfig(func(config android.Config) {
			config.SetApiLibraries([]string{"foo"})
		}),
		android.FixtureMergeMockFs(fs),
	).RunTestWithBp(t, bp)

@@ -11602,9 +11599,6 @@ func TestAconfifDeclarationsValidation(t *testing.T) {
		prepareForApexTest,
		java.PrepareForTestWithJavaSdkLibraryFiles,
		java.FixtureWithLastReleaseApis("foo"),
		android.FixtureModifyConfig(func(config android.Config) {
			config.SetApiLibraries([]string{"foo"})
		}),
	).RunTestWithBp(t, `
		java_library {
			name: "baz-java-lib",
+9 −159
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@ java_defaults {
}

java_library {
    name: "core.current.stubs.from-source",
    name: "core.current.stubs",
    defaults: [
        "core.current.stubs.defaults",
    ],
@@ -52,8 +52,12 @@ java_library {
    ],
}

// Used for bootstrapping ART system modules
java_api_library {
    name: "core.current.stubs.from-text",
    defaults: [
        "core.current.stubs.defaults",
    ],
    api_surface: "core",
    api_contributions: [
        "art.module.public.api.stubs.source.api.contribution",
@@ -68,27 +72,7 @@ java_api_library {
}

java_library {
    name: "core.current.stubs",
    defaults: [
        "core.current.stubs.defaults",
    ],
    static_libs: [
        "core.current.stubs.from-source",
    ],
    product_variables: {
        build_from_text_stub: {
            static_libs: [
                "core.current.stubs.from-text",
            ],
            exclude_static_libs: [
                "core.current.stubs.from-source",
            ],
        },
    },
}

java_library {
    name: "core.current.stubs.exportable.from-source",
    name: "core.current.stubs.exportable",
    defaults: [
        "core.current.stubs.defaults",
    ],
@@ -103,16 +87,6 @@ java_library {
    },
}

java_library {
    name: "core.current.stubs.exportable",
    defaults: [
        "core.current.stubs.defaults",
    ],
    static_libs: [
        "core.current.stubs.exportable.from-source",
    ],
}

// Distributed with the SDK for turning into system modules to compile apps
// against.
//
@@ -200,26 +174,6 @@ java_library {
    defaults: [
        "core.module_lib.stubs.defaults",
    ],
    static_libs: [
        "core.module_lib.stubs.from-source",
    ],
    product_variables: {
        build_from_text_stub: {
            static_libs: [
                "core.module_lib.stubs.from-text",
            ],
            exclude_static_libs: [
                "core.module_lib.stubs.from-source",
            ],
        },
    },
}

java_library {
    name: "core.module_lib.stubs.from-source",
    defaults: [
        "core.module_lib.stubs.defaults",
    ],
    static_libs: [
        "art.module.public.api.stubs.module_lib",

@@ -231,27 +185,6 @@ java_library {
    ],
}

java_api_library {
    name: "core.module_lib.stubs.from-text",
    api_surface: "module-lib",
    api_contributions: [
        "art.module.public.api.stubs.source.api.contribution",
        "art.module.public.api.stubs.source.system.api.contribution",
        "art.module.public.api.stubs.source.module_lib.api.contribution",

        // Add the module-lib correspondence when Conscrypt or i18N module
        // provides @SystemApi(MODULE_LIBRARIES). Currently, assume that only ART module provides
        // @SystemApi(MODULE_LIBRARIES).
        "conscrypt.module.public.api.stubs.source.api.contribution",
        "i18n.module.public.api.stubs.source.api.contribution",
    ],
    libs: [
        "stub-annotations",
    ],
    visibility: ["//visibility:private"],
    stubs_type: "everything",
}

// Produces a dist file that is used by the
// prebuilts/sdk/update_prebuilts.py script to update the prebuilts/sdk
// directory.
@@ -311,7 +244,7 @@ core_platform_visibility = ["//visibility:public"]
// API annotations are available to the dex tools that enable enforcement of runtime
// accessibility. b/119068555
java_library {
    name: "legacy.core.platform.api.stubs.from-source",
    name: "legacy.core.platform.api.stubs",
    visibility: core_platform_visibility,
    defaults: [
        "core.platform.api.stubs.defaults",
@@ -324,7 +257,7 @@ java_library {
}

java_library {
    name: "legacy.core.platform.api.stubs.exportable.from-source",
    name: "legacy.core.platform.api.stubs.exportable",
    visibility: core_platform_visibility,
    defaults: [
        "core.platform.api.stubs.defaults",
@@ -348,53 +281,6 @@ java_defaults {
    ],
}

java_api_library {
    name: "legacy.core.platform.api.stubs.from-text",
    api_surface: "core_platform",
    defaults: [
        "android_core_platform_stubs_current_contributions",
    ],
    api_contributions: [
        "legacy.i18n.module.platform.api.stubs.source.api.contribution",
    ],
    libs: [
        "stub-annotations",
    ],
    stubs_type: "everything",
}

java_library {
    name: "legacy.core.platform.api.stubs",
    visibility: core_platform_visibility,
    defaults: [
        "core.platform.api.stubs.defaults",
    ],
    static_libs: [
        "legacy.core.platform.api.stubs.from-source",
    ],
    product_variables: {
        build_from_text_stub: {
            static_libs: [
                "legacy.core.platform.api.stubs.from-text",
            ],
            exclude_static_libs: [
                "legacy.core.platform.api.stubs.from-source",
            ],
        },
    },
}

java_library {
    name: "legacy.core.platform.api.stubs.exportable",
    visibility: core_platform_visibility,
    defaults: [
        "core.platform.api.stubs.defaults",
    ],
    static_libs: [
        "legacy.core.platform.api.stubs.exportable.from-source",
    ],
}

java_defaults {
    name: "core.platform.api.stubs.defaults",
    hostdex: true,
@@ -424,7 +310,7 @@ java_library {
}

java_library {
    name: "stable.core.platform.api.stubs.from-source",
    name: "stable.core.platform.api.stubs",
    visibility: core_platform_visibility,
    defaults: [
        "core.platform.api.stubs.defaults",
@@ -437,42 +323,6 @@ java_library {
    ],
}

java_api_library {
    name: "stable.core.platform.api.stubs.from-text",
    api_surface: "core_platform",
    defaults: [
        "android_core_platform_stubs_current_contributions",
    ],
    api_contributions: [
        "stable.i18n.module.platform.api.stubs.source.api.contribution",
    ],
    libs: [
        "stub-annotations",
    ],
    stubs_type: "everything",
}

java_library {
    name: "stable.core.platform.api.stubs",
    visibility: core_platform_visibility,
    defaults: [
        "core.platform.api.stubs.defaults",
    ],
    static_libs: [
        "stable.core.platform.api.stubs.from-source",
    ],
    product_variables: {
        build_from_text_stub: {
            static_libs: [
                "stable.core.platform.api.stubs.from-text",
            ],
            exclude_static_libs: [
                "stable.core.platform.api.stubs.from-source",
            ],
        },
    },
}

// Same as stable.core.platform.api.stubs, but android annotations are
// stripped. This is used by the Java toolchain, while the annotated stub is to
// be used by Kotlin one.
+55 −72
Original line number Diff line number Diff line
@@ -432,7 +432,6 @@ var (
	r8LibraryJarTag         = dependencyTag{name: "r8-libraryjar", runtimeLinked: true}
	syspropPublicStubDepTag = dependencyTag{name: "sysprop public stub"}
	javaApiContributionTag  = dependencyTag{name: "java-api-contribution"}
	depApiSrcsTag           = dependencyTag{name: "dep-api-srcs"}
	aconfigDeclarationTag   = dependencyTag{name: "aconfig-declaration"}
	jniInstallTag           = dependencyTag{name: "jni install", runtimeLinked: true, installable: true}
	binaryInstallTag        = dependencyTag{name: "binary install", runtimeLinked: true, installable: true}
@@ -2005,12 +2004,6 @@ type JavaApiLibraryProperties struct {
	// merge zipped after metalava invocation
	Static_libs []string

	// Java Api library to provide the full API surface stub jar file.
	// If this property is set, the stub jar of this module is created by
	// extracting the compiled class files provided by the
	// full_api_surface_stub module.
	Full_api_surface_stub *string

	// Version of previously released API file for compatibility check.
	Previous_api *string `android:"path"`

@@ -2043,6 +2036,15 @@ type JavaApiLibraryProperties struct {
	// List of hard coded filegroups containing Metalava config files that are passed to every
	// Metalava invocation that this module performs. See addMetalavaConfigFilesToCmd.
	ConfigFiles []string `android:"path" blueprint:"mutated"`

	// If not blank, set to the version of the sdk to compile against.
	// Defaults to an empty string, which compiles the module against the private platform APIs.
	// Values are of one of the following forms:
	// 1) numerical API level, "current", "none", or "core_platform"
	// 2) An SDK kind with an API level: "<sdk kind>_<API level>"
	// See build/soong/android/sdk_version.go for the complete and up to date list of SDK kinds.
	// If the SDK kind is empty, it will be set to public.
	Sdk_version *string
}

func ApiLibraryFactory() android.Module {
@@ -2141,40 +2143,6 @@ func (al *ApiLibrary) addValidation(ctx android.ModuleContext, cmd *android.Rule
	}
}

// This method extracts the stub class files from the stub jar file provided
// from full_api_surface_stub module instead of compiling the srcjar generated from invoking metalava.
// This method is used because metalava can generate compilable from-text stubs only when
// the codebase encompasses all classes listed in the input API text file, and a class can extend
// a class that is not within the same API domain.
func (al *ApiLibrary) extractApiSrcs(ctx android.ModuleContext, rule *android.RuleBuilder, stubsDir android.OptionalPath, fullApiSurfaceStubJar android.Path) {
	classFilesList := android.PathForModuleOut(ctx, "metalava", "classes.txt")
	unzippedSrcJarDir := android.PathForModuleOut(ctx, "metalava", "unzipDir")

	rule.Command().
		BuiltTool("list_files").
		Text(stubsDir.String()).
		FlagWithOutput("--out ", classFilesList).
		FlagWithArg("--extensions ", ".java").
		FlagWithArg("--root ", unzippedSrcJarDir.String()).
		Flag("--classes")

	rule.Command().
		Text("unzip").
		Flag("-q").
		Input(fullApiSurfaceStubJar).
		FlagWithArg("-d ", unzippedSrcJarDir.String())

	rule.Command().
		BuiltTool("soong_zip").
		Flag("-jar").
		Flag("-write_if_changed").
		Flag("-ignore_missing_files").
		Flag("-quiet").
		FlagWithArg("-C ", unzippedSrcJarDir.String()).
		FlagWithInput("-l ", classFilesList).
		FlagWithOutput("-o ", al.stubsJarWithoutStaticLibs)
}

func (al *ApiLibrary) DepsMutator(ctx android.BottomUpMutatorContext) {
	apiContributions := al.properties.Api_contributions
	addValidations := !ctx.Config().IsEnvTrue("DISABLE_STUB_VALIDATION") &&
@@ -2201,14 +2169,18 @@ func (al *ApiLibrary) DepsMutator(ctx android.BottomUpMutatorContext) {
			}
		}
	}
	ctx.AddVariationDependencies(nil, libTag, al.properties.Libs...)
	ctx.AddVariationDependencies(nil, staticLibTag, al.properties.Static_libs...)
	if al.properties.Full_api_surface_stub != nil {
		ctx.AddVariationDependencies(nil, depApiSrcsTag, String(al.properties.Full_api_surface_stub))
	if ctx.Device() {
		sdkDep := decodeSdkDep(ctx, android.SdkContext(al))
		if sdkDep.useModule {
			ctx.AddVariationDependencies(nil, systemModulesTag, sdkDep.systemModules)
			ctx.AddVariationDependencies(nil, libTag, sdkDep.classpath...)
			ctx.AddVariationDependencies(nil, bootClasspathTag, sdkDep.bootclasspath...)

		}
	if al.properties.System_modules != nil {
		ctx.AddVariationDependencies(nil, systemModulesTag, String(al.properties.System_modules))
	}
	ctx.AddVariationDependencies(nil, libTag, al.properties.Libs...)
	ctx.AddVariationDependencies(nil, staticLibTag, al.properties.Static_libs...)

	for _, aconfigDeclarationsName := range al.properties.Aconfig_declarations {
		ctx.AddDependency(ctx.Module(), aconfigDeclarationTag, aconfigDeclarationsName)
	}
@@ -2264,8 +2236,8 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) {

	var srcFilesInfo []JavaApiImportInfo
	var classPaths android.Paths
	var bootclassPaths android.Paths
	var staticLibs android.Paths
	var depApiSrcsStubsJar android.Path
	var systemModulesPaths android.Paths
	ctx.VisitDirectDeps(func(dep android.Module) {
		tag := ctx.OtherModuleDependencyTag(dep)
@@ -2279,12 +2251,12 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) {
		case libTag:
			provider, _ := android.OtherModuleProvider(ctx, dep, JavaInfoProvider)
			classPaths = append(classPaths, provider.HeaderJars...)
		case bootClasspathTag:
			provider, _ := android.OtherModuleProvider(ctx, dep, JavaInfoProvider)
			bootclassPaths = append(bootclassPaths, provider.HeaderJars...)
		case staticLibTag:
			provider, _ := android.OtherModuleProvider(ctx, dep, JavaInfoProvider)
			staticLibs = append(staticLibs, provider.HeaderJars...)
		case depApiSrcsTag:
			provider, _ := android.OtherModuleProvider(ctx, dep, JavaInfoProvider)
			depApiSrcsStubsJar = provider.HeaderJars[0]
		case systemModulesTag:
			module := dep.(SystemModulesProvider)
			systemModulesPaths = append(systemModulesPaths, module.HeaderJars()...)
@@ -2319,7 +2291,10 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) {

	configFiles := android.PathsForModuleSrc(ctx, al.properties.ConfigFiles)

	cmd := metalavaStubCmd(ctx, rule, srcFiles, homeDir, systemModulesPaths, configFiles)
	combinedPaths := append(([]android.Path)(nil), systemModulesPaths...)
	combinedPaths = append(combinedPaths, classPaths...)
	combinedPaths = append(combinedPaths, bootclassPaths...)
	cmd := metalavaStubCmd(ctx, rule, srcFiles, homeDir, combinedPaths, configFiles)

	al.stubsFlags(ctx, cmd, stubsDir)

@@ -2337,9 +2312,6 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) {
	al.stubsJarWithoutStaticLibs = android.PathForModuleOut(ctx, "metalava", "stubs.jar")
	al.stubsJar = android.PathForModuleOut(ctx, ctx.ModuleName(), fmt.Sprintf("%s.jar", ctx.ModuleName()))

	if depApiSrcsStubsJar != nil {
		al.extractApiSrcs(ctx, rule, stubsDir, depApiSrcsStubsJar)
	}
	rule.Command().
		BuiltTool("soong_zip").
		Flag("-write_if_changed").
@@ -2350,18 +2322,17 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) {

	rule.Build("metalava", "metalava merged text")

	if depApiSrcsStubsJar == nil {
		var flags javaBuilderFlags
		flags.javaVersion = getStubsJavaVersion()
		flags.javacFlags = strings.Join(al.properties.Javacflags, " ")
		flags.classpath = classpath(classPaths)
		flags.bootClasspath = classpath(systemModulesPaths)
	javacFlags := javaBuilderFlags{
		javaVersion:   getStubsJavaVersion(),
		javacFlags:    strings.Join(al.properties.Javacflags, " "),
		classpath:     classpath(classPaths),
		bootClasspath: classpath(append(systemModulesPaths, bootclassPaths...)),
	}

	annoSrcJar := android.PathForModuleOut(ctx, ctx.ModuleName(), "anno.srcjar")

	TransformJavaToClasses(ctx, al.stubsJarWithoutStaticLibs, 0, android.Paths{},
			android.Paths{al.stubsSrcJar}, annoSrcJar, flags, android.Paths{})
	}
		android.Paths{al.stubsSrcJar}, annoSrcJar, javacFlags, android.Paths{})

	builder := android.NewRuleBuilder(pctx, ctx)
	builder.Command().
@@ -2373,7 +2344,7 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) {

	// compile stubs to .dex for hiddenapi processing
	dexParams := &compileDexParams{
		flags:         javaBuilderFlags{},
		flags:         javacFlags,
		sdkVersion:    al.SdkVersion(ctx),
		minSdkVersion: al.MinSdkVersion(ctx),
		classesJar:    al.stubsJar,
@@ -2409,14 +2380,28 @@ func (al *ApiLibrary) ClassLoaderContexts() dexpreopt.ClassLoaderContextMap {
	return nil
}

// java_api_library constitutes the sdk, and does not build against one
// Most java_api_library constitues the sdk, but there are some java_api_library that
// does not contribute to the api surface. Such modules are allowed to set sdk_version
// other than "none"
func (al *ApiLibrary) SdkVersion(ctx android.EarlyModuleContext) android.SdkSpec {
	return android.SdkSpecNone
	return android.SdkSpecFrom(ctx, proptools.String(al.properties.Sdk_version))
}

// java_api_library is always at "current". Return FutureApiLevel
func (al *ApiLibrary) MinSdkVersion(ctx android.EarlyModuleContext) android.ApiLevel {
	return android.FutureApiLevel
	return al.SdkVersion(ctx).ApiLevel
}

func (al *ApiLibrary) ReplaceMaxSdkVersionPlaceholder(ctx android.EarlyModuleContext) android.ApiLevel {
	return al.SdkVersion(ctx).ApiLevel
}

func (al *ApiLibrary) SystemModules() string {
	return proptools.String(al.properties.System_modules)
}

func (al *ApiLibrary) TargetSdkVersion(ctx android.EarlyModuleContext) android.ApiLevel {
	return al.SdkVersion(ctx).ApiLevel
}

func (al *ApiLibrary) IDEInfo(i *android.IdeInfo) {
@@ -2434,9 +2419,6 @@ func (al *ApiLibrary) ideDeps() []string {
	if al.properties.System_modules != nil {
		ret = append(ret, proptools.String(al.properties.System_modules))
	}
	if al.properties.Full_api_surface_stub != nil {
		ret = append(ret, proptools.String(al.properties.Full_api_surface_stub))
	}
	// Other non java_library dependencies like java_api_contribution are ignored for now.
	return ret
}
@@ -2444,6 +2426,7 @@ func (al *ApiLibrary) ideDeps() []string {
// implement the following interfaces for hiddenapi processing
var _ hiddenAPIModule = (*ApiLibrary)(nil)
var _ UsesLibraryDependency = (*ApiLibrary)(nil)
var _ android.SdkContext = (*ApiLibrary)(nil)

// implement the following interface for IDE completion.
var _ android.IDEInfo = (*ApiLibrary)(nil)
+5 −71
Original line number Diff line number Diff line
@@ -1342,12 +1342,12 @@ func TestJavaLibraryWithSystemModules(t *testing.T) {
		}
		`)

	checkBootClasspathForSystemModule(t, ctx, "lib-with-source-system-modules", "/source-jar.jar")
	checkBootClasspathForLibWithSystemModule(t, ctx, "lib-with-source-system-modules", "/source-jar.jar")

	checkBootClasspathForSystemModule(t, ctx, "lib-with-prebuilt-system-modules", "/prebuilt-jar.jar")
	checkBootClasspathForLibWithSystemModule(t, ctx, "lib-with-prebuilt-system-modules", "/prebuilt-jar.jar")
}

func checkBootClasspathForSystemModule(t *testing.T, ctx *android.TestContext, moduleName string, expectedSuffix string) {
func checkBootClasspathForLibWithSystemModule(t *testing.T, ctx *android.TestContext, moduleName string, expectedSuffix string) {
	javacRule := ctx.ModuleForTests(moduleName, "android_common").Rule("javac")
	bootClasspath := javacRule.Args["bootClasspath"]
	if strings.HasPrefix(bootClasspath, "--system ") && strings.HasSuffix(bootClasspath, expectedSuffix) {
@@ -2256,61 +2256,6 @@ func TestJavaApiLibraryStaticLibsLink(t *testing.T) {
	}
}

func TestJavaApiLibraryFullApiSurfaceStub(t *testing.T) {
	provider_bp_a := `
	java_api_contribution {
		name: "foo1",
		api_file: "current.txt",
		api_surface: "public",
	}
	`
	provider_bp_b := `
	java_api_contribution {
		name: "foo2",
		api_file: "current.txt",
		api_surface: "public",
	}
	`
	lib_bp_a := `
	java_api_library {
		name: "lib1",
		api_surface: "public",
		api_contributions: ["foo1", "foo2"],
		stubs_type: "everything",
	}
	`

	ctx := android.GroupFixturePreparers(
		prepareForJavaTest,
		android.FixtureMergeMockFs(
			map[string][]byte{
				"a/Android.bp": []byte(provider_bp_a),
				"b/Android.bp": []byte(provider_bp_b),
				"c/Android.bp": []byte(lib_bp_a),
			},
		),
		android.FixtureMergeEnv(
			map[string]string{
				"DISABLE_STUB_VALIDATION": "true",
			},
		),
	).RunTestWithBp(t, `
		java_api_library {
			name: "bar1",
			api_surface: "public",
			api_contributions: ["foo1"],
			full_api_surface_stub: "lib1",
			stubs_type: "everything",
		}
	`)

	m := ctx.ModuleForTests("bar1", "android_common")
	manifest := m.Output("metalava.sbox.textproto")
	sboxProto := android.RuleBuilderSboxProtoForTests(t, ctx.TestContext, manifest)
	manifestCommand := sboxProto.Commands[0].GetCommand()
	android.AssertStringDoesContain(t, "Command expected to contain full_api_surface_stub output jar", manifestCommand, "lib1.jar")
}

func TestTransitiveSrcFiles(t *testing.T) {
	ctx, _ := testJava(t, `
		java_library {
@@ -2511,9 +2456,6 @@ func TestSdkLibraryProvidesSystemModulesToApiLibrary(t *testing.T) {
		prepareForJavaTest,
		PrepareForTestWithJavaSdkLibraryFiles,
		FixtureWithLastReleaseApis("foo"),
		android.FixtureModifyConfig(func(config android.Config) {
			config.SetApiLibraries([]string{"foo"})
		}),
		android.FixtureMergeMockFs(
			map[string][]byte{
				"A.java": nil,
@@ -2534,12 +2476,8 @@ func TestSdkLibraryProvidesSystemModulesToApiLibrary(t *testing.T) {
			system_modules: "baz",
		}
	`)
	m := result.ModuleForTests(apiScopePublic.apiLibraryModuleName("foo"), "android_common")
	manifest := m.Output("metalava.sbox.textproto")
	sboxProto := android.RuleBuilderSboxProtoForTests(t, result.TestContext, manifest)
	manifestCommand := sboxProto.Commands[0].GetCommand()
	classPathFlag := "--classpath __SBOX_SANDBOX_DIR__/out/soong/.intermediates/bar/android_common/turbine-combined/bar.jar"
	android.AssertStringDoesContain(t, "command expected to contain classpath flag", manifestCommand, classPathFlag)

	checkBootClasspathForLibWithSystemModule(t, result.TestContext, apiScopePublic.apiLibraryModuleName("foo"), "/bar.jar")
}

func TestApiLibraryDroidstubsDependency(t *testing.T) {
@@ -2547,9 +2485,6 @@ func TestApiLibraryDroidstubsDependency(t *testing.T) {
		prepareForJavaTest,
		PrepareForTestWithJavaSdkLibraryFiles,
		FixtureWithLastReleaseApis("foo"),
		android.FixtureModifyConfig(func(config android.Config) {
			config.SetApiLibraries([]string{"foo"})
		}),
		android.FixtureMergeMockFs(
			map[string][]byte{
				"A.java": nil,
@@ -2598,7 +2533,6 @@ func TestDisableFromTextStubForCoverageBuild(t *testing.T) {
		PrepareForTestWithJacocoInstrumentation,
		FixtureWithLastReleaseApis("foo"),
		android.FixtureModifyConfig(func(config android.Config) {
			config.SetApiLibraries([]string{"foo"})
			config.SetBuildFromTextStub(true)
		}),
		android.FixtureModifyEnv(func(env map[string]string) {
Loading