aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-07-16 14:40:26 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-16 14:41:57 -0700
commitb7f42ab89a9c46902de867256ec23c11cb34fb11 (patch)
treee5eddd1bebccee06e752570f3cb937bf7fbededc
parent83ddf681a8c5814283cb0c1d470a4c532f32fae4 (diff)
Expose AndroidPreDexJarProvider to Skylark as AndroidPreDexJarInfo.
RELNOTES: None PiperOrigin-RevId: 204809750
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidPreDexJarProvider.java41
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidPreDexJarProviderApi.java59
3 files changed, 93 insertions, 11 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 5393ae697f..b0577bed0e 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
@@ -657,7 +657,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
androidCommon.getInstrumentedJar(),
applicationManifest.getManifest(),
AndroidCommon.getApkDebugSigningKey(ruleContext)))
- .addProvider(AndroidPreDexJarProvider.class, AndroidPreDexJarProvider.create(jarToDex))
+ .addNativeDeclaredProvider(new AndroidPreDexJarProvider(jarToDex))
.addProvider(
AndroidFeatureFlagSetProvider.class,
AndroidFeatureFlagSetProvider.create(
@@ -1886,7 +1886,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
Artifact filterJar =
ruleContext
.getPrerequisite("instruments", Mode.TARGET)
- .getProvider(AndroidPreDexJarProvider.class)
+ .get(AndroidPreDexJarProvider.PROVIDER)
.getPreDexJar();
Artifact filteredDeployJar =
ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_TEST_FILTERED_JAR);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidPreDexJarProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidPreDexJarProvider.java
index 56b0937b26..c987b3e914 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidPreDexJarProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidPreDexJarProvider.java
@@ -11,24 +11,47 @@
// 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.rules.android;
-import com.google.auto.value.AutoValue;
import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.packages.BuiltinProvider;
+import com.google.devtools.build.lib.packages.NativeInfo;
+import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidPreDexJarProviderApi;
+import com.google.devtools.build.lib.syntax.EvalException;
/** A provider of the final Jar to be dexed for targets that build APKs. */
-@AutoValue
@Immutable
-public abstract class AndroidPreDexJarProvider implements TransitiveInfoProvider {
+public final class AndroidPreDexJarProvider extends NativeInfo
+ implements AndroidPreDexJarProviderApi<Artifact> {
+ public static final String PROVIDER_NAME = "AndroidPreDexJarInfo";
+ public static final Provider PROVIDER = new Provider();
- public static AndroidPreDexJarProvider create(Artifact preDexJar) {
- return new AutoValue_AndroidPreDexJarProvider(preDexJar);
- }
+ private final Artifact preDexJar;
/** Returns the jar to be dexed. */
- public abstract Artifact getPreDexJar();
+ @Override
+ public Artifact getPreDexJar() {
+ return preDexJar;
+ }
- AndroidPreDexJarProvider() {}
+ public AndroidPreDexJarProvider(Artifact preDexJar) {
+ super(PROVIDER);
+ this.preDexJar = preDexJar;
+ }
+
+ /** Provider class for {@link AndroidPreDexJarProvider} objects. */
+ public static class Provider extends BuiltinProvider<AndroidPreDexJarProvider>
+ implements AndroidPreDexJarProviderApi.Provider<Artifact> {
+ private Provider() {
+ super(PROVIDER_NAME, AndroidPreDexJarProvider.class);
+ }
+
+ @Override
+ public AndroidPreDexJarProviderApi<Artifact> createInfo(Artifact preDexJar)
+ throws EvalException {
+ return new AndroidPreDexJarProvider(preDexJar);
+ }
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidPreDexJarProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidPreDexJarProviderApi.java
new file mode 100644
index 0000000000..ad4b50c96f
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidPreDexJarProviderApi.java
@@ -0,0 +1,59 @@
+// Copyright 2017 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.android;
+
+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;
+
+/** A provider of the final Jar to be dexed for targets that build APKs. */
+@SkylarkModule(
+ name = "AndroidPreDexJarInfo",
+ doc = "Information about the final Jar to be dexed for targets that build APKs.",
+ category = SkylarkModuleCategory.PROVIDER)
+public interface AndroidPreDexJarProviderApi<FileT extends FileApi> extends StructApi {
+ /** Name of this info object. */
+ public static String NAME = "AndroidPreDexJarInfo";
+
+ /** Returns the Java package. */
+ @SkylarkCallable(name = "pre_dex_jar", structField = true, doc = "", documented = false)
+ FileT getPreDexJar();
+
+ /** The provider implementing this can construct the AndroidIdeInfo provider. */
+ @SkylarkModule(name = "Provider", doc = "", documented = false)
+ public interface Provider<FileT extends FileApi> extends ProviderApi {
+
+ @SkylarkCallable(
+ name = NAME,
+ doc = "The <code>AndroidPreDexJarInfo</code> constructor.",
+ parameters = {
+ @Param(
+ name = "pre_dex_jar",
+ doc = "The jar to be dexed.",
+ positional = true,
+ named = false,
+ type = FileApi.class),
+ },
+ selfCall = true)
+ @SkylarkConstructor(objectType = AndroidPreDexJarProviderApi.class)
+ public AndroidPreDexJarProviderApi<FileT> createInfo(FileT preDexJar) throws EvalException;
+ }
+}