From e2a7b9a14c5da2b9fc1c3b13c85a498e91f33be3 Mon Sep 17 00:00:00 2001 From: Googler Date: Wed, 16 May 2018 07:27:01 -0700 Subject: Expose local_proguard_specs to Skylark. RELNOTES: none PiperOrigin-RevId: 196824775 --- .../build/lib/rules/android/AndroidLibrary.java | 2 + .../lib/rules/android/AndroidProguardInfo.java | 71 ++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 src/main/java/com/google/devtools/build/lib/rules/android/AndroidProguardInfo.java (limited to 'src/main/java/com/google/devtools/build/lib/rules') 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 3518cb8ce3..54f20f389a 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 @@ -239,6 +239,8 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { AndroidCcLinkParamsProvider.class, AndroidCcLinkParamsProvider.create(androidCommon.getCcLinkParamsStore())) .add(ProguardSpecProvider.class, new ProguardSpecProvider(transitiveProguardConfigs)) + .addNativeDeclaredProvider( + new AndroidProguardInfo(proguardLibrary.collectLocalProguardSpecs())) .addOutputGroup(OutputGroupInfo.HIDDEN_TOP_LEVEL, transitiveProguardConfigs) .add( AndroidLibraryResourceClassJarProvider.class, diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidProguardInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidProguardInfo.java new file mode 100644 index 0000000000..186002296d --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidProguardInfo.java @@ -0,0 +1,71 @@ +// 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.rules.android; + +import com.google.common.collect.ImmutableList; +import com.google.devtools.build.lib.actions.Artifact; +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.rules.java.ProguardLibrary; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor; + +/** + * A target that can provide local proguard specifications, returned by the + * {@link ProguardLibrary#collectLocalProguardSpecs()} method. + *

This class provides additional data, not available in the pure native + * {@link com.google.devtools.build.lib.rules.java.ProguardSpecProvider} provider. + */ +@AutoCodec +@Immutable +public class AndroidProguardInfo extends NativeInfo { + public static final String PROVIDER_NAME = "AndroidProguardInfo"; + public static final Provider PROVIDER = new Provider(); + + private final ImmutableList localProguardSpecs; + + public AndroidProguardInfo(ImmutableList localProguardSpecs) { + super(PROVIDER); + this.localProguardSpecs = localProguardSpecs; + } + + @SkylarkCallable( + name = "local_proguard_specs", + structField = true, + doc = "Returns the local proguard specs defined by this target." + ) + public ImmutableList getLocalProguardSpecs() { + return localProguardSpecs; + } + + /** + * Provider class for {@link AndroidProguardInfo} objects. + */ + public static class Provider extends BuiltinProvider { + private Provider() { + super(PROVIDER_NAME, AndroidProguardInfo.class); + } + + @SkylarkCallable( + name = PROVIDER_NAME, + doc = "The AndroidProguardInfo constructor.", + selfCall = true) + @SkylarkConstructor(objectType = AndroidProguardInfo.class) + public AndroidProguardInfo androidProguardInfo(ImmutableList localProguardSpecs) { + return new AndroidProguardInfo(localProguardSpecs); + } + } +} -- cgit v1.2.3