diff options
author | 2018-03-05 15:38:41 -0800 | |
---|---|---|
committer | 2018-03-05 15:41:02 -0800 | |
commit | d2cf5cab8390c8057d8240bce8abdd61d6e1d916 (patch) | |
tree | c3eb28a2c331710ac8091b870923ef475e7313f2 /src/main/java/com/google/devtools/build/lib | |
parent | 922d1e671bc02086afdcfb8ae1636eefc53e0ee2 (diff) |
Add --experimental_fix_deps_tool flag to Bazel
RELNOTES: None
PiperOrigin-RevId: 187936071
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
4 files changed, 46 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java index a4eb03e9a7..d47fe0dbdb 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java @@ -68,6 +68,7 @@ public final class JavaCompilationHelper { private final JavaSemantics semantics; private final ImmutableList<Artifact> additionalJavaBaseInputs; private final StrictDepsMode strictJavaDeps; + private final String fixDepsTool; private static final String DEFAULT_ATTRIBUTES_SUFFIX = ""; private static final PathFragment JAVAC = PathFragment.create("_javac"); @@ -91,6 +92,7 @@ public final class JavaCompilationHelper { this.strictJavaDeps = disableStrictDeps ? StrictDepsMode.OFF : getJavaConfiguration().getFilteredStrictJavaDeps(); + this.fixDepsTool = getJavaConfiguration().getFixDepsTool(); } public JavaCompilationHelper(RuleContext ruleContext, JavaSemantics semantics, @@ -226,6 +228,7 @@ public final class JavaCompilationHelper { builder.setProcessorPaths(attributes.getProcessorPath()); builder.addProcessorNames(attributes.getProcessorNames()); builder.setStrictJavaDeps(attributes.getStrictJavaDeps()); + builder.setFixDepsTool(getJavaConfiguration().getFixDepsTool()); builder.setDirectJars(attributes.getDirectJars()); builder.setCompileTimeDependencyArtifacts(attributes.getCompileTimeDependencyArtifacts()); builder.setTargetLabel( @@ -755,6 +758,11 @@ public final class JavaCompilationHelper { return strictJavaDeps; } + /** Determines which tool to use when fixing dependency errors. */ + public String getFixDepsTool() { + return fixDepsTool; + } + /** * Gets the value of the "javacopts" attribute combining them with the * default options. If the current rule has no javacopts attribute, this diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java index 9846e0f7ec..1c02c96a08 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java @@ -137,6 +137,9 @@ public final class JavaCompileAction extends SpawnAction { */ private final BuildConfiguration.StrictDepsMode strictJavaDeps; + /** The tool with which to fix dependency errors. */ + private final String fixDepsTool; + /** The set of .jdeps artifacts provided by direct dependencies. */ private final NestedSet<Artifact> compileTimeDependencyArtifacts; @@ -164,6 +167,7 @@ public final class JavaCompileAction extends SpawnAction { * @param directJars the subset of classpath jars provided by direct dependencies * @param executionInfo the execution info * @param strictJavaDeps the Strict Java Deps mode + * @param fixDepsTool the tool with which to fix dependency errors * @param compileTimeDependencyArtifacts the jdeps files for direct dependencies * @param progressMessage the progress message */ @@ -190,6 +194,7 @@ public final class JavaCompileAction extends SpawnAction { NestedSet<Artifact> directJars, Map<String, String> executionInfo, StrictDepsMode strictJavaDeps, + String fixDepsTool, NestedSet<Artifact> compileTimeDependencyArtifacts, CharSequence progressMessage, RunfilesSupplier runfilesSupplier) { @@ -225,6 +230,7 @@ public final class JavaCompileAction extends SpawnAction { this.javacOpts = ImmutableList.copyOf(javacOpts); this.directJars = checkNotNull(directJars, "directJars must not be null"); this.strictJavaDeps = strictJavaDeps; + this.fixDepsTool = checkNotNull(fixDepsTool); this.compileTimeDependencyArtifacts = compileTimeDependencyArtifacts; } @@ -296,6 +302,10 @@ public final class JavaCompileAction extends SpawnAction { return strictJavaDeps; } + public String getFixDepsTool() { + return fixDepsTool; + } + public PathFragment getClassDirectory() { return classDirectory; } @@ -422,6 +432,7 @@ public final class JavaCompileAction extends SpawnAction { private final Collection<Artifact> sourceJars = new ArrayList<>(); private BuildConfiguration.StrictDepsMode strictJavaDeps = BuildConfiguration.StrictDepsMode.OFF; + private String fixDepsTool = "add_dep"; private NestedSet<Artifact> directJars = NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER); private NestedSet<Artifact> compileTimeDependencyArtifacts = NestedSetBuilder.emptySet(Order.STABLE_ORDER); @@ -557,7 +568,6 @@ public final class JavaCompileAction extends SpawnAction { owner, artifactForExperimentalCoverage, sourceFiles, false)); } - NestedSet<Artifact> tools = NestedSetBuilder.<Artifact>stableOrder() .add(langtoolsJar) @@ -605,6 +615,7 @@ public final class JavaCompileAction extends SpawnAction { directJars, executionInfo, strictJavaDeps, + fixDepsTool, compileTimeDependencyArtifacts, getProgressMessage(), javaBuilder.getRunfilesSupplier()); @@ -699,6 +710,7 @@ public final class JavaCompileAction extends SpawnAction { } } } + result.add("--experimental_fix_deps_tool", fixDepsTool); // Chose what artifact to pass to JavaBuilder, as input to jacoco instrumentation processor. // metadata should be null when --experimental_java_coverage is true. @@ -844,6 +856,12 @@ public final class JavaCompileAction extends SpawnAction { return this; } + /** Sets the tool with which to fix dependency errors. */ + public Builder setFixDepsTool(String depsTool) { + fixDepsTool = depsTool; + return this; + } + /** Accumulates the given jar artifacts as being provided by direct dependencies. */ public Builder setDirectJars(NestedSet<Artifact> directJars) { this.directJars = checkNotNull(directJars, "directJars must not be null"); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java index 2d1eb2e0ec..026df114e9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java @@ -156,6 +156,7 @@ public final class JavaConfiguration extends Fragment { private final ImmutableList<String> defaultJvmFlags; private final ImmutableList<String> checkedConstraints; private final StrictDepsMode strictJavaDeps; + private final String fixDepsTool; private final Label proguardBinary; private final ImmutableList<Label> extraProguardSpecs; private final TriState bundleTranslations; @@ -187,6 +188,7 @@ public final class JavaConfiguration extends Fragment { this.defaultJvmFlags = ImmutableList.copyOf(javaOptions.jvmOpts); this.checkedConstraints = ImmutableList.copyOf(javaOptions.checkedConstraints); this.strictJavaDeps = javaOptions.strictJavaDeps; + this.fixDepsTool = javaOptions.fixDepsTool; this.proguardBinary = javaOptions.proguard; this.extraProguardSpecs = ImmutableList.copyOf(javaOptions.extraProguardSpecs); this.bundleTranslations = javaOptions.bundleTranslations; @@ -242,6 +244,7 @@ public final class JavaConfiguration extends Fragment { ImmutableList<String> defaultJvmFlags, ImmutableList<String> checkedConstraints, StrictDepsMode strictJavaDeps, + String fixDepsTool, Label proguardBinary, ImmutableList<Label> extraProguardSpecs, TriState bundleTranslations, @@ -269,6 +272,7 @@ public final class JavaConfiguration extends Fragment { this.defaultJvmFlags = defaultJvmFlags; this.checkedConstraints = checkedConstraints; this.strictJavaDeps = strictJavaDeps; + this.fixDepsTool = fixDepsTool; this.proguardBinary = proguardBinary; this.extraProguardSpecs = extraProguardSpecs; this.bundleTranslations = bundleTranslations; @@ -376,6 +380,11 @@ public final class JavaConfiguration extends Fragment { } } + /** Which tool to use for fixing dependency errors. */ + public String getFixDepsTool() { + return fixDepsTool; + } + /** * @return proper label only if --java_launcher= is specified, otherwise null. */ diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java index 3e9484d7e2..58be2712a2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java @@ -240,6 +240,15 @@ public class JavaOptions extends FragmentOptions { ) public StrictDepsMode strictJavaDeps; + @Option( + name = "experimental_fix_deps_tool", + defaultValue = "add_dep", + documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, + effectTags = {OptionEffectTag.BUILD_FILE_SEMANTICS}, + help = "Specifies which tool should be used to resolve missing dependencies." + ) + public String fixDepsTool; + // TODO(bazel-team): This flag should ideally default to true (and eventually removed). We have // been accidentally supplying JUnit and Hamcrest deps to java_test targets indirectly via the // BazelTestRunner, and setting this flag to true fixes that behaviour. @@ -558,6 +567,7 @@ public class JavaOptions extends FragmentOptions { host.javaClasspath = javaClasspath; host.strictJavaDeps = strictJavaDeps; + host.fixDepsTool = fixDepsTool; host.enforceOneVersion = enforceOneVersion; // java_test targets can be used as a host tool, Ex: as a validating tool on a genrule. |