From 7c8cd9c402b3ca4f7b50074d249ef8e1dc52086a Mon Sep 17 00:00:00 2001 From: dbabkin Date: Thu, 7 Dec 2017 05:49:46 -0800 Subject: Expose two methods from JavaSkylarkApiProvider in JavaInfo JavaSkylarkApiProvider will be deprecated soon and replaced by JavaInfo. Methods exposed: getCompilationInfoProvider() getTransitiveExports() Changed signature of JavaCommon methods to accept JavaInfoBuilder. RELNOTES:none PiperOrigin-RevId: 178229835 --- .../build/lib/rules/android/AndroidCommon.java | 14 +++++----- .../lib/rules/android/AndroidLocalTestBase.java | 12 +++------ .../devtools/build/lib/rules/java/JavaBinary.java | 10 +++---- .../devtools/build/lib/rules/java/JavaCommon.java | 31 +++++++++++++--------- .../devtools/build/lib/rules/java/JavaImport.java | 7 +++-- .../devtools/build/lib/rules/java/JavaInfo.java | 25 ++++++++++++++++- .../devtools/build/lib/rules/java/JavaLibrary.java | 11 ++++---- 7 files changed, 68 insertions(+), 42 deletions(-) (limited to 'src/main/java') 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.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 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 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 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 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; @@ -299,6 +302,16 @@ public final class JavaInfo extends NativeInfo { return getProvider(JavaGenJarsProvider.class); } + @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.", @@ -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