diff options
Diffstat (limited to 'src/main/java/com/google/devtools')
12 files changed, 54 insertions, 21 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java index e1f31fa84f..a29dead152 100644 --- a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java +++ b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java @@ -62,6 +62,7 @@ import com.google.devtools.build.lib.rules.cpp.CppCompilationContext; import com.google.devtools.build.lib.rules.cpp.CppConfiguration; import com.google.devtools.build.lib.rules.java.JavaExportsProvider; import com.google.devtools.build.lib.rules.java.JavaGenJarsProvider; +import com.google.devtools.build.lib.rules.java.JavaProvider; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar; import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider; @@ -335,7 +336,7 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config // Java rules JavaRuleOutputJarsProvider outputJarsProvider = - base.getProvider(JavaRuleOutputJarsProvider.class); + JavaProvider.getProvider(JavaRuleOutputJarsProvider.class, base); if (outputJarsProvider != null && !androidStudioInfoSemantics.suppressJavaRuleInfo(base)) { JavaIdeInfo javaIdeInfo = makeJavaIdeInfo(base, ruleContext, outputJarsProvider, providerBuilder); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java index 256966f917..7c340694cb 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java @@ -31,6 +31,7 @@ import com.google.devtools.build.lib.rules.java.JavaCommon; import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; import com.google.devtools.build.lib.rules.java.JavaCompilationArtifacts; import com.google.devtools.build.lib.rules.java.JavaHelper; +import com.google.devtools.build.lib.rules.java.JavaProvider; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar; import com.google.devtools.build.lib.rules.java.JavaRuntimeJarProvider; @@ -121,9 +122,10 @@ public class AarImport implements RuleConfiguredTargetFactory { ruleContext.registerAction(createAarNativeLibsFilterActions(ruleContext, aar, nativeLibs)); JavaRuleOutputJarsProvider.Builder jarProviderBuilder = new JavaRuleOutputJarsProvider.Builder() - .addOutputJar(mergedJar, null, null); + .addOutputJar(mergedJar, null, ImmutableList.<Artifact>of()); for (TransitiveInfoCollection export : ruleContext.getPrerequisites("exports", Mode.TARGET)) { - for (OutputJar jar : export.getProvider(JavaRuleOutputJarsProvider.class).getOutputJars()) { + for (OutputJar jar : + JavaProvider.getProvider(JavaRuleOutputJarsProvider.class, export).getOutputJars()) { jarProviderBuilder.addOutputJar(jar); filesToBuildBuilder.add(jar.getClassJar()); } 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 d12728a79d..2ea11f5da6 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 @@ -746,13 +746,13 @@ public class AndroidCommon { } OutputJar resourceJar = null; if (resourceClassJar != null && resourceSourceJar != null) { - resourceJar = new OutputJar(resourceClassJar, null, resourceSourceJar); + resourceJar = new OutputJar(resourceClassJar, null, ImmutableList.of(resourceSourceJar)); javaRuleOutputJarsProviderBuilder.addOutputJar(resourceJar); } JavaRuleOutputJarsProvider ruleOutputJarsProvider = javaRuleOutputJarsProviderBuilder - .addOutputJar(classJar, iJar, srcJar) + .addOutputJar(classJar, iJar, ImmutableList.of(srcJar)) .setJdeps(outputDepsProto) .build(); JavaSourceJarsProvider sourceJarsProvider = javaSourceJarsProviderBuilder.build(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java index fd21c16f9d..85d24500eb 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java @@ -15,6 +15,7 @@ package com.google.devtools.build.lib.rules.android; import com.google.common.base.Function; import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.collect.nestedset.NestedSet; @@ -215,10 +216,11 @@ public class AndroidSkylarkApiProvider extends SkylarkApiProvider { return null; } + Artifact idlSourceJar = getIdeInfoProvider().getIdlSourceJar(); return new OutputJar( getIdeInfoProvider().getIdlClassJar(), null, - getIdeInfoProvider().getIdlSourceJar() + idlSourceJar == null ? ImmutableList.<Artifact>of() : ImmutableList.of(idlSourceJar) ); } } 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 03c6a594a3..0e3b27283b 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 @@ -128,7 +128,8 @@ public class JavaBinary implements RuleConfiguredTargetFactory { .addAllTransitiveSourceJars(common.collectTransitiveSourceJars(srcJar)); Artifact classJar = ruleContext.getImplicitOutputArtifact(JavaSemantics.JAVA_BINARY_CLASS_JAR); JavaRuleOutputJarsProvider.Builder ruleOutputJarsProviderBuilder = - JavaRuleOutputJarsProvider.builder().addOutputJar(classJar, null /* iJar */, srcJar); + JavaRuleOutputJarsProvider.builder().addOutputJar( + classJar, null /* iJar */, ImmutableList.of(srcJar)); CppConfiguration cppConfiguration = ruleContext.getConfiguration().getFragment( CppConfiguration.class); 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 2d31f531f0..20b6eba8ca 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 @@ -145,7 +145,7 @@ public class JavaImport implements RuleConfiguredTargetFactory { JavaRuleOutputJarsProvider.builder(); for (Artifact jar : jars) { ruleOutputJarsProviderBuilder.addOutputJar( - jar, compilationToRuntimeJarMap.inverse().get(jar), srcJar); + jar, compilationToRuntimeJarMap.inverse().get(jar), srcJars); } NestedSet<Artifact> proguardSpecs = new ProguardLibrary(ruleContext).collectProguardSpecs(); 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 b9fcd8da27..408e4c23fc 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 @@ -174,7 +174,7 @@ public class JavaLibrary implements RuleConfiguredTargetFactory { JavaRuleOutputJarsProvider ruleOutputJarsProvider = JavaRuleOutputJarsProvider.builder() - .addOutputJar(classJar, iJar, srcJar) + .addOutputJar(classJar, iJar, ImmutableList.of(srcJar)) .setJdeps(outputDepsProto) .build(); JavaCompilationArgsProvider compilationArgsProvider = diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java index d66d4404bb..e4f6c55668 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java @@ -41,7 +41,9 @@ public final class JavaProvider extends SkylarkClassObject implements Transitive ImmutableSet.of( JavaCompilationArgsProvider.class, JavaSourceJarsProvider.class, - ProtoJavaApiInfoAspectProvider.class); + ProtoJavaApiInfoAspectProvider.class, + JavaRuleOutputJarsProvider.class + ); private final TransitiveInfoProviderMap providers; @@ -77,6 +79,9 @@ public final class JavaProvider extends SkylarkClassObject implements Transitive .addProvider( ProtoJavaApiInfoAspectProvider.class, ProtoJavaApiInfoAspectProvider.merge(protoJavaApiInfoAspectProviders)) + // When a rule merges multiple JavaProviders, its purpose is to pass on information, so + // it doesn't have any output jars. + .addProvider(JavaRuleOutputJarsProvider.class, JavaRuleOutputJarsProvider.builder().build()) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java index c254f80a42..c5fc21b21e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java @@ -15,12 +15,14 @@ package com.google.devtools.build.lib.rules.java; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +import com.google.devtools.build.lib.syntax.SkylarkList; import com.google.devtools.build.lib.util.Preconditions; import javax.annotation.Nullable; @@ -46,13 +48,15 @@ public final class JavaRuleOutputJarsProvider implements TransitiveInfoProvider public static class OutputJar { @Nullable private final Artifact classJar; @Nullable private final Artifact iJar; - @Nullable private final Artifact srcJar; + @Nullable private final ImmutableList<Artifact> srcJars; public OutputJar( - @Nullable Artifact classJar, @Nullable Artifact iJar, @Nullable Artifact srcJar) { + @Nullable Artifact classJar, + @Nullable Artifact iJar, + @Nullable Iterable<Artifact> srcJars) { this.classJar = classJar; this.iJar = iJar; - this.srcJar = srcJar; + this.srcJars = ImmutableList.copyOf(srcJars); } @Nullable @@ -80,12 +84,25 @@ public final class JavaRuleOutputJarsProvider implements TransitiveInfoProvider @Nullable @SkylarkCallable( name = "source_jar", - doc = "A sources archive file.", + doc = "A sources archive file. Deprecated. Kept for migration reasons. " + + "Please use source_jars instead.", allowReturnNones = true, structField = true ) + @Deprecated public Artifact getSrcJar() { - return srcJar; + return Iterables.getOnlyElement(srcJars, null); + } + + @Nullable + @SkylarkCallable( + name = "source_jars", + doc = "A list of sources archive files.", + allowReturnNones = true, + structField = true + ) + public SkylarkList<Artifact> getSrcJars() { + return SkylarkList.createImmutable(srcJars); } } @@ -128,9 +145,9 @@ public final class JavaRuleOutputJarsProvider implements TransitiveInfoProvider public Builder addOutputJar( @Nullable Artifact classJar, @Nullable Artifact iJar, - @Nullable Artifact sourceJar) { - Preconditions.checkState(classJar != null || iJar != null || sourceJar != null); - outputJars.add(new OutputJar(classJar, iJar, sourceJar)); + @Nullable ImmutableList<Artifact> sourceJars) { + Preconditions.checkState(classJar != null || iJar != null || !sourceJars.isEmpty()); + outputJars.add(new OutputJar(classJar, iJar, sourceJars)); return this; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java index c7b413437c..f8c37f143b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java @@ -133,7 +133,7 @@ public class JavaSkylarkCommon { MiddlemanProvider hostJavabaseProvider = hostJavabase.getProvider(MiddlemanProvider.class); NestedSet<Artifact> hostJavabaseArtifacts = - hostJavabase == null + hostJavabaseProvider == null ? NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER) : hostJavabaseProvider.getMiddlemanArtifact(); JavaToolchainProvider javaToolchainProvider = @@ -144,11 +144,16 @@ public class JavaSkylarkCommon { javaToolchainProvider, hostJavabaseArtifacts, SkylarkList.createImmutable(ImmutableList.<Artifact>of())); + JavaRuleOutputJarsProvider javaRuleOutputJarsProvider = + JavaRuleOutputJarsProvider.builder().addOutputJar( + new JavaRuleOutputJarsProvider.OutputJar(outputJar, /* ijar */ null, sourceJars)) + .build(); return JavaProvider.Builder.create() .addProvider( JavaCompilationArgsProvider.class, helper.buildCompilationArgsProvider(artifacts, true)) .addProvider(JavaSourceJarsProvider.class, createJavaSourceJarsProvider(sourceJars)) + .addProvider(JavaRuleOutputJarsProvider.class, javaRuleOutputJarsProvider) .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 9eef47a53c..967756c490 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 @@ -199,7 +199,7 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured // TODO(carmi): Expose to native rules JavaRuleOutputJarsProvider ruleOutputJarsProvider = JavaRuleOutputJarsProvider.builder() - .addOutputJar(outputJar, compileTimeJar, sourceJar) + .addOutputJar(outputJar, compileTimeJar, ImmutableList.of(sourceJar)) .build(); JavaSourceJarsProvider sourceJarsProvider = JavaSourceJarsProvider.create( 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 e702f27fc9..e2ba1bd868 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 @@ -212,7 +212,7 @@ public class JavaProtoAspect extends NativeAspectClass implements ConfiguredAspe // TODO(carmi): Expose to native rules JavaRuleOutputJarsProvider ruleOutputJarsProvider = JavaRuleOutputJarsProvider.builder() - .addOutputJar(outputJar, compileTimeJar, sourceJar) + .addOutputJar(outputJar, compileTimeJar, ImmutableList.of(sourceJar)) .build(); JavaSourceJarsProvider sourceJarsProvider = JavaSourceJarsProvider.create( |