From 4b810d5afd32472271820b3e7bdae36d564a3bd4 Mon Sep 17 00:00:00 2001 From: asteinb Date: Wed, 2 May 2018 14:22:47 -0700 Subject: Expose stamp_manifest method to Skylark RELNOTES: none PiperOrigin-RevId: 195151119 --- .../lib/rules/android/AndroidManifestInfo.java | 101 +++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifestInfo.java (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifestInfo.java') diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifestInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifestInfo.java new file mode 100644 index 0000000000..1e44f46ab4 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifestInfo.java @@ -0,0 +1,101 @@ +// 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.events.Location; +import com.google.devtools.build.lib.packages.NativeInfo; +import com.google.devtools.build.lib.packages.NativeProvider; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +import com.google.devtools.build.lib.syntax.Environment; +import com.google.devtools.build.lib.syntax.FunctionSignature; +import com.google.devtools.build.lib.syntax.SkylarkType; + +/** A provider of information about this target's manifest. */ +@SkylarkModule( + name = "AndroidManifestInfo", + doc = + "Information about the Android manifest provided by a rule. Note that, as of now, the" + + " information exposed in this object is not directly consumed by Android rules -" + + " instead, use an AndroidResourcesInfo.", + category = SkylarkModuleCategory.PROVIDER) +public class AndroidManifestInfo extends NativeInfo { + private static final String SKYLARK_NAME = "AndroidManifestInfo"; + + private static final FunctionSignature.WithValues SIGNATURE = + FunctionSignature.WithValues.create( + FunctionSignature.of( + /* numMandatoryPositionals = */ 2, // Manifest file and package + /* numOptionalPositionals = */ 1, // exports_manifest + /* numMandatoryNamedOnly = */ 0, + /* starArg = */ false, + /* kwArg = */ false, + /* names = */ "manifest", + "package", + "exports_manifest"), + /* defaultValues = */ ImmutableList.of(false), // is_dummy + /* types = */ ImmutableList.of( + SkylarkType.of(Artifact.class), // manifest + SkylarkType.STRING, // package + SkylarkType.BOOL)); // exports_manifest + + public static final NativeProvider PROVIDER = + new NativeProvider(AndroidManifestInfo.class, SKYLARK_NAME, SIGNATURE) { + @Override + public AndroidManifestInfo createInstanceFromSkylark( + Object[] args, Environment env, Location loc) { + // Skylark support code puts positional inputs in the correct order and validates types. + return of((Artifact) args[0], (String) args[1], (boolean) args[2]); + } + }; + + private final Artifact manifest; + private final String pkg; + private final boolean exportsManifest; + + static AndroidManifestInfo of(Artifact manifest, String pkg, boolean exportsManifest) { + return new AndroidManifestInfo(manifest, pkg, exportsManifest); + } + + private AndroidManifestInfo(Artifact manifest, String pkg, boolean exportsManifest) { + super(PROVIDER); + this.manifest = manifest; + this.pkg = pkg; + this.exportsManifest = exportsManifest; + } + + @SkylarkCallable( + name = "manifest", + doc = "This target's manifest, merged with manifests from dependencies", + structField = true) + public Artifact getManifest() { + return manifest; + } + + @SkylarkCallable(name = "package", doc = "This target's package", structField = true) + public String getPackage() { + return pkg; + } + + @SkylarkCallable( + name = "exports_manifest", + doc = "If this manifest should be exported to targets that depend on it", + structField = true) + public boolean exportsManifest() { + return exportsManifest; + } +} -- cgit v1.2.3