aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Alex Humesky <ahumesky@google.com>2015-10-19 20:09:40 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2015-10-20 16:36:15 +0000
commit49ceb1b6c3d57af1dea95af999f963501efd3668 (patch)
treea87f498b8491672bb83f74ec75c22988f4412d3e /src
parent98ea68a20ddd58f1ee4bb67410484a1c8794556a (diff)
Also forward the exported_plugins of the rules in the deps of an
android_library rule when the android_library is being used as a forwarding rule (i.e., has no sources). RELNOTES: When used as a forwarding rule (i.e., has no sources), android_library will also forward any exported_plugins in its dependencies. -- MOS_MIGRATED_REVID=105787789
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginInfoProvider.java20
4 files changed, 37 insertions, 17 deletions
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 59f7ac7770..37328e6b64 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
@@ -55,6 +55,7 @@ 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.JavaCompilationHelper;
import com.google.devtools.build.lib.rules.java.JavaNativeLibraryProvider;
+import com.google.devtools.build.lib.rules.java.JavaPluginInfoProvider;
import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
import com.google.devtools.build.lib.rules.java.JavaRuntimeJarProvider;
import com.google.devtools.build.lib.rules.java.JavaSemantics;
@@ -88,6 +89,7 @@ public class AndroidCommon {
private NestedSet<Artifact> transitiveSourceJars = NestedSetBuilder.emptySet(Order.STABLE_ORDER);
private JavaCompilationArgs javaCompilationArgs = JavaCompilationArgs.EMPTY_ARGS;
private JavaCompilationArgs recursiveJavaCompilationArgs = JavaCompilationArgs.EMPTY_ARGS;
+ private JavaPluginInfoProvider transitiveJavaPluginInfoProvider = JavaPluginInfoProvider.EMPTY;
private JackCompilationHelper jackCompilationHelper;
private Artifact classJar;
private Artifact iJar;
@@ -566,8 +568,16 @@ public class AndroidCommon {
topLevelSourceJars = ImmutableList.of(srcJar);
transitiveSourceJars = javaCommon.collectTransitiveSourceJars(srcJar);
+ boolean hasSources = attributes.hasSourceFiles() || attributes.hasSourceJars();
+
+ if (!hasSources) {
+ // If this android rule has no sources, then it's a forwarding rule, so also forward
+ // any exported java plugins from its deps.
+ this.transitiveJavaPluginInfoProvider = JavaPluginInfoProvider.merge(
+ javaCommon.getPluginInfoProvidersForAttribute("deps", Mode.TARGET));
+ }
+
if (collectJavaCompilationArgs) {
- boolean hasSources = attributes.hasSourceFiles() || attributes.hasSourceJars();
this.javaCompilationArgs =
collectJavaCompilationArgs(ruleContext, exportDeps, asNeverLink, hasSources);
this.recursiveJavaCompilationArgs = collectJavaCompilationArgs(
@@ -616,6 +626,7 @@ public class AndroidCommon {
asNeverLink
? jackCompilationHelper.compileAsNeverlinkLibrary()
: jackCompilationHelper.compileAsLibrary())
+ .add(JavaPluginInfoProvider.class, transitiveJavaPluginInfoProvider)
.addOutputGroup(
OutputGroupProvider.HIDDEN_TOP_LEVEL, collectHiddenTopLevelArtifacts(ruleContext))
.addOutputGroup(JavaSemantics.SOURCE_JARS_OUTPUT_GROUP, transitiveSourceJars);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
index fd9825f32b..b7e6f785bc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
@@ -665,7 +665,7 @@ public class JavaCommon {
return ImmutableList.copyOf(result);
}
- Iterable<JavaPluginInfoProvider> getPluginInfoProvidersForAttribute(String attribute,
+ public Iterable<JavaPluginInfoProvider> getPluginInfoProvidersForAttribute(String attribute,
Mode mode) {
if (ruleContext.attributes().has(attribute, BuildType.LABEL_LIST)) {
return ruleContext.getPrerequisites(attribute, mode, JavaPluginInfoProvider.class);
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 38b3b697a3..65b024f900 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
@@ -162,19 +162,9 @@ public class JavaLibrary implements RuleConfiguredTargetFactory {
NestedSet<LinkerInput> transitiveJavaNativeLibraries =
common.collectTransitiveJavaNativeLibraries();
- ImmutableList<String> exportedProcessorClasses = ImmutableList.of();
- NestedSet<Artifact> exportedProcessorClasspath =
- NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER);
- ImmutableList.Builder<String> processorClasses = ImmutableList.builder();
- NestedSetBuilder<Artifact> processorClasspath = NestedSetBuilder.naiveLinkOrder();
- for (JavaPluginInfoProvider provider : Iterables.concat(
- common.getPluginInfoProvidersForAttribute("exported_plugins", Mode.HOST),
- common.getPluginInfoProvidersForAttribute("exports", Mode.TARGET))) {
- processorClasses.addAll(provider.getProcessorClasses());
- processorClasspath.addTransitive(provider.getProcessorClasspath());
- }
- exportedProcessorClasses = processorClasses.build();
- exportedProcessorClasspath = processorClasspath.build();
+ JavaPluginInfoProvider javaPluginInfoProvider = JavaPluginInfoProvider.merge(Iterables.concat(
+ common.getPluginInfoProvidersForAttribute("exported_plugins", Mode.HOST),
+ common.getPluginInfoProvidersForAttribute("exports", Mode.TARGET)));
CcLinkParamsStore ccLinkParamsStore = new CcLinkParamsStore() {
@Override
@@ -249,8 +239,7 @@ public class JavaLibrary implements RuleConfiguredTargetFactory {
.add(JavaSourceJarsProvider.class, new JavaSourceJarsProvider(
transitiveSourceJars, ImmutableList.of(srcJar)))
// TODO(bazel-team): this should only happen for java_plugin
- .add(JavaPluginInfoProvider.class, new JavaPluginInfoProvider(
- exportedProcessorClasses, exportedProcessorClasspath))
+ .add(JavaPluginInfoProvider.class, javaPluginInfoProvider)
.add(ProguardSpecProvider.class, new ProguardSpecProvider(proguardSpecs))
.addOutputGroup(JavaSemantics.SOURCE_JARS_OUTPUT_GROUP, transitiveSourceJars)
.addOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL, proguardSpecs);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginInfoProvider.java
index 3b88b03261..14339d9d6f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginInfoProvider.java
@@ -18,6 +18,8 @@ import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
+import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
/**
@@ -25,7 +27,25 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
*/
@Immutable
public final class JavaPluginInfoProvider implements TransitiveInfoProvider {
+
+ public static final JavaPluginInfoProvider EMPTY =
+ new JavaPluginInfoProvider(
+ ImmutableList.<String>of(),
+ NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER));
+ public static JavaPluginInfoProvider merge(Iterable<JavaPluginInfoProvider> providers) {
+
+ ImmutableList.Builder<String> processorClasses = ImmutableList.builder();
+ NestedSetBuilder<Artifact> processorClasspath = NestedSetBuilder.naiveLinkOrder();
+
+ for (JavaPluginInfoProvider provider : providers) {
+ processorClasses.addAll(provider.getProcessorClasses());
+ processorClasspath.addTransitive(provider.getProcessorClasspath());
+ }
+
+ return new JavaPluginInfoProvider(processorClasses.build(), processorClasspath.build());
+ }
+
private final ImmutableList<String> processorClasses;
private final NestedSet<Artifact> processorClasspath;