diff options
author | 2018-07-16 12:39:49 -0700 | |
---|---|---|
committer | 2018-07-16 12:41:16 -0700 | |
commit | 48821a723af41b1561653178e547c7fa86a2a4a6 (patch) | |
tree | 31984efe3e7275f1fef5c22946e95ca9d885e518 /src/main/java/com/google/devtools/build/lib/rules | |
parent | 44c53dcf661ef7c0fdf484c26d3eedf7d2be7593 (diff) |
Make AndroidAssetsInfo createable from Skylark.
RELNOTES: None.
PiperOrigin-RevId: 204788478
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java | 55 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidAssets.java | 5 |
2 files changed, 50 insertions, 10 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); } - } |