From d5df98d845c5e88fcccc34245de1d48cc470ba95 Mon Sep 17 00:00:00 2001 From: Googler Date: Wed, 18 Jul 2018 10:41:40 -0700 Subject: Expose ProguardMappingProvider to Skylark (as ProguardMappingInfo). RELNOTES: none. PiperOrigin-RevId: 205100703 --- .../build/lib/rules/android/AndroidBinary.java | 5 +- .../lib/rules/android/ProguardMappingProvider.java | 39 ++++++++++++--- .../android/ProguardMappingProviderApi.java | 57 ++++++++++++++++++++++ 3 files changed, 90 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ProguardMappingProviderApi.java (limited to 'src/main/java/com/google/devtools/build') 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 cd4833c4be..7af49f7d76 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 @@ -610,9 +610,8 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { /* isLibrary = */ false); if (dexPostprocessingOutput.proguardMap() != null) { - builder.addProvider( - ProguardMappingProvider.class, - ProguardMappingProvider.create(dexPostprocessingOutput.proguardMap())); + builder.addNativeDeclaredProvider( + new ProguardMappingProvider(dexPostprocessingOutput.proguardMap())); } if (oneVersionEnforcementArtifact != null) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ProguardMappingProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/ProguardMappingProvider.java index f767c40aac..f5dc285095 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ProguardMappingProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ProguardMappingProvider.java @@ -13,21 +13,44 @@ // 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.ProguardMappingProviderApi; +import com.google.devtools.build.lib.syntax.EvalException; /** A target that can provide a proguard obfuscation mapping to Android binaries or tests. */ -@AutoValue @Immutable -public abstract class ProguardMappingProvider implements TransitiveInfoProvider { +public final class ProguardMappingProvider extends NativeInfo + implements ProguardMappingProviderApi { - public static ProguardMappingProvider create(Artifact proguardMapping) { - return new AutoValue_ProguardMappingProvider(proguardMapping); + public static final String PROVIDER_NAME = "ProguardMappingInfo"; + public static final Provider PROVIDER = new Provider(); + + private final Artifact proguardMapping; + + public ProguardMappingProvider(Artifact proguardMapping) { + super(PROVIDER); + this.proguardMapping = proguardMapping; + } + + @Override + public Artifact getProguardMapping() { + return proguardMapping; } - public abstract Artifact getProguardMapping(); + /** The provider can construct the ProguardMappingProvider provider. */ + public static class Provider extends BuiltinProvider + implements ProguardMappingProviderApi.Provider { + + private Provider() { + super(PROVIDER_NAME, ProguardMappingProvider.class); + } - ProguardMappingProvider() {} + @Override + public ProguardMappingProvider createInfo(Artifact proguardMapping) throws EvalException { + return new ProguardMappingProvider(proguardMapping); + } + } } diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ProguardMappingProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ProguardMappingProviderApi.java new file mode 100644 index 0000000000..28df971a77 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ProguardMappingProviderApi.java @@ -0,0 +1,57 @@ +// 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.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 target that can provide a proguard obfuscation mapping to Android binaries or tests. */ +@SkylarkModule( + name = "ProguardMappingProvider", + doc = "Information about the Proguard mapping provided by a rule.", + category = SkylarkModuleCategory.PROVIDER) +public interface ProguardMappingProviderApi extends StructApi { + + public static final String NAME = "ProguardMappingInfo"; + + @SkylarkCallable(name = "proguard_mapping", structField = true, doc = "", documented = false) + FileT getProguardMapping(); + + /** The provider implementing this can construct the ProguardMappingProvider provider. */ + @SkylarkModule(name = "Provider", doc = "", documented = false) + public interface Provider extends ProviderApi { + + @SkylarkCallable( + name = NAME, + doc = "The ProguardMappingInfo constructor.", + parameters = { + @Param( + name = "proguard_mapping", + doc = "An artifact of the proguard mapping.", + positional = true, + named = false, + type = FileApi.class), + }, + selfCall = true) + @SkylarkConstructor(objectType = ProguardMappingProviderApi.class) + public ProguardMappingProviderApi createInfo(FileT proguardMapping) throws EvalException; + } +} -- cgit v1.2.3