From 6429bc0e060e0a0a2018ef73c2578167ee2b91aa Mon Sep 17 00:00:00 2001 From: asteinb Date: Thu, 22 Mar 2018 09:42:57 -0700 Subject: Create AndroidManifestInfo provider This provider is the first part of the Skylark Android Data API. This provider is not yet used by the native android_* rules, and is subject to change if needed to implement the rest of the Skylark Android data API. RELNOTES: none PiperOrigin-RevId: 190078860 --- .../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..21ce0ac001 --- /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.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", + 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, // is_dummy defaults to False + /* numMandatoryNamedOnly = */ 0, + /* starArg = */ false, + /* kwArg = */ false, + /* names = */ "manifest", + "package", + "is_dummy"), + /* defaultValues = */ ImmutableList.of(false), // is_dummy + /* types = */ ImmutableList.of( + SkylarkType.of(Artifact.class), // manifest + SkylarkType.STRING, // package + SkylarkType.BOOL)); // is_dummy + + public static final NativeProvider PROVIDER = + new NativeProvider(AndroidManifestInfo.class, SKYLARK_NAME, SIGNATURE) { + @Override + public AndroidManifestInfo createInstanceFromSkylark(Object[] args, 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 isDummy; + + static AndroidManifestInfo of(Artifact manifest, String pkg, boolean isDummy) { + return new AndroidManifestInfo(manifest, pkg, isDummy); + } + + private AndroidManifestInfo(Artifact manifest, String pkg, boolean isDummy) { + super(PROVIDER); + this.manifest = manifest; + this.pkg = pkg; + this.isDummy = isDummy; + } + + @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 = "is_dummy", + doc = + "If true, this manifest is a Bazel-generated file used to provide package information to" + + " tools. If false, this manifest is based on one or more user-supplied manifests.", + structField = true + ) + public boolean isDummy() { + return isDummy; + } +} -- cgit v1.2.3