| // Copyright 2020 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.packages; |
| |
| import com.google.common.collect.ImmutableList; |
| import com.google.devtools.build.lib.cmdline.Label; |
| import com.google.devtools.build.lib.packages.License.DistributionType; |
| import java.util.List; |
| import java.util.Set; |
| import net.starlark.java.eval.EvalException; |
| import net.starlark.java.syntax.Location; |
| |
| /** Encapsulates the core, default set of {@link PackageArgument}s. */ |
| final class DefaultPackageArguments { |
| |
| private DefaultPackageArguments() {} |
| |
| /** Returns the default set of {@link PackageArgument}s. */ |
| static ImmutableList<PackageArgument<?>> get() { |
| return ImmutableList.of( |
| new DefaultDeprecation(), |
| new DefaultDistribs(), |
| new DefaultApplicableLicenses(), |
| new DefaultLicenses(), |
| new DefaultTestOnly(), |
| new DefaultVisibility(), |
| new Features(), |
| new DefaultCompatibleWith(), |
| new DefaultRestrictedTo()); |
| } |
| |
| private static class DefaultVisibility extends PackageArgument<List<Label>> { |
| private DefaultVisibility() { |
| super("default_visibility", BuildType.LABEL_LIST); |
| } |
| |
| @Override |
| protected void process(Package.Builder pkgBuilder, Location location, |
| List<Label> value) throws EvalException { |
| pkgBuilder.setDefaultVisibility( |
| PackageUtils.getVisibility(pkgBuilder.getBuildFileLabel(), value)); |
| } |
| } |
| |
| private static class DefaultTestOnly extends PackageArgument<Boolean> { |
| private DefaultTestOnly() { |
| super("default_testonly", Type.BOOLEAN); |
| } |
| |
| @Override |
| protected void process(Package.Builder pkgBuilder, Location location, |
| Boolean value) { |
| pkgBuilder.setDefaultTestonly(value); |
| } |
| } |
| |
| private static class DefaultDeprecation extends PackageArgument<String> { |
| private DefaultDeprecation() { |
| super("default_deprecation", Type.STRING); |
| } |
| |
| @Override |
| protected void process(Package.Builder pkgBuilder, Location location, |
| String value) { |
| pkgBuilder.setDefaultDeprecation(value); |
| } |
| } |
| |
| private static class Features extends PackageArgument<List<String>> { |
| private Features() { |
| super("features", Type.STRING_LIST); |
| } |
| |
| @Override |
| protected void process(Package.Builder pkgBuilder, Location location, |
| List<String> value) { |
| pkgBuilder.addFeatures(value); |
| } |
| } |
| |
| /** |
| * Declares the package() attribute specifying the default value for {@link |
| * com.google.devtools.build.lib.packages.RuleClass#APPLICABLE_LICENSES_ATTR} when not explicitly |
| * specified. |
| */ |
| private static class DefaultApplicableLicenses extends PackageArgument<List<Label>> { |
| private static final String DEFAULT_APPLICABLE_LICENSES_ATTRIBUTE = |
| "default_applicable_licenses"; |
| |
| private DefaultApplicableLicenses() { |
| super(DEFAULT_APPLICABLE_LICENSES_ATTRIBUTE, BuildType.LABEL_LIST); |
| } |
| |
| @Override |
| protected void process(Package.Builder pkgBuilder, Location location, List<Label> value) { |
| pkgBuilder.setDefaultApplicableLicenses( |
| value, DEFAULT_APPLICABLE_LICENSES_ATTRIBUTE, location); |
| } |
| } |
| |
| private static class DefaultLicenses extends PackageArgument<License> { |
| private DefaultLicenses() { |
| super("licenses", BuildType.LICENSE); |
| } |
| |
| @Override |
| protected void process(Package.Builder pkgBuilder, Location location, |
| License value) { |
| pkgBuilder.setDefaultLicense(value); |
| } |
| } |
| |
| private static class DefaultDistribs extends PackageArgument<Set<DistributionType>> { |
| private DefaultDistribs() { |
| super("distribs", BuildType.DISTRIBUTIONS); |
| } |
| |
| @Override |
| protected void process(Package.Builder pkgBuilder, Location location, |
| Set<DistributionType> value) { |
| pkgBuilder.setDefaultDistribs(value); |
| } |
| } |
| |
| /** |
| * Declares the package() attribute specifying the default value for {@link |
| * com.google.devtools.build.lib.packages.RuleClass#COMPATIBLE_ENVIRONMENT_ATTR} when not |
| * explicitly specified. |
| */ |
| private static class DefaultCompatibleWith extends PackageArgument<List<Label>> { |
| private static final String DEFAULT_COMPATIBLE_WITH_ATTRIBUTE = "default_compatible_with"; |
| |
| private DefaultCompatibleWith() { |
| super(DEFAULT_COMPATIBLE_WITH_ATTRIBUTE, BuildType.LABEL_LIST); |
| } |
| |
| @Override |
| protected void process(Package.Builder pkgBuilder, Location location, |
| List<Label> value) { |
| pkgBuilder.setDefaultCompatibleWith(value, DEFAULT_COMPATIBLE_WITH_ATTRIBUTE, location); |
| } |
| } |
| |
| /** |
| * Declares the package() attribute specifying the default value for {@link |
| * com.google.devtools.build.lib.packages.RuleClass#RESTRICTED_ENVIRONMENT_ATTR} when not |
| * explicitly specified. |
| */ |
| private static class DefaultRestrictedTo extends PackageArgument<List<Label>> { |
| private static final String DEFAULT_RESTRICTED_TO_ATTRIBUTE = "default_restricted_to"; |
| |
| private DefaultRestrictedTo() { |
| super(DEFAULT_RESTRICTED_TO_ATTRIBUTE, BuildType.LABEL_LIST); |
| } |
| |
| @Override |
| protected void process(Package.Builder pkgBuilder, Location location, |
| List<Label> value) { |
| pkgBuilder.setDefaultRestrictedTo(value, DEFAULT_RESTRICTED_TO_ATTRIBUTE, location); |
| } |
| } |
| } |