aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar Irina Iancu <elenairina@google.com>2017-03-08 08:00:09 +0000
committerGravatar Vladimir Moskva <vladmos@google.com>2017-03-08 10:51:28 +0000
commitef651712e9bee512967d8ec6ac6d63fda41addab (patch)
treeb81b798c476181aa3a7ce826fae9960cf8fde6bc /src/main/java/com/google/devtools/build/lib
parent4950111c591f5d7352c83898e35a5f18ff92a0cc (diff)
Add a source_jars variable to OutputJar.
Having a correlation between an output jar and a source jar is not enough. There may be situations when an output jar is generated from more source jars, not just one. We need this flexibility especially in Skylark for the java sandwich, when the user can compile multiple source jars. -- PiperOrigin-RevId: 149510534 MOS_MIGRATED_REVID=149510534
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(