diff options
33 files changed, 134 insertions, 93 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java index 4039821c19..270238f015 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java @@ -25,9 +25,10 @@ import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; import com.google.devtools.build.lib.bazel.rules.java.BazelJavaRuleClasses.JavaRule; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder; +import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.rules.cpp.CppConfiguration; -import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; import com.google.devtools.build.lib.rules.java.JavaConfiguration; +import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider; import com.google.devtools.build.lib.rules.java.Jvm; import com.google.devtools.build.lib.rules.java.ProguardLibraryRule; @@ -152,7 +153,7 @@ public final class BazelJavaLibraryRule implements RuleDefinition { .allowedRuleClasses("java_plugin") .allowedFileTypes()) .advertiseProvider(JavaSourceInfoProvider.class) - .advertiseProvider(JavaCompilationArgsProvider.class) + .advertiseSkylarkProvider(SkylarkProviderIdentifier.forKey(JavaInfo.PROVIDER.getKey())) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java index c4e97d82da..fdb149038f 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java @@ -52,6 +52,7 @@ 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.JavaHelper; +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.JavaSemantics; import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider; @@ -656,7 +657,7 @@ public class BazelJavaSemantics implements JavaSemantics { // Add the coverage runner to the list of dependencies when compiling in coverage mode. TransitiveInfoCollection runnerTarget = helper.getRuleContext().getPrerequisite("$jacocorunner", Mode.TARGET); - if (runnerTarget.getProvider(JavaCompilationArgsProvider.class) != null) { + if (JavaInfo.getProvider(JavaCompilationArgsProvider.class, runnerTarget) != null) { helper.addLibrariesToAttributes(ImmutableList.of(runnerTarget)); } else { helper diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoLibraryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoLibraryRule.java index 46f5a25859..6b3c8b9863 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoLibraryRule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoLibraryRule.java @@ -32,8 +32,9 @@ import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass; -import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; +import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.rules.java.JavaConfiguration; +import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.proto.JavaLiteProtoLibrary; import com.google.devtools.build.lib.rules.proto.ProtoLangToolchainProvider; @@ -72,7 +73,7 @@ public class BazelJavaLiteProtoLibraryRule implements RuleDefinition { ImmutableList.<Class<? extends TransitiveInfoProvider>>of( ProtoLangToolchainProvider.class)) .value(getProtoToolchainLabel(DEFAULT_PROTO_TOOLCHAIN_LABEL))) - .advertiseProvider(JavaCompilationArgsProvider.class) + .advertiseSkylarkProvider(SkylarkProviderIdentifier.forKey(JavaInfo.PROVIDER.getKey())) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaProtoLibraryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaProtoLibraryRule.java index 007b27e4ec..e514089f1f 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaProtoLibraryRule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaProtoLibraryRule.java @@ -26,8 +26,9 @@ import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass; -import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; +import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.rules.java.JavaConfiguration; +import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.proto.JavaProtoLibrary; import com.google.devtools.build.lib.rules.proto.ProtoConfiguration; @@ -60,7 +61,7 @@ public class BazelJavaProtoLibraryRule implements RuleDefinition { .allowedFileTypes() .aspect(javaProtoAspect, aspectParameters)) .add(attr("strict_deps", BOOLEAN).value(true).undocumented("for migration")) - .advertiseProvider(JavaCompilationArgsProvider.class) + .advertiseSkylarkProvider(SkylarkProviderIdentifier.forKey(JavaInfo.PROVIDER.getKey())) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java index de257da513..6eebc7f41c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java @@ -144,6 +144,20 @@ public class AarImport implements RuleConfiguredTargetFactory { .addCompileTimeJarAsFullJar(mergedJar) .build()); + JavaInfo javaInfo = JavaInfo.Builder.create() + .addProvider(JavaCompilationArgsProvider.class, + JavaCompilationArgsProvider.create( + common.collectJavaCompilationArgs( + /* recursive = */ false, + JavaCommon.isNeverLink(ruleContext), + /* srcLessDepsExport = */ false), + common.collectJavaCompilationArgs( + /* recursive = */ true, + JavaCommon.isNeverLink(ruleContext), + /* srcLessDepsExport = */ false))) + .addProvider(JavaRuleOutputJarsProvider.class, jarProviderBuilder.build()) + .build(); + return ruleBuilder .setFilesToBuild(filesToBuildBuilder.build()) .addSkylarkTransitiveInfo( @@ -158,18 +172,7 @@ public class AarImport implements RuleConfiguredTargetFactory { AndroidCommon.collectTransitiveNativeLibsZips(ruleContext).add(nativeLibs).build())) .addProvider( JavaRuntimeJarProvider.class, new JavaRuntimeJarProvider(ImmutableList.of(mergedJar))) - .addProvider( - JavaCompilationArgsProvider.class, - JavaCompilationArgsProvider.create( - common.collectJavaCompilationArgs( - /* recursive = */ false, - JavaCommon.isNeverLink(ruleContext), - /* srcLessDepsExport = */ false), - common.collectJavaCompilationArgs( - /* recursive = */ true, - JavaCommon.isNeverLink(ruleContext), - /* srcLessDepsExport = */ false))) - .addProvider(JavaRuleOutputJarsProvider.class, jarProviderBuilder.build()) + .addNativeDeclaredProvider(javaInfo) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarImportBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarImportBaseRule.java index 52262de62a..81778db38c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AarImportBaseRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarImportBaseRule.java @@ -24,8 +24,9 @@ import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder; import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType; +import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.rules.android.AndroidRuleClasses.AndroidBaseRule; -import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; +import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.util.FileType; /** Rule definition for the aar_import rule. */ @@ -67,7 +68,7 @@ public class AarImportBaseRule implements RuleDefinition { .cfg(HOST) .exec() .value(env.getToolsLabel("//tools/zip:zipper"))) - .advertiseProvider(JavaCompilationArgsProvider.class) + .advertiseSkylarkProvider(SkylarkProviderIdentifier.forKey(JavaInfo.PROVIDER.getKey())) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java index a8eb438270..a6e97d76b3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java @@ -35,6 +35,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.rules.java.DeployArchiveBuilder; import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; +import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaSemantics; import com.google.devtools.build.lib.rules.java.JavaTargetAttributes; import com.google.devtools.build.lib.rules.java.ProguardHelper; @@ -357,7 +358,8 @@ public final class AndroidBinaryMobileInstall { return null; } - JavaCompilationArgsProvider provider = dep.getProvider(JavaCompilationArgsProvider.class); + JavaCompilationArgsProvider provider = + JavaInfo.getProvider(JavaCompilationArgsProvider.class, dep); if (provider == null) { ruleContext.attributeError(attribute, "'" + dep.getLabel() + "' should be a Java target"); return null; 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 c403b05768..bb63208218 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 @@ -60,6 +60,7 @@ 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.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar; import com.google.devtools.build.lib.rules.java.JavaRuntimeJarProvider; @@ -183,8 +184,8 @@ public class AndroidCommon { if (JavaCommon.isNeverLink(ruleContext)) { builder.addAll(runtimeJars); - for (JavaCompilationArgsProvider provider : AnalysisUtils.getProviders( - deps, JavaCompilationArgsProvider.class)) { + for (JavaCompilationArgsProvider provider : + JavaInfo.getProvidersFromListOfTargets(JavaCompilationArgsProvider.class, deps)) { builder.addTransitive(provider.getRecursiveJavaCompilationArgs().getRuntimeJars()); } } @@ -792,13 +793,17 @@ public class AndroidCommon { javaCommon.addGenJarsProvider(builder, genClassJar, genSourceJar); DataBinding.maybeAddProvider(builder, ruleContext); + JavaInfo javaInfo = JavaInfo.Builder.create() + .addProvider(JavaCompilationArgsProvider.class, compilationArgsProvider) + .addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) + .addProvider(JavaSourceJarsProvider.class, sourceJarsProvider) + .build(); return builder .setFilesToBuild(filesToBuild) .addSkylarkTransitiveInfo( JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext()) - .addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) - .addProvider(JavaSourceJarsProvider.class, sourceJarsProvider) + .addNativeDeclaredProvider(javaInfo) .addProvider( JavaRuntimeJarProvider.class, new JavaRuntimeJarProvider(javaCommon.getJavaCompilationArtifacts().getRuntimeJars())) @@ -818,7 +823,6 @@ public class AndroidCommon { zipAlignedApk, apksUnderTest, nativeLibs)) - .addProvider(JavaCompilationArgsProvider.class, compilationArgsProvider) .addSkylarkTransitiveInfo(AndroidSkylarkApiProvider.NAME, new AndroidSkylarkApiProvider()) .addOutputGroup( OutputGroupProvider.HIDDEN_TOP_LEVEL, collectHiddenTopLevelArtifacts(ruleContext)) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java index 192db21f8c..7b8e7cf246 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java @@ -25,9 +25,10 @@ import com.google.devtools.build.lib.analysis.RuleDefinition; import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType; +import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.packages.TriState; import com.google.devtools.build.lib.rules.android.AndroidRuleClasses.AndroidResourceSupportRule; -import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; +import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaSemantics; import com.google.devtools.build.lib.rules.java.ProguardLibraryRule; import com.google.devtools.build.lib.util.FileTypeSet; @@ -193,7 +194,7 @@ public final class AndroidLibraryBaseRule implements RuleDefinition { .cfg(HOST) .exec() .value(env.getToolsLabel(AndroidRuleClasses.MANIFEST_MERGE_TOOL_LABEL))) - .advertiseProvider(JavaCompilationArgsProvider.class) + .advertiseSkylarkProvider(SkylarkProviderIdentifier.forKey(JavaInfo.PROVIDER.getKey())) .build(); } 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 6ac746f904..4644d39be3 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 @@ -47,6 +47,7 @@ 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.JavaHelper; +import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaPrimaryClassProvider; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider; import com.google.devtools.build.lib.rules.java.JavaRunfilesProvider; @@ -318,11 +319,16 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor NestedSet<Artifact> extraFilesToRun = NestedSetBuilder.create(Order.STABLE_ORDER, runfilesSupport.getRunfilesMiddleman()); + JavaInfo javaInfo = JavaInfo.Builder.create() + .addProvider(JavaSourceJarsProvider.class, sourceJarsProvider) + .addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) + .build(); + return builder .setFilesToBuild(filesToBuild) .addSkylarkTransitiveInfo( JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext()) - .addProvider(ruleOutputJarsProvider) + .addNativeDeclaredProvider(javaInfo) .addProvider( RunfilesProvider.class, RunfilesProvider.withData( @@ -335,7 +341,6 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor .addProvider( JavaRuntimeClasspathProvider.class, new JavaRuntimeClasspathProvider(javaCommon.getRuntimeClasspath())) - .addProvider(JavaSourceJarsProvider.class, sourceJarsProvider) .addProvider(JavaPrimaryClassProvider.class, new JavaPrimaryClassProvider(testClass)) .addProvider( JavaSourceInfoProvider.class, @@ -376,7 +381,7 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor TransitiveInfoCollection testSupport = null; TransitiveInfoCollection t = Iterables.getOnlyElement(ruleContext.getPrerequisites("$testsupport", Mode.TARGET)); - if (t.getProvider(JavaCompilationArgsProvider.class) != null) { + if (JavaInfo.getProvider(JavaCompilationArgsProvider.class, t) != null) { testSupport = t; } else { ruleContext.attributeError( diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java index a00d2b2dc5..9d7c90fc28 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java @@ -24,8 +24,9 @@ import com.google.devtools.build.lib.packages.AspectDefinition; import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.NativeAspectClass; +import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.rules.java.JavaCommon; -import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; +import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaRuntimeJarProvider; import java.util.ArrayList; import java.util.List; @@ -83,7 +84,7 @@ public class AndroidNeverlinkAspect extends NativeAspectClass implements Configu } return builder - .requireProviders(JavaCompilationArgsProvider.class) + .requireSkylarkProviders(SkylarkProviderIdentifier.forKey(JavaInfo.PROVIDER.getKey())) .requiresConfigurationFragments() .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java index ffaa6cf7af..adfb31054c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java @@ -50,14 +50,15 @@ import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder; import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType; import com.google.devtools.build.lib.packages.RuleTransitionFactory; +import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.packages.TriState; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidManifestMerger; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.ConfigurationDistinguisher; import com.google.devtools.build.lib.rules.config.ConfigFeatureFlagProvider; import com.google.devtools.build.lib.rules.cpp.CppOptions; -import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; import com.google.devtools.build.lib.rules.java.JavaConfiguration; +import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaSemantics; import com.google.devtools.build.lib.rules.java.ProguardHelper; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; @@ -940,7 +941,7 @@ public final class AndroidRuleClasses { .cfg(HOST) .exec() .value(env.getToolsLabel("//tools/android:resource_extractor"))) - .advertiseProvider(JavaCompilationArgsProvider.class) + .advertiseSkylarkProvider(SkylarkProviderIdentifier.forKey(JavaInfo.PROVIDER.getKey())) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DataBinding.java b/src/main/java/com/google/devtools/build/lib/rules/android/DataBinding.java index 10b35c2e29..0db9766aed 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/DataBinding.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/DataBinding.java @@ -22,6 +22,7 @@ import com.google.devtools.build.lib.analysis.actions.SymlinkAction; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.BuildType; +import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaPluginInfoProvider; import com.google.devtools.build.lib.rules.java.JavaTargetAttributes; import com.google.devtools.build.lib.syntax.Type; @@ -153,9 +154,11 @@ public final class DataBinding { */ static void addAnnotationProcessor( RuleContext ruleContext, JavaTargetAttributes.Builder attributes) { - JavaPluginInfoProvider plugin = ruleContext.getPrerequisite( - DATABINDING_ANNOTATION_PROCESSOR_ATTR, RuleConfiguredTarget.Mode.TARGET, - JavaPluginInfoProvider.class); + JavaPluginInfoProvider plugin = JavaInfo.getProvider( + JavaPluginInfoProvider.class, + ruleContext.getPrerequisite( + DATABINDING_ANNOTATION_PROCESSOR_ATTR, RuleConfiguredTarget.Mode.TARGET) + ); for (String name : plugin.getProcessorClasses()) { // For header compilation (see JavaHeaderCompileAction): attributes.addApiGeneratingProcessorName(name); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java index e7649f71da..2970d86d7b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java @@ -55,10 +55,12 @@ import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.NativeAspectClass; import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper; import com.google.devtools.build.lib.packages.Rule; +import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.packages.TriState; import com.google.devtools.build.lib.rules.java.JavaCommon; import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; import com.google.devtools.build.lib.rules.java.JavaCompilationInfoProvider; +import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaRuntimeJarProvider; import com.google.devtools.build.lib.rules.java.proto.JavaLiteProtoAspect; import com.google.devtools.build.lib.rules.java.proto.JavaProtoLibraryAspectProvider; @@ -120,13 +122,11 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu public AspectDefinition getDefinition(AspectParameters params) { AspectDefinition.Builder result = new AspectDefinition.Builder(this) + // We care about JavaRuntimeJarProvider, but rules don't advertise that + // provider. + .requireSkylarkProviders(SkylarkProviderIdentifier.forKey(JavaInfo.PROVIDER.getKey())) .requireProviderSets( ImmutableList.of( - // We care about JavaRuntimeJarProvider, but rules don't advertise that - // provider. - ImmutableSet.<Class<?>>of(JavaCompilationArgsProvider.class), - // For proto_library rules, where we care about - // JavaCompilationArgsAspectProvider. ImmutableSet.<Class<?>>of(ProtoSourcesProvider.class), // For proto_lang_toolchain rules, where we just want to get at their runtime // deps. @@ -279,12 +279,15 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu private static JavaCompilationArgsProvider getJavaCompilationArgsProvider(ConfiguredTarget base, RuleContext ruleContext) { - if (isProtoLibrary(ruleContext)) { - return WrappingProvider.Helper.getWrappedProvider( - base, JavaProtoLibraryAspectProvider.class, JavaCompilationArgsProvider.class); - } else { - return base.getProvider(JavaCompilationArgsProvider.class); + JavaCompilationArgsProvider provider = + JavaInfo.getProvider(JavaCompilationArgsProvider.class, base); + if (provider != null) { + return provider; } + return isProtoLibrary(ruleContext) + ? WrappingProvider.Helper.getWrappedProvider( + base, JavaProtoLibraryAspectProvider.class, JavaCompilationArgsProvider.class) + : null; } private static boolean isProtoLibrary(RuleContext ruleContext) { 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 10f42eee77..bed8b35806 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 @@ -416,11 +416,16 @@ public class JavaBinary implements RuleConfiguredTargetFactory { common.addTransitiveInfoProviders(builder, filesToBuild, classJar); common.addGenJarsProvider(builder, genClassJar, genSourceJar); + JavaInfo javaInfo = JavaInfo.Builder.create() + .addProvider(JavaSourceJarsProvider.class, sourceJarsProvider) + .addProvider(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) + .build(); + return builder .setFilesToBuild(filesToBuild) + .addNativeDeclaredProvider(javaInfo) .addSkylarkTransitiveInfo( JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext()) - .add(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) .add(RunfilesProvider.class, runfilesProvider) // The executable to run (below) may be different from the executable for runfiles (the one // we create the runfiles support object with). On Linux they are the same (it's the same @@ -434,7 +439,6 @@ public class JavaBinary implements RuleConfiguredTargetFactory { .add( JavaSourceInfoProvider.class, JavaSourceInfoProvider.fromJavaTargetAttributes(attributes, semantics)) - .add(JavaSourceJarsProvider.class, sourceJarsProvider) .addOutputGroup(JavaSemantics.SOURCE_JARS_OUTPUT_GROUP, transitiveSourceJars) .build(); } 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 edb2c20beb..e47b7f58a2 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 @@ -892,7 +892,7 @@ public class JavaCommon { */ public final <P extends TransitiveInfoProvider> Iterable<P> getDependencies( Class<P> provider) { - return AnalysisUtils.getProviders(getDependencies(), provider); + return JavaInfo.getProvidersFromListOfTargets(provider, getDependencies()); } /** Gets all the deps that implement a particular provider. */ 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 fc25da58c6..738c925b0b 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 @@ -172,20 +172,17 @@ public class JavaImport implements RuleConfiguredTargetFactory { .addSkylarkTransitiveInfo( JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext()) .addNativeDeclaredProvider(javaInfo) - .add(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider) .add( JavaRuntimeJarProvider.class, new JavaRuntimeJarProvider(javaArtifacts.getRuntimeJars())) .add(JavaNeverlinkInfoProvider.class, new JavaNeverlinkInfoProvider(neverLink)) .add(RunfilesProvider.class, RunfilesProvider.simple(runfiles)) .addNativeDeclaredProvider(new CcLinkParamsInfo(ccLinkParamsStore)) - .add(JavaCompilationArgsProvider.class, compilationArgsProvider) .add( JavaNativeLibraryProvider.class, new JavaNativeLibraryProvider(transitiveJavaNativeLibraries)) .add(CppCompilationContext.class, transitiveCppDeps) .add(JavaSourceInfoProvider.class, javaSourceInfoProvider) - .add(JavaSourceJarsProvider.class, sourceJarsProvider) .add(ProguardSpecProvider.class, new ProguardSpecProvider(proguardSpecs)) .addOutputGroup(JavaSemantics.SOURCE_JARS_OUTPUT_GROUP, transitiveJavaSourceJars) .addOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL, proguardSpecs) @@ -220,7 +217,7 @@ public class JavaImport implements RuleConfiguredTargetFactory { private ImmutableList<Artifact> collectJars(RuleContext ruleContext) { Set<Artifact> jars = new LinkedHashSet<>(); for (TransitiveInfoCollection info : ruleContext.getPrerequisites("jars", Mode.TARGET)) { - if (info.getProvider(JavaCompilationArgsProvider.class) != null) { + if (JavaInfo.getProvider(JavaCompilationArgsProvider.class, info) != null) { ruleContext.attributeError("jars", "should not refer to Java rules"); } for (Artifact jar : info.getProvider(FileProvider.class).getFilesToBuild()) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImportBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImportBaseRule.java index 4c09e53e69..04841bcad5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImportBaseRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImportBaseRule.java @@ -27,6 +27,7 @@ import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder; import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType; +import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.rules.cpp.CppConfiguration; /** @@ -68,7 +69,7 @@ public class JavaImportBaseRule implements RuleDefinition { .nonconfigurable( "used in Attribute.validityPredicate implementations (loading time)")) .advertiseProvider(JavaSourceInfoProvider.class) - .advertiseProvider(JavaCompilationArgsProvider.class) + .advertiseSkylarkProvider(SkylarkProviderIdentifier.forKey(JavaInfo.PROVIDER.getKey())) .build(); } 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 761da14936..0578336cc1 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 @@ -145,8 +145,20 @@ public final class JavaInfo extends NativeInfo { if (provider != null) { return provider; } - JavaInfo javaInfo = - (JavaInfo) target.get(JavaInfo.PROVIDER.getKey()); + JavaInfo javaInfo = (JavaInfo) target.get(JavaInfo.PROVIDER.getKey()); + if (javaInfo == null) { + return null; + } + return javaInfo.getProvider(providerClass); + } + + public static <T extends TransitiveInfoProvider> T getProvider( + Class<T> providerClass, TransitiveInfoProviderMap providerMap) { + T provider = providerMap.getProvider(providerClass); + if (provider != null) { + return provider; + } + JavaInfo javaInfo = (JavaInfo) providerMap.getProvider(JavaInfo.PROVIDER.getKey()); if (javaInfo == null) { return null; } @@ -314,7 +326,6 @@ public final class JavaInfo extends NativeInfo { } public JavaInfo build() { - Preconditions.checkArgument(providerMap.contains(JavaCompilationArgsProvider.class)); return new JavaInfo(providerMap.build()); } } 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 5932b19526..3f710cc348 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 @@ -226,13 +226,13 @@ public class JavaLibrary implements RuleConfiguredTargetFactory { .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) .build(); builder .addSkylarkTransitiveInfo( JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext()) - .addProvider(ruleOutputJarsProvider) .addProvider(new JavaRuntimeJarProvider(javaArtifacts.getRuntimeJars())) .addProvider( RunfilesProvider.simple( @@ -240,14 +240,10 @@ public class JavaLibrary implements RuleConfiguredTargetFactory { .setFilesToBuild(filesToBuild) .addProvider(new JavaNeverlinkInfoProvider(neverLink)) .addProvider(transitiveCppDeps) - .addProvider(JavaCompilationArgsProvider.class, compilationArgsProvider) .addNativeDeclaredProvider(ccLinkParamsInfo) .addProvider(new JavaNativeLibraryProvider(transitiveJavaNativeLibraries)) .addProvider(JavaSourceInfoProvider.fromJavaTargetAttributes(attributes, semantics)) - // TODO(bazel-team): this should only happen for java_plugin - .addProvider(pluginInfoProvider) .addProvider(new ProguardSpecProvider(proguardSpecs)) - .addProvider(sourceJarsProvider) .addNativeDeclaredProvider(javaInfo) .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/JavaSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiProvider.java index b69f4d04aa..74e20f7a42 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiProvider.java @@ -72,9 +72,9 @@ public final class JavaSkylarkApiProvider extends SkylarkApiProvider { @Nullable private <P extends TransitiveInfoProvider> P getProvider(Class<P> provider) { if (transitiveInfoProviderMap != null) { - return transitiveInfoProviderMap.getProvider(provider); + return JavaInfo.getProvider(provider, transitiveInfoProviderMap); } - return getInfo().getProvider(provider); + return JavaInfo.getProvider(provider, getInfo()); } @SkylarkCallable( 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 cc6cc166a3..7d87f9891d 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 @@ -51,6 +51,7 @@ 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.JavaHelper; +import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaLibraryHelper; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider; import com.google.devtools.build.lib.rules.java.JavaSemantics; @@ -256,7 +257,8 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured .setJavacOpts(ProtoJavacOpts.constructJavacOpts(ruleContext)); helper.addDep(dependencyCompilationArgs).setCompilationStrictDepsMode(StrictDepsMode.OFF); for (TransitiveInfoCollection t : getProtoRuntimeDeps()) { - JavaCompilationArgsProvider provider = t.getProvider(JavaCompilationArgsProvider.class); + JavaCompilationArgsProvider provider = + JavaInfo.getProvider(JavaCompilationArgsProvider.class, t); if (provider != null) { helper.addDep(provider); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java index 007bc85511..5595e3edb0 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java @@ -104,11 +104,7 @@ public class JavaLiteProtoLibrary implements RuleConfiguredTargetFactory { .addProvider(RunfilesProvider.withData(Runfiles.EMPTY, runfiles)) .addOutputGroup( OutputGroupProvider.DEFAULT, NestedSetBuilder.<Artifact>emptySet(STABLE_ORDER)) - .addProvider(dependencyArgsProviders) - .addProvider(sourceJarsProvider) - .addProvider(javaRunfilesProvider) .addProvider(getJavaLiteRuntimeSpec(ruleContext)) - .addProvider(JavaRuleOutputJarsProvider.EMPTY) .addNativeDeclaredProvider(javaInfo) .addProvider(createCcLinkParamsStore(ruleContext, ImmutableList.of())) .build(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java index 90df082037..4603add72f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java @@ -49,6 +49,7 @@ import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; 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.JavaHelper; +import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaLibraryHelper; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider; import com.google.devtools.build.lib.rules.java.JavaSemantics; @@ -294,7 +295,8 @@ public class JavaProtoAspect extends NativeAspectClass implements ConfiguredAspe .setJavacOpts(ProtoJavacOpts.constructJavacOpts(ruleContext)); helper.addDep(dependencyCompilationArgs).setCompilationStrictDepsMode(StrictDepsMode.OFF); for (TransitiveInfoCollection t : getProtoRuntimeDeps()) { - JavaCompilationArgsProvider provider = t.getProvider(JavaCompilationArgsProvider.class); + JavaCompilationArgsProvider provider = + JavaInfo.getProvider(JavaCompilationArgsProvider.class, t); if (provider != null) { helper.addDep(provider); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoLibrary.java index 91b34375a6..79062a7c57 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoLibrary.java @@ -97,10 +97,6 @@ public class JavaProtoLibrary implements RuleConfiguredTargetFactory { .addProvider(RunfilesProvider.withData(Runfiles.EMPTY, runfiles)) .addOutputGroup( OutputGroupProvider.DEFAULT, NestedSetBuilder.<Artifact>emptySet(STABLE_ORDER)) - .addProvider(dependencyArgsProviders) - .addProvider(sourceJarsProvider) - .addProvider(javaRunfilesProvider) - .addProvider(JavaRuleOutputJarsProvider.EMPTY) .addNativeDeclaredProvider(javaInfo); if (ruleContext.getFragment(JavaConfiguration.class).jplPropagateCcLinkParamsStore()) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoSkylarkCommon.java index abf890765b..8ce744ccf7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoSkylarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoSkylarkCommon.java @@ -121,7 +121,7 @@ public class JavaProtoSkylarkCommon { JavaInfo.Builder.create() .addProvider( JavaCompilationArgsProvider.class, - runtime.getProvider(JavaCompilationArgsProvider.class)) + JavaInfo.getProvider(JavaCompilationArgsProvider.class, runtime)) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/StrictDepsUtils.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/StrictDepsUtils.java index 73230385ee..c539c1209a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/StrictDepsUtils.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/StrictDepsUtils.java @@ -23,6 +23,7 @@ import com.google.devtools.build.lib.analysis.WrappingProvider; import com.google.devtools.build.lib.rules.java.JavaCompilationArgs; import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; import com.google.devtools.build.lib.rules.java.JavaConfiguration; +import com.google.devtools.build.lib.rules.java.JavaInfo; public class StrictDepsUtils { @@ -69,7 +70,7 @@ public class StrictDepsUtils { } result.addTransitiveArgs(directJars, BOTH); for (TransitiveInfoCollection t : protoRuntimes) { - JavaCompilationArgsProvider p = t.getProvider(JavaCompilationArgsProvider.class); + JavaCompilationArgsProvider p = JavaInfo.getProvider(JavaCompilationArgsProvider.class, t); if (p != null) { result.addTransitiveArgs(p.getJavaCompilationArgs(), BOTH); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java index 5cda226943..998e8ded0c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java @@ -47,6 +47,7 @@ import com.google.devtools.build.lib.packages.Attribute.LateBoundDefault; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.NativeAspectClass; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; +import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; import com.google.devtools.build.lib.rules.apple.AppleToolchain; import com.google.devtools.build.lib.rules.apple.XcodeConfigRule; @@ -58,6 +59,7 @@ import com.google.devtools.build.lib.rules.java.JavaCommon; import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; 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.JavaSourceInfoProvider; import com.google.devtools.build.lib.rules.java.Jvm; import com.google.devtools.build.lib.rules.objc.CompilationSupport.ExtraCompileArgs; @@ -135,10 +137,8 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF .propagateAlongAttribute("deps") .propagateAlongAttribute("exports") .propagateAlongAttribute("runtime_deps") - .requireProviderSets( - ImmutableList.of( - ImmutableSet.<Class<?>>of(JavaCompilationArgsProvider.class), - ImmutableSet.<Class<?>>of(ProtoSourcesProvider.class))) + .requireSkylarkProviders(SkylarkProviderIdentifier.forKey(JavaInfo.PROVIDER.getKey())) + .requireProviders(ProtoSourcesProvider.class) .requiresConfigurationFragments( AppleConfiguration.class, CppConfiguration.class, @@ -303,7 +303,7 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF ConfiguredTarget base, RuleContext ruleContext, AspectParameters parameters) throws InterruptedException { JavaCompilationArgsProvider compilationArgsProvider = - base.getProvider(JavaCompilationArgsProvider.class); + JavaInfo.getProvider(JavaCompilationArgsProvider.class, base); JavaSourceInfoProvider sourceInfoProvider = base.getProvider(JavaSourceInfoProvider.class); JavaGenJarsProvider genJarProvider = base.getProvider(JavaGenJarsProvider.class); ImmutableSet.Builder<Artifact> javaSourceFilesBuilder = ImmutableSet.builder(); diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java index 15f1a7aecf..c9730234d3 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java @@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.actions.Action; import com.google.devtools.build.lib.analysis.util.AnalysisCachingTestBase; import com.google.devtools.build.lib.events.Event; +import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider; import com.google.devtools.build.lib.skyframe.AspectValue; import com.google.devtools.build.lib.testutil.Suite; @@ -49,7 +50,7 @@ public class AnalysisCachingTest extends AnalysisCachingTestBase { update("//java/a:A"); ConfiguredTarget javaTest = getConfiguredTarget("//java/a:A"); assertThat(javaTest).isNotNull(); - assertThat(javaTest.getProvider(JavaSourceJarsProvider.class)).isNotNull(); + assertThat(JavaInfo.getProvider(JavaSourceJarsProvider.class, javaTest)).isNotNull(); } @Test diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java index a81404bde5..42a4434b99 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java @@ -27,6 +27,7 @@ import com.google.devtools.build.lib.analysis.configuredtargets.FileConfiguredTa import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; +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; import java.util.Set; @@ -152,7 +153,7 @@ public class AarImportTest extends BuildViewTestCase { ConfiguredTarget aarImportTarget = getConfiguredTarget("//a:foo"); Iterable<OutputJar> outputJars = - aarImportTarget.getProvider(JavaRuleOutputJarsProvider.class).getOutputJars(); + JavaInfo.getProvider(JavaRuleOutputJarsProvider.class, aarImportTarget).getOutputJars(); assertThat(outputJars).hasSize(1); Artifact classesJar = outputJars.iterator().next().getClassJar(); @@ -224,8 +225,8 @@ public class AarImportTest extends BuildViewTestCase { public void testJavaCompilationArgsProvider() throws Exception { ConfiguredTarget aarImportTarget = getConfiguredTarget("//a:bar"); - JavaCompilationArgsProvider provider = aarImportTarget - .getProvider(JavaCompilationArgsProvider.class); + JavaCompilationArgsProvider provider = JavaInfo + .getProvider(JavaCompilationArgsProvider.class, aarImportTarget); assertThat(provider).isNotNull(); assertThat(artifactsToStrings(provider.getJavaCompilationArgs().getRuntimeJars())) .containsExactly( diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java index c50042c52c..2c7bb8d8e6 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java @@ -46,6 +46,7 @@ import com.google.devtools.build.lib.rules.android.deployinfo.AndroidDeployInfoO import com.google.devtools.build.lib.rules.cpp.CppFileTypes; import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; import com.google.devtools.build.lib.rules.java.JavaCompileAction; +import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaSemantics; import com.google.devtools.build.lib.testutil.MoreAsserts; import com.google.devtools.build.lib.util.FileType; @@ -2603,8 +2604,8 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase { "android_binary(name = 'a', manifest = 'AndroidManifest.xml', ", " srcs = ['A.java'], javacopts = ['-g:lines,source'])"); - final JavaCompilationArgsProvider provider = - getConfiguredTarget("//java/foo:a").getProvider(JavaCompilationArgsProvider.class); + final JavaCompilationArgsProvider provider = JavaInfo + .getProvider(JavaCompilationArgsProvider.class, getConfiguredTarget("//java/foo:a")); assertThat(provider).isNotNull(); } diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java index 5ae85d5c54..a283dfbbf8 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java @@ -36,6 +36,7 @@ import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.rules.android.deployinfo.AndroidDeployInfoOuterClass.AndroidDeployInfo; import com.google.devtools.build.lib.rules.java.JavaCompileAction; +import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; import com.google.devtools.build.lib.util.Preconditions; @@ -153,7 +154,8 @@ public abstract class AndroidBuildViewTestCase extends BuildViewTestCase { } protected Artifact getResourceClassJar(final ConfiguredTarget target) { - JavaRuleOutputJarsProvider jarProvider = target.getProvider(JavaRuleOutputJarsProvider.class); + JavaRuleOutputJarsProvider jarProvider = + JavaInfo.getProvider(JavaRuleOutputJarsProvider.class, target); assertThat(jarProvider).isNotNull(); return Iterables.find( jarProvider.getOutputJars(), diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java index 0f76cd20d1..98f17b9a70 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java @@ -39,6 +39,7 @@ import com.google.devtools.build.lib.rules.android.AndroidIdeInfoProvider.Source import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; import com.google.devtools.build.lib.rules.java.JavaCompileAction; import com.google.devtools.build.lib.rules.java.JavaExportsProvider; +import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaSemantics; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.Arrays; @@ -345,7 +346,7 @@ public class AndroidLibraryTest extends AndroidBuildViewTestCase { ConfiguredTarget a = getConfiguredTarget("//java/peach:a"); Iterable<String> compileTimeJars = ActionsTestUtil.baseArtifactNames( - a.getProvider(JavaCompilationArgsProvider.class) + JavaInfo.getProvider(JavaCompilationArgsProvider.class, a) .getJavaCompilationArgs().getCompileTimeJars()); assertThat(compileTimeJars).contains("libb-hjar.jar"); assertThat(compileTimeJars).doesNotContain("libc-hjar.jar"); @@ -957,7 +958,8 @@ public class AndroidLibraryTest extends AndroidBuildViewTestCase { ConfiguredTarget libNeverlink = getConfiguredTarget("//java/apps/android:lib_neverlink"); NestedSet<Artifact> neverLinkFilesToBuild = getFilesToBuild(libNeverlink); NestedSet<Artifact> libFilesToBuild = getFilesToBuild(lib); - JavaCompilationArgsProvider argsProvider = foo.getProvider(JavaCompilationArgsProvider.class); + JavaCompilationArgsProvider argsProvider = + JavaInfo.getProvider(JavaCompilationArgsProvider.class, foo); assertThat(argsProvider.getJavaCompilationArgs().getCompileTimeJars()) .contains(ActionsTestUtil.getFirstArtifactEndingWith( |