aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar cushon <cushon@google.com>2017-12-19 13:46:46 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-12-19 13:48:16 -0800
commit2dc365a6934c8cf15c2b23be23fceaf082ca75e2 (patch)
treef3a473c735b941d52434dea5129f0d9d8d9e5568 /src
parent09894d1001aa2e0140beb21cd36615895e204e73 (diff)
Replace java_plugin_configuration with java_package_configuration
java_toolchain.plugin_configuration creates cycles in the unconfigured target graph. Instead, use the same per-package configuration approach to allow enabling javacopts, which can be used to enable built-in checks on a per-package basis. PiperOrigin-RevId: 179598500
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/BUILD6
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java23
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaPackageConfiguration.java (renamed from src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginConfiguration.java)12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaPackageConfigurationProvider.java (renamed from src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginConfigurationProvider.java)22
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaPackageConfigurationRule.java (renamed from src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginConfigurationRule.java)48
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java8
9 files changed, 72 insertions, 71 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index d16c7a4175..22147ec52c 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -712,9 +712,9 @@ java_library(
"rules/java/JavaImportBaseRule.java",
"rules/java/JavaInfo.java",
"rules/java/JavaLibrary.java",
+ "rules/java/JavaPackageConfiguration.java",
+ "rules/java/JavaPackageConfigurationRule.java",
"rules/java/JavaPlugin.java",
- "rules/java/JavaPluginConfiguration.java",
- "rules/java/JavaPluginConfigurationRule.java",
"rules/java/JavaPrimaryClassProvider.java",
"rules/java/JavaRuntime.java",
"rules/java/JavaRuntimeAlias.java",
@@ -813,7 +813,7 @@ java_library(
"rules/java/JavaLibraryHelper.java",
"rules/java/JavaNativeLibraryProvider.java",
"rules/java/JavaOptions.java",
- "rules/java/JavaPluginConfigurationProvider.java",
+ "rules/java/JavaPackageConfigurationProvider.java",
"rules/java/JavaPluginInfoProvider.java",
"rules/java/JavaRuleClasses.java",
"rules/java/JavaRuleOutputJarsProvider.java",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
index 0cad20cd0f..f503af88ee 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
@@ -118,7 +118,7 @@ import com.google.devtools.build.lib.rules.java.JavaConfigurationLoader;
import com.google.devtools.build.lib.rules.java.JavaImportBaseRule;
import com.google.devtools.build.lib.rules.java.JavaInfo;
import com.google.devtools.build.lib.rules.java.JavaOptions;
-import com.google.devtools.build.lib.rules.java.JavaPluginConfigurationRule;
+import com.google.devtools.build.lib.rules.java.JavaPackageConfigurationRule;
import com.google.devtools.build.lib.rules.java.JavaRuleClasses.IjarBaseRule;
import com.google.devtools.build.lib.rules.java.JavaRuntimeAlias;
import com.google.devtools.build.lib.rules.java.JavaRuntimeRule;
@@ -397,7 +397,7 @@ public class BazelRuleClassProvider {
builder.addRuleDefinition(new BazelJavaTestRule());
builder.addRuleDefinition(new BazelJavaPluginRule());
builder.addRuleDefinition(new JavaToolchainRule());
- builder.addRuleDefinition(new JavaPluginConfigurationRule());
+ builder.addRuleDefinition(new JavaPackageConfigurationRule());
builder.addRuleDefinition(new JavaRuntimeRule());
builder.addRuleDefinition(new JavaRuntimeSuiteRule());
builder.addRuleDefinition(new JavaRuntimeAlias.JavaRuntimeAliasRule());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
index 4b246657c3..5b018b2fb6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
@@ -63,6 +63,7 @@ import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
+import java.util.stream.Stream;
import javax.annotation.Nullable;
/**
@@ -459,12 +460,25 @@ public class JavaCommon {
private ImmutableList<String> computeJavacOpts(Iterable<String> extraJavacOpts) {
return Streams.concat(
- JavaToolchainProvider.from(ruleContext).getJavacOptions().stream(),
+ toolchainJavacOpts(ruleContext),
Streams.stream(extraJavacOpts),
ruleContext.getExpander().withDataLocations().tokenized("javacopts").stream())
.collect(toImmutableList());
}
+ private Stream<String> toolchainJavacOpts(RuleContext ruleContext) {
+ JavaToolchainProvider toolchain = JavaToolchainProvider.from(ruleContext);
+ return Stream.concat(
+ toolchain.getJavacOptions().stream(),
+ // Enable any javacopts from java_toolchain.packages that are configured for the current
+ // package.
+ toolchain
+ .packageConfiguration()
+ .stream()
+ .filter(p -> p.matches(ruleContext.getLabel()))
+ .flatMap(p -> p.javacopts().stream()));
+ }
+
public static PathFragment getHostJavaExecutable(RuleContext ruleContext) {
JavaRuntimeInfo javaRuntime = JavaHelper.getHostJavaRuntime(ruleContext);
return javaRuntime != null
@@ -824,13 +838,6 @@ public class JavaCommon {
getPluginInfoProvidersForAttribute(ruleContext, ":java_plugins", Mode.HOST));
Iterables.addAll(result, getPluginInfoProvidersForAttribute(ruleContext, "plugins", Mode.HOST));
Iterables.addAll(result, getPluginInfoProvidersForAttribute(ruleContext, "deps", Mode.TARGET));
- // Enable any plugins from java_toolchain.plugins that are configured for the current package.
- JavaToolchainProvider.from(ruleContext)
- .pluginConfiguration()
- .stream()
- .filter(p -> p.matches(ruleContext.getLabel()))
- .map(JavaPluginConfigurationProvider::plugin)
- .forEachOrdered(result::add);
return ImmutableList.copyOf(result);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaPackageConfiguration.java
index ac9ac3017c..649957c3d5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaPackageConfiguration.java
@@ -25,10 +25,11 @@ import com.google.devtools.build.lib.analysis.RunfilesProvider;
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
+import com.google.devtools.build.lib.syntax.Type;
import java.util.List;
-/** Implementation for the java_plugin_configuration rule. */
-public class JavaPluginConfiguration implements RuleConfiguredTargetFactory {
+/** Implementation for the java_package_configuration rule. */
+public class JavaPackageConfiguration implements RuleConfiguredTargetFactory {
@Override
public ConfiguredTarget create(RuleContext ruleContext) {
@@ -36,14 +37,11 @@ public class JavaPluginConfiguration implements RuleConfiguredTargetFactory {
ImmutableList.copyOf(
ruleContext.getPrerequisites(
"packages", Mode.HOST, PackageSpecificationProvider.class));
- JavaPluginInfoProvider plugins =
- JavaPluginInfoProvider.merge(
- JavaInfo.getProvidersFromListOfTargets(
- JavaPluginInfoProvider.class, ruleContext.getPrerequisites("plugins", Mode.HOST)));
+ List<String> javacopts = ruleContext.attributes().get("javacopts", Type.STRING_LIST);
return new RuleConfiguredTargetBuilder(ruleContext)
.addProvider(RunfilesProvider.class, RunfilesProvider.simple(Runfiles.EMPTY))
.setFilesToBuild(NestedSetBuilder.emptySet(Order.STABLE_ORDER))
- .addProvider(JavaPluginConfigurationProvider.create(packages, plugins))
+ .addProvider(JavaPackageConfigurationProvider.create(packages, javacopts))
.build();
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginConfigurationProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaPackageConfigurationProvider.java
index e1ca135759..3915e4c13d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginConfigurationProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaPackageConfigurationProvider.java
@@ -22,26 +22,26 @@ import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import java.util.List;
-/** A provider for Java plugin configuration. */
+/** A provider for Java per-package configuration. */
@AutoValue
@Immutable
-public abstract class JavaPluginConfigurationProvider implements TransitiveInfoProvider {
+public abstract class JavaPackageConfigurationProvider implements TransitiveInfoProvider {
- /** Creates a {@link JavaPluginConfigurationProvider}. */
- public static JavaPluginConfigurationProvider create(
- List<PackageSpecificationProvider> packageSpecifications, JavaPluginInfoProvider plugin) {
- return new AutoValue_JavaPluginConfigurationProvider(packageSpecifications, plugin);
+ /** Creates a {@link JavaPackageConfigurationProvider}. */
+ public static JavaPackageConfigurationProvider create(
+ List<PackageSpecificationProvider> packageSpecifications, List<String> javacopts) {
+ return new AutoValue_JavaPackageConfigurationProvider(packageSpecifications, javacopts);
}
- /** Package specifications for which the plugins should be enabled. */
+ /** Package specifications for which the configuration should be applied. */
abstract List<PackageSpecificationProvider> packageSpecifications();
- /** The Java plugins described by this configuration. */
- abstract JavaPluginInfoProvider plugin();
+ /** The javacopts for this configuration. */
+ abstract List<String> javacopts();
/**
- * Returns true if this plugin configuration matches the current label: that is, if the label's
- * package is contained by any of the {@link #packageSpecifications}.
+ * Returns true if this configuration matches the current label: that is, if the label's package
+ * is contained by any of the {@link #packageSpecifications}.
*/
public boolean matches(Label label) {
return packageSpecifications()
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginConfigurationRule.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaPackageConfigurationRule.java
index 5e4522201d..2955f955c2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginConfigurationRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaPackageConfigurationRule.java
@@ -17,7 +17,6 @@ package com.google.devtools.build.lib.rules.java;
import static com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition.HOST;
import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.BuildType.LICENSE;
-import static com.google.devtools.build.lib.rules.java.JavaRuleClasses.CONTAINS_JAVA_PROVIDER;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
@@ -27,31 +26,27 @@ import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder;
+import com.google.devtools.build.lib.syntax.Type;
-/** Rule definition for {@code java_plugin_configuration} */
-public class JavaPluginConfigurationRule implements RuleDefinition {
+/** Rule definition for {@code java_package_configuration} */
+public class JavaPackageConfigurationRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
return builder
- /* <!-- #BLAZE_RULE(java_plugin_configuration).ATTRIBUTE(packages) -->
+ /* <!-- #BLAZE_RULE(java_package_configuration).ATTRIBUTE(packages) -->
The set of <code><a href="${link package_group}">package_group</a></code>s
- the plugins in this configuration should be enabled for.
+ the configuration should be applied to.
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
.add(
attr("packages", BuildType.LABEL_LIST)
.cfg(HOST)
.allowedFileTypes()
.mandatoryNativeProviders(ImmutableList.of(PackageSpecificationProvider.class)))
- /* <!-- #BLAZE_RULE(java_plugin_configuration).ATTRIBUTE(packages) -->
- The list of <code><a href="${link java_plugin}">java_plugin</a></code>s included in this
- configuration.
+ /* <!-- #BLAZE_RULE(java_package_configuration).ATTRIBUTE(javacopts) -->
+ Java compiler flags.
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
- .add(
- attr("plugins", BuildType.LABEL_LIST)
- .cfg(HOST)
- .allowedFileTypes()
- .mandatoryProvidersList(ImmutableList.of(CONTAINS_JAVA_PROVIDER)))
+ .add(attr("javacopts", Type.STRING_LIST))
.add(attr("output_licenses", LICENSE))
.build();
}
@@ -59,30 +54,31 @@ public class JavaPluginConfigurationRule implements RuleDefinition {
@Override
public Metadata getMetadata() {
return RuleDefinition.Metadata.builder()
- .name("java_plugin_configuration")
+ .name("java_package_configuration")
.ancestors(BaseRuleClasses.BaseRule.class)
- .factoryClass(JavaPluginConfiguration.class)
+ .factoryClass(JavaPackageConfiguration.class)
.build();
}
}
-/*<!-- #BLAZE_RULE (NAME = java_plugin_configuration, TYPE = OTHER, FAMILY = Java) -->
+/*<!-- #BLAZE_RULE (NAME = java_package_configuration, TYPE = OTHER, FAMILY = Java) -->
<p>
-Configures a set of <code><a href="${link java_plugin}">java_plugin</a></code>s to run on a set of
-packages. Plugin configurations can be added to
-<code><a href="${link java_toolchain.plugins}">java_toolchain.plugins</a></code>s.
+Configuration to apply to a set of packages.
+Configurations can be added to
+<code><a href="${link java_toolchain.javacopts}">java_toolchain.javacopts</a></code>s.
</p>
-<h4 id="java_plugin_configuration">Example:</h4>
+<h4 id="java_package_configuration">Example:</h4>
<pre class="code">
-java_plugin_configuration(
- plugins = [":my_java_plugin"],
- packages = [":plugin_packages"],
+java_package_configuration(
+ name = "my_configuration",
+ packages = [":my_packages"],
+ javacopts = ["-Werror"],
)
package_group(
- name = "plugin_packages",
+ name = "my_packages",
packages = [
"//com/my/project/...",
"-//com/my/project/testing/...",
@@ -91,8 +87,8 @@ package_group(
java_toolchain(
...,
- plugin_configuration = [
- ":my_plugin",
+ package_configuration = [
+ ":my_configuration",
]
)
</pre>
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java
index 69bcc7374d..edb67987ff 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java
@@ -82,10 +82,10 @@ public final class JavaToolchain implements RuleConfiguredTargetFactory {
ImmutableMap.<Label, ImmutableCollection<Artifact>>of(
AliasProvider.getDependencyLabel(javacDep), ImmutableList.of(javac)));
- ImmutableList<JavaPluginConfigurationProvider> pluginConfiguration =
+ ImmutableList<JavaPackageConfigurationProvider> packageConfiguration =
ImmutableList.copyOf(
ruleContext.getPrerequisites(
- "plugin_configuration", Mode.HOST, JavaPluginConfigurationProvider.class));
+ "package_configuration", Mode.HOST, JavaPackageConfigurationProvider.class));
JavaToolchainData toolchainData =
new JavaToolchainData(
@@ -115,7 +115,7 @@ public final class JavaToolchain implements RuleConfiguredTargetFactory {
timezoneData,
ijar,
compatibleJavacOptions,
- pluginConfiguration);
+ packageConfiguration);
RuleConfiguredTargetBuilder builder =
new RuleConfiguredTargetBuilder(ruleContext)
.addSkylarkTransitiveInfo(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
index 2306e24b5b..725a5f74d5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
@@ -81,7 +81,7 @@ public class JavaToolchainProvider extends ToolchainInfo {
@Nullable Artifact timezoneData,
FilesToRunProvider ijar,
ImmutableListMultimap<String, String> compatibleJavacOptions,
- ImmutableList<JavaPluginConfigurationProvider> pluginConfiguration) {
+ ImmutableList<JavaPackageConfigurationProvider> packageConfiguration) {
return new JavaToolchainProvider(
label,
bootclasspath,
@@ -107,7 +107,7 @@ public class JavaToolchainProvider extends ToolchainInfo {
.build(),
data.getJvmOptions(),
data.getJavacSupportsWorkers(),
- pluginConfiguration);
+ packageConfiguration);
}
private final Label label;
@@ -129,7 +129,7 @@ public class JavaToolchainProvider extends ToolchainInfo {
private final ImmutableList<String> javacOptions;
private final ImmutableList<String> jvmOptions;
private final boolean javacSupportsWorkers;
- private final ImmutableList<JavaPluginConfigurationProvider> pluginConfiguration;
+ private final ImmutableList<JavaPackageConfigurationProvider> packageConfiguration;
private JavaToolchainProvider(
Label label,
@@ -151,7 +151,7 @@ public class JavaToolchainProvider extends ToolchainInfo {
ImmutableList<String> javacOptions,
ImmutableList<String> jvmOptions,
boolean javacSupportsWorkers,
- ImmutableList<JavaPluginConfigurationProvider> pluginConfiguration) {
+ ImmutableList<JavaPackageConfigurationProvider> packageConfiguration) {
super(ImmutableMap.of(), Location.BUILTIN);
this.label = label;
@@ -173,7 +173,7 @@ public class JavaToolchainProvider extends ToolchainInfo {
this.javacOptions = javacOptions;
this.jvmOptions = jvmOptions;
this.javacSupportsWorkers = javacSupportsWorkers;
- this.pluginConfiguration = pluginConfiguration;
+ this.packageConfiguration = packageConfiguration;
}
/** Returns the label for this {@code java_toolchain}. */
@@ -291,7 +291,7 @@ public class JavaToolchainProvider extends ToolchainInfo {
}
/** Returns the global {@code java_plugin_configuration} data. */
- public ImmutableList<JavaPluginConfigurationProvider> pluginConfiguration() {
- return pluginConfiguration;
+ public ImmutableList<JavaPackageConfigurationProvider> packageConfiguration() {
+ return packageConfiguration;
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
index f3cdf60d5d..2ec3fd3dd4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
@@ -205,14 +205,14 @@ public final class JavaToolchainRule implements RuleDefinition {
attr("compatible_javacopts", STRING_LIST_DICT)
.undocumented("internal")
.value(ImmutableMap.<String, List<String>>of()))
- /* <!-- #BLAZE_RULE(java_toolchain).ATTRIBUTE(plugin_configuration) -->
- Java plugins that should be enabled for the specified package groups.
+ /* <!-- #BLAZE_RULE(java_toolchain).ATTRIBUTE(package_configuration) -->
+ Configuration that should be applied to the specified package groups.
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
.add(
- attr("plugin_configuration", LABEL_LIST)
+ attr("package_configuration", LABEL_LIST)
.cfg(HOST)
.allowedFileTypes()
- .mandatoryNativeProviders(ImmutableList.of(JavaPluginConfigurationProvider.class)))
+ .mandatoryNativeProviders(ImmutableList.of(JavaPackageConfigurationProvider.class)))
.build();
}