aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar tomlu <tomlu@google.com>2017-08-03 20:08:54 +0200
committerGravatar Dmitry Lomov <dslomov@google.com>2017-08-04 17:16:22 +0200
commit0d659c0dd219ae6a73689f4431d2432bc2025ec7 (patch)
treec4e77a022003ce2145983e4e54578624a8556dab /src/main
parent5e92855c2b26e21336c388aebd6c760bdea1175f (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java61
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java2
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);