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

Commit b1e61cb8 authored by Martin Stjernholm's avatar Martin Stjernholm
Browse files

Remove fallback code path for missing BCP fragments that is no longer

necessary.

#codehealth

Test: m nothing
Bug: 179354495
Change-Id: Iaddf163e69b52cef82d522311e81bef9bdb4aa8d
parent ca9bc98e
Loading
Loading
Loading
Loading
+31 −24
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import (

	"android/soong/android"
	"android/soong/java"

	"github.com/google/blueprint"
	"github.com/google/blueprint/proptools"
)
@@ -325,31 +326,15 @@ func TestPlatformBootclasspathDependencies(t *testing.T) {
}

// TestPlatformBootclasspath_AlwaysUsePrebuiltSdks verifies that the build does not fail when
// AlwaysUsePrebuiltSdk() returns true. The structure of the modules in this test matches what
// currently exists in some places in the Android build but it is not the intended structure. It is
// in fact an invalid structure that should cause build failures. However, fixing that structure
// will take too long so in the meantime this tests the workarounds to avoid build breakages.
//
// The main issues with this structure are:
// 1. There is no prebuilt_bootclasspath_fragment referencing the "foo" java_sdk_library_import.
// 2. There is no prebuilt_apex/apex_set which makes the dex implementation jar available to the
//    prebuilt_bootclasspath_fragment and the "foo" java_sdk_library_import.
//
// Together these cause the following symptoms:
// 1. The "foo" java_sdk_library_import does not have a dex implementation jar.
// 2. The "foo" java_sdk_library_import does not have a myapex variant.
//
// TODO(b/179354495): Fix the structure in this test once the main Android build has been fixed.
// AlwaysUsePrebuiltSdk() returns true.
func TestPlatformBootclasspath_AlwaysUsePrebuiltSdks(t *testing.T) {
	result := android.GroupFixturePreparers(
		prepareForTestWithPlatformBootclasspath,
		prepareForTestWithMyapex,
		// Configure two libraries, the first is a java_sdk_library whose prebuilt will be used because
		// of AlwaysUsePrebuiltsSdk() but does not have an appropriate apex variant and does not provide
		// a boot dex jar. The second is a normal library that is unaffected. The order matters because
		// if the dependency on myapex:foo is filtered out because of either of those conditions then
		// the dependencies resolved by the platform_bootclasspath will not match the configured list
		// and so will fail the test.
		// of AlwaysUsePrebuiltsSdk(). The second is a normal library that is unaffected. The order
		// matters, so that the dependencies resolved by the platform_bootclasspath matches the
		// configured list.
		java.FixtureConfigureApexBootJars("myapex:foo", "myapex:bar"),
		java.PrepareForTestWithJavaSdkLibraryFiles,
		android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
@@ -394,6 +379,12 @@ func TestPlatformBootclasspath_AlwaysUsePrebuiltSdks(t *testing.T) {
			permitted_packages: ["foo"],
		}

		prebuilt_apex {
			name: "myapex",
			src: "myapex.apex",
			exported_bootclasspath_fragments: ["mybootclasspath-fragment"],
		}

		// A prebuilt java_sdk_library_import that is not preferred by default but will be preferred
		// because AlwaysUsePrebuiltSdks() is true.
		java_sdk_library_import {
@@ -423,6 +414,23 @@ func TestPlatformBootclasspath_AlwaysUsePrebuiltSdks(t *testing.T) {
			],
		}

		prebuilt_bootclasspath_fragment {
			name: "mybootclasspath-fragment",
			apex_available: [
				"myapex",
			],
			contents: [
				"foo",
			],
			hidden_api: {
				stub_flags: "",
				annotation_flags: "",
				metadata: "",
				index: "",
				all_flags: "",
			},
		}

		platform_bootclasspath {
			name: "myplatform-bootclasspath",
			fragments: [
@@ -437,7 +445,7 @@ func TestPlatformBootclasspath_AlwaysUsePrebuiltSdks(t *testing.T) {

	java.CheckPlatformBootclasspathModules(t, result, "myplatform-bootclasspath", []string{
		// The configured contents of BootJars.
		"platform:prebuilt_foo", // Note: This is the platform not myapex variant.
		"myapex:prebuilt_foo",
		"myapex:bar",
	})

@@ -456,16 +464,15 @@ func TestPlatformBootclasspath_AlwaysUsePrebuiltSdks(t *testing.T) {

		// The platform_bootclasspath intentionally adds dependencies on both source and prebuilt
		// modules when available as it does not know which one will be preferred.
		//
		// The source module has an APEX variant but the prebuilt does not.
		"myapex:foo",
		"platform:prebuilt_foo",
		"myapex:prebuilt_foo",

		// Only a source module exists.
		"myapex:bar",

		// The fragments.
		"myapex:mybootclasspath-fragment",
		"myapex:prebuilt_mybootclasspath-fragment",
	})
}

+0 −9
Original line number Diff line number Diff line
@@ -95,15 +95,6 @@ func addDependencyOntoApexModulePair(ctx android.BottomUpMutatorContext, apex st
	if ctx.OtherModuleDependencyVariantExists(variations, prebuiltName) {
		ctx.AddVariationDependencies(variations, tag, prebuiltName)
		addedDep = true
	} else if ctx.Config().AlwaysUsePrebuiltSdks() && len(variations) > 0 {
		// TODO(b/179354495): Remove this code path once the Android build has been fully migrated to
		//  use bootclasspath_fragment properly.
		// Some prebuilt java_sdk_library modules do not yet have an APEX variations so try and add a
		// dependency on the non-APEX variant.
		if ctx.OtherModuleDependencyVariantExists(nil, prebuiltName) {
			ctx.AddVariationDependencies(nil, tag, prebuiltName)
			addedDep = true
		}
	}

	// If no appropriate variant existing for this, so no dependency could be added, then it is an