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

Commit 6b592bdc authored by Paul Duffin's avatar Paul Duffin Committed by Gerrit Code Review
Browse files

Merge "Remove javalib special case in createDeapexerModuleIfNeeded"

parents d430ddd0 fef5500a
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -128,3 +128,12 @@ type RequiredFilesFromPrebuiltApex interface {
	// can then be retrieved using the PrebuiltExportPath(name, tag) method.
	RequiredFilesFromPrebuiltApex(ctx BaseModuleContext) map[string]string
}

// Marker interface that identifies dependencies on modules that may require files from a prebuilt
// apex.
type RequiresFilesFromPrebuiltApexTag interface {
	blueprint.DependencyTag

	// Method that differentiates this interface from others.
	RequiresFilesFromPrebuiltApex()
}
+12 −10
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@ package apex
import (
	"fmt"
	"io"
	"path/filepath"
	"strconv"
	"strings"

@@ -560,15 +559,13 @@ func createDeapexerModuleIfNeeded(ctx android.TopDownMutatorContext, deapexerNam
	ctx.WalkDeps(func(child, parent android.Module) bool {
		tag := ctx.OtherModuleDependencyTag(child)

		name := android.RemoveOptionalPrebuiltPrefix(ctx.OtherModuleName(child))
		if java.IsBootclasspathFragmentContentDepTag(tag) || tag == exportedJavaLibTag {
			commonModules = append(commonModules, name)

			// Add the dex implementation jar to the set of exported files. The path here must match the
			// path of the file in the APEX created by apexFileForJavaModule(...).
			exportedFilesByKey[name+"{.dexjar}"] = filepath.Join("javalib", name+".jar")
		// If the child is not in the same apex as the parent then ignore it and all its children.
		if !android.IsDepInSameApex(ctx, parent, child) {
			return false
		}

		} else if tag == exportedBootclasspathFragmentTag {
		name := android.RemoveOptionalPrebuiltPrefix(ctx.OtherModuleName(child))
		if _, ok := tag.(android.RequiresFilesFromPrebuiltApexTag); ok {
			commonModules = append(commonModules, name)

			requiredFiles := child.(android.RequiredFilesFromPrebuiltApex).RequiredFilesFromPrebuiltApex(ctx)
@@ -583,7 +580,8 @@ func createDeapexerModuleIfNeeded(ctx android.TopDownMutatorContext, deapexerNam
				requiringModulesByKey[k] = child
			}

			// Make sure to visit the children of the bootclasspath_fragment.
			// Visit the dependencies of this module just in case they also require files from the
			// prebuilt apex.
			return true
		}

@@ -660,6 +658,10 @@ type exportedDependencyTag struct {
// incorrectly.
func (t exportedDependencyTag) ExcludeFromVisibilityEnforcement() {}

func (t exportedDependencyTag) RequiresFilesFromPrebuiltApex() {}

var _ android.RequiresFilesFromPrebuiltApexTag = exportedDependencyTag{}

var (
	exportedJavaLibTag               = exportedDependencyTag{name: "exported_java_libs"}
	exportedBootclasspathFragmentTag = exportedDependencyTag{name: "exported_bootclasspath_fragments"}
+4 −0
Original line number Diff line number Diff line
@@ -81,6 +81,9 @@ func (b bootclasspathFragmentContentDependencyTag) ExportMember() bool {
// they were listed in java_libs.
func (b bootclasspathFragmentContentDependencyTag) CopyDirectlyInAnyApex() {}

// Contents of bootclasspath fragments require files from prebuilt apex files.
func (b bootclasspathFragmentContentDependencyTag) RequiresFilesFromPrebuiltApex() {}

// The tag used for the dependency between the bootclasspath_fragment module and its contents.
var bootclasspathFragmentContentDepTag = bootclasspathFragmentContentDependencyTag{}

@@ -88,6 +91,7 @@ var _ android.ExcludeFromVisibilityEnforcementTag = bootclasspathFragmentContent
var _ android.ReplaceSourceWithPrebuilt = bootclasspathFragmentContentDepTag
var _ android.SdkMemberTypeDependencyTag = bootclasspathFragmentContentDepTag
var _ android.CopyDirectlyInAnyApexTag = bootclasspathFragmentContentDepTag
var _ android.RequiresFilesFromPrebuiltApexTag = bootclasspathFragmentContentDepTag

func IsBootclasspathFragmentContentDepTag(tag blueprint.DependencyTag) bool {
	return tag == bootclasspathFragmentContentDepTag
+18 −0
Original line number Diff line number Diff line
@@ -1426,6 +1426,24 @@ func (j *Import) ShouldSupportSdkVersion(ctx android.BaseModuleContext,
	return nil
}

// requiredFilesFromPrebuiltApexForImport returns information about the files that a java_import or
// java_sdk_library_import with the specified base module name requires to be exported from a
// prebuilt_apex/apex_set.
func requiredFilesFromPrebuiltApexForImport(name string) map[string]string {
	// Add the dex implementation jar to the set of exported files. The path here must match the
	// path of the file in the APEX created by apexFileForJavaModule(...).
	return map[string]string{
		name + "{.dexjar}": filepath.Join("javalib", name+".jar"),
	}
}

var _ android.RequiredFilesFromPrebuiltApex = (*Import)(nil)

func (j *Import) RequiredFilesFromPrebuiltApex(ctx android.BaseModuleContext) map[string]string {
	name := j.BaseModuleName()
	return requiredFilesFromPrebuiltApexForImport(name)
}

// Add compile time check for interface implementation
var _ android.IDEInfo = (*Import)(nil)
var _ android.IDECustomizedModuleName = (*Import)(nil)
+7 −0
Original line number Diff line number Diff line
@@ -2269,6 +2269,13 @@ func (module *SdkLibraryImport) ImplementationAndResourcesJars() android.Paths {
	}
}

var _ android.RequiredFilesFromPrebuiltApex = (*SdkLibraryImport)(nil)

func (module *SdkLibraryImport) RequiredFilesFromPrebuiltApex(ctx android.BaseModuleContext) map[string]string {
	name := module.BaseModuleName()
	return requiredFilesFromPrebuiltApexForImport(name)
}

//
// java_sdk_library_xml
//