aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar cushon <cushon@google.com>2017-04-10 18:51:09 +0000
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-04-11 10:50:14 +0200
commit3c4b4e34413e47e9cab143f09a20c0dbf015c2b2 (patch)
tree18f2e23633e4b01fc9df9573e9f59f900a95fb3b /src/main
parenta704e0bdea8877ce0c4e65400d14418153507407 (diff)
Avoid copying existing immutable collections
PiperOrigin-RevId: 152714468
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java82
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaGenJarsProvider.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java55
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaSourceInfoProvider.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaTargetAttributes.java67
7 files changed, 108 insertions, 150 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
index ec266b9a5d..dd1dece72a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
@@ -215,14 +215,12 @@ public class JavaCommon {
return javaArtifacts;
}
- public ImmutableList<Artifact> getProcessorClasspathJars() {
- Set<Artifact> processorClasspath = new LinkedHashSet<>();
+ public NestedSet<Artifact> getProcessorClasspathJars() {
+ NestedSetBuilder<Artifact> builder = NestedSetBuilder.naiveLinkOrder();
for (JavaPluginInfoProvider plugin : activePlugins) {
- for (Artifact classpathJar : plugin.getProcessorClasspath()) {
- processorClasspath.add(classpathJar);
- }
+ builder.addTransitive(plugin.getProcessorClasspath());
}
- return ImmutableList.copyOf(processorClasspath);
+ return builder.build();
}
public ImmutableList<String> getProcessorClassNames() {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java
index 0c19e64ed8..2a7f34d04b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java
@@ -33,6 +33,7 @@ import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.StrictDepsMode;
+import com.google.devtools.build.lib.collect.ImmutableIterable;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.rules.java.JavaConfiguration.JavaClasspathMode;
@@ -202,7 +203,7 @@ public final class JavaCompilationHelper {
builder.setAdditionalOutputs(attributes.getAdditionalOutputs());
builder.setMetadata(outputMetadata);
builder.setInstrumentationJars(jacocoInstrumentation);
- builder.addSourceFiles(attributes.getSourceFiles());
+ builder.setSourceFiles(attributes.getSourceFiles());
builder.addSourceJars(attributes.getSourceJars());
builder.setJavacOpts(customJavacOpts);
builder.setJavacJvmOpts(customJavacJvmOpts);
@@ -211,12 +212,12 @@ public final class JavaCompilationHelper {
builder.setSourceGenDirectory(sourceGenDir(classJar));
builder.setTempDirectory(tempDir(classJar));
builder.setClassDirectory(classDir(classJar));
- builder.addProcessorPaths(attributes.getProcessorPath());
+ builder.setProcessorPaths(attributes.getProcessorPath());
builder.addProcessorNames(attributes.getProcessorNames());
builder.addProcessorFlags(attributes.getProcessorFlags());
builder.setStrictJavaDeps(attributes.getStrictJavaDeps());
builder.setDirectJars(attributes.getDirectJars());
- builder.addCompileTimeDependencyArtifacts(attributes.getCompileTimeDependencyArtifacts());
+ builder.setCompileTimeDependencyArtifacts(attributes.getCompileTimeDependencyArtifacts());
builder.setRuleKind(attributes.getRuleKind());
builder.setTargetLabel(
attributes.getTargetLabel() == null
@@ -353,14 +354,14 @@ public final class JavaCompilationHelper {
JavaTargetAttributes attributes = getAttributes();
JavaHeaderCompileAction.Builder builder =
new JavaHeaderCompileAction.Builder(getRuleContext());
- builder.addSourceFiles(attributes.getSourceFiles());
+ builder.setSourceFiles(attributes.getSourceFiles());
builder.addSourceJars(attributes.getSourceJars());
builder.setClasspathEntries(attributes.getCompileTimeClassPath());
- builder.addAllBootclasspathEntries(getBootclasspathOrDefault());
- builder.addAllExtClasspathEntries(getExtdirInputs());
+ builder.setBootclasspathEntries(
+ ImmutableIterable.from(Iterables.concat(getBootclasspathOrDefault(), getExtdirInputs())));
// only run API-generating annotation processors during header compilation
- builder.addProcessorPaths(attributes.getApiGeneratingProcessorPath());
+ builder.setProcessorPaths(attributes.getApiGeneratingProcessorPath());
builder.addProcessorNames(attributes.getApiGeneratingProcessorNames());
builder.addProcessorFlags(attributes.getProcessorFlags());
builder.setJavacOpts(getJavacOpts());
@@ -368,7 +369,7 @@ public final class JavaCompilationHelper {
builder.setOutputJar(headerJar);
builder.setOutputDepsProto(headerDeps);
builder.setStrictJavaDeps(attributes.getStrictJavaDeps());
- builder.addCompileTimeDependencyArtifacts(attributes.getCompileTimeDependencyArtifacts());
+ builder.setCompileTimeDependencyArtifacts(attributes.getCompileTimeDependencyArtifacts());
builder.setDirectJars(attributes.getDirectJars());
builder.setRuleKind(attributes.getRuleKind());
builder.setTargetLabel(attributes.getTargetLabel());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
index 320acd99f9..2e3a7ca0f6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
@@ -105,10 +105,8 @@ public final class JavaCompileAction extends SpawnAction {
*/
private final ImmutableList<Artifact> extdirInputs;
- /**
- * The list of classpath entries to search for annotation processors.
- */
- private final ImmutableList<Artifact> processorPath;
+ /** The list of classpath entries to search for annotation processors. */
+ private final NestedSet<Artifact> processorPath;
/**
* The list of annotation processor classes to run.
@@ -123,10 +121,8 @@ public final class JavaCompileAction extends SpawnAction {
/** Set of additional Java source files to compile. */
private final ImmutableList<Artifact> sourceJars;
- /**
- * The set of explicit Java source files to compile.
- */
- private final ImmutableList<Artifact> sourceFiles;
+ /** The set of explicit Java source files to compile. */
+ private final ImmutableSet<Artifact> sourceFiles;
/**
* The compiler options to pass to javac.
@@ -141,10 +137,8 @@ public final class JavaCompileAction extends SpawnAction {
*/
private final BuildConfiguration.StrictDepsMode strictJavaDeps;
- /**
- * The set of .jdeps artifacts provided by direct dependencies.
- */
- private final ImmutableList<Artifact> compileTimeDependencyArtifacts;
+ /** The set of .jdeps artifacts provided by direct dependencies. */
+ private final NestedSet<Artifact> compileTimeDependencyArtifacts;
/**
* Constructs an action to compile a set of Java source files to class files.
@@ -187,16 +181,16 @@ public final class JavaCompileAction extends SpawnAction {
ImmutableList<Artifact> bootclasspathEntries,
ImmutableList<Artifact> sourcePathEntries,
ImmutableList<Artifact> extdirInputs,
- List<Artifact> processorPath,
+ NestedSet<Artifact> processorPath,
List<String> processorNames,
List<String> processorFlags,
Collection<Artifact> sourceJars,
- Collection<Artifact> sourceFiles,
+ ImmutableSet<Artifact> sourceFiles,
List<String> javacOpts,
NestedSet<Artifact> directJars,
Map<String, String> executionInfo,
StrictDepsMode strictJavaDeps,
- Collection<Artifact> compileTimeDependencyArtifacts,
+ NestedSet<Artifact> compileTimeDependencyArtifacts,
String progressMessage) {
super(
owner,
@@ -222,22 +216,20 @@ public final class JavaCompileAction extends SpawnAction {
this.bootclasspathEntries = ImmutableList.copyOf(bootclasspathEntries);
this.sourcePathEntries = ImmutableList.copyOf(sourcePathEntries);
this.extdirInputs = extdirInputs;
- this.processorPath = ImmutableList.copyOf(processorPath);
+ this.processorPath = processorPath;
this.processorNames = ImmutableList.copyOf(processorNames);
this.processorFlags = ImmutableList.copyOf(processorFlags);
this.sourceJars = ImmutableList.copyOf(sourceJars);
- this.sourceFiles = ImmutableList.copyOf(sourceFiles);
+ this.sourceFiles = sourceFiles;
this.javacOpts = ImmutableList.copyOf(javacOpts);
this.directJars = checkNotNull(directJars, "directJars must not be null");
this.strictJavaDeps = strictJavaDeps;
- this.compileTimeDependencyArtifacts = ImmutableList.copyOf(compileTimeDependencyArtifacts);
+ this.compileTimeDependencyArtifacts = compileTimeDependencyArtifacts;
}
- /**
- * Returns the given (passed to constructor) source files.
- */
+ /** Returns the given (passed to constructor) source files. */
@VisibleForTesting
- Collection<Artifact> getSourceFiles() {
+ ImmutableSet<Artifact> getSourceFiles() {
return sourceFiles;
}
@@ -277,11 +269,9 @@ public final class JavaCompileAction extends SpawnAction {
return sourceJars;
}
- /**
- * Returns the list of paths that represents the processor path.
- */
+ /** Returns the list of paths that represents the processor path. */
@VisibleForTesting
- public List<Artifact> getProcessorpath() {
+ public NestedSet<Artifact> getProcessorpath() {
return processorPath;
}
@@ -296,7 +286,7 @@ public final class JavaCompileAction extends SpawnAction {
}
@VisibleForTesting
- public Collection<Artifact> getCompileTimeDependencyArtifacts() {
+ public NestedSet<Artifact> getCompileTimeDependencyArtifacts() {
return compileTimeDependencyArtifacts;
}
@@ -506,12 +496,13 @@ public final class JavaCompileAction extends SpawnAction {
private Collection<Artifact> additionalOutputs;
private Artifact paramFile;
private Artifact metadata;
- private final Collection<Artifact> sourceFiles = new ArrayList<>();
+ private ImmutableSet<Artifact> sourceFiles = ImmutableSet.of();
private final Collection<Artifact> sourceJars = new ArrayList<>();
private BuildConfiguration.StrictDepsMode strictJavaDeps =
BuildConfiguration.StrictDepsMode.OFF;
private NestedSet<Artifact> directJars = NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER);
- private final Collection<Artifact> compileTimeDependencyArtifacts = new ArrayList<>();
+ private NestedSet<Artifact> compileTimeDependencyArtifacts =
+ NestedSetBuilder.emptySet(Order.STABLE_ORDER);
private List<String> javacOpts = new ArrayList<>();
private ImmutableList<String> javacJvmOpts = ImmutableList.of();
private ImmutableMap<String, String> executionInfo = ImmutableMap.of();
@@ -527,7 +518,7 @@ public final class JavaCompileAction extends SpawnAction {
private PathFragment sourceGenDirectory;
private PathFragment tempDirectory;
private PathFragment classDirectory;
- private final List<Artifact> processorPath = new ArrayList<>();
+ private NestedSet<Artifact> processorPath = NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER);
private final List<String> processorNames = new ArrayList<>();
private final List<String> processorFlags = new ArrayList<>();
private String ruleKind;
@@ -574,13 +565,13 @@ public final class JavaCompileAction extends SpawnAction {
// dependencyArtifacts are ignored
if (strictJavaDeps == BuildConfiguration.StrictDepsMode.OFF) {
directJars = NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER);
- compileTimeDependencyArtifacts.clear();
+ compileTimeDependencyArtifacts = NestedSetBuilder.emptySet(Order.STABLE_ORDER);
}
// Invariant: if java_classpath is set to 'off', dependencyArtifacts are ignored
JavaConfiguration javaConfiguration = configuration.getFragment(JavaConfiguration.class);
if (javaConfiguration.getReduceJavaClasspath() == JavaClasspathMode.OFF) {
- compileTimeDependencyArtifacts.clear();
+ compileTimeDependencyArtifacts = NestedSetBuilder.emptySet(Order.STABLE_ORDER);
}
if (paramFile == null) {
@@ -636,8 +627,8 @@ public final class JavaCompileAction extends SpawnAction {
NestedSet<Artifact> inputs =
NestedSetBuilder.<Artifact>stableOrder()
.addTransitive(classpathEntries)
- .addAll(compileTimeDependencyArtifacts)
- .addAll(processorPath)
+ .addTransitive(compileTimeDependencyArtifacts)
+ .addTransitive(processorPath)
.addAll(sourceJars)
.addAll(sourceFiles)
.addAll(javabaseInputs)
@@ -713,10 +704,7 @@ public final class JavaCompileAction extends SpawnAction {
result.addJoinExecPaths("--sourcepath", pathSeparator, sourcePathEntries);
}
if (!processorPath.isEmpty()) {
- ImmutableList.Builder<String> execPathStrings = ImmutableList.<String>builder();
- execPathStrings.addAll(Artifact.toExecPaths(processorPath));
- result.addJoinStrings(
- "--processorpath", pathSeparator, execPathStrings.build());
+ result.addJoinExecPaths("--processorpath", pathSeparator, processorPath);
}
if (!processorNames.isEmpty()) {
result.add("--processors", processorNames);
@@ -858,13 +846,8 @@ public final class JavaCompileAction extends SpawnAction {
return this;
}
- public Builder addSourceFile(Artifact sourceFile) {
- sourceFiles.add(sourceFile);
- return this;
- }
-
- public Builder addSourceFiles(Collection<Artifact> sourceFiles) {
- this.sourceFiles.addAll(sourceFiles);
+ public Builder setSourceFiles(ImmutableSet<Artifact> sourceFiles) {
+ this.sourceFiles = sourceFiles;
return this;
}
@@ -888,8 +871,9 @@ public final class JavaCompileAction extends SpawnAction {
return this;
}
- public Builder addCompileTimeDependencyArtifacts(Collection<Artifact> dependencyArtifacts) {
- this.compileTimeDependencyArtifacts.addAll(dependencyArtifacts);
+ public Builder setCompileTimeDependencyArtifacts(NestedSet<Artifact> dependencyArtifacts) {
+ checkNotNull(compileTimeDependencyArtifacts, "dependencyArtifacts must not be null");
+ this.compileTimeDependencyArtifacts = dependencyArtifacts;
return this;
}
@@ -951,8 +935,8 @@ public final class JavaCompileAction extends SpawnAction {
return this;
}
- public Builder addProcessorPaths(Collection<Artifact> processorPaths) {
- this.processorPath.addAll(processorPaths);
+ public Builder setProcessorPaths(NestedSet<Artifact> processorPaths) {
+ this.processorPath = processorPaths;
return this;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaGenJarsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaGenJarsProvider.java
index 6ee4702bc1..2de5e1e3ab 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaGenJarsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaGenJarsProvider.java
@@ -39,7 +39,7 @@ public final class JavaGenJarsProvider implements TransitiveInfoProvider {
@Nullable
private final Artifact genSourceJar;
- private final ImmutableList<Artifact> processorClasspath;
+ private final NestedSet<Artifact> processorClasspath;
private final ImmutableList<String> processorClassNames;
private final NestedSet<Artifact> transitiveGenClassJars;
@@ -49,7 +49,8 @@ public final class JavaGenJarsProvider implements TransitiveInfoProvider {
boolean usesAnnotationProcessing,
@Nullable Artifact genClassJar,
@Nullable Artifact genSourceJar,
- ImmutableList<Artifact> processorClasspath, ImmutableList<String> processorClassNames,
+ NestedSet<Artifact> processorClasspath,
+ ImmutableList<String> processorClassNames,
NestedSet<Artifact> transitiveGenClassJars,
NestedSet<Artifact> transitiveGenSourceJars) {
this.usesAnnotationProcessing = usesAnnotationProcessing;
@@ -117,10 +118,9 @@ public final class JavaGenJarsProvider implements TransitiveInfoProvider {
@SkylarkCallable(
name = "processor_classpath",
structField = true,
- doc =
- "Returns a classpath of annotation processors applied to this rule."
+ doc = "Returns a classpath of annotation processors applied to this rule."
)
- public ImmutableList<Artifact> getProcessorClasspath() {
+ public NestedSet<Artifact> getProcessorClasspath() {
return processorClasspath;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java
index 3939d0e680..a4d9abd91c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java
@@ -41,6 +41,7 @@ import com.google.devtools.build.lib.analysis.actions.ParameterFileWriteAction;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.collect.ImmutableIterable;
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;
@@ -188,20 +189,22 @@ public class JavaHeaderCompileAction extends SpawnAction {
private Artifact outputJar;
@Nullable private Artifact outputDepsProto;
- private final Collection<Artifact> sourceFiles = new ArrayList<>();
+ private ImmutableSet<Artifact> sourceFiles = ImmutableSet.of();
private final Collection<Artifact> sourceJars = new ArrayList<>();
- private NestedSet<Artifact> classpathEntries
- = NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER);
- private final List<Artifact> bootclasspathEntries = new ArrayList<>();
+ private NestedSet<Artifact> classpathEntries =
+ NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER);
+ private ImmutableIterable<Artifact> bootclasspathEntries =
+ ImmutableIterable.from(ImmutableList.<Artifact>of());
@Nullable private String ruleKind;
@Nullable private Label targetLabel;
private PathFragment tempDirectory;
private BuildConfiguration.StrictDepsMode strictJavaDeps
= BuildConfiguration.StrictDepsMode.OFF;
private NestedSet<Artifact> directJars = NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER);
- private final List<Artifact> compileTimeDependencyArtifacts = new ArrayList<>();
+ private NestedSet<Artifact> compileTimeDependencyArtifacts =
+ NestedSetBuilder.emptySet(Order.STABLE_ORDER);
private ImmutableList<String> javacOpts;
- private final List<Artifact> processorPath = new ArrayList<>();
+ private NestedSet<Artifact> processorPath = NestedSetBuilder.emptySet(Order.STABLE_ORDER);
private final List<String> processorNames = new ArrayList<>();
private final List<String> processorFlags = new ArrayList<>();
@@ -226,10 +229,9 @@ public class JavaHeaderCompileAction extends SpawnAction {
}
/** Sets the .jdeps artifacts for direct dependencies. */
- public Builder addCompileTimeDependencyArtifacts(
- Collection<Artifact> dependencyArtifacts) {
+ public Builder setCompileTimeDependencyArtifacts(NestedSet<Artifact> dependencyArtifacts) {
checkNotNull(dependencyArtifacts, "dependencyArtifacts must not be null");
- this.compileTimeDependencyArtifacts.addAll(dependencyArtifacts);
+ this.compileTimeDependencyArtifacts = dependencyArtifacts;
return this;
}
@@ -247,17 +249,10 @@ public class JavaHeaderCompileAction extends SpawnAction {
return this;
}
- /** Adds a Java source file to compile. */
- public Builder addSourceFile(Artifact sourceFile) {
- checkNotNull(sourceFile, "sourceFile must not be null");
- sourceFiles.add(sourceFile);
- return this;
- }
-
/** Adds Java source files to compile. */
- public Builder addSourceFiles(Collection<Artifact> sourceFiles) {
+ public Builder setSourceFiles(ImmutableSet<Artifact> sourceFiles) {
checkNotNull(sourceFiles, "sourceFiles must not be null");
- this.sourceFiles.addAll(sourceFiles);
+ this.sourceFiles = sourceFiles;
return this;
}
@@ -276,26 +271,16 @@ public class JavaHeaderCompileAction extends SpawnAction {
}
/** Sets the compilation bootclasspath entries. */
- public Builder addAllBootclasspathEntries(
- Collection<Artifact> bootclasspathEntries) {
+ public Builder setBootclasspathEntries(ImmutableIterable<Artifact> bootclasspathEntries) {
checkNotNull(bootclasspathEntries, "bootclasspathEntries must not be null");
- this.bootclasspathEntries.addAll(bootclasspathEntries);
- return this;
- }
-
- /** Sets the compilation extclasspath entries. */
- public Builder addAllExtClasspathEntries(
- Collection<Artifact> extclasspathEntries) {
- checkNotNull(extclasspathEntries, "extclasspathEntries must not be null");
- // fold extclasspath entries into the bootclasspath; that's what javac ends up doing
- this.bootclasspathEntries.addAll(extclasspathEntries);
+ this.bootclasspathEntries = bootclasspathEntries;
return this;
}
/** Sets the annotation processors classpath entries. */
- public Builder addProcessorPaths(Collection<Artifact> processorPaths) {
+ public Builder setProcessorPaths(NestedSet<Artifact> processorPaths) {
checkNotNull(processorPaths, "processorPaths must not be null");
- this.processorPath.addAll(processorPaths);
+ this.processorPath = processorPaths;
return this;
}
@@ -375,7 +360,7 @@ public class JavaHeaderCompileAction extends SpawnAction {
// dependencyArtifacts are ignored
if (strictJavaDeps == BuildConfiguration.StrictDepsMode.OFF) {
directJars = NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER);
- compileTimeDependencyArtifacts.clear();
+ compileTimeDependencyArtifacts = NestedSetBuilder.emptySet(Order.STABLE_ORDER);
}
boolean useDirectClasspath = useDirectClasspath();
CommandLine directCommandLine =
@@ -413,8 +398,8 @@ public class JavaHeaderCompileAction extends SpawnAction {
NestedSetBuilder.<Artifact>stableOrder()
.addTransitive(directInputs)
.addTransitive(classpathEntries)
- .addAll(processorPath)
- .addAll(compileTimeDependencyArtifacts)
+ .addTransitive(processorPath)
+ .addTransitive(compileTimeDependencyArtifacts)
.add(paramsFile)
.build();
JavaHeaderCompileAction javaHeaderCompileAction =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSourceInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSourceInfoProvider.java
index f8a9298fbc..f0a9c094eb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSourceInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSourceInfoProvider.java
@@ -17,10 +17,12 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
+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.util.Preconditions;
import com.google.devtools.build.lib.vfs.PathFragment;
-
import java.util.Collection;
import java.util.Map;
@@ -35,7 +37,7 @@ public final class JavaSourceInfoProvider implements TransitiveInfoProvider {
private final Collection<Artifact> sourceJarsForJarFiles;
private final Map<PathFragment, Artifact> resources;
private final Collection<String> processorNames;
- private final Collection<Artifact> processorPath;
+ private final NestedSet<Artifact> processorPath;
private JavaSourceInfoProvider(
Collection<Artifact> sourceFiles,
@@ -44,7 +46,7 @@ public final class JavaSourceInfoProvider implements TransitiveInfoProvider {
Collection<Artifact> sourceJarsForJarFiles,
Map<PathFragment, Artifact> resources,
Collection<String> processorNames,
- Collection<Artifact> processorPath) {
+ NestedSet<Artifact> processorPath) {
this.sourceFiles = sourceFiles;
this.sourceJars = sourceJars;
this.jarFiles = jarFiles;
@@ -104,7 +106,7 @@ public final class JavaSourceInfoProvider implements TransitiveInfoProvider {
}
/** Gets the classpath for the annotation processors which operate on this rule's sources. */
- public Collection<Artifact> getProcessorPath() {
+ public NestedSet<Artifact> getProcessorPath() {
return processorPath;
}
@@ -133,7 +135,7 @@ public final class JavaSourceInfoProvider implements TransitiveInfoProvider {
private Collection<Artifact> sourceJarsForJarFiles = ImmutableList.<Artifact>of();
private Map<PathFragment, Artifact> resources = ImmutableMap.<PathFragment, Artifact>of();
private Collection<String> processorNames = ImmutableList.<String>of();
- private Collection<Artifact> processorPath = ImmutableList.<Artifact>of();
+ private NestedSet<Artifact> processorPath = NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER);
/** Sets the source files included as part of the sources of this rule. */
public Builder setSourceFiles(Collection<Artifact> sourceFiles) {
@@ -183,8 +185,9 @@ public final class JavaSourceInfoProvider implements TransitiveInfoProvider {
}
/** Sets the classpath used by this rule for annotation processing. */
- public Builder setProcessorPath(Collection<Artifact> processorPath) {
- this.processorPath = Preconditions.checkNotNull(processorPath);
+ public Builder setProcessorPath(NestedSet<Artifact> processorPath) {
+ Preconditions.checkNotNull(processorPath);
+ this.processorPath = processorPath;
return this;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaTargetAttributes.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaTargetAttributes.java
index dc6187d2d4..0f2ec192cd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaTargetAttributes.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaTargetAttributes.java
@@ -58,7 +58,6 @@ public class JavaTargetAttributes {
// but is not sorted according to a property of the elements. Thus we are
// stuck with Set.
private final Set<Artifact> sourceFiles = new LinkedHashSet<>();
- private final Set<Artifact> compileTimeJarFiles = new LinkedHashSet<>();
private final NestedSetBuilder<Artifact> runtimeClassPath =
NestedSetBuilder.naiveLinkOrder();
@@ -70,13 +69,14 @@ public class JavaTargetAttributes {
private final List<Artifact> sourcePath = new ArrayList<>();
private final List<Artifact> nativeLibraries = new ArrayList<>();
- private final Set<Artifact> processorPath = new LinkedHashSet<>();
+ private final NestedSetBuilder<Artifact> processorPath = NestedSetBuilder.naiveLinkOrder();
// Classpath directories can't be represented as artifacts (TreeArtifact isn't appropriate
// here since all we need is a path string to apply to the command line).
private final Set<String> processorNames = new LinkedHashSet<>();
private final Set<String> processorFlags = new LinkedHashSet<>();
- private final Set<Artifact> apiGeneratingProcessorPath = new LinkedHashSet<>();
+ private final NestedSetBuilder<Artifact> apiGeneratingProcessorPath =
+ NestedSetBuilder.naiveLinkOrder();
private final Set<String> apiGeneratingProcessorNames = new LinkedHashSet<>();
private final Map<PathFragment, Artifact> resources = new LinkedHashMap<>();
@@ -92,7 +92,8 @@ public class JavaTargetAttributes {
private BuildConfiguration.StrictDepsMode strictJavaDeps =
BuildConfiguration.StrictDepsMode.OFF;
private final NestedSetBuilder<Artifact> directJars = NestedSetBuilder.naiveLinkOrder();
- private final List<Artifact> compileTimeDependencyArtifacts = new ArrayList<>();
+ private final NestedSetBuilder<Artifact> compileTimeDependencyArtifacts =
+ NestedSetBuilder.stableOrder();
private String ruleKind;
private Label targetLabel;
@@ -157,12 +158,6 @@ public class JavaTargetAttributes {
return this;
}
- public Builder addCompileTimeJarFiles(Iterable<Artifact> jars) {
- Preconditions.checkArgument(!built);
- Iterables.addAll(compileTimeJarFiles, jars);
- return this;
- }
-
public Builder addRuntimeClassPathEntry(Artifact classPathEntry) {
Preconditions.checkArgument(!built);
checkJar(classPathEntry);
@@ -255,9 +250,9 @@ public class JavaTargetAttributes {
return this;
}
- public Builder addCompileTimeDependencyArtifacts(Iterable<Artifact> dependencyArtifacts) {
+ public Builder addCompileTimeDependencyArtifacts(NestedSet<Artifact> dependencyArtifacts) {
Preconditions.checkArgument(!built);
- Iterables.addAll(this.compileTimeDependencyArtifacts, dependencyArtifacts);
+ compileTimeDependencyArtifacts.addTransitive(dependencyArtifacts);
return this;
}
@@ -325,9 +320,9 @@ public class JavaTargetAttributes {
return this;
}
- public Builder addProcessorPath(Iterable<Artifact> jars) {
+ public Builder addProcessorPath(NestedSet<Artifact> jars) {
Preconditions.checkArgument(!built);
- Iterables.addAll(processorPath, jars);
+ processorPath.addTransitive(jars);
return this;
}
@@ -337,9 +332,9 @@ public class JavaTargetAttributes {
return this;
}
- public Builder addApiGeneratingProcessorPath(Iterable<Artifact> jars) {
+ public Builder addApiGeneratingProcessorPath(NestedSet<Artifact> jars) {
Preconditions.checkArgument(!built);
- Iterables.addAll(apiGeneratingProcessorPath, jars);
+ apiGeneratingProcessorPath.addTransitive(jars);
return this;
}
@@ -368,16 +363,15 @@ public class JavaTargetAttributes {
built = true;
return new JavaTargetAttributes(
sourceFiles,
- compileTimeJarFiles,
runtimeClassPath,
compileTimeClassPath,
bootClassPath,
sourcePath,
nativeLibraries,
- processorPath,
+ processorPath.build(),
processorNames,
processorFlags,
- apiGeneratingProcessorPath,
+ apiGeneratingProcessorPath.build(),
apiGeneratingProcessorNames,
resources,
resourceJars.build(),
@@ -386,7 +380,7 @@ public class JavaTargetAttributes {
classPathResources,
additionalOutputs,
directJars.build(),
- compileTimeDependencyArtifacts,
+ compileTimeDependencyArtifacts.build(),
ruleKind,
targetLabel,
excludedArtifacts,
@@ -432,7 +426,6 @@ public class JavaTargetAttributes {
//
private final ImmutableSet<Artifact> sourceFiles;
- private final ImmutableSet<Artifact> compileTimeJarFiles;
private final NestedSet<Artifact> runtimeClassPath;
private final NestedSet<Artifact> compileTimeClassPath;
@@ -441,11 +434,11 @@ public class JavaTargetAttributes {
private final ImmutableList<Artifact> sourcePath;
private final ImmutableList<Artifact> nativeLibraries;
- private final ImmutableSet<Artifact> processorPath;
+ private final NestedSet<Artifact> processorPath;
private final ImmutableSet<String> processorNames;
private final ImmutableSet<String> processorFlags;
- private final ImmutableSet<Artifact> apiGeneratingProcessorPath;
+ private final NestedSet<Artifact> apiGeneratingProcessorPath;
private final ImmutableSet<String> apiGeneratingProcessorNames;
private final ImmutableMap<PathFragment, Artifact> resources;
@@ -459,7 +452,7 @@ public class JavaTargetAttributes {
private final ImmutableSet<Artifact> additionalOutputs;
private final NestedSet<Artifact> directJars;
- private final ImmutableList<Artifact> compileTimeDependencyArtifacts;
+ private final NestedSet<Artifact> compileTimeDependencyArtifacts;
private final String ruleKind;
private final Label targetLabel;
@@ -469,16 +462,15 @@ public class JavaTargetAttributes {
/** Constructor of JavaTargetAttributes. */
private JavaTargetAttributes(
Set<Artifact> sourceFiles,
- Set<Artifact> compileTimeJarFiles,
NestedSetBuilder<Artifact> runtimeClassPath,
NestedSetBuilder<Artifact> compileTimeClassPath,
List<Artifact> bootClassPath,
List<Artifact> sourcePath,
List<Artifact> nativeLibraries,
- Set<Artifact> processorPath,
+ NestedSet<Artifact> processorPath,
Set<String> processorNames,
Set<String> processorFlags,
- Set<Artifact> apiGeneratingProcessorPath,
+ NestedSet<Artifact> apiGeneratingProcessorPath,
Set<String> apiGeneratingProcessorNames,
Map<PathFragment, Artifact> resources,
NestedSet<Artifact> resourceJars,
@@ -487,13 +479,12 @@ public class JavaTargetAttributes {
List<Artifact> classPathResources,
Set<Artifact> additionalOutputs,
NestedSet<Artifact> directJars,
- List<Artifact> compileTimeDependencyArtifacts,
+ NestedSet<Artifact> compileTimeDependencyArtifacts,
String ruleKind,
Label targetLabel,
NestedSetBuilder<Artifact> excludedArtifacts,
BuildConfiguration.StrictDepsMode strictJavaDeps) {
this.sourceFiles = ImmutableSet.copyOf(sourceFiles);
- this.compileTimeJarFiles = ImmutableSet.copyOf(compileTimeJarFiles);
this.runtimeClassPath = runtimeClassPath.build();
this.directJars = directJars;
this.compileTimeClassPath =
@@ -504,10 +495,10 @@ public class JavaTargetAttributes {
this.bootClassPath = ImmutableList.copyOf(bootClassPath);
this.sourcePath = ImmutableList.copyOf(sourcePath);
this.nativeLibraries = ImmutableList.copyOf(nativeLibraries);
- this.processorPath = ImmutableSet.copyOf(processorPath);
+ this.processorPath = processorPath;
this.processorNames = ImmutableSet.copyOf(processorNames);
this.processorFlags = ImmutableSet.copyOf(processorFlags);
- this.apiGeneratingProcessorPath = ImmutableSet.copyOf(apiGeneratingProcessorPath);
+ this.apiGeneratingProcessorPath = apiGeneratingProcessorPath;
this.apiGeneratingProcessorNames = ImmutableSet.copyOf(apiGeneratingProcessorNames);
this.resources = ImmutableMap.copyOf(resources);
this.resourceJars = resourceJars;
@@ -515,7 +506,7 @@ public class JavaTargetAttributes {
this.sourceJars = ImmutableList.copyOf(sourceJars);
this.classPathResources = ImmutableList.copyOf(classPathResources);
this.additionalOutputs = ImmutableSet.copyOf(additionalOutputs);
- this.compileTimeDependencyArtifacts = ImmutableList.copyOf(compileTimeDependencyArtifacts);
+ this.compileTimeDependencyArtifacts = compileTimeDependencyArtifacts;
this.ruleKind = ruleKind;
this.targetLabel = targetLabel;
this.excludedArtifacts = excludedArtifacts.build();
@@ -526,7 +517,7 @@ public class JavaTargetAttributes {
return directJars;
}
- public List<Artifact> getCompileTimeDependencyArtifacts() {
+ public NestedSet<Artifact> getCompileTimeDependencyArtifacts() {
return compileTimeDependencyArtifacts;
}
@@ -596,11 +587,11 @@ public class JavaTargetAttributes {
return sourcePath;
}
- public ImmutableSet<Artifact> getProcessorPath() {
+ public NestedSet<Artifact> getProcessorPath() {
return processorPath;
}
- public Collection<Artifact> getApiGeneratingProcessorPath() {
+ public NestedSet<Artifact> getApiGeneratingProcessorPath() {
return apiGeneratingProcessorPath;
}
@@ -608,14 +599,10 @@ public class JavaTargetAttributes {
return apiGeneratingProcessorNames;
}
- public Set<Artifact> getSourceFiles() {
+ public ImmutableSet<Artifact> getSourceFiles() {
return sourceFiles;
}
- public Set<Artifact> getCompileTimeJarFiles() {
- return compileTimeJarFiles;
- }
-
public List<Artifact> getNativeLibraries() {
return nativeLibraries;
}