diff options
Diffstat (limited to 'java/base.go')
-rw-r--r-- | java/base.go | 58 |
1 files changed, 36 insertions, 22 deletions
diff --git a/java/base.go b/java/base.go index 1aef37ca4..f8050de91 100644 --- a/java/base.go +++ b/java/base.go @@ -90,6 +90,10 @@ type CommonProperties struct { // list of module-specific flags that will be used for kotlinc compiles Kotlincflags []string `android:"arch_variant"` + // Kotlin language version to target. Currently only 1.9 and 2 are supported. + // See kotlinc's `-language-version` flag. + Kotlin_lang_version *string + // list of java libraries that will be in the classpath Libs []string `android:"arch_variant"` @@ -1153,7 +1157,7 @@ func (j *Module) addGeneratedSrcJars(path android.Path) { j.properties.Generated_srcjars = append(j.properties.Generated_srcjars, path) } -func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspathJars, extraCombinedJars, extraDepCombinedJars android.Paths) { +func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspathJars, extraCombinedJars, extraDepCombinedJars android.Paths) *JavaInfo { // Auto-propagating jarjar rules jarjarProviderData := j.collectJarJarRules(ctx) if jarjarProviderData != nil { @@ -1287,7 +1291,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath transitiveStaticLibsHeaderJars = nil } if ctx.Failed() { - return + return nil } j.headerJarFile = combinedHeaderJarFile @@ -1302,7 +1306,8 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath ctx.CheckbuildFile(j.headerJarFile) } - android.SetProvider(ctx, JavaInfoProvider, &JavaInfo{ + j.outputFile = j.headerJarFile + return &JavaInfo{ HeaderJars: android.PathsIfNonNil(j.headerJarFile), LocalHeaderJars: localHeaderJars, TransitiveStaticLibsHeaderJars: depset.New(depset.PREORDER, localHeaderJars, transitiveStaticLibsHeaderJars), @@ -1315,10 +1320,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath StubsLinkType: j.stubsLinkType, AconfigIntermediateCacheOutputPaths: deps.aconfigProtoFiles, SdkVersion: j.SdkVersion(ctx), - }) - - j.outputFile = j.headerJarFile - return + } } if srcFiles.HasExt(".kt") { @@ -1331,6 +1333,16 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath kotlincFlags := j.properties.Kotlincflags CheckKotlincFlags(ctx, kotlincFlags) + kotlin_lang_version := proptools.StringDefault(j.properties.Kotlin_lang_version, "1.9") + if kotlin_lang_version == "1.9" { + kotlincFlags = append(kotlincFlags, "-language-version 1.9") + } else if kotlin_lang_version == "2" { + kotlincFlags = append(kotlincFlags, "-Xsuppress-version-warnings", "-Xconsistent-data-class-copy-visibility") + } else { + ctx.PropertyErrorf("kotlin_lang_version", "Must be one of `1.9` or `2`") + + } + // Workaround for KT-46512 kotlincFlags = append(kotlincFlags, "-Xsam-conversions=class") @@ -1375,7 +1387,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath kotlinHeaderJar := android.PathForModuleOut(ctx, "kotlin_headers", jarName) j.kotlinCompile(ctx, kotlinJar, kotlinHeaderJar, uniqueSrcFiles, kotlinCommonSrcFiles, srcJars, flags) if ctx.Failed() { - return + return nil } kotlinJarPath, _ := j.repackageFlagsIfNecessary(ctx, kotlinJar, jarName, "kotlinc") @@ -1502,7 +1514,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath localImplementationJars = append(localImplementationJars, classes) } if ctx.Failed() { - return + return nil } } @@ -1542,7 +1554,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath resourceJar := android.PathForModuleOut(ctx, "res", jarName) TransformResourcesToJar(ctx, resourceJar, resArgs, resDeps) if ctx.Failed() { - return + return nil } localResourceJars = append(localResourceJars, resourceJar) } @@ -1664,7 +1676,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath } if ctx.Failed() { - return + return nil } if j.ravenizer.enabled { @@ -1728,7 +1740,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath CheckJarPackages(ctx, pkgckFile, outputFile, j.properties.Permitted_packages) if ctx.Failed() { - return + return nil } } @@ -1753,7 +1765,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath // enforce syntax check to jacoco filters for any build (http://b/183622051) specs := j.jacocoModuleToZipCommand(ctx) if ctx.Failed() { - return + return nil } completeStaticLibsImplementationJarsToCombine := completeStaticLibsImplementationJars @@ -1821,7 +1833,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath } dexOutputFile, dexArtProfileOutput := j.dexer.compileDex(ctx, params) if ctx.Failed() { - return + return nil } // If r8/d8 provides a profile that matches the optimized dex, use that for dexpreopt. @@ -1880,7 +1892,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath } if ctx.Failed() { - return + return nil } } @@ -1927,7 +1939,10 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath ctx.CheckbuildFile(j.headerJarFile) } - android.SetProvider(ctx, JavaInfoProvider, &JavaInfo{ + // Save the output file with no relative path so that it doesn't end up in a subdirectory when used as a resource + j.outputFile = outputFile.WithoutRel() + + return &JavaInfo{ HeaderJars: android.PathsIfNonNil(j.headerJarFile), RepackagedHeaderJars: android.PathsIfNonNil(repackagedHeaderJarFile), @@ -1952,10 +1967,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath StubsLinkType: j.stubsLinkType, AconfigIntermediateCacheOutputPaths: j.aconfigCacheFiles, SdkVersion: j.SdkVersion(ctx), - }) - - // Save the output file with no relative path so that it doesn't end up in a subdirectory when used as a resource - j.outputFile = outputFile.WithoutRel() + } } func (j *Module) useCompose(ctx android.BaseModuleContext) bool { @@ -2059,7 +2071,9 @@ func CheckKotlincFlags(ctx android.ModuleContext, flags []string) { } else if strings.HasPrefix(flag, "-Xintellij-plugin-root") { ctx.PropertyErrorf("kotlincflags", "Bad flag: `%s`, only use internal compiler for consistency.", flag) - } else if inList(flag, config.KotlincIllegalFlags) { + } else if slices.ContainsFunc(config.KotlincIllegalFlags, func(f string) bool { + return strings.HasPrefix(flag, f) + }) { ctx.PropertyErrorf("kotlincflags", "Flag `%s` already used by build system", flag) } else if flag == "-include-runtime" { ctx.PropertyErrorf("kotlincflags", "Bad flag: `%s`, do not include runtime.", flag) @@ -2220,7 +2234,7 @@ func (j *Module) CompilerDeps() []string { func (j *Module) hasCode(ctx android.ModuleContext) bool { srcFiles := android.PathsForModuleSrcExcludes(ctx, j.properties.Srcs, j.properties.Exclude_srcs) - return len(srcFiles) > 0 || len(ctx.GetDirectDepsWithTag(staticLibTag)) > 0 + return len(srcFiles) > 0 || len(ctx.GetDirectDepsProxyWithTag(staticLibTag)) > 0 } // Implements android.ApexModule |