diff options
Diffstat (limited to 'java/java.go')
| -rw-r--r-- | java/java.go | 65 | 
1 files changed, 55 insertions, 10 deletions
| diff --git a/java/java.go b/java/java.go index fb35a9a0e..0df96a3a5 100644 --- a/java/java.go +++ b/java/java.go @@ -75,7 +75,6 @@ func registerJavaBuildComponents(ctx android.RegistrationContext) {  		ctx.BottomUp("jacoco_deps", jacocoDepsMutator).Parallel()  	}) -	ctx.RegisterParallelSingletonType("logtags", LogtagsSingleton)  	ctx.RegisterParallelSingletonType("kythe_java_extract", kytheExtractJavaFactory)  } @@ -587,6 +586,7 @@ const (  	JAVA_VERSION_9           = 9  	JAVA_VERSION_11          = 11  	JAVA_VERSION_17          = 17 +	JAVA_VERSION_21          = 21  )  func (v javaVersion) String() string { @@ -605,6 +605,8 @@ func (v javaVersion) String() string {  		return "11"  	case JAVA_VERSION_17:  		return "17" +	case JAVA_VERSION_21: +		return "21"  	default:  		return "unsupported"  	} @@ -647,6 +649,8 @@ func normalizeJavaVersion(ctx android.BaseModuleContext, javaVersion string) jav  		return JAVA_VERSION_11  	case "17":  		return JAVA_VERSION_17 +	case "21": +		return JAVA_VERSION_21  	case "10", "12", "13", "14", "15", "16":  		ctx.PropertyErrorf("java_version", "Java language level %s is not supported", javaVersion)  		return JAVA_VERSION_UNSUPPORTED @@ -670,6 +674,10 @@ type Library struct {  var _ android.ApexModule = (*Library)(nil) +func (j *Library) CheckDepsMinSdkVersion(ctx android.ModuleContext) { +	CheckMinSdkVersion(ctx, j) +} +  // Provides access to the list of permitted packages from apex boot jars.  type PermittedPackagesForUpdatableBootJars interface {  	PermittedPackagesForUpdatableBootJars() []string @@ -886,12 +894,24 @@ func init() {  }  func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) { +	if disableSourceApexVariant(ctx) { +		// Prebuilts are active, do not create the installation rules for the source javalib. +		// Even though the source javalib is not used, we need to hide it to prevent duplicate installation rules. +		// TODO (b/331665856): Implement a principled solution for this. +		j.HideFromMake() +	}  	j.provideHiddenAPIPropertyInfo(ctx)  	j.sdkVersion = j.SdkVersion(ctx)  	j.minSdkVersion = j.MinSdkVersion(ctx)  	j.maxSdkVersion = j.MaxSdkVersion(ctx) +	// Check min_sdk_version of the transitive dependencies if this module is created from +	// java_sdk_library. +	if j.deviceProperties.Min_sdk_version != nil && j.SdkLibraryName() != nil { +		j.CheckDepsMinSdkVersion(ctx) +	} +  	// SdkLibrary.GenerateAndroidBuildActions(ctx) sets the stubsLinkType to Unknown.  	// If the stubsLinkType has already been set to Unknown, the stubsLinkType should  	// not be overridden. @@ -922,8 +942,12 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) {  	j.checkSdkVersions(ctx)  	j.checkHeadersOnly(ctx)  	if ctx.Device() { +		libName := j.Name() +		if j.SdkLibraryName() != nil && strings.HasSuffix(libName, ".impl") { +			libName = proptools.String(j.SdkLibraryName()) +		}  		j.dexpreopter.installPath = j.dexpreopter.getInstallPath( -			ctx, j.Name(), android.PathForModuleInstall(ctx, "framework", j.Stem()+".jar")) +			ctx, libName, android.PathForModuleInstall(ctx, "framework", j.Stem()+".jar"))  		j.dexpreopter.isSDKLibrary = j.deviceProperties.IsSDKLibrary  		setUncompressDex(ctx, &j.dexpreopter, &j.dexer)  		j.dexpreopter.uncompressedDex = *j.dexProperties.Uncompress_dex @@ -934,8 +958,24 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) {  	}  	j.compile(ctx, nil, nil, nil) -	exclusivelyForApex := !apexInfo.IsForPlatform() -	if (Bool(j.properties.Installable) || ctx.Host()) && !exclusivelyForApex { +	// If this module is an impl library created from java_sdk_library, +	// install the files under the java_sdk_library module outdir instead of this module outdir. +	if j.SdkLibraryName() != nil && strings.HasSuffix(j.Name(), ".impl") { +		j.setInstallRules(ctx, proptools.String(j.SdkLibraryName())) +	} else { +		j.setInstallRules(ctx, ctx.ModuleName()) +	} + +	android.SetProvider(ctx, android.TestOnlyProviderKey, android.TestModuleInformation{ +		TestOnly:       Bool(j.sourceProperties.Test_only), +		TopLevelTarget: j.sourceProperties.Top_level_test_target, +	}) +} + +func (j *Library) setInstallRules(ctx android.ModuleContext, installModuleName string) { +	apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) + +	if (Bool(j.properties.Installable) || ctx.Host()) && apexInfo.IsForPlatform() {  		var extraInstallDeps android.InstallPaths  		if j.InstallMixin != nil {  			extraInstallDeps = j.InstallMixin(ctx, j.outputFile) @@ -952,22 +992,27 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) {  			if !ctx.Host() {  				archDir = ctx.DeviceConfig().DeviceArch()  			} -			installDir = android.PathForModuleInstall(ctx, ctx.ModuleName(), archDir) +			installDir = android.PathForModuleInstall(ctx, installModuleName, archDir)  		} else {  			installDir = android.PathForModuleInstall(ctx, "framework")  		}  		j.installFile = ctx.InstallFile(installDir, j.Stem()+".jar", j.outputFile, extraInstallDeps...)  	} - -	android.SetProvider(ctx, android.TestOnlyProviderKey, android.TestModuleInformation{ -		TestOnly:       Bool(j.sourceProperties.Test_only), -		TopLevelTarget: j.sourceProperties.Top_level_test_target, -	})  }  func (j *Library) DepsMutator(ctx android.BottomUpMutatorContext) {  	j.usesLibrary.deps(ctx, false)  	j.deps(ctx) + +	if j.SdkLibraryName() != nil && strings.HasSuffix(j.Name(), ".impl") { +		if dexpreopt.IsDex2oatNeeded(ctx) { +			dexpreopt.RegisterToolDeps(ctx) +		} +		prebuiltSdkLibExists := ctx.OtherModuleExists(android.PrebuiltNameFromSource(proptools.String(j.SdkLibraryName()))) +		if prebuiltSdkLibExists && ctx.OtherModuleExists("all_apex_contributions") { +			ctx.AddDependency(ctx.Module(), android.AcDepTag, "all_apex_contributions") +		} +	}  }  const ( |