diff options
author | 2017-08-03 20:08:54 +0200 | |
---|---|---|
committer | 2017-08-04 17:16:22 +0200 | |
commit | 0d659c0dd219ae6a73689f4431d2432bc2025ec7 (patch) | |
tree | c4e77a022003ce2145983e4e54578624a8556dab /src/main | |
parent | 5e92855c2b26e21336c388aebd6c760bdea1175f (diff) |
Use @CompileTimeConstant on SpawnAction.Builder#setProgressMessage.
Add SpawnAction.Builder#setProgressMessageNonLazy for dynamic strings. This should help guide users to the right method.
This also helped find a few methods I'd missed previously that could use a constant-string version.
RELNOTES: None
PiperOrigin-RevId: 164150264
Diffstat (limited to 'src/main')
5 files changed, 50 insertions, 34 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java index e578483eb2..54f1d9e7f0 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java @@ -59,6 +59,7 @@ import com.google.devtools.build.lib.util.LazyString; import com.google.devtools.build.lib.util.Preconditions; import com.google.devtools.build.lib.util.ShellEscaper; import com.google.devtools.build.lib.vfs.PathFragment; +import com.google.errorprone.annotations.CompileTimeConstant; import com.google.errorprone.annotations.FormatMethod; import com.google.errorprone.annotations.FormatString; import com.google.protobuf.GeneratedMessage.GeneratedExtension; @@ -1124,8 +1125,12 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie * <p>If you are formatting the string in any way, prefer one of the overloads that do the * formatting lazily. This helps save memory by delaying the construction of the progress * message string. + * + * <p>If you cannot use simple formatting, try {@link Builder#setProgressMessage(LazyString)}. + * + * <p>If you must eagerly compute the string, use {@link Builder#setProgressMessageNonLazy}. */ - public Builder setProgressMessage(String progressMessage) { + public Builder setProgressMessage(@CompileTimeConstant String progressMessage) { this.progressMessage = progressMessage; return this; } @@ -1222,6 +1227,16 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie return this; } + /** + * Sets an eagerly computed progress message. + * + * <p>Prefer one of the lazy overloads whenever possible, as it will generally save memory. + */ + public Builder setProgressMessageNonLazy(String progressMessage) { + this.progressMessage = progressMessage; + return this; + } + public Builder setMnemonic(String mnemonic) { Preconditions.checkArgument( !mnemonic.isEmpty() && CharMatcher.javaLetterOrDigit().matchesAllOf(mnemonic), diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java index 2a3974179b..824cd917c1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java @@ -598,7 +598,7 @@ public class SkylarkActionFactory implements SkylarkValue { envUnchecked, String.class, String.class, "env"))); } if (progressMessage != Runtime.NONE) { - builder.setProgressMessage((String) progressMessage); + builder.setProgressMessageNonLazy((String) progressMessage); } if (EvalUtils.toBoolean(useDefaultShellEnv)) { builder.useDefaultShellEnvironment(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java index c544889a8e..e8850272f1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java @@ -242,7 +242,7 @@ public class AarImport implements RuleConfiguredTargetFactory { .setExecutable(ruleContext.getExecutablePrerequisite("$zip_manifest_creator", Mode.HOST)) .setMnemonic("ZipManifestCreator") .setProgressMessage( - "Creating manifest for " + aar.getFilename() + " matching " + filenameRegexp) + "Creating manifest for %s matching %s", aar.getFilename(), filenameRegexp) .addArgument(filenameRegexp) .addInputArgument(aar) .addOutputArgument(manifest) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java index 078f558f8e..d985e16c8e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java @@ -145,9 +145,9 @@ public class ApkActionsBuilder { ? unsignedApk : AndroidBinary.getDxArtifact(ruleContext, "unsigned_" + signedApk.getFilename()); if (useSingleJarApkBuilder) { - buildApk(ruleContext, intermediateUnsignedApk, "Generating unsigned " + apkName); + buildApk(ruleContext, intermediateUnsignedApk); } else { - legacyBuildApk(ruleContext, intermediateUnsignedApk, "Generating unsigned " + apkName); + legacyBuildApk(ruleContext, intermediateUnsignedApk); } if (signedApk != null) { @@ -169,12 +169,13 @@ public class ApkActionsBuilder { * <p>If {@code signingKey} is not null, the apk will be signed with it using the V1 signature * scheme. */ - private void legacyBuildApk(RuleContext ruleContext, Artifact outApk, String message) { - SpawnAction.Builder actionBuilder = new SpawnAction.Builder() - .setExecutable(AndroidSdkProvider.fromRuleContext(ruleContext).getApkBuilder()) - .setProgressMessage(message) - .setMnemonic("AndroidApkBuilder") - .addOutputArgument(outApk); + private void legacyBuildApk(RuleContext ruleContext, Artifact outApk) { + SpawnAction.Builder actionBuilder = + new SpawnAction.Builder() + .setExecutable(AndroidSdkProvider.fromRuleContext(ruleContext).getApkBuilder()) + .setProgressMessage("Generating unsigned %s", apkName) + .setMnemonic("AndroidApkBuilder") + .addOutputArgument(outApk); if (javaResourceZip != null) { actionBuilder @@ -230,20 +231,19 @@ public class ApkActionsBuilder { ruleContext.registerAction(actionBuilder.build(ruleContext)); } - /** - * Registers generating actions for {@code outApk} that build an unsigned APK using SingleJar. - */ - private void buildApk(RuleContext ruleContext, Artifact outApk, String message) { + /** Registers generating actions for {@code outApk} that build an unsigned APK using SingleJar. */ + private void buildApk(RuleContext ruleContext, Artifact outApk) { Artifact compressedApk = AndroidBinary.getDxArtifact(ruleContext, "compressed_" + outApk.getFilename()); - SpawnAction.Builder compressedApkActionBuilder = new SpawnAction.Builder() - .setMnemonic("ApkBuilder") - .setProgressMessage(message) - .addArgument("--exclude_build_data") - .addArgument("--compression") - .addArgument("--normalize") - .addArgument("--output") - .addOutputArgument(compressedApk); + SpawnAction.Builder compressedApkActionBuilder = + new SpawnAction.Builder() + .setMnemonic("ApkBuilder") + .setProgressMessage("Generating unsigned %s", apkName) + .addArgument("--exclude_build_data") + .addArgument("--compression") + .addArgument("--normalize") + .addArgument("--output") + .addOutputArgument(compressedApk); setSingleJarAsExecutable(ruleContext, compressedApkActionBuilder); if (classesDex != null) { @@ -284,16 +284,17 @@ public class ApkActionsBuilder { } } - SpawnAction.Builder singleJarActionBuilder = new SpawnAction.Builder() - .setMnemonic("ApkBuilder") - .setProgressMessage(message) - .addArgument("--exclude_build_data") - .addArgument("--dont_change_compression") - .addArgument("--normalize") - .addArgument("--sources") - .addInputArgument(compressedApk) - .addArgument("--output") - .addOutputArgument(outApk); + SpawnAction.Builder singleJarActionBuilder = + new SpawnAction.Builder() + .setMnemonic("ApkBuilder") + .setProgressMessage("Generating unsigned %s", apkName) + .addArgument("--exclude_build_data") + .addArgument("--dont_change_compression") + .addArgument("--normalize") + .addArgument("--sources") + .addInputArgument(compressedApk) + .addArgument("--output") + .addOutputArgument(outApk); setSingleJarAsExecutable(ruleContext, singleJarActionBuilder); if (javaResourceZip != null) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java index 8e2b7ed94c..b9719bbeb3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java @@ -645,7 +645,7 @@ public class CppHelper { .setExecutable(stripTool.getToolPath(cppConfiguration.getCrosstoolTopPathFragment())) .addArguments(commandLine) .setExecutionInfo(executionInfoBuilder.build()) - .setProgressMessage("Stripping " + output.prettyPrint() + " for " + context.getLabel()) + .setProgressMessage("Stripping %s for %s", output.prettyPrint(), context.getLabel()) .setMnemonic("CcStrip") .build(context); context.registerAction(stripAction); |