diff options
author | 2017-04-10 18:51:09 +0000 | |
---|---|---|
committer | 2017-04-11 10:50:14 +0200 | |
commit | 3c4b4e34413e47e9cab143f09a20c0dbf015c2b2 (patch) | |
tree | 18f2e23633e4b01fc9df9573e9f59f900a95fb3b /src/main | |
parent | a704e0bdea8877ce0c4e65400d14418153507407 (diff) |
Avoid copying existing immutable collections
PiperOrigin-RevId: 152714468
Diffstat (limited to 'src/main')
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; } |