aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
diff options
context:
space:
mode:
authorGravatar Ulf Adams <ulfjack@google.com>2016-04-19 12:55:12 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-04-19 13:52:07 +0000
commit10993fe27a62d5a4e683a206291c1bd44a492daf (patch)
tree7d0926a88d1f40524a6d597f0685c7b9cca3dbc2 /src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
parentc31f4c544cf26424375dbd579338ef9680b97012 (diff)
Review a number of action subclasses and update them according to the spec.
Consists of adding @Immutable annotations, adding final modifiers, and changing the types of fields to immutable types. -- MOS_MIGRATED_REVID=120221067
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java50
1 files changed, 30 insertions, 20 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
index b61d6ac59b..3f2cd64703 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
@@ -22,6 +22,7 @@ import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
+import com.google.devtools.build.lib.actions.ActionOwner;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
@@ -37,6 +38,7 @@ import com.google.devtools.build.lib.cmdline.TargetPattern;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
@@ -82,7 +84,6 @@ import java.io.OutputStream;
import java.io.PrintStream;
import java.nio.channels.ClosedByInterruptException;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -150,25 +151,7 @@ public class GenQuery implements RuleConfiguredTargetFactory {
}
ruleContext.registerAction(
- new AbstractFileWriteAction(
- ruleContext.getActionOwner(), Collections.<Artifact>emptySet(), outputArtifact, false) {
- @Override
- public DeterministicWriter newDeterministicWriter(ActionExecutionContext ctx) {
- return new DeterministicWriter() {
- @Override
- public void writeOutputFile(OutputStream out) throws IOException {
- out.write(result);
- }
- };
- }
-
- @Override
- protected String computeKey() {
- Fingerprint f = new Fingerprint();
- f.addBytes(result);
- return f.hexDigestAndReset();
- }
- });
+ new QueryResultAction(ruleContext.getActionOwner(), outputArtifact, result));
NestedSet<Artifact> filesToBuild = NestedSetBuilder.create(Order.STABLE_ORDER, outputArtifact);
return new RuleConfiguredTargetBuilder(ruleContext)
@@ -329,6 +312,33 @@ public class GenQuery implements RuleConfiguredTargetFactory {
return outputStream.toByteArray();
}
+ @Immutable // assuming no other reference to result
+ private static final class QueryResultAction extends AbstractFileWriteAction {
+ private final byte[] result;
+
+ private QueryResultAction(ActionOwner owner, Artifact output, byte[] result) {
+ super(owner, ImmutableList.<Artifact>of(), output, /*makeExecutable=*/false);
+ this.result = result;
+ }
+
+ @Override
+ public DeterministicWriter newDeterministicWriter(ActionExecutionContext ctx) {
+ return new DeterministicWriter() {
+ @Override
+ public void writeOutputFile(OutputStream out) throws IOException {
+ out.write(result);
+ }
+ };
+ }
+
+ @Override
+ protected String computeKey() {
+ Fingerprint f = new Fingerprint();
+ f.addBytes(result);
+ return f.hexDigestAndReset();
+ }
+ }
+
/**
* Provide target pattern evaluation to the query operations using Skyframe dep lookup. For thread
* safety, we must synchronize access to the SkyFunction.Environment.