diff options
Diffstat (limited to 'src/main/java')
7 files changed, 68 insertions, 42 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 781bc12058..d5175b4837 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 @@ -61,7 +61,6 @@ import com.google.devtools.build.lib.rules.java.JavaCompilationArgs.ClasspathTyp 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.JavaGenJarsProvider; import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar; @@ -792,18 +791,19 @@ public class AndroidCommon { recursiveJavaCompilationArgs, compileTimeDependencyArtifacts, NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER)); - javaCommon.addTransitiveInfoProviders(builder, filesToBuild, classJar, ANDROID_COLLECTION_SPEC); - JavaGenJarsProvider javaGenJarsProvider = - javaCommon.createJavaGenJarsProvider(genClassJar, genSourceJar); - javaCommon.addJavaGenJarsProvider(builder, javaGenJarsProvider); + JavaInfo.Builder javaInfoBuilder = JavaInfo.Builder.create(); + + javaCommon.addTransitiveInfoProviders( + builder, javaInfoBuilder, filesToBuild, classJar, ANDROID_COLLECTION_SPEC); + + javaCommon.addGenJarsProvider(builder, javaInfoBuilder, genClassJar, genSourceJar); DataBinding.maybeAddProvider(builder, ruleContext); - JavaInfo javaInfo = JavaInfo.Builder.create() + JavaInfo javaInfo = javaInfoBuilder .addProvider(JavaCompilationArgsProvider.class, compilationArgsProvider) .addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) .addProvider(JavaSourceJarsProvider.class, sourceJarsProvider) - .addProvider(JavaGenJarsProvider.class, javaGenJarsProvider) .build(); return builder diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java index 0842f68305..87fa14562b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java @@ -45,7 +45,6 @@ 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.JavaConfiguration; import com.google.devtools.build.lib.rules.java.JavaConfiguration.OneVersionEnforcementLevel; -import com.google.devtools.build.lib.rules.java.JavaGenJarsProvider; import com.google.devtools.build.lib.rules.java.JavaHelper; import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaPrimaryClassProvider; @@ -301,11 +300,10 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor JavaRuleOutputJarsProvider ruleOutputJarsProvider = javaRuleOutputJarsProviderBuilder.build(); - javaCommon.addTransitiveInfoProviders(builder, filesToBuild, classJar); + JavaInfo.Builder javaInfoBuilder = JavaInfo.Builder.create(); - JavaGenJarsProvider javaGenJarsProvider = - javaCommon.createJavaGenJarsProvider(genClassJar, genSourceJar); - javaCommon.addJavaGenJarsProvider(builder, javaGenJarsProvider); + javaCommon.addTransitiveInfoProviders(builder, javaInfoBuilder, filesToBuild, classJar); + javaCommon.addGenJarsProvider(builder, javaInfoBuilder, genClassJar, genSourceJar); // Just confirming that there are no aliases being used here. AndroidFeatureFlagSetProvider.getAndValidateFlagMapFromRuleContext(ruleContext); @@ -317,11 +315,9 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor NestedSet<Artifact> extraFilesToRun = NestedSetBuilder.create(Order.STABLE_ORDER, runfilesSupport.getRunfilesMiddleman()); - JavaInfo javaInfo = - JavaInfo.Builder.create() + JavaInfo javaInfo = javaInfoBuilder .addProvider(JavaSourceJarsProvider.class, sourceJarsProvider) .addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) - .addProvider(JavaGenJarsProvider.class, javaGenJarsProvider) .build(); return builder 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 73a9b356f6..6982f2f5a4 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 @@ -427,16 +427,14 @@ public class JavaBinary implements RuleConfiguredTargetFactory { JavaRuleOutputJarsProvider ruleOutputJarsProvider = ruleOutputJarsProviderBuilder.build(); - common.addTransitiveInfoProviders(builder, filesToBuild, classJar); + JavaInfo.Builder javaInfoBuilder = JavaInfo.Builder.create(); - JavaGenJarsProvider javaGenJarsProvider = - common.createJavaGenJarsProvider(genClassJar, genSourceJar); - common.addJavaGenJarsProvider(builder, javaGenJarsProvider); + common.addTransitiveInfoProviders(builder, javaInfoBuilder, filesToBuild, classJar); + common.addGenJarsProvider(builder, javaInfoBuilder, genClassJar, genSourceJar); - JavaInfo javaInfo = JavaInfo.Builder.create() + JavaInfo javaInfo = javaInfoBuilder .addProvider(JavaSourceJarsProvider.class, sourceJarsProvider) .addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) - .addProvider(JavaGenJarsProvider.class, javaGenJarsProvider) .build(); return builder 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 78d49c8015..7dfcc4ba2a 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 @@ -702,13 +702,16 @@ public class JavaCommon { public void addTransitiveInfoProviders( RuleConfiguredTargetBuilder builder, + JavaInfo.Builder javaInfoBuilder, NestedSet<Artifact> filesToBuild, @Nullable Artifact classJar) { - addTransitiveInfoProviders(builder, filesToBuild, classJar, JAVA_COLLECTION_SPEC); + addTransitiveInfoProviders( + builder, javaInfoBuilder, filesToBuild, classJar, JAVA_COLLECTION_SPEC); } public void addTransitiveInfoProviders( RuleConfiguredTargetBuilder builder, + JavaInfo.Builder javaInfoBuilder, NestedSet<Artifact> filesToBuild, @Nullable Artifact classJar, InstrumentationSpec instrumentationSpec) { @@ -723,6 +726,9 @@ public class JavaCommon { .add(JavaExportsProvider.class, exportsProvider) .addOutputGroup(OutputGroupProvider.FILES_TO_COMPILE, getFilesToCompile(classJar)) .add(JavaCompilationInfoProvider.class, compilationInfoProvider); + + javaInfoBuilder.addProvider(JavaExportsProvider.class, exportsProvider); + javaInfoBuilder.addProvider(JavaCompilationInfoProvider.class, compilationInfoProvider); } private static InstrumentedFilesProvider getInstrumentationFilesProvider(RuleContext ruleContext, @@ -737,23 +743,24 @@ public class JavaCommon { /*withBaselineCoverage*/!TargetUtils.isTestRule(ruleContext.getTarget())); } - public JavaGenJarsProvider createJavaGenJarsProvider( - @Nullable Artifact genClassJar, @Nullable Artifact genSourceJar) { - return collectTransitiveGenJars( - javaCompilationHelper.usesAnnotationProcessing(), genClassJar, genSourceJar); - } - - public void addJavaGenJarsProvider( + public void addGenJarsProvider( RuleConfiguredTargetBuilder builder, - JavaGenJarsProvider javaGenJarsProvider) { + JavaInfo.Builder javaInfoBuilder, + @Nullable Artifact genClassJar, + @Nullable Artifact genSourceJar) { + JavaGenJarsProvider genJarsProvider = collectTransitiveGenJars( + javaCompilationHelper.usesAnnotationProcessing(), + genClassJar, genSourceJar); NestedSetBuilder<Artifact> genJarsBuilder = NestedSetBuilder.stableOrder(); - genJarsBuilder.addTransitive(javaGenJarsProvider.getTransitiveGenClassJars()); - genJarsBuilder.addTransitive(javaGenJarsProvider.getTransitiveGenSourceJars()); + genJarsBuilder.addTransitive(genJarsProvider.getTransitiveGenClassJars()); + genJarsBuilder.addTransitive(genJarsProvider.getTransitiveGenSourceJars()); builder - .addProvider(javaGenJarsProvider) + .add(JavaGenJarsProvider.class, genJarsProvider) .addOutputGroup(JavaSemantics.GENERATED_JARS_OUTPUT_GROUP, genJarsBuilder.build()); + + javaInfoBuilder.addProvider(JavaGenJarsProvider.class, genJarsProvider); } /** 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 738c925b0b..d3359e80ee 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 @@ -161,8 +161,11 @@ public class JavaImport implements RuleConfiguredTargetFactory { JavaSourceJarsProvider.create(transitiveJavaSourceJars, srcJars); JavaCompilationArgsProvider compilationArgsProvider = JavaCompilationArgsProvider.create(javaCompilationArgs, recursiveJavaCompilationArgs); - common.addTransitiveInfoProviders(ruleBuilder, filesToBuild, null); - JavaInfo javaInfo = JavaInfo.Builder.create() + + JavaInfo.Builder javaInfoBuilder = JavaInfo.Builder.create(); + common.addTransitiveInfoProviders(ruleBuilder, javaInfoBuilder, filesToBuild, null); + + JavaInfo javaInfo = javaInfoBuilder .addProvider(JavaCompilationArgsProvider.class, compilationArgsProvider) .addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) .addProvider(JavaSourceJarsProvider.class, sourceJarsProvider) diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java index 3bd850f07c..56c633e1bf 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java @@ -22,6 +22,7 @@ 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.TransitiveInfoProviderMapBuilder; +import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; @@ -60,7 +61,9 @@ public final class JavaInfo extends NativeInfo { JavaRuleOutputJarsProvider.class, JavaRunfilesProvider.class, JavaPluginInfoProvider.class, - JavaGenJarsProvider.class + JavaGenJarsProvider.class, + JavaExportsProvider.class, + JavaCompilationInfoProvider.class ); private final TransitiveInfoProviderMap providers; @@ -300,6 +303,16 @@ public final class JavaInfo extends NativeInfo { } @SkylarkCallable( + name = "compilation_info", + structField = true, + allowReturnNones = true, + doc = "Returns compilation information for this Java target." + ) + public JavaCompilationInfoProvider getCompilationInfoProvider() { + return getProvider(JavaCompilationInfoProvider.class); + } + + @SkylarkCallable( name = "transitive_deps", doc = "Returns the transitive set of Jars required to build the target.", structField = true @@ -335,6 +348,16 @@ public final class JavaInfo extends NativeInfo { JavaSourceJarsProvider::getTransitiveSourceJars); } + @SkylarkCallable( + name = "transitive_exports", + structField = true, + doc = "Returns transitive set of labels that are being exported from this rule." + ) + public NestedSet<Label> getTransitiveExports() { + return getProviderAsNestedSet( + JavaExportsProvider.class, + JavaExportsProvider::getTransitiveExports); + } /** * Gets Provider, check it for not null and call function to get NestedSet<S> from it. 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 890b07bd8f..df753903eb 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 @@ -208,11 +208,11 @@ public class JavaLibrary implements RuleConfiguredTargetFactory { JavaRuleOutputJarsProvider ruleOutputJarsProvider = ruleOutputJarsProviderBuilder.build(); NestedSet<Artifact> filesToBuild = filesBuilder.build(); - common.addTransitiveInfoProviders(builder, filesToBuild, classJar); - JavaGenJarsProvider javaGenJarsProvider = - common.createJavaGenJarsProvider(genClassJar, genSourceJar); - common.addJavaGenJarsProvider(builder, javaGenJarsProvider); + JavaInfo.Builder javaInfoBuilder = JavaInfo.Builder.create(); + + common.addTransitiveInfoProviders(builder, javaInfoBuilder, filesToBuild, classJar); + common.addGenJarsProvider(builder, javaInfoBuilder, genClassJar, genSourceJar); NestedSet<Artifact> proguardSpecs = new ProguardLibrary(ruleContext).collectProguardSpecs(); @@ -224,14 +224,13 @@ public class JavaLibrary implements RuleConfiguredTargetFactory { : JavaCommon.getTransitivePlugins(ruleContext); // java_library doesn't need to return JavaRunfilesProvider - JavaInfo javaInfo = JavaInfo.Builder.create() + JavaInfo javaInfo = javaInfoBuilder .addProvider(JavaCompilationArgsProvider.class, compilationArgsProvider) .addProvider(JavaSourceJarsProvider.class, sourceJarsProvider) .addProvider(ProtoJavaApiInfoAspectProvider.class, protoAspectBuilder.build()) .addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) // TODO(bazel-team): this should only happen for java_plugin .addProvider(JavaPluginInfoProvider.class, pluginInfoProvider) - .addProvider(JavaGenJarsProvider.class, javaGenJarsProvider) .build(); builder |