diff options
author | 2017-07-21 21:27:26 +0200 | |
---|---|---|
committer | 2017-07-24 09:51:15 +0200 | |
commit | 7d0200703cfa207d6577d84bee45ca185d240dfa (patch) | |
tree | c339857f0294f9cc4647cb0363b427efb3b9fbcd /src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java | |
parent | f062c71fe31a814fd7f794260d2d30b4575bbade (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.java | 40 |
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( |