aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar elenairina <elenairina@google.com>2017-10-10 14:08:54 +0200
committerGravatar Marcel Hlopko <hlopko@google.com>2017-10-11 10:00:00 +0200
commit7c605cf6ea9755a06e5abb16a631faac8ebe2937 (patch)
tree58b2a1df3d14e9942c91729655375602c0198ead /src
parentca74482825e0c0ca5d119eceab74ba4292428557 (diff)
Return JavaInfo providers only once in Java rules.
Previously the java rules returned some providers twice: once as regular providers and once wrapped in JavaInfo (e.g. JavaCompilationArgsProvider). This is unnecessary, inefficient and error prone. JavaInfo should be the only way of returning these providers. RELNOTES: None. PiperOrigin-RevId: 171663550
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoLibraryRule.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaProtoLibraryRule.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java27
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AarImportBaseRule.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/DataBinding.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java23
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java8
-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/JavaImport.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaImportBaseRule.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiProvider.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoLibrary.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoSkylarkCommon.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/StrictDepsUtils.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java10
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java7
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java5
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java4
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java6
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(