aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
diff options
context:
space:
mode:
authorGravatar carmi <carmi@google.com>2017-07-21 21:27:26 +0200
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-07-24 09:51:15 +0200
commit7d0200703cfa207d6577d84bee45ca185d240dfa (patch)
treec339857f0294f9cc4647cb0363b427efb3b9fbcd /src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
parentf062c71fe31a814fd7f794260d2d30b4575bbade (diff)
PiperOrigin-RevId: 162771369
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java40
1 files changed, 33 insertions, 7 deletions
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 07ddb04b5c..0083597ca8 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
@@ -16,6 +16,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;
import static com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition.HOST;
@@ -63,6 +64,7 @@ import com.google.devtools.build.lib.rules.proto.ProtoLangToolchainProvider;
import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider;
import com.google.devtools.build.lib.rules.proto.ProtoSupportDataProvider;
import com.google.devtools.build.lib.rules.proto.SupportData;
+import java.util.ArrayList;
import javax.annotation.Nullable;
/** An Aspect which JavaLiteProtoLibrary injects to build Java Lite protos. */
@@ -227,7 +229,26 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured
JavaSkylarkApiProvider.PROTO_NAME.getLegacyId(),
JavaSkylarkApiProvider.fromProviderMap(javaProviders))
.addProvider(
- new JavaProtoLibraryAspectProvider(javaProviders, transitiveOutputJars.build()));
+ new JavaProtoLibraryAspectProvider(
+ javaProviders,
+ transitiveOutputJars.build(),
+ createNonStrictCompilationArgsProvider(generatedCompilationArgsProvider)));
+ }
+
+ /**
+ * Creates a JavaCompilationArgsProvider that's used when java_lite_proto_library sets
+ * strict_deps=0. It contains the jars we produced, as well as all transitive proto jars, and
+ * the proto runtime jars, all described as direct dependencies.
+ */
+ private JavaCompilationArgsProvider createNonStrictCompilationArgsProvider(
+ JavaCompilationArgsProvider generatedCompilationArgsProvider) {
+ ArrayList<JavaCompilationArgsProvider> providers = new ArrayList<>(3);
+ providers.add(
+ JavaCompilationArgsProvider.merge(
+ transform(javaProtoLibraryAspectProviders, p -> p.getNonStrictCompArgsProvider())));
+ providers.add(generatedCompilationArgsProvider);
+ providers.addAll(getProtoRuntimeDeps());
+ return JavaCompilationArgsProvider.merge(providers);
}
private void createProtoCompileAction(Artifact sourceJar) {
@@ -252,12 +273,10 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured
.setOutput(outputJar)
.addSourceJars(sourceJar)
.setJavacOpts(ProtoJavacOpts.constructJavacOpts(ruleContext));
- helper.addDep(dependencyCompilationArgs);
- TransitiveInfoCollection runtime = getProtoToolchainProvider().runtime();
- if (runtime != null) {
- helper.addDep(runtime.getProvider(JavaCompilationArgsProvider.class));
- }
- helper.setCompilationStrictDepsMode(StrictDepsMode.OFF);
+ helper
+ .addDep(dependencyCompilationArgs)
+ .addAllDeps(getProtoRuntimeDeps())
+ .setCompilationStrictDepsMode(StrictDepsMode.OFF);
JavaCompilationArtifacts artifacts =
helper.build(
javaSemantics,
@@ -267,6 +286,13 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured
return helper.buildCompilationArgsProvider(artifacts, true /* isReportedAsStrict */);
}
+ private ImmutableList<JavaCompilationArgsProvider> getProtoRuntimeDeps() {
+ TransitiveInfoCollection runtime = getProtoToolchainProvider().runtime();
+ return runtime != null
+ ? ImmutableList.of(runtime.getProvider(JavaCompilationArgsProvider.class))
+ : ImmutableList.of();
+ }
+
private ProtoLangToolchainProvider getProtoToolchainProvider() {
return checkNotNull(
ruleContext.getPrerequisite(