diff options
Diffstat (limited to 'src/main')
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; + } +} |