aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-07-20 17:46:36 +0000
committerGravatar John Cater <jcater@google.com>2016-07-20 19:54:26 +0000
commitff8ea95fb2e4c77104263bebbf21c7e4e7a00d00 (patch)
tree9086db3b3867b3e9c528565e2a2fc33b7608040a
parent1c4ae47d2d1df697e1ac074b084b124da6ce5405 (diff)
Description redacted.
-- MOS_MIGRATED_REVID=127962492
-rw-r--r--src/java_tools/buildjar/java/com/google/devtools/build/buildjar/BUILD21
-rw-r--r--src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/JavacOptions.java82
-rw-r--r--src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/BUILD7
-rw-r--r--src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/BazelJavaCompiler.java151
-rw-r--r--src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/JavaBuilderConfig.java18
-rw-r--r--src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/BUILD1
-rw-r--r--src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/JavacTurbine.java29
-rw-r--r--src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java23
-rw-r--r--third_party/BUILD6
9 files changed, 170 insertions, 168 deletions
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/BUILD b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/BUILD
index 8dc934e8ac..c9c6b24983 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/BUILD
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/BUILD
@@ -21,17 +21,11 @@ java_library(
java_library(
name = "javac",
- srcs = glob(
- [
- "javac/*.java",
- ],
- exclude = [
- "javac/JavacOptions.java",
- ],
- ),
+ srcs = glob([
+ "javac/*.java",
+ ]),
deps = [
":invalid_command_line_exception",
- ":javac_options",
"//src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins",
"//third_party:guava",
"//third_party:jsr305",
@@ -51,7 +45,6 @@ java_library(
deps = [
":invalid_command_line_exception",
":javac",
- ":javac_options",
"//src/java_tools/buildjar/java/com/google/devtools/build/buildjar/jarhelper",
"//src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins",
"//src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins:classloader",
@@ -76,13 +69,8 @@ java_library(
srcs = [
"javac/JavacOptions.java",
],
- visibility = [
- "//java/com/google/devtools/build/buildjar:__pkg__",
- "//src/java_tools/buildjar/java/com/google/devtools/build/java/bazel:__pkg__",
- "//src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac:__pkg__",
- ],
+ visibility = ["//java/com/google/devtools/build/buildjar:__pkg__"],
deps = [
- "//third_party:auto_value",
"//third_party:guava",
],
)
@@ -103,7 +91,6 @@ load("//tools/build_rules:java_rules_skylark.bzl", "bootstrap_java_library", "bo
bootstrap_java_library(
name = "skylark-deps",
jars = [
- "//third_party:auto_value-jars",
"//third_party:error_prone-jars",
"//third_party:guava-jars",
"//third_party:jsr305-jars",
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/JavacOptions.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/JavacOptions.java
index 4f7e749c7e..e4452a36a0 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/JavacOptions.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/JavacOptions.java
@@ -14,85 +14,45 @@
package com.google.devtools.build.buildjar.javac;
-import com.google.auto.value.AutoValue;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
+
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
/**
- * Preprocess javac -Xlint options. We also need to make the different versions of javac treat
- * -Xlint options uniformly.
+ * Preprocess javac -Xlint options. We
+ * also need to make the different versions of javac treat -Xlint options
+ * uniformly.
+ *
+ * <p>Some versions of javac now process the -Xlint options without allowing
+ * later options to override earlier ones on the command line. For example,
+ * {@code -Xlint:All -Xlint:None} results in all warnings being enabled.
*
- * <p>Some versions of javac now process the -Xlint options without allowing later options to
- * override earlier ones on the command line. For example, {@code -Xlint:All -Xlint:None} results in
- * all warnings being enabled.
+ * <p>This class preprocesses the -Xlint options within the javac options to
+ * achieve a command line that is sensitive to ordering. That is, with this
+ * preprocessing step, {@code -Xlint:all -Xlint:none} results in no
+ * warnings being enabled.
*
- * <p>This class preprocesses the -Xlint options within the javac options to achieve a command line
- * that is sensitive to ordering. That is, with this preprocessing step, {@code -Xlint:all
- * -Xlint:none} results in no warnings being enabled.
+ * <p>TODO(bazel-team): Convince the current javac owners that the javac options
+ * need to behave the way this class behaves. :-)
*/
public final class JavacOptions {
- /** Returns an immutable list containing all the non-Bazel specific Javac flags. */
- public static ImmutableList<String> removeBazelSpecificFlags(String[] javacopts) {
- return removeBazelSpecificFlags(Arrays.asList(javacopts));
- }
-
- /** Returns an immutable list containing all the non-Bazel specific Javac flags. */
- public static ImmutableList<String> removeBazelSpecificFlags(Iterable<String> javacopts) {
- return filterJavacopts(javacopts).standardJavacopts();
- }
-
- /** A collection of javac flags, divided into Bazel-specific and standard options. */
- @AutoValue
- public abstract static class FilteredJavacopts {
- /** Bazel-specific javac flags, e.g. Error Prone's -Xep: flags. */
- public abstract ImmutableList<String> bazelJavacopts();
-
- /** Standard javac flags. */
- public abstract ImmutableList<String> standardJavacopts();
-
- /** Creates a {@link FilteredJavacopts}. */
- public static FilteredJavacopts create(
- ImmutableList<String> bazelJavacopts, ImmutableList<String> standardJavacopts) {
- return new AutoValue_JavacOptions_FilteredJavacopts(bazelJavacopts, standardJavacopts);
- }
- }
-
- /** Filters a list of javac flags into Bazel-specific and standard flags. */
- public static FilteredJavacopts filterJavacopts(Iterable<String> javacopts) {
- ImmutableList.Builder<String> bazelJavacopts = ImmutableList.builder();
- ImmutableList.Builder<String> standardJavacopts = ImmutableList.builder();
- for (String opt : javacopts) {
- if (isBazelSpecificFlag(opt)) {
- bazelJavacopts.add(opt);
- } else {
- standardJavacopts.add(opt);
- }
- }
- return FilteredJavacopts.create(bazelJavacopts.build(), standardJavacopts.build());
- }
-
- private static boolean isBazelSpecificFlag(String opt) {
- return opt.startsWith("-Werror:") || opt.startsWith("-Xep");
- }
-
private static final XlintOptionNormalizer XLINT_OPTION_NORMALIZER = new XlintOptionNormalizer();
/**
* Interface to define an option normalizer. For instance, to group all -Xlint: option into one
* place.
- *
- * <p>All normalizers used by the JavacOptions class will be started by calling the {@link
- * #start()} method when starting the parsing of a list of option. For each option, the first
- * option normalized whose {@link #processOption(String)} method returns true stops its parsing
- * and the option is supposed to be added at the end to the normalized list of option with the
- * {@link #normalize(List)} method. Options not handled by a normalizer will be returned as such
- * in the normalized option list.
+ *
+ * <p>All normalizers used by the JavacOptions class will be started by calling the
+ * {@link #start()} method when starting the parsing of a list of option. For each option, the
+ * first option normalized whose {@link #processOption(String)} method returns true stops its
+ * parsing and the option is supposed to be added at the end to the normalized list of option with
+ * the {@link #normalize(List)} method. Options not handled by a normalizer will be returned as
+ * such in the normalized option list.
*/
public static interface JavacOptionNormalizer {
/** Resets the state of the normalizer to start a new option parsing. */
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/BUILD b/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/BUILD
index 3ede677953..5b2b0b7955 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/BUILD
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/BUILD
@@ -91,11 +91,7 @@ java_library(
name = "JavaBuilderConfig",
srcs = ["JavaBuilderConfig.java"],
data = ["@bazel_tools//tools/jdk:JavaBuilder_deploy.jar"],
- deps = [
- ":javabuilder-javacopts-lib",
- "//src/java_tools/buildjar/java/com/google/devtools/build/buildjar:javac_options",
- "//third_party:guava",
- ],
+ deps = [":javabuilder-javacopts-lib"],
)
# Provides programmatic access to a bazel compatible javac.
@@ -112,7 +108,6 @@ java_library(
":JavaBuilderConfig",
":JavaLangtools",
":JavacBootclasspath",
- "//third_party:guava",
],
)
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/BazelJavaCompiler.java b/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/BazelJavaCompiler.java
index 206d0b66e1..6a4156ad9f 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/BazelJavaCompiler.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/BazelJavaCompiler.java
@@ -14,7 +14,6 @@
package com.google.devtools.build.java.bazel;
-import com.google.common.collect.ImmutableList;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -24,7 +23,8 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.nio.charset.Charset;
-import java.util.Collections;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.Set;
@@ -49,18 +49,27 @@ import javax.tools.StandardLocation;
public class BazelJavaCompiler {
// The default blessed javac options.
-
+
private static final String DEFAULT_BOOTCLASSPATH = JavacBootclasspath.asString();
- private static final ImmutableList<String> DEFAULT_JAVACOPTS =
- ImmutableList.<String>builder()
- .addAll(JavaBuilderConfig.defaultJavacOpts())
- // The bootclasspath must be specified both via an invocation option and
- // via fileManager.setLocation(PLATFORM_CLASS_PATH), to work around what
- // appears to be a bug in jdk[6,8] javac.
- .add("-bootclasspath")
- .add(DEFAULT_BOOTCLASSPATH)
- .build();
+ private static final String[] DEFAULT_JAVACOPTS;
+ static {
+ List<String> defaultJavacopts = new ArrayList<>();
+ for (String javacopt : JavaBuilderConfig.defaultJavacOpts()) {
+ if (javacopt.startsWith("-Xep")) {
+ // ignore Error Prone-specific flags accepted by JavaBuilder
+ continue;
+ }
+ defaultJavacopts.add(javacopt);
+ }
+
+ // The bootclasspath must be specified both via an invocation option and
+ // via fileManager.setLocation(PLATFORM_CLASS_PATH), to work around what
+ // appears to be a bug in jdk[6,8] javac.
+ defaultJavacopts.addAll(Arrays.asList("-bootclasspath", DEFAULT_BOOTCLASSPATH));
+
+ DEFAULT_JAVACOPTS = defaultJavacopts.toArray(new String[defaultJavacopts.size()]);
+ }
private static final Class<? extends JavaCompiler> JAVA_COMPILER_CLASS = getJavaCompilerClass();
@@ -100,10 +109,12 @@ public class BazelJavaCompiler {
public static File getLangtoolsJar() {
return JavaLangtools.file();
}
-
- /** Returns the default javacopts, including the blessed bootclasspath. */
+
+ /**
+ * Returns the default javacopts, including the blessed bootclasspath.
+ */
public static List<String> getDefaultJavacopts() {
- return DEFAULT_JAVACOPTS;
+ return new ArrayList<>(Arrays.asList(DEFAULT_JAVACOPTS));
}
/**
@@ -175,62 +186,70 @@ public class BazelJavaCompiler {
private static JavaCompiler newInstance(final JavaCompiler delegate) {
// We forward most operations to the JavaCompiler implementation in langtools.jar.
return new JavaCompiler() {
- @Override
- public CompilationTask getTask(
- Writer out,
- JavaFileManager fileManager,
- DiagnosticListener<? super JavaFileObject> diagnosticListener,
- Iterable<String> options,
- Iterable<String> classes,
- Iterable<? extends JavaFileObject> compilationUnits) {
- // We prepend bazel's default javacopts to user javacopts,
- // so that the user can override them. javac supports this
- // "last option wins" style of option override.
- ImmutableList.Builder<String> fullOptions = ImmutableList.builder();
- fullOptions.addAll(getDefaultJavacopts());
- if (options != null) {
- fullOptions.addAll(options);
+ @Override
+ public CompilationTask getTask(
+ Writer out,
+ JavaFileManager fileManager,
+ DiagnosticListener<? super JavaFileObject> diagnosticListener,
+ Iterable<String> options,
+ Iterable<String> classes,
+ Iterable<? extends JavaFileObject> compilationUnits) {
+ // We prepend bazel's default javacopts to user javacopts,
+ // so that the user can override them. javac supports this
+ // "last option wins" style of option override.
+ List<String> fullOptions = getDefaultJavacopts();
+ if (options != null) {
+ for (String option : options) {
+ fullOptions.add(option);
+ }
+ }
+ return delegate.getTask(out,
+ fileManager,
+ diagnosticListener,
+ fullOptions,
+ classes,
+ compilationUnits);
}
- return delegate.getTask(
- out, fileManager, diagnosticListener, fullOptions.build(), classes, compilationUnits);
- }
- @Override
- public StandardJavaFileManager getStandardFileManager(
- DiagnosticListener<? super JavaFileObject> diagnosticListener,
- Locale locale,
- Charset charset) {
- StandardJavaFileManager fileManager =
- delegate.getStandardFileManager(diagnosticListener, locale, charset);
-
- try {
- fileManager.setLocation(
- StandardLocation.PLATFORM_CLASS_PATH, // bootclasspath
- JavacBootclasspath.asFiles());
- } catch (IOException e) {
- // Should never happen, according to javadocs for setLocation
- throw new RuntimeException(e);
+ @Override
+ public StandardJavaFileManager getStandardFileManager(
+ DiagnosticListener<? super JavaFileObject> diagnosticListener,
+ Locale locale,
+ Charset charset) {
+ StandardJavaFileManager fileManager = delegate.getStandardFileManager(
+ diagnosticListener,
+ locale,
+ charset);
+
+ try {
+ fileManager.setLocation(
+ StandardLocation.PLATFORM_CLASS_PATH, // bootclasspath
+ JavacBootclasspath.asFiles());
+ } catch (IOException e) {
+ // Should never happen, according to javadocs for setLocation
+ throw new RuntimeException(e);
+ }
+ return fileManager;
}
- return fileManager;
- }
- @Override
- public int run(InputStream in, OutputStream out, OutputStream err, String... arguments) {
- // prepend bazel's default javacopts to user arguments
- List<String> args = getDefaultJavacopts();
- Collections.addAll(args, arguments);
- return delegate.run(in, out, err, args.toArray(new String[0]));
- }
+ @Override
+ public int run(InputStream in, OutputStream out, OutputStream err,
+ String... arguments) {
+ // prepend bazel's default javacopts to user arguments
+ List<String> args = getDefaultJavacopts();
+ args.addAll(Arrays.asList(arguments));
+ return delegate.run(in, out, err, args.toArray(new String[0]));
+ }
- @Override
- public Set<SourceVersion> getSourceVersions() {
- return delegate.getSourceVersions();
- }
+ @Override
+ public Set<SourceVersion> getSourceVersions() {
+ return delegate.getSourceVersions();
+ }
- @Override
- public int isSupportedOption(String option) {
- return delegate.isSupportedOption(option);
- }
- };
+ @Override
+ public int isSupportedOption(String option) {
+ return delegate.isSupportedOption(option);
+ }
+ };
}
}
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/JavaBuilderConfig.java b/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/JavaBuilderConfig.java
index c86291dd0b..511dfa584f 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/JavaBuilderConfig.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/JavaBuilderConfig.java
@@ -14,18 +14,18 @@
package com.google.devtools.build.java.bazel;
-import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.buildjar.javac.JavacOptions;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
-/** Utility class to provide Java-level access to the blessed JavaBuilder javacopts. */
+/**
+ * Utility class to provide java-level access to the blessed javabuilder javacopts.
+ */
public class JavaBuilderConfig {
-
- private static final ImmutableList<String> JAVACOPTS =
- ImmutableList.copyOf(
- JavacOptions.removeBazelSpecificFlags(JavaBuilderJavacOpts.DEFAULT_JAVACOPTS));
-
+
public static List<String> defaultJavacOpts() {
- return JAVACOPTS;
+ List<String> result = new ArrayList<>();
+ Collections.addAll(result, JavaBuilderJavacOpts.DEFAULT_JAVACOPTS);
+ return result;
}
}
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/BUILD b/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/BUILD
index 9ab49b9ca7..9e3e6cbeea 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/BUILD
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/BUILD
@@ -14,7 +14,6 @@ java_library(
":javac_turbine_compiler",
":zip_output_file_manager",
":zip_util",
- "//src/java_tools/buildjar/java/com/google/devtools/build/buildjar:javac_options",
"//src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins:dependency",
"//src/java_tools/buildjar/java/com/google/devtools/build/java/turbine:turbine_options",
"//src/java_tools/buildjar/java/com/google/devtools/build/java/turbine:turbine_options_parser",
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/JavacTurbine.java b/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/JavacTurbine.java
index 8959d3613b..b294bd2a3c 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/JavacTurbine.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/JavacTurbine.java
@@ -15,10 +15,10 @@
package com.google.devtools.build.java.turbine.javac;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.CharMatcher;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
-import com.google.devtools.build.buildjar.javac.JavacOptions;
import com.google.devtools.build.buildjar.javac.plugins.dependency.DependencyModule;
import com.google.devtools.build.buildjar.javac.plugins.dependency.DependencyModule.StrictJavaDeps;
import com.google.devtools.build.buildjar.javac.plugins.dependency.StrictJavaDepsPlugin;
@@ -119,7 +119,7 @@ public class JavacTurbine implements AutoCloseable {
ImmutableList.Builder<String> argbuilder = ImmutableList.builder();
- argbuilder.addAll(JavacOptions.removeBazelSpecificFlags(turbineOptions.javacOpts()));
+ filterJavacopts(argbuilder, turbineOptions.javacOpts());
// Disable compilation of implicit source files.
// This is insurance: the sourcepath is empty, so we don't expect implicit sources.
@@ -321,6 +321,31 @@ public class JavacTurbine implements AutoCloseable {
return result.build();
}
+ @VisibleForTesting
+ static void filterJavacopts(
+ ImmutableList.Builder<String> javacArgs, Iterable<String> defaultJavacopts) {
+ for (String opt : defaultJavacopts) {
+
+ // TODO(cushon): temporary hack until 4149f08bcc8bd1318d4021cf372ec89240ee3dbb is released
+ opt = CharMatcher.is('\'').trimFrom(opt);
+
+ if (isErrorProneFlag(opt)) {
+ // drop Error Prone's fake javacopts
+ continue;
+ }
+ javacArgs.add(opt);
+ }
+ }
+
+ /**
+ * Returns true for flags that are specific to Error Prone.
+ *
+ * <p>WARNING: keep in sync with ErrorProneOptions#isSupportedOption
+ */
+ static boolean isErrorProneFlag(String opt) {
+ return opt.startsWith("-Xep");
+ }
+
/** Extra sources in srcjars to disk. */
private static List<String> extractSourceJars(TurbineOptions turbineOptions, Path tmpdir)
throws IOException {
diff --git a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java
index fb5f6249de..0f20f16112 100644
--- a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java
+++ b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java
@@ -350,6 +350,29 @@ public class JavacTurbineTest {
};
@Test
+ public void filterJavacopts() {
+ ImmutableList.Builder<String> output = ImmutableList.builder();
+ JavacTurbine.filterJavacopts(
+ output,
+ Arrays.asList(
+ "-g",
+ "-source",
+ "6",
+ "-target",
+ "6",
+ "-Xlint:all",
+ "-source",
+ "7",
+ "-target",
+ "7",
+ "-Xep:GuardedBy:ERROR"));
+ assertThat(output.build())
+ .containsExactly(
+ "-g", "-source", "6", "-target", "6", "-Xlint:all", "-source", "7", "-target", "7")
+ .inOrder();
+ }
+
+ @Test
public void jdeps() throws Exception {
Path libC = temp.newFile("libc.jar").toPath();
diff --git a/third_party/BUILD b/third_party/BUILD
index bedcb021f5..87c45bfdb4 100644
--- a/third_party/BUILD
+++ b/third_party/BUILD
@@ -220,12 +220,6 @@ java_import(
jars = ["auto/auto-value-1.2.jar"],
)
-# For bootstrapping JavaBuilder
-filegroup(
- name = "auto_value-jars",
- srcs = ["auto/auto-value-1.2.jar"],
-)
-
java_library(
name = "dagger",
exported_plugins = [":dagger_plugin"],