aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-01-09 15:32:16 +0000
committerGravatar Marcel Hlopko <hlopko@google.com>2017-01-10 10:20:33 +0000
commit63ce8f26f1bab520bbb882d227005fa07c7858d3 (patch)
treeb6877bd096f0bf2937b51c2470b66769e8dd7148 /src/main/java/com/google
parent33715f2a83273b1db52dc80eb1cc27dbc945a3e3 (diff)
Advertise java Skylark provider from java proto aspects.
The skylark provider is bound as "proto_java" to avoid collisions with the base, which is called "java". -- PiperOrigin-RevId: 143960605 MOS_MIGRATED_REVID=143960605
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiProvider.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java45
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java52
4 files changed, 71 insertions, 34 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
index ff90a87a64..8339c8a9c5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
@@ -178,6 +178,12 @@ public final class ConfiguredAspect implements Iterable<TransitiveInfoProvider>
return this;
}
+ public Builder addSkylarkTransitiveInfo(String name, Object value) {
+ SkylarkProviderValidationUtil.checkSkylarkObjectSafe(value);
+ skylarkProviderBuilder.put(name, value);
+ return this;
+ }
+
public Builder addSkylarkTransitiveInfo(String name, Object value, Location loc)
throws EvalException {
SkylarkProviderValidationUtil.validateAndThrowEvalException(name, value, loc);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiProvider.java
index 1292ac065a..591057e4ac 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiProvider.java
@@ -42,6 +42,8 @@ import javax.annotation.Nullable;
public final class JavaSkylarkApiProvider extends SkylarkApiProvider {
/** The name of the field in Skylark used to access this class. */
public static final String NAME = "java";
+ /** The name of the field in Skylark proto aspects used to access this class. */
+ public static final String PROTO_NAME = "proto_java";
private final JavaRuleOutputJarsProvider ruleOutputJarsProvider;
@Nullable private final JavaSourceJarsProvider sourceJarsProvider;
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 3082275721..477f624c6f 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
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.rules.java.proto;
import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterables.getOnlyElement;
import static com.google.common.collect.Iterables.transform;
import static com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode.TARGET;
import static com.google.devtools.build.lib.cmdline.Label.parseAbsoluteUnchecked;
@@ -33,7 +34,6 @@ import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap;
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.cmdline.Label;
@@ -51,7 +51,9 @@ import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider;
import com.google.devtools.build.lib.rules.java.JavaCompilationHelper;
import com.google.devtools.build.lib.rules.java.JavaConfiguration;
import com.google.devtools.build.lib.rules.java.JavaLibraryHelper;
+import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
import com.google.devtools.build.lib.rules.java.JavaSemantics;
+import com.google.devtools.build.lib.rules.java.JavaSkylarkApiProvider;
import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider;
import com.google.devtools.build.lib.rules.proto.ProtoCompileActionBuilder;
import com.google.devtools.build.lib.rules.proto.ProtoConfiguration;
@@ -102,7 +104,8 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured
SupportData supportData =
checkNotNull(base.getProvider(ProtoSupportDataProvider.class)).getSupportData();
- aspect.addProviders(new Impl(ruleContext, supportData, javaSemantics).createProviders());
+ Impl impl = new Impl(ruleContext, supportData, javaSemantics);
+ impl.addProviders(aspect);
return aspect.build();
}
@@ -162,9 +165,7 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured
GET_PROVIDER));
}
- TransitiveInfoProviderMap createProviders() {
- TransitiveInfoProviderMap.Builder result = TransitiveInfoProviderMap.builder();
-
+ void addProviders(ConfiguredAspect.Builder aspect) {
// Represents the result of compiling the code generated for this proto, including all of its
// dependencies.
JavaCompilationArgsProvider generatedCompilationArgsProvider;
@@ -175,6 +176,8 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured
NestedSetBuilder.fromNestedSets(
transform(getDeps(JavaProtoLibraryTransitiveFilesToBuildProvider.class), GET_JARS));
+ JavaSkylarkApiProvider.Builder skylarkApiProvider = JavaSkylarkApiProvider.builder();
+
if (supportData.hasProtoSources()) {
Artifact sourceJar = getSourceJarArtifact();
createProtoCompileAction(sourceJar);
@@ -186,21 +189,37 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured
NestedSetBuilder.<Artifact>stableOrder().add(sourceJar).build();
transitiveOutputJars.add(outputJar);
- result.add(
- new JavaSourceJarsAspectProvider(
- JavaSourceJarsProvider.create(
- NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), javaSourceJars)));
+ Artifact compileTimeJar =
+ getOnlyElement(
+ generatedCompilationArgsProvider.getJavaCompilationArgs().getCompileTimeJars());
+ // TODO(carmi): Expose to native rules
+ JavaRuleOutputJarsProvider ruleOutputJarsProvider =
+ JavaRuleOutputJarsProvider.builder()
+ .addOutputJar(outputJar, compileTimeJar, sourceJar)
+ .build();
+ JavaSourceJarsProvider sourceJarsProvider =
+ JavaSourceJarsProvider.create(
+ NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), javaSourceJars);
+
+ skylarkApiProvider
+ .setRuleOutputJarsProvider(ruleOutputJarsProvider)
+ .setSourceJarsProvider(sourceJarsProvider);
+
+ aspect.addProvider(new JavaSourceJarsAspectProvider(sourceJarsProvider));
} else {
// No sources - this proto_library is an alias library, which exports its dependencies.
// Simply propagate the compilation-args from its dependencies.
generatedCompilationArgsProvider = dependencyCompilationArgs;
+ skylarkApiProvider.setRuleOutputJarsProvider(JavaRuleOutputJarsProvider.builder().build());
}
- return result
- .add(
+ skylarkApiProvider.setCompilationArgsProvider(generatedCompilationArgsProvider);
+
+ aspect
+ .addSkylarkTransitiveInfo(JavaSkylarkApiProvider.PROTO_NAME, skylarkApiProvider.build())
+ .addProviders(
new JavaProtoLibraryTransitiveFilesToBuildProvider(transitiveOutputJars.build()),
- new JavaCompilationArgsAspectProvider(generatedCompilationArgsProvider))
- .build();
+ new JavaCompilationArgsAspectProvider(generatedCompilationArgsProvider));
}
private void createProtoCompileAction(Artifact sourceJar) {
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 164b582c0d..ba87bc326b 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
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.rules.java.proto;
import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterables.getOnlyElement;
import static com.google.common.collect.Iterables.transform;
import static com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode.TARGET;
import static com.google.devtools.build.lib.cmdline.Label.parseAbsoluteUnchecked;
@@ -33,7 +34,6 @@ import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap;
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.cmdline.Label;
@@ -50,7 +50,9 @@ import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider;
import com.google.devtools.build.lib.rules.java.JavaCompilationHelper;
import com.google.devtools.build.lib.rules.java.JavaConfiguration;
import com.google.devtools.build.lib.rules.java.JavaLibraryHelper;
+import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
import com.google.devtools.build.lib.rules.java.JavaSemantics;
+import com.google.devtools.build.lib.rules.java.JavaSkylarkApiProvider;
import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider;
import com.google.devtools.build.lib.rules.proto.ProtoCompileActionBuilder;
import com.google.devtools.build.lib.rules.proto.ProtoCompileActionBuilder.ToolchainInvocation;
@@ -110,15 +112,8 @@ public class JavaProtoAspect extends NativeAspectClass implements ConfiguredAspe
SupportData supportData =
checkNotNull(base.getProvider(ProtoSupportDataProvider.class)).getSupportData();
- aspect.addProviders(
- new Impl(
- ruleContext,
- supportData,
- javaSemantics,
- rpcSupport
- )
- .createProviders());
-
+ Impl impl = new Impl(ruleContext, supportData, javaSemantics, rpcSupport);
+ impl.addProviders(aspect);
return aspect.build();
}
@@ -183,9 +178,7 @@ public class JavaProtoAspect extends NativeAspectClass implements ConfiguredAspe
GET_PROVIDER));
}
- TransitiveInfoProviderMap createProviders() {
- TransitiveInfoProviderMap.Builder result = TransitiveInfoProviderMap.builder();
-
+ void addProviders(ConfiguredAspect.Builder aspect) {
// Represents the result of compiling the code generated for this proto, including all of its
// dependencies.
JavaCompilationArgsProvider generatedCompilationArgsProvider;
@@ -196,6 +189,8 @@ public class JavaProtoAspect extends NativeAspectClass implements ConfiguredAspe
NestedSetBuilder.fromNestedSets(
transform(getDeps(JavaProtoLibraryTransitiveFilesToBuildProvider.class), GET_JARS));
+ JavaSkylarkApiProvider.Builder skylarkApiProvider = JavaSkylarkApiProvider.builder();
+
if (shouldGenerateCode()) {
Artifact sourceJar = getSourceJarArtifact();
createProtoCompileAction(sourceJar);
@@ -207,21 +202,36 @@ public class JavaProtoAspect extends NativeAspectClass implements ConfiguredAspe
NestedSetBuilder.<Artifact>stableOrder().add(sourceJar).build();
transitiveOutputJars.add(outputJar);
- result.add(
- new JavaSourceJarsAspectProvider(
- JavaSourceJarsProvider.create(
- NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), javaSourceJars)));
+ Artifact compileTimeJar =
+ getOnlyElement(
+ generatedCompilationArgsProvider.getJavaCompilationArgs().getCompileTimeJars());
+ // TODO(carmi): Expose to native rules
+ JavaRuleOutputJarsProvider ruleOutputJarsProvider =
+ JavaRuleOutputJarsProvider.builder()
+ .addOutputJar(outputJar, compileTimeJar, sourceJar)
+ .build();
+ JavaSourceJarsProvider sourceJarsProvider =
+ JavaSourceJarsProvider.create(
+ NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER), javaSourceJars);
+
+ skylarkApiProvider
+ .setRuleOutputJarsProvider(ruleOutputJarsProvider)
+ .setSourceJarsProvider(sourceJarsProvider);
+
+ aspect.addProvider(new JavaSourceJarsAspectProvider(sourceJarsProvider));
} else {
// No sources - this proto_library is an alias library, which exports its dependencies.
// Simply propagate the compilation-args from its dependencies.
generatedCompilationArgsProvider = dependencyCompilationArgs;
+ skylarkApiProvider.setRuleOutputJarsProvider(JavaRuleOutputJarsProvider.builder().build());
}
- return result
- .add(
+ skylarkApiProvider.setCompilationArgsProvider(generatedCompilationArgsProvider);
+ aspect
+ .addSkylarkTransitiveInfo(JavaSkylarkApiProvider.PROTO_NAME, skylarkApiProvider.build())
+ .addProviders(
new JavaProtoLibraryTransitiveFilesToBuildProvider(transitiveOutputJars.build()),
- new JavaCompilationArgsAspectProvider(generatedCompilationArgsProvider))
- .build();
+ new JavaCompilationArgsAspectProvider(generatedCompilationArgsProvider));
}
/**