aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java33
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java2
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(