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

Commit 0c07d465 authored by Kevin Liu's avatar Kevin Liu Committed by Gerrit Code Review
Browse files

Merge "Added Strict_mode logic catch direct usage of Robolectric reference" into main

parents 79cd6899 cab89b51
Loading
Loading
Loading
Loading
+19 −5
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ const robolectricPrebuiltLibPattern = "platform-robolectric-%s-prebuilt"
var (
	roboCoverageLibsTag = dependencyTag{name: "roboCoverageLibs"}
	roboRuntimesTag     = dependencyTag{name: "roboRuntimes"}
	roboRuntimeOnlyTag  = dependencyTag{name: "roboRuntimeOnlyTag"}
)

type robolectricProperties struct {
@@ -70,6 +71,9 @@ type robolectricProperties struct {
	// Use /external/robolectric rather than /external/robolectric-shadows as the version of robolectric
	// to use.  /external/robolectric closely tracks github's master, and will fully replace /external/robolectric-shadows
	Upstream *bool

	// Use strict mode to limit access of Robolectric API directly. See go/roboStrictMode
	Strict_mode *bool
}

type robolectricTest struct {
@@ -112,7 +116,7 @@ func (r *robolectricTest) DepsMutator(ctx android.BottomUpMutatorContext) {

	if v := String(r.robolectricProperties.Robolectric_prebuilt_version); v != "" {
		ctx.AddVariationDependencies(nil, libTag, fmt.Sprintf(robolectricPrebuiltLibPattern, v))
	} else {
	} else if !proptools.Bool(r.robolectricProperties.Strict_mode) {
		if proptools.Bool(r.robolectricProperties.Upstream) {
			ctx.AddVariationDependencies(nil, libTag, robolectricCurrentLib+"_upstream")
		} else {
@@ -120,6 +124,10 @@ func (r *robolectricTest) DepsMutator(ctx android.BottomUpMutatorContext) {
		}
	}

	if proptools.Bool(r.robolectricProperties.Strict_mode) {
		ctx.AddVariationDependencies(nil, roboRuntimeOnlyTag, robolectricCurrentLib+"_upstream")
	}

	ctx.AddVariationDependencies(nil, libTag, robolectricDefaultLibs...)

	ctx.AddVariationDependencies(nil, roboCoverageLibsTag, r.robolectricProperties.Coverage_libs...)
@@ -192,19 +200,25 @@ func (r *robolectricTest) GenerateAndroidBuildActions(ctx android.ModuleContext)
		combinedJarJars = append(combinedJarJars, instrumentedApp.implementationAndResourcesJar)
	}

	handleLibDeps := func(dep android.Module) {
	handleLibDeps := func(dep android.Module, runtimeOnly bool) {
		m, _ := android.OtherModuleProvider(ctx, dep, JavaInfoProvider)
		if !runtimeOnly {
			r.libs = append(r.libs, ctx.OtherModuleName(dep))
		}
		if !android.InList(ctx.OtherModuleName(dep), config.FrameworkLibraries) {
			combinedJarJars = append(combinedJarJars, m.ImplementationAndResourcesJars...)
		}
	}

	for _, dep := range ctx.GetDirectDepsWithTag(libTag) {
		handleLibDeps(dep)
		handleLibDeps(dep, false)
	}
	for _, dep := range ctx.GetDirectDepsWithTag(sdkLibTag) {
		handleLibDeps(dep)
		handleLibDeps(dep, false)
	}
	// handle the runtimeOnly tag for strict_mode
	for _, dep := range ctx.GetDirectDepsWithTag(roboRuntimeOnlyTag) {
		handleLibDeps(dep, true)
	}

	r.combinedJar = android.PathForModuleOut(ctx, "robolectric_combined", r.outputFile.Base())