Delete some dead code
PiperOrigin-RevId: 215937027
diff --git a/src/java_tools/buildjar/BUILD b/src/java_tools/buildjar/BUILD
index 2626c51..1723e23 100644
--- a/src/java_tools/buildjar/BUILD
+++ b/src/java_tools/buildjar/BUILD
@@ -10,7 +10,6 @@
"//src/java_tools/buildjar/java/com/google/devtools/build/java/bazel:srcs",
"//src/java_tools/buildjar/java/com/google/devtools/build/java/turbine:srcs",
"//src/java_tools/buildjar/javatests/com/google/devtools/build/buildjar:srcs",
- "//src/java_tools/buildjar/javatests/com/google/devtools/build/java/bazel:srcs",
"//src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine:srcs",
],
visibility = ["//:__subpackages__"],
@@ -62,14 +61,6 @@
visibility = ["//visibility:public"],
)
-java_library(
- name = "BazelJavaCompiler",
- visibility = ["//visibility:public"],
- exports = [
- "//src/java_tools/buildjar/java/com/google/devtools/build/java/bazel:BazelJavaCompiler",
- ],
-)
-
# This toolchain is used to bootstrap Bazel.
java_toolchain(
name = "bootstrap_toolchain",
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 0bf0134..0c79640 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
@@ -7,8 +7,6 @@
default_visibility = ["//src/java_tools/buildjar:buildjar_package_group"],
)
-load(":build_defs.bzl", "default_javacopts")
-
# Exports the canonical javac bootclasspath artifact locations
genrule(
name = "javac-bootclasspath-locations",
@@ -30,62 +28,6 @@
deps = ["//third_party:guava"],
)
-# Exports the canonical javac jar location
-genrule(
- name = "java-langtools-location",
- srcs = ["//third_party/java/jdk/langtools:javac_jar"],
- outs = ["JavaLangtoolsLocation.java"],
- cmd = "$(location java-langtools-location.sh) $@ $(BINDIR) $(SRCS)",
- tools = ["java-langtools-location.sh"],
-)
-
-# Provides java-level access to the canonical javac jar
-java_library(
- name = "JavaLangtools",
- srcs = [
- "JavaLangtools.java",
- ":java-langtools-location",
- ],
- data = ["//third_party/java/jdk/langtools:javac_jar"],
- visibility = ["//visibility:public"],
-)
-
-# Exports javacopts from the current java toolchain
-default_javacopts(
- name = "gen_default_javacopts",
- out = "JavaBuilderJavacOpts.java",
- template = "JavaBuilderJavacOpts.java.template",
-)
-
-# Provides java-level access to the javacopts in the current java toolchain
-java_library(
- name = "JavaBuilderConfig",
- srcs = [
- "JavaBuilderConfig.java",
- "JavaBuilderJavacOpts.java",
- ],
- visibility = ["//visibility:public"],
- deps = [
- "//src/java_tools/buildjar/java/com/google/devtools/build/buildjar:javac_options",
- "//third_party:guava",
- ],
-)
-
-# Provides programmatic access to a bazel compatible javac.
-# Use this instead of ToolProvider.getSystemJavaCompiler().
-java_library(
- name = "BazelJavaCompiler",
- srcs = ["BazelJavaCompiler.java"],
- data = ["//third_party/java/jdk/langtools:javac_jar"],
- visibility = ["//visibility:public"],
- deps = [
- ":JavaBuilderConfig",
- ":JavaLangtools",
- ":JavacBootclasspath",
- "//third_party:guava",
- ],
-)
-
filegroup(
name = "srcs",
srcs = glob([
@@ -93,7 +35,5 @@
"*.sh",
]) + [
"BUILD",
- "JavaBuilderJavacOpts.java.template",
- "build_defs.bzl",
],
)
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
deleted file mode 100644
index d263e30..0000000
--- a/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/BazelJavaCompiler.java
+++ /dev/null
@@ -1,237 +0,0 @@
-// Copyright 2015 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.java.bazel;
-
-import com.google.common.collect.ImmutableList;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.nio.charset.Charset;
-import java.util.List;
-import java.util.Locale;
-import java.util.Set;
-import javax.lang.model.SourceVersion;
-import javax.tools.DiagnosticListener;
-import javax.tools.JavaCompiler;
-import javax.tools.JavaFileManager;
-import javax.tools.JavaFileObject;
-import javax.tools.StandardJavaFileManager;
-import javax.tools.StandardLocation;
-
-/**
- * Provides a {@link JavaCompiler} that has behavior as similar as possible to the java compiler
- * provided by default by Bazel. Replace calls to {@link
- * javax.tools.ToolProvider#getSystemJavaCompiler} with calls to {@link
- * BazelJavaCompiler#newInstance}.
- *
- * <p>This class is typically used only from a host build tool or in tests. When using this in
- * production, langtools.jar and the bootclasspath jars are deployed as separate jar files within
- * the runfiles directory.
- */
-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())
- .add("-encoding")
- .add("UTF-8")
- // 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 Class<? extends JavaCompiler> JAVA_COMPILER_CLASS = getJavaCompilerClass();
-
- /**
- * We use the platform classloader (on JDK 9) or bootstrap classloader (on JDK 8) as the parent
- * classloader instead of the default "system" class loader; we intentionally do not consult the
- * classpath. This way the class path is not polluted, we reduce the risk of having multiple
- * langtools on the classpath, and langtools.jar is only opened if this method is called. And this
- * will reduce problems for automated java dependency analysis, which other teams are trying to
- * do.
- */
- private static class LangtoolsClassLoader extends URLClassLoader {
-
- public LangtoolsClassLoader() throws MalformedURLException {
- super(new URL[] {getLangtoolsJar().toURI().toURL()}, getPlatformClassLoaderInternal());
- }
-
- private static ClassLoader getPlatformClassLoaderInternal() {
- try {
- return (ClassLoader) ClassLoader.class.getMethod("getPlatformClassLoader").invoke(null);
- } catch (ReflectiveOperationException e) {
- // Java 8
- return null;
- }
- }
- }
-
- private static Class<? extends JavaCompiler> getJavaCompilerClass() {
- try {
- ClassLoader cl = new LangtoolsClassLoader();
- return getJavaCompilerClass(cl);
- } catch (Exception e) {
- throw new RuntimeException("Cannot get java compiler", e);
- }
- }
-
- private static Class<? extends JavaCompiler> getJavaCompilerClass(ClassLoader cl)
- throws Exception {
- return Class.forName("com.sun.tools.javac.api.JavacTool", true, cl)
- .asSubclass(JavaCompiler.class);
- }
-
- /** Returns the langtools jar. */
- public static File getLangtoolsJar() {
- return JavaLangtools.file();
- }
-
- /** Returns the default javacopts, including the blessed bootclasspath. */
- public static List<String> getDefaultJavacopts() {
- return DEFAULT_JAVACOPTS;
- }
-
- /**
- * Returns a new {@link JavaCompiler} that has behavior as similar as possible to the java
- * compiler provided by default by the bazel build system, independent of the user-specified
- * {@code JAVABASE}.
- *
- * <p>More precisely, this method works analogously to {@link
- * javax.tools.ToolProvider#getSystemJavaCompiler}, but returns a {@code JavaCompiler} that
- * differs in these details:
- *
- * <ul>
- * <li> uses the blessed javac implementation: {@code //tools/defaults:java_langtools}, as
- * defined by bazel's --java_langtools flag.
- * <li> uses the blessed boot class path: {@code //tools/defaults:javac_bootclasspath}, as
- * defined by bazel's --javac_bootclasspath flag.
- * <li> uses the blessed default values for javac options such as {@code -source}
- * </ul>
- *
- * <p>This class ensures that (by default) the {@code -source}, {@code -target} and {@code
- * -bootclasspath} flags all agree and specify the same (blessed) JDK version, for language and
- * API compatibility.
- *
- * <p>This method finds the javac implementation using a custom classloader that does not consult
- * the user's classpath. This works well, unless the return value is cast to a
- * javac-implementation class like {@code JavacTask}, in which case the dreaded classloader error
- * "can't cast JavacTaskImpl to JavacTask" raises its ugly head, in which case you should use
- * {@link #newInstance(ClassLoader)} instead.
- */
- public static JavaCompiler newInstance() {
- try {
- return newInstance(JAVA_COMPILER_CLASS.getConstructor().newInstance());
- } catch (Exception e) {
- throw new RuntimeException("Cannot get java compiler", e);
- }
- }
-
- /**
- * Returns a new {@link JavaCompiler} that has behavior as similar as possible to the java
- * compiler provided by default by bazel, independent of the user-specified {@code JAVABASE}.
- *
- * <p>This method has effect identical to {@link #newInstance()} (and that method is generally
- * preferred to this one), except that the javac implementation is found via the provided
- * classloader instead of defining a custom classloader that knows the standard location of the
- * blessed javac implementation.
- *
- * <p>This method is needed when the return value is cast to a javac-implementation class like
- * {@code JavacTask}, to avoid the dreaded multiple classloader error "can't cast JavacTaskImpl to
- * JavacTask".
- *
- * <p>Typically, users should pass {@code ClassLoader.getSystemClassLoader()} as the argument to
- * this method.
- */
- public static JavaCompiler newInstance(ClassLoader cl) {
- try {
- return newInstance(getJavaCompilerClass(cl).getConstructor().newInstance());
- } catch (Exception e) {
- throw new RuntimeException("Cannot get java compiler", e);
- }
- }
-
- 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);
- }
- 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);
- }
- 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 =
- ImmutableList.<String>builder().addAll(getDefaultJavacopts()).add(arguments).build();
- return delegate.run(in, out, err, args.toArray(new String[0]));
- }
-
- @Override
- public Set<SourceVersion> getSourceVersions() {
- return delegate.getSourceVersions();
- }
-
- @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
deleted file mode 100644
index c86291d..0000000
--- a/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/JavaBuilderConfig.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2015 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.java.bazel;
-
-import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.buildjar.javac.JavacOptions;
-import java.util.List;
-
-/** 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;
- }
-}
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/JavaBuilderJavacOpts.java.template b/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/JavaBuilderJavacOpts.java.template
deleted file mode 100644
index 8161c14..0000000
--- a/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/JavaBuilderJavacOpts.java.template
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2017 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.java.bazel;
-
-/**
- * This class is used by {@link JavaBuilderConfig} to provide Java-level access to the blessed
- * JavaBuilder javacopts.
- */
-public class JavaBuilderJavacOpts {
- public static final String[] DEFAULT_JAVACOPTS = {
- %javacopts%
- };
-}
\ No newline at end of file
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/JavaLangtools.java b/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/JavaLangtools.java
deleted file mode 100644
index ce4d355..0000000
--- a/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/JavaLangtools.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2015 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.java.bazel;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOError;
-import java.nio.file.AccessDeniedException;
-
-/**
- * Utility class to provide java-level access to the blessed langtools jar path: {@code
- * //third_party/java/jdk:langtools}, as defined by bazel's --java_langtools flag.
- */
-public class JavaLangtools {
-
- private static final File FILE;
-
- private static String getRunfilesDir() {
- String dir = System.getenv("JAVA_RUNFILES");
- if (dir == null) {
- dir = System.getenv("TEST_SRCDIR");
- }
- if (dir == null) {
- throw new IllegalStateException(
- "Neither JAVA_RUNFILES nor TEST_SRCDIR environment variable was defined!");
- }
- return dir;
- }
-
- static {
- File file = new File(getRunfilesDir(), JavaLangtoolsLocation.FILE);
- if (!file.isFile()) {
- throw new IOError(new FileNotFoundException("Can't find langtools jar: " + file.getPath()));
- } else if (!file.canRead()) {
- throw new IOError(new AccessDeniedException("Can't read langtools jar: " + file.getPath()));
- }
- FILE = file;
- }
-
- /** Returns the blessed langtools jar path. */
- public static File file() {
- return FILE;
- }
-}
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/build_defs.bzl b/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/build_defs.bzl
deleted file mode 100644
index 6f10167..0000000
--- a/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/build_defs.bzl
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright 2017 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.
-
-"""Rules to make the default javacopts available as a Java API."""
-
-def _default_javacopts(ctx):
- javacopts = java_common.default_javac_opts(
- ctx,
- java_toolchain_attr = "_java_toolchain",
- )
- ctx.template_action(
- template = ctx.file.template,
- output = ctx.outputs.out,
- substitutions = {
- "%javacopts%": '"%s"' % '", "'.join(javacopts),
- },
- )
-
-default_javacopts = rule(
- implementation = _default_javacopts,
- attrs = {
- "template": attr.label(
- mandatory = True,
- allow_files = True,
- single_file = True,
- ),
- "out": attr.output(mandatory = True),
- "_java_toolchain": attr.label(
- default = Label("//tools/jdk:current_java_toolchain"),
- ),
- },
-)
-"""Makes the default javacopts available as a Java API.
-
-Args:
- template: The template file to expand, replacing %javacopts% with a quoted
- comma-separated list of the default javac flags.
- out: The destination of the expanded file.
-
-"""
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/java-langtools-location.sh b/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/java-langtools-location.sh
deleted file mode 100755
index cc6fa68..0000000
--- a/src/java_tools/buildjar/java/com/google/devtools/build/java/bazel/java-langtools-location.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/bash -eu
-
-# Copyright 2016 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.
-
-# This script generates a JavaLangtoolsLocation class from the langtools
-# available at build time.
-
-OUT=$1
-STRIP_PREFIX=$2
-
-shift 2
-
-# We add the current workspace name as a prefix here, and we use the current
-# directory name for that. This might be a bit brittle.
-FILE="$(echo "$*" | \
- sed "s|^${STRIP_PREFIX}/||" | \
- sed "s|^third_party|${PWD##*/}/third_party|" \
-)"
-cat > "$OUT" <<EOF
-package com.google.devtools.build.java.bazel;
-public class JavaLangtoolsLocation {
- public static final String FILE = "${FILE}";
-}
-EOF
diff --git a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/bazel/BUILD b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/bazel/BUILD
deleted file mode 100644
index 5c59fe3..0000000
--- a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/bazel/BUILD
+++ /dev/null
@@ -1,33 +0,0 @@
-# Description:
-# Tests for tools for working with Java source code
-package(default_visibility = ["//src/java_tools/buildjar:buildjar_package_group"])
-
-java_test(
- name = "BazelJavaCompilerTest",
- size = "small",
- srcs = ["BazelJavaCompilerTest.java"],
- data = [
- "//third_party/java/jdk/langtools:javac_jar",
- ],
- jvm_flags = [
- # Simulates how Bazel invokes JavaBuilder
- "-Xbootclasspath/p:$(location //third_party/java/jdk/langtools:javac_jar)",
- ],
- test_class = "com.google.devtools.build.java.bazel.BazelJavaCompilerTest",
- deps = [
- "//src/java_tools/buildjar/java/com/google/devtools/build/java/bazel:BazelJavaCompiler",
- "//third_party:guava",
- "//third_party:junit4",
- "//third_party:truth",
- ],
-)
-
-filegroup(
- name = "srcs",
- srcs = [
- "BUILD",
- "BazelJavaCompilerTest.java",
- ],
-)
-
-test_suite(name = "all_tests")
diff --git a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/bazel/BazelJavaCompilerTest.java b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/bazel/BazelJavaCompilerTest.java
deleted file mode 100644
index 3e289ad..0000000
--- a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/bazel/BazelJavaCompilerTest.java
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2015 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.java.bazel;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.junit.Assert.fail;
-
-import java.io.File;
-import java.net.URI;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import javax.tools.DiagnosticCollector;
-import javax.tools.JavaCompiler;
-import javax.tools.JavaFileObject;
-import javax.tools.SimpleJavaFileObject;
-import javax.tools.StandardJavaFileManager;
-import javax.tools.StandardLocation;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/** Sanity checks: make sure we can instantiate a working javac compiler. */
-@RunWith(JUnit4.class)
-public class BazelJavaCompilerTest {
-
- private static File getTmpDir() {
- String tmpdir = System.getenv("TEST_TMPDIR");
- if (tmpdir == null) {
- // Fall back on the system temporary directory
- tmpdir = System.getProperty("java.io.tmpdir");
- }
- if (tmpdir == null) {
- fail("TEST_TMPDIR environment variable is not set!");
- }
- return new File(tmpdir);
- }
-
- @Test
- public void testCompilerNewInstance() throws Exception {
- JavaCompiler javac = BazelJavaCompiler.newInstance();
-
- assertThat(javac.getStandardFileManager(null, null, null)).isNotNull();
-
- // This is a simplified pattern of invoking the compiler API. Note, however, that
- // many examples cast to JavacTask or JavacTaskImpl and invoke the phases separately.
- // Currently, either cast will fail with something that looks like classloader issues:
- // "com.sun.tools.javac.api.JavacTask cannot be cast to com.sun.tools.javac.api.JavacTask"
- assertThat(javac.getTask(null, null, null, null, null, null)).isNotNull();
- }
-
- @Test
- public void testAllowsJava7LanguageFeatures() throws Exception {
- assertCompileSucceeds(
- "string://Test.java",
- "class Test {"
- + " void foo(String s) {"
- + " switch (s) {"
- + " default:"
- + " return;"
- + " }"
- + " }"
- + "}");
- }
-
- @Test
- public void testAllowsJava7APIs() throws Exception {
- assertCompileSucceeds("string://Test.java", "import java.nio.file.Files;" + "class Test {}");
- }
-
- @Test
- public void testJavacOpts() throws Exception {
- // BazelJavaCompiler loads the default opts from JavaBuilder, so testing against
- // the exact options would be brittle. This is a basic sanity check that
- // the default options include the correct -encoding (which is loaded from
- // JavaBuilder), and that BazelJavaCompiler is appending the -bootclasspath.
- List<String> opts = BazelJavaCompiler.getDefaultJavacopts();
- assertThat(opts).contains("UTF-8");
- assertThat(opts).contains("-bootclasspath");
- }
-
- private void assertCompileSucceeds(final String uri, final String content) throws Exception {
- JavaCompiler javac = BazelJavaCompiler.newInstance();
- JavaFileObject source =
- new SimpleJavaFileObject(URI.create(uri), JavaFileObject.Kind.SOURCE) {
- @Override
- public CharSequence getCharContent(boolean ignoreEncodingErrors) {
- return content;
- }
- };
- StandardJavaFileManager fileManager = javac.getStandardFileManager(null, null, null);
- // setting the output path by passing a flag to getTask is not reliable
- fileManager.setLocation(StandardLocation.CLASS_OUTPUT, Arrays.asList(getTmpDir()));
- DiagnosticCollector<JavaFileObject> messages = new DiagnosticCollector<>();
- JavaCompiler.CompilationTask task =
- javac.getTask(null, fileManager, messages, null, null, Collections.singletonList(source));
- assertThat(task.call()).isTrue();
- assertThat(messages.getDiagnostics()).isEmpty();
- }
-}