aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-07-17 14:24:30 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-17 14:25:47 -0700
commit27e81776f6dd684aca01c1066216a3c127821da5 (patch)
treefb035b41aebd8397320ebfd3a636b39d2fe2c131
parent86e007fdeced120cda3108e97044db4fd817d5f0 (diff)
Expose ProguardSpecProvider to skylark.
RELNOTES: None PiperOrigin-RevId: 204974291
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibrary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java34
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/ProguardSpecProviderApi.java60
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java2
12 files changed, 102 insertions, 18 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
index cbbbaaefcb..869267d318 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
@@ -407,7 +407,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
.list()
: ImmutableList.<Artifact>of(),
ruleContext.getPrerequisiteArtifacts(":extra_proguard_specs", Mode.TARGET).list(),
- ruleContext.getPrerequisites("deps", Mode.TARGET, ProguardSpecProvider.class));
+ ruleContext.getPrerequisites("deps", Mode.TARGET, ProguardSpecProvider.PROVIDER));
// TODO(bazel-team): Verify that proguard spec files don't contain -printmapping directions
// which this -printmapping command line flag will override.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java
index 8748454bdb..1fcdb2c6d5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java
@@ -189,7 +189,7 @@ public class AndroidIdlHelper {
if (aidlLib == null) {
return;
}
- ProguardSpecProvider provider = aidlLib.getProvider(ProguardSpecProvider.class);
+ ProguardSpecProvider provider = aidlLib.get(ProguardSpecProvider.PROVIDER);
if (provider == null) {
return;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
index d2afb8e678..26115c36fa 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
@@ -246,7 +246,7 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
JavaSourceInfoProvider.fromJavaTargetAttributes(javaTargetAttributes, javaSemantics))
.addNativeDeclaredProvider(
new AndroidCcLinkParamsProvider(androidCommon.getCcLinkParamsStore()))
- .add(ProguardSpecProvider.class, new ProguardSpecProvider(transitiveProguardConfigs))
+ .addNativeDeclaredProvider(new ProguardSpecProvider(transitiveProguardConfigs))
.addNativeDeclaredProvider(
new AndroidProguardInfo(proguardLibrary.collectLocalProguardSpecs()))
.addOutputGroup(OutputGroupInfo.HIDDEN_TOP_LEVEL, transitiveProguardConfigs)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
index c3a0c8634d..97583f4def 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
@@ -623,7 +623,7 @@ public abstract class AndroidSkylarkData
binaryDataInfo.getManifestInfo().getManifest(),
filesFromConfiguredTargets(localProguardSpecs),
filesFromConfiguredTargets(extraProguardSpecs),
- getProviders(deps, ProguardSpecProvider.class));
+ getProviders(deps, ProguardSpecProvider.PROVIDER));
// TODO(asteinb): There should never be more than one direct resource exposed in the provider.
// Can we adjust its structure to take this into account?
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 e09e95a663..c8e9e97308 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
@@ -158,7 +158,7 @@ public class JavaImport implements RuleConfiguredTargetFactory {
JavaNativeLibraryProvider.class,
new JavaNativeLibraryProvider(transitiveJavaNativeLibraries))
.add(JavaSourceInfoProvider.class, javaSourceInfoProvider)
- .add(ProguardSpecProvider.class, new ProguardSpecProvider(proguardSpecs))
+ .addNativeDeclaredProvider(new ProguardSpecProvider(proguardSpecs))
.addOutputGroup(JavaSemantics.SOURCE_JARS_OUTPUT_GROUP, transitiveJavaSourceJars)
.addOutputGroup(OutputGroupInfo.HIDDEN_TOP_LEVEL, proguardSpecs)
.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 c40d186e19..f71a1bde3b 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
@@ -215,12 +215,11 @@ public class JavaLibrary implements RuleConfiguredTargetFactory {
.setFilesToBuild(filesToBuild)
.addProvider(new JavaNativeLibraryProvider(transitiveJavaNativeLibraries))
.addProvider(JavaSourceInfoProvider.fromJavaTargetAttributes(attributes, semantics))
- .addProvider(new ProguardSpecProvider(proguardSpecs))
+ .addNativeDeclaredProvider(new ProguardSpecProvider(proguardSpecs))
.addNativeDeclaredProvider(javaInfo)
.addOutputGroup(JavaSemantics.SOURCE_JARS_OUTPUT_GROUP, transitiveSourceJars)
.addOutputGroup(OutputGroupInfo.HIDDEN_TOP_LEVEL, proguardSpecs);
-
if (ruleContext.hasErrors()) {
return null;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java
index 7328701eb7..4c27def83d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardHelper.java
@@ -253,7 +253,7 @@ public abstract class ProguardHelper {
ruleContext.attributes().has(PROGUARD_SPECS, BuildType.LABEL_LIST)
? ruleContext.getPrerequisiteArtifacts(PROGUARD_SPECS, Mode.TARGET).list()
: ImmutableList.<Artifact>of(),
- ruleContext.getPrerequisites("deps", Mode.TARGET, ProguardSpecProvider.class));
+ ruleContext.getPrerequisites("deps", Mode.TARGET, ProguardSpecProvider.PROVIDER));
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibrary.java
index 0cdc265a31..f2c1cb4c9c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibrary.java
@@ -106,7 +106,7 @@ public final class ProguardLibrary {
}
NestedSetBuilder<Artifact> dependencySpecsBuilder = NestedSetBuilder.naiveLinkOrder();
for (ProguardSpecProvider provider :
- ruleContext.getPrerequisites(attributeName, mode, ProguardSpecProvider.class)) {
+ ruleContext.getPrerequisites(attributeName, mode, ProguardSpecProvider.PROVIDER)) {
dependencySpecsBuilder.addTransitive(provider.getTransitiveProguardSpecs());
}
return dependencySpecsBuilder.build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java
index 0db1e3371e..79f1c69fad 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java
@@ -14,23 +14,30 @@
package com.google.devtools.build.lib.rules.java;
import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.packages.BuiltinProvider;
+import com.google.devtools.build.lib.packages.NativeInfo;
+import com.google.devtools.build.lib.skylarkbuildapi.java.ProguardSpecProviderApi;
+import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
/** A target that can provide proguard specifications to Android binaries. */
@Immutable
-@AutoCodec
-public final class ProguardSpecProvider implements TransitiveInfoProvider {
+public final class ProguardSpecProvider extends NativeInfo
+ implements ProguardSpecProviderApi<Artifact> {
+
+ public static final String PROVIDER_NAME = "ProguardSpecProvider";
+ public static final Provider PROVIDER = new Provider();
private final NestedSet<Artifact> transitiveProguardSpecs;
public ProguardSpecProvider(NestedSet<Artifact> transitiveProguardSpecs) {
+ super(PROVIDER);
this.transitiveProguardSpecs = transitiveProguardSpecs;
}
+ @Override
public NestedSet<Artifact> getTransitiveProguardSpecs() {
return transitiveProguardSpecs;
}
@@ -43,4 +50,23 @@ public final class ProguardSpecProvider implements TransitiveInfoProvider {
return new ProguardSpecProvider(specs.build());
}
+ /** Provider class for {@link ProguardSpecProvider} objects. */
+ public static class Provider extends BuiltinProvider<ProguardSpecProvider>
+ implements ProguardSpecProviderApi.Provider<Artifact> {
+ private Provider() {
+ super(PROVIDER_NAME, ProguardSpecProvider.class);
+ }
+
+ public String getName() {
+ return PROVIDER_NAME;
+ }
+
+ @Override
+ public ProguardSpecProvider create(SkylarkNestedSet specs) {
+ return new ProguardSpecProvider(
+ NestedSetBuilder.<Artifact>stableOrder()
+ .addTransitive(specs.getSet(Artifact.class))
+ .build());
+ }
+ }
}
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 6e38294284..cb9be32ef6 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
@@ -92,9 +92,8 @@ public class JavaLiteProtoLibrary implements RuleConfiguredTargetFactory {
.addSkylarkTransitiveInfo(
JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext())
.addProvider(RunfilesProvider.withData(Runfiles.EMPTY, runfiles))
- .addOutputGroup(
- OutputGroupInfo.DEFAULT, NestedSetBuilder.<Artifact>emptySet(STABLE_ORDER))
- .addProvider(getJavaLiteRuntimeSpec(ruleContext))
+ .addOutputGroup(OutputGroupInfo.DEFAULT, NestedSetBuilder.<Artifact>emptySet(STABLE_ORDER))
+ .addNativeDeclaredProvider(getJavaLiteRuntimeSpec(ruleContext))
.addNativeDeclaredProvider(javaInfo)
.addProvider(createCcLinkParamsStore(ruleContext, ImmutableList.of()))
.build();
@@ -110,7 +109,7 @@ public class JavaLiteProtoLibrary implements RuleConfiguredTargetFactory {
return new ProguardSpecProvider(specs);
}
- ProguardSpecProvider specProvider = runtime.getProvider(ProguardSpecProvider.class);
+ ProguardSpecProvider specProvider = runtime.get(ProguardSpecProvider.PROVIDER);
if (specProvider == null) {
return new ProguardSpecProvider(specs);
}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/ProguardSpecProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/ProguardSpecProviderApi.java
new file mode 100644
index 0000000000..39b2cafe69
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/ProguardSpecProviderApi.java
@@ -0,0 +1,60 @@
+// Copyright 2018 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.lib.skylarkbuildapi.java;
+
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
+import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi;
+import com.google.devtools.build.lib.skylarkbuildapi.StructApi;
+import com.google.devtools.build.lib.skylarkinterface.Param;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+
+/** Provides information about proguard specs for Android binaries. */
+@SkylarkModule(
+ name = "ProguardSpecProvider",
+ doc = "Proguard specifications used for Android binaries.",
+ category = SkylarkModuleCategory.PROVIDER)
+public interface ProguardSpecProviderApi<FileT extends FileApi> extends StructApi {
+
+ public static final String NAME = "ProguardSpecProvider";
+
+ @SkylarkCallable(name = "specs", structField = true, doc = "", documented = false)
+ NestedSet<FileT> getTransitiveProguardSpecs();
+
+ /** The provider implementing this can construct the ProguardSpecProvider. */
+ @SkylarkModule(name = "Provider", doc = "", documented = false)
+ public interface Provider<FileT extends FileApi> extends ProviderApi {
+
+ @SkylarkCallable(
+ name = NAME,
+ doc = "The <code>ProguardSpecProvider</code> constructor.",
+ parameters = {
+ @Param(
+ name = "specs",
+ doc = "Transitive proguard specs.",
+ positional = true,
+ named = false,
+ type = SkylarkNestedSet.class,
+ generic1 = FileApi.class),
+ },
+ selfCall = true)
+ @SkylarkConstructor(objectType = ProguardSpecProviderApi.class)
+ ProguardSpecProviderApi<FileT> create(SkylarkNestedSet specs) throws EvalException;
+ }
+}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java
index bbb35bf536..ad2cb1d405 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java
@@ -284,7 +284,7 @@ public class SkylarkJavaLiteProtoLibraryTest extends BuildViewTestCase {
"proto_library(name = 'bar')");
NestedSet<Artifact> providedSpecs =
getConfiguredTarget("//x:lite_pb2")
- .getProvider(ProguardSpecProvider.class)
+ .get(ProguardSpecProvider.PROVIDER)
.getTransitiveProguardSpecs();
assertThat(ActionsTestUtil.baseArtifactNames(providedSpecs))