diff options
Diffstat (limited to 'java/base.go')
-rw-r--r-- | java/base.go | 63 |
1 files changed, 42 insertions, 21 deletions
diff --git a/java/base.go b/java/base.go index 215285fdb..5c1ef8585 100644 --- a/java/base.go +++ b/java/base.go @@ -109,6 +109,10 @@ type CommonProperties struct { // if not blank, used as prefix to generate repackage rule Jarjar_prefix *string + // Number of shards for jarjar. It needs to be an integer represented as a string. + // TODO(b/383559945) change it to int, once Configurable supports the type. + Jarjar_shards proptools.Configurable[string] + // If not blank, set the java version passed to javac as -source and -target Java_version *string @@ -1237,7 +1241,6 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath uniqueSrcFiles = append(uniqueSrcFiles, uniqueJavaFiles...) uniqueSrcFiles = append(uniqueSrcFiles, uniqueKtFiles...) j.uniqueSrcFiles = uniqueSrcFiles - android.SetProvider(ctx, blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: uniqueSrcFiles.Strings()}) // We don't currently run annotation processors in turbine, which means we can't use turbine // generated header jars when an annotation processor that generates API is enabled. One @@ -1273,7 +1276,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath localHeaderJars, combinedHeaderJarFile := j.compileJavaHeader(ctx, uniqueJavaFiles, srcJars, deps, flags, jarName, extraCombinedJars) - combinedHeaderJarFile, jarjared := j.jarjarIfNecessary(ctx, combinedHeaderJarFile, jarName, "turbine") + combinedHeaderJarFile, jarjared := j.jarjarIfNecessary(ctx, combinedHeaderJarFile, jarName, "turbine", false) if jarjared { localHeaderJars = android.Paths{combinedHeaderJarFile} transitiveStaticLibsHeaderJars = nil @@ -1409,7 +1412,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath shardingHeaderJars = localHeaderJars var jarjared bool - j.headerJarFile, jarjared = j.jarjarIfNecessary(ctx, combinedHeaderJarFile, jarName, "turbine") + j.headerJarFile, jarjared = j.jarjarIfNecessary(ctx, combinedHeaderJarFile, jarName, "turbine", false) if jarjared { // jarjar modifies transitive static dependencies, use the combined header jar and drop the transitive // static libs header jars. @@ -1442,20 +1445,27 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath // build. flags = enableErrorproneFlags(flags) } else if hasErrorproneableFiles && ctx.Config().RunErrorProne() && j.properties.Errorprone.Enabled == nil { - // Otherwise, if the RUN_ERROR_PRONE environment variable is set, create - // a new jar file just for compiling with the errorprone compiler to. - // This is because we don't want to cause the java files to get completely - // rebuilt every time the state of the RUN_ERROR_PRONE variable changes. - // We also don't want to run this if errorprone is enabled by default for - // this module, or else we could have duplicated errorprone messages. - errorproneFlags := enableErrorproneFlags(flags) - errorprone := android.PathForModuleOut(ctx, "errorprone", jarName) - errorproneAnnoSrcJar := android.PathForModuleOut(ctx, "errorprone", "anno.srcjar") - - transformJavaToClasses(ctx, errorprone, -1, uniqueJavaFiles, srcJars, errorproneAnnoSrcJar, errorproneFlags, nil, - "errorprone", "errorprone") - - extraJarDeps = append(extraJarDeps, errorprone) + if ctx.Config().RunErrorProneInline() { + // On CI, we're not going to toggle back/forth between errorprone and non-errorprone + // builds, so it's faster if we don't compile the module twice and instead always + // compile the module with errorprone. + flags = enableErrorproneFlags(flags) + } else { + // Otherwise, if the RUN_ERROR_PRONE environment variable is set, create + // a new jar file just for compiling with the errorprone compiler to. + // This is because we don't want to cause the java files to get completely + // rebuilt every time the state of the RUN_ERROR_PRONE variable changes. + // We also don't want to run this if errorprone is enabled by default for + // this module, or else we could have duplicated errorprone messages. + errorproneFlags := enableErrorproneFlags(flags) + errorprone := android.PathForModuleOut(ctx, "errorprone", jarName) + errorproneAnnoSrcJar := android.PathForModuleOut(ctx, "errorprone", "anno.srcjar") + + transformJavaToClasses(ctx, errorprone, -1, uniqueJavaFiles, srcJars, errorproneAnnoSrcJar, errorproneFlags, nil, + "errorprone", "errorprone") + + extraJarDeps = append(extraJarDeps, errorprone) + } } if enableSharding { @@ -1636,7 +1646,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath } // jarjar implementation jar if necessary - jarjarFile, jarjarred := j.jarjarIfNecessary(ctx, outputFile, jarName, "") + jarjarFile, jarjarred := j.jarjarIfNecessary(ctx, outputFile, jarName, "", true) if jarjarred { localImplementationJars = android.Paths{jarjarFile} completeStaticLibsImplementationJars = depset.New(depset.PREORDER, localImplementationJars, nil) @@ -1645,7 +1655,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath // jarjar resource jar if necessary if combinedResourceJar != nil { - resourceJarJarFile, jarjarred := j.jarjarIfNecessary(ctx, combinedResourceJar, jarName, "resource") + resourceJarJarFile, jarjarred := j.jarjarIfNecessary(ctx, combinedResourceJar, jarName, "resource", false) combinedResourceJar = resourceJarJarFile if jarjarred { localResourceJars = android.Paths{resourceJarJarFile} @@ -2934,12 +2944,23 @@ func (j *Module) repackageFlagsIfNecessary(ctx android.ModuleContext, infile and return repackagedJarjarFile, true } -func (j *Module) jarjarIfNecessary(ctx android.ModuleContext, infile android.Path, jarName, info string) (android.Path, bool) { +func (j *Module) jarjarIfNecessary(ctx android.ModuleContext, infile android.Path, jarName, info string, useShards bool) (android.Path, bool) { if j.expandJarjarRules == nil { return infile, false } jarjarFile := android.PathForModuleOut(ctx, "jarjar", info, jarName) - TransformJarJar(ctx, jarjarFile, infile, j.expandJarjarRules) + + totalShards := 1 + if useShards { + totalShardsStr := j.properties.Jarjar_shards.GetOrDefault(ctx, "1") + ts, err := strconv.Atoi(totalShardsStr) + if err != nil { + ctx.PropertyErrorf("jarjar_shards", "jarjar_shards must be an integer represented as a string") + return infile, false + } + totalShards = ts + } + TransformJarJarWithShards(ctx, jarjarFile, infile, j.expandJarjarRules, totalShards) return jarjarFile, true } |