diff options
10 files changed, 93 insertions, 89 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java index 13bad6c251..c12804f3d2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java @@ -734,7 +734,7 @@ public class AndroidCommon { apksUnderTest)) .add( JavaCompilationArgsProvider.class, - new JavaCompilationArgsProvider( + JavaCompilationArgsProvider.create( javaCompilationArgs, recursiveJavaCompilationArgs, compileTimeDependencyArtifacts, @@ -849,7 +849,7 @@ public class AndroidCommon { public Artifact getResourceClassJar() { return resourceClassJar; } - + /** * Returns Jars produced by this rule that may go into the runtime classpath. By contrast * {@link #getRuntimeJars()} returns the complete runtime classpath needed by this rule, including @@ -876,7 +876,7 @@ public class AndroidCommon { } public JavaSourceJarsProvider getJavaSourceJarsProvider() { - return new JavaSourceJarsProvider(getTransitiveSourceJars(), getTopLevelSourceJars()); + return JavaSourceJarsProvider.create(getTransitiveSourceJars(), getTopLevelSourceJars()); } public boolean isNeverLink() { diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java index d476e9d46f..7f6ba892e4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java @@ -337,10 +337,12 @@ public class JavaBinary implements RuleConfiguredTargetFactory { return builder .setFilesToBuild(filesToBuild) - .add(JavaRuleOutputJarsProvider.class, JavaRuleOutputJarsProvider.builder() - .addOutputJar(classJar, null /* iJar */, srcJar) - .setJdeps(outputDepsProto) - .build()) + .add( + JavaRuleOutputJarsProvider.class, + JavaRuleOutputJarsProvider.builder() + .addOutputJar(classJar, null /* iJar */, srcJar) + .setJdeps(outputDepsProto) + .build()) .add(RunfilesProvider.class, runfilesProvider) .setRunfilesSupport(runfilesSupport, executable) .add( @@ -350,7 +352,8 @@ public class JavaBinary implements RuleConfiguredTargetFactory { JavaSourceInfoProvider.class, JavaSourceInfoProvider.fromJavaTargetAttributes(attributes, semantics)) .add( - JavaSourceJarsProvider.class, new JavaSourceJarsProvider(transitiveSourceJars, srcJars)) + JavaSourceJarsProvider.class, + JavaSourceJarsProvider.create(transitiveSourceJars, srcJars)) .addOutputGroup(JavaSemantics.SOURCE_JARS_OUTPUT_GROUP, transitiveSourceJars) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationArgsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationArgsProvider.java index ca8b241b6e..837a270172 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationArgsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationArgsProvider.java @@ -14,6 +14,7 @@ package com.google.devtools.build.lib.rules.java; +import com.google.auto.value.AutoValue; 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; @@ -25,29 +26,30 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; * An interface for objects that provide information on how to include them in * Java builds. */ +@AutoValue @Immutable -public final class JavaCompilationArgsProvider implements TransitiveInfoProvider { - private final JavaCompilationArgs javaCompilationArgs; - private final JavaCompilationArgs recursiveJavaCompilationArgs; - private final NestedSet<Artifact> compileTimeJavaDepArtifacts; - private final NestedSet<Artifact> runTimeJavaDepArtifacts; +public abstract class JavaCompilationArgsProvider implements TransitiveInfoProvider { - public JavaCompilationArgsProvider(JavaCompilationArgs javaCompilationArgs, + public static JavaCompilationArgsProvider create( + JavaCompilationArgs javaCompilationArgs, JavaCompilationArgs recursiveJavaCompilationArgs, NestedSet<Artifact> compileTimeJavaDepArtifacts, NestedSet<Artifact> runTimeJavaDepArtifacts) { - this.javaCompilationArgs = javaCompilationArgs; - this.recursiveJavaCompilationArgs = recursiveJavaCompilationArgs; - this.compileTimeJavaDepArtifacts = compileTimeJavaDepArtifacts; - this.runTimeJavaDepArtifacts = runTimeJavaDepArtifacts; + return new AutoValue_JavaCompilationArgsProvider( + javaCompilationArgs, + recursiveJavaCompilationArgs, + compileTimeJavaDepArtifacts, + runTimeJavaDepArtifacts); } - public JavaCompilationArgsProvider(JavaCompilationArgs javaCompilationArgs, + public static JavaCompilationArgsProvider create( + JavaCompilationArgs javaCompilationArgs, JavaCompilationArgs recursiveJavaCompilationArgs) { - this.javaCompilationArgs = javaCompilationArgs; - this.recursiveJavaCompilationArgs = recursiveJavaCompilationArgs; - this.compileTimeJavaDepArtifacts = NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER); - this.runTimeJavaDepArtifacts = NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER); + return create( + javaCompilationArgs, + recursiveJavaCompilationArgs, + NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), + NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER)); } /** @@ -58,17 +60,13 @@ public final class JavaCompilationArgsProvider implements TransitiveInfoProvider * transitive closure. The non-recursive collection applies mainly to * compile-time jars. */ - public JavaCompilationArgs getJavaCompilationArgs() { - return javaCompilationArgs; - } + public abstract JavaCompilationArgs getJavaCompilationArgs(); /** * Returns recursively collected Java compilation information for building * this target (called when strict_java_deps = 0). */ - public JavaCompilationArgs getRecursiveJavaCompilationArgs() { - return recursiveJavaCompilationArgs; - } + public abstract JavaCompilationArgs getRecursiveJavaCompilationArgs(); /** * Returns non-recursively collected Java dependency artifacts for @@ -80,17 +78,13 @@ public final class JavaCompilationArgsProvider implements TransitiveInfoProvider * Non-strict targets such as proto_library, always collecting their * transitive closure of deps, do not need to provide dependency artifacts. */ - public NestedSet<Artifact> getCompileTimeJavaDependencyArtifacts() { - return compileTimeJavaDepArtifacts; - } + public abstract NestedSet<Artifact> getCompileTimeJavaDependencyArtifacts(); /** * Returns Java dependency artifacts for computing a restricted run-time * classpath (called when strict_java_deps = 1). */ - public NestedSet<Artifact> getRunTimeJavaDependencyArtifacts() { - return runTimeJavaDepArtifacts; - } + public abstract NestedSet<Artifact> getRunTimeJavaDependencyArtifacts(); public static JavaCompilationArgsProvider merge(Iterable<JavaCompilationArgsProvider> providers) { JavaCompilationArgs.Builder javaCompilationArgs = JavaCompilationArgs.builder(); @@ -107,7 +101,7 @@ public final class JavaCompilationArgsProvider implements TransitiveInfoProvider runTimeJavaDepArtifacts.addTransitive(provider.getRunTimeJavaDependencyArtifacts()); } - return new JavaCompilationArgsProvider( + return JavaCompilationArgsProvider.create( javaCompilationArgs.build(), recursiveJavaCompilationArgs.build(), compileTimeJavaDepArtifacts.build(), diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java index adc13e9a79..5687571745 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java @@ -156,19 +156,23 @@ public class JavaImport implements RuleConfiguredTargetFactory { return ruleBuilder .setFilesToBuild(filesToBuild) .add(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider.build()) - .add(JavaRuntimeJarProvider.class, + .add( + JavaRuntimeJarProvider.class, new JavaRuntimeJarProvider(javaArtifacts.getRuntimeJars())) .add(JavaNeverlinkInfoProvider.class, new JavaNeverlinkInfoProvider(neverLink)) .add(RunfilesProvider.class, RunfilesProvider.simple(runfiles)) .add(CcLinkParamsProvider.class, new CcLinkParamsProvider(ccLinkParamsStore)) - .add(JavaCompilationArgsProvider.class, new JavaCompilationArgsProvider( - javaCompilationArgs, recursiveJavaCompilationArgs)) - .add(JavaNativeLibraryProvider.class, new JavaNativeLibraryProvider( - transitiveJavaNativeLibraries)) + .add( + JavaCompilationArgsProvider.class, + JavaCompilationArgsProvider.create(javaCompilationArgs, recursiveJavaCompilationArgs)) + .add( + JavaNativeLibraryProvider.class, + new JavaNativeLibraryProvider(transitiveJavaNativeLibraries)) .add(CppCompilationContext.class, transitiveCppDeps) .add(JavaSourceInfoProvider.class, javaSourceInfoProvider) - .add(JavaSourceJarsProvider.class, new JavaSourceJarsProvider( - transitiveJavaSourceJars, srcJars)) + .add( + JavaSourceJarsProvider.class, + JavaSourceJarsProvider.create(transitiveJavaSourceJars, srcJars)) .add(ProguardSpecProvider.class, new ProguardSpecProvider(proguardSpecs)) .addOutputGroup(JavaSemantics.SOURCE_JARS_OUTPUT_GROUP, transitiveJavaSourceJars) .addOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL, proguardSpecs) diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java index ef0179757a..a6239ff270 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java @@ -158,8 +158,8 @@ public class JavaLibrary implements RuleConfiguredTargetFactory { new RuleConfiguredTargetBuilder(ruleContext); semantics.addProviders( - ruleContext, common, ImmutableList.<String>of(), classJar, srcJar, - genClassJar, genSourceJar, ImmutableMap.<Artifact, Artifact>of(), + ruleContext, common, ImmutableList.<String>of(), classJar, srcJar, + genClassJar, genSourceJar, ImmutableMap.<Artifact, Artifact>of(), filesBuilder, builder); NestedSet<Artifact> filesToBuild = filesBuilder.build(); @@ -169,27 +169,37 @@ public class JavaLibrary implements RuleConfiguredTargetFactory { NestedSet<Artifact> proguardSpecs = new ProguardLibrary(ruleContext).collectProguardSpecs(); builder - .add(JavaRuleOutputJarsProvider.class, JavaRuleOutputJarsProvider.builder() - .addOutputJar(classJar, iJar, srcJar) - .setJdeps(outputDepsProto) - .build()) - .add(JavaRuntimeJarProvider.class, + .add( + JavaRuleOutputJarsProvider.class, + JavaRuleOutputJarsProvider.builder() + .addOutputJar(classJar, iJar, srcJar) + .setJdeps(outputDepsProto) + .build()) + .add( + JavaRuntimeJarProvider.class, new JavaRuntimeJarProvider(javaArtifacts.getRuntimeJars())) - .add(RunfilesProvider.class, RunfilesProvider.simple(JavaCommon.getRunfiles( - ruleContext, semantics, javaArtifacts, neverLink))) + .add( + RunfilesProvider.class, + RunfilesProvider.simple( + JavaCommon.getRunfiles(ruleContext, semantics, javaArtifacts, neverLink))) .setFilesToBuild(filesToBuild) .add(JavaNeverlinkInfoProvider.class, new JavaNeverlinkInfoProvider(neverLink)) .add(CppCompilationContext.class, transitiveCppDeps) - .add(JavaCompilationArgsProvider.class, new JavaCompilationArgsProvider( - javaCompilationArgs, recursiveJavaCompilationArgs, - compileTimeJavaDepArtifacts, runTimeJavaDepArtifacts)) + .add( + JavaCompilationArgsProvider.class, + JavaCompilationArgsProvider.create( + javaCompilationArgs, recursiveJavaCompilationArgs, + compileTimeJavaDepArtifacts, runTimeJavaDepArtifacts)) .add(CcLinkParamsProvider.class, new CcLinkParamsProvider(ccLinkParamsStore)) - .add(JavaNativeLibraryProvider.class, new JavaNativeLibraryProvider( - transitiveJavaNativeLibraries)) - .add(JavaSourceInfoProvider.class, + .add( + JavaNativeLibraryProvider.class, + new JavaNativeLibraryProvider(transitiveJavaNativeLibraries)) + .add( + JavaSourceInfoProvider.class, JavaSourceInfoProvider.fromJavaTargetAttributes(attributes, semantics)) - .add(JavaSourceJarsProvider.class, new JavaSourceJarsProvider( - transitiveSourceJars, ImmutableList.of(srcJar))) + .add( + JavaSourceJarsProvider.class, + JavaSourceJarsProvider.create(transitiveSourceJars, ImmutableList.of(srcJar))) // TODO(bazel-team): this should only happen for java_plugin .add(JavaPluginInfoProvider.class, JavaCommon.getTransitivePlugins(ruleContext)) .add(ProguardSpecProvider.class, new ProguardSpecProvider(proguardSpecs)) diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java index c19fac1ae3..17c1846a97 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java @@ -181,7 +181,7 @@ public final class JavaLibraryHelper { .addTransitiveDependencies(deps, true /* recursive */) .build(); - return new JavaCompilationArgsProvider( + return JavaCompilationArgsProvider.create( isReportedAsStrict ? directArgs : transitiveArgs, transitiveArgs); } @@ -204,9 +204,10 @@ public final class JavaLibraryHelper { } private NestedSet<Artifact> getNonRecursiveCompileTimeJarsFromDeps() { - JavaCompilationArgs.Builder builder = JavaCompilationArgs.builder(); - builder.addTransitiveDependencies(deps, false); - return builder.build().getCompileTimeJars(); + return JavaCompilationArgs.builder() + .addTransitiveDependencies(deps, false) + .build() + .getCompileTimeJars(); } private boolean isStrict() { diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSourceJarsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSourceJarsProvider.java index 0f5365408d..9537899ec1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSourceJarsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSourceJarsProvider.java @@ -14,6 +14,7 @@ package com.google.devtools.build.lib.rules.java; +import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; @@ -21,35 +22,27 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -/** - * The collection of source jars from the transitive closure. - */ +/** The collection of source jars from the transitive closure. */ +@AutoValue @Immutable -public final class JavaSourceJarsProvider implements TransitiveInfoProvider { +public abstract class JavaSourceJarsProvider implements TransitiveInfoProvider { - private final NestedSet<Artifact> transitiveSourceJars; - private final ImmutableList<Artifact> sourceJars; - - public JavaSourceJarsProvider(NestedSet<Artifact> transitiveSourceJars, - Iterable<Artifact> sourceJars) { - this.transitiveSourceJars = transitiveSourceJars; - this.sourceJars = ImmutableList.copyOf(sourceJars); + public static JavaSourceJarsProvider create( + NestedSet<Artifact> transitiveSourceJars, Iterable<Artifact> sourceJars) { + return new AutoValue_JavaSourceJarsProvider( + transitiveSourceJars, ImmutableList.copyOf(sourceJars)); } + JavaSourceJarsProvider() {} + /** * Returns all the source jars in the transitive closure, that can be reached by a chain of * JavaSourceJarsProvider instances. */ - public NestedSet<Artifact> getTransitiveSourceJars() { - return transitiveSourceJars; - } + public abstract NestedSet<Artifact> getTransitiveSourceJars(); - /** - * Return the source jars that are to be built when the target is on the command line. - */ - public ImmutableList<Artifact> getSourceJars() { - return sourceJars; - } + /** Return the source jars that are to be built when the target is on the command line. */ + public abstract ImmutableList<Artifact> getSourceJars(); public static JavaSourceJarsProvider merge(Iterable<JavaSourceJarsProvider> providers) { NestedSetBuilder<Artifact> transitiveSourceJars = NestedSetBuilder.stableOrder(); @@ -59,7 +52,6 @@ public final class JavaSourceJarsProvider implements TransitiveInfoProvider { transitiveSourceJars.addTransitive(provider.getTransitiveSourceJars()); sourceJars.addAll(provider.getSourceJars()); } - return new JavaSourceJarsProvider(transitiveSourceJars.build(), sourceJars.build()); + return JavaSourceJarsProvider.create(transitiveSourceJars.build(), sourceJars.build()); } - } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java index f12cfb030b..f56a150ea8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java @@ -186,7 +186,7 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured .put( JavaSourceJarsAspectProvider.class, new JavaSourceJarsAspectProvider( - new JavaSourceJarsProvider( + JavaSourceJarsProvider.create( NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), javaSourceJars))); } else { // No sources - this proto_library is an alias library, which exports its dependencies. diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java index c27a3f0305..276743c7a1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java @@ -243,7 +243,7 @@ public class JavaProtoAspect extends NativeAspectClass implements ConfiguredAspe .put( JavaSourceJarsAspectProvider.class, new JavaSourceJarsAspectProvider( - new JavaSourceJarsProvider( + JavaSourceJarsProvider.create( NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), javaSourceJars))); } else { // No sources - this proto_library is an alias library, which exports its dependencies. diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/StrictDepsUtils.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/StrictDepsUtils.java index d184539831..889c71c9e6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/StrictDepsUtils.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/StrictDepsUtils.java @@ -59,7 +59,7 @@ public class StrictDepsUtils { directCompilationArgs .addTransitiveArgs(provider.getJavaCompilationArgs(), BOTH) .addTransitiveArgs(provider.getRecursiveJavaCompilationArgs(), BOTH); - return new JavaCompilationArgsProvider( + return JavaCompilationArgsProvider.create( directCompilationArgs.build(), provider.getRecursiveJavaCompilationArgs(), provider.getCompileTimeJavaDependencyArtifacts(), |