diff options
author | Googler <noreply@google.com> | 2018-07-16 12:39:49 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-07-16 12:41:16 -0700 |
commit | 48821a723af41b1561653178e547c7fa86a2a4a6 (patch) | |
tree | 31984efe3e7275f1fef5c22946e95ca9d885e518 /src | |
parent | 44c53dcf661ef7c0fdf484c26d3eedf7d2be7593 (diff) |
Make AndroidAssetsInfo createable from Skylark.
RELNOTES: None.
PiperOrigin-RevId: 204788478
Diffstat (limited to 'src')
5 files changed, 180 insertions, 12 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java index 8920e57189..9ceb67df35 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java @@ -20,19 +20,20 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; +import com.google.devtools.build.lib.packages.BuiltinProvider; import com.google.devtools.build.lib.packages.NativeInfo; -import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidAssetsInfoApi; +import com.google.devtools.build.lib.syntax.EvalException; +import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import java.util.Optional; import javax.annotation.Nullable; /** Provides information about transitive Android assets. */ -public class AndroidAssetsInfo extends NativeInfo implements AndroidAssetsInfoApi { +public final class AndroidAssetsInfo extends NativeInfo + implements AndroidAssetsInfoApi<Artifact, ParsedAndroidAssets> { - private static final String SKYLARK_NAME = "AndroidAssetsInfo"; - - public static final NativeProvider<AndroidAssetsInfo> PROVIDER = - new NativeProvider<AndroidAssetsInfo>(AndroidAssetsInfo.class, SKYLARK_NAME) {}; + public static final String PROVIDER_NAME = "AndroidAssetsInfo"; + public static final Provider PROVIDER = new Provider(); private final Label label; @Nullable private final Artifact validationResult; @@ -96,16 +97,18 @@ public class AndroidAssetsInfo extends NativeInfo implements AndroidAssetsInfoAp this.transitiveCompiledSymbols = transitiveCompiledSymbols; } + @Override public Label getLabel() { return label; } - @Override @Nullable + @Override public Artifact getValidationResult() { return validationResult; } + @Override public NestedSet<ParsedAndroidAssets> getDirectParsedAssets() { return directParsedAssets; } @@ -120,15 +123,17 @@ public class AndroidAssetsInfo extends NativeInfo implements AndroidAssetsInfoAp return getLocalParsedAndroidAssets().map(AndroidAssets::getAssetDirAsString).orElse(null); } - + @Override public NestedSet<ParsedAndroidAssets> getTransitiveParsedAssets() { return transitiveParsedAssets; } + @Override public NestedSet<Artifact> getAssets() { return transitiveAssets; } + @Override public NestedSet<Artifact> getSymbols() { return transitiveSymbols; } @@ -139,7 +144,41 @@ public class AndroidAssetsInfo extends NativeInfo implements AndroidAssetsInfoAp : Optional.empty(); } + @Override public NestedSet<Artifact> getCompiledSymbols() { return transitiveCompiledSymbols; } + + /** The provider can construct the Android IDL provider. */ + public static class Provider extends BuiltinProvider<AndroidAssetsInfo> + implements AndroidAssetsInfoApi.Provider<Artifact, ParsedAndroidAssets> { + + private Provider() { + super(PROVIDER_NAME, AndroidAssetsInfo.class); + } + + @Override + public AndroidAssetsInfo createInfo( + Label label, + Artifact validationResult, + SkylarkNestedSet directParsedAssets, + SkylarkNestedSet transitiveParsedAssets, + SkylarkNestedSet transitiveAssets, + SkylarkNestedSet transitiveSymbols, + SkylarkNestedSet transitiveCompiledSymbols) + throws EvalException { + return new AndroidAssetsInfo( + label, + validationResult, + nestedSet(directParsedAssets, ParsedAndroidAssets.class), + nestedSet(transitiveParsedAssets, ParsedAndroidAssets.class), + nestedSet(transitiveAssets, Artifact.class), + nestedSet(transitiveSymbols, Artifact.class), + nestedSet(transitiveCompiledSymbols, Artifact.class)); + } + + private <T> NestedSet<T> nestedSet(SkylarkNestedSet from, Class<T> with) { + return NestedSetBuilder.<T>naiveLinkOrder().addTransitive(from.getSet(with)).build(); + } + } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidAssets.java b/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidAssets.java index b30e95e871..09784b7df9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidAssets.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidAssets.java @@ -16,11 +16,13 @@ package com.google.devtools.build.lib.rules.android; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion; +import com.google.devtools.build.lib.skylarkbuildapi.android.ParsedAndroidAssetsApi; import java.util.Objects; import javax.annotation.Nullable; /** Parsed Android assets which can be merged together with assets from dependencies. */ -public class ParsedAndroidAssets extends AndroidAssets implements MergableAndroidData { +public class ParsedAndroidAssets extends AndroidAssets + implements MergableAndroidData, ParsedAndroidAssetsApi { private final Artifact symbols; @Nullable private final Artifact compiledSymbols; private final Label label; @@ -92,5 +94,4 @@ public class ParsedAndroidAssets extends AndroidAssets implements MergableAndroi public int hashCode() { return Objects.hash(super.hashCode(), symbols, label); } - } diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidAssetsInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidAssetsInfoApi.java index 3d1aa707a1..2263fa73f9 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidAssetsInfoApi.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidAssetsInfoApi.java @@ -14,11 +14,18 @@ package com.google.devtools.build.lib.skylarkbuildapi.android; import com.google.common.collect.ImmutableList; +import com.google.devtools.build.lib.cmdline.Label; +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; import javax.annotation.Nullable; /** Provides information about transitive Android assets. */ @@ -26,7 +33,13 @@ import javax.annotation.Nullable; name = "AndroidAssetsInfo", doc = "Information about the Android assets provided by a rule.", category = SkylarkModuleCategory.PROVIDER) -public interface AndroidAssetsInfoApi extends StructApi { +public interface AndroidAssetsInfoApi<FileT extends FileApi, AssetsT extends ParsedAndroidAssetsApi> + extends StructApi { + + public static final String NAME = "AndroidAssetsInfo"; + + @SkylarkCallable(name = "label", structField = true, doc = "", documented = false) + Label getLabel(); @SkylarkCallable( name = "validation_result", @@ -42,13 +55,16 @@ public interface AndroidAssetsInfoApi extends StructApi { @Nullable FileApi getValidationResult(); + @SkylarkCallable(name = "direct_parsed_assets", structField = true, doc = "", documented = false) + NestedSet<AssetsT> getDirectParsedAssets(); + /** Returns the local assets for the target. */ @SkylarkCallable( name = "local_assets", doc = "Returns the local assets for the target.", allowReturnNones = true, structField = true) - ImmutableList<? extends FileApi> getLocalAssets(); + ImmutableList<FileT> getLocalAssets(); /** Returns the local asset dir for the target. */ @SkylarkCallable( @@ -57,4 +73,91 @@ public interface AndroidAssetsInfoApi extends StructApi { allowReturnNones = true, structField = true) String getLocalAssetDir(); + + @SkylarkCallable( + name = "transitive_parsed_assets", + structField = true, + doc = "", + documented = false) + NestedSet<AssetsT> getTransitiveParsedAssets(); + + @SkylarkCallable(name = "assets", structField = true, doc = "", documented = false) + NestedSet<FileT> getAssets(); + + @SkylarkCallable(name = "symbols", structField = true, doc = "", documented = false) + NestedSet<FileT> getSymbols(); + + @SkylarkCallable(name = "compiled_symbols", structField = true, doc = "", documented = false) + NestedSet<FileT> getCompiledSymbols(); + + /** The provider implementing this can construct the AndroidAssetsInfo provider. */ + @SkylarkModule(name = "Provider", doc = "", documented = false) + public interface Provider<FileT extends FileApi, AssetsT extends ParsedAndroidAssetsApi> + extends ProviderApi { + + @SkylarkCallable( + name = NAME, + doc = "The <code>AndroidAssetsInfo</code> constructor.", + parameters = { + @Param( + name = "label", + doc = "The label of the target.", + positional = true, + named = false, + type = Label.class), + @Param( + name = "validation_result", + doc = "An artifact of the validation result.", + positional = true, + named = false, + noneable = true, + type = FileApi.class), + @Param( + name = "direct_parsed_assets", + doc = "A depset of all the parsed assets in the target.", + positional = true, + named = false, + type = SkylarkNestedSet.class, + generic1 = ParsedAndroidAssetsApi.class), + @Param( + name = "transitive_parsed_assets", + doc = "A depset of all the parsed assets in the transitive closure.", + positional = true, + named = false, + type = SkylarkNestedSet.class, + generic1 = ParsedAndroidAssetsApi.class), + @Param( + name = "transitive_assets", + doc = "A depset of all the assets in the transitive closure.", + positional = true, + named = false, + type = SkylarkNestedSet.class, + generic1 = FileApi.class), + @Param( + name = "transitive_symbols", + doc = "A depset of all the symbols in the transitive closure.", + positional = true, + named = false, + type = SkylarkNestedSet.class, + generic1 = FileApi.class), + @Param( + name = "transitive_compiled_symbols", + doc = "A depset of all the compiled symbols in the transitive closure.", + positional = true, + named = false, + type = SkylarkNestedSet.class, + generic1 = FileApi.class), + }, + selfCall = true) + @SkylarkConstructor(objectType = AndroidAssetsInfoApi.class) + public AndroidAssetsInfoApi<FileT, AssetsT> createInfo( + Label label, + FileT validationResult, + SkylarkNestedSet directParsedAssets, + SkylarkNestedSet transitiveParsedAssets, + SkylarkNestedSet transitiveAssets, + SkylarkNestedSet transitiveSymbols, + SkylarkNestedSet transitiveCompiledSymbols) + throws EvalException; + } } diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/BUILD b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/BUILD index 48c31e6750..9dc608afd4 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/BUILD @@ -22,6 +22,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib:events", "//src/main/java/com/google/devtools/build/lib:skylarkinterface", "//src/main/java/com/google/devtools/build/lib:syntax", + "//src/main/java/com/google/devtools/build/lib/cmdline", "//src/main/java/com/google/devtools/build/lib/collect/nestedset", "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi", "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java", diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ParsedAndroidAssetsApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ParsedAndroidAssetsApi.java new file mode 100644 index 0000000000..dc36c703b1 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ParsedAndroidAssetsApi.java @@ -0,0 +1,24 @@ +// 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.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; + +/** Parsed Android assets which can be merged together with assets from dependencies. */ +@SkylarkModule( + name = "ParsedAndroidAssetsApi", + doc = "Information about the Android assets provided by a rule.", + category = SkylarkModuleCategory.PROVIDER) +public interface ParsedAndroidAssetsApi {} |