| # 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. | 
 |  | 
 | """Bazel rules for creating Java toolchains.""" | 
 |  | 
 | JDK8_JVM_OPTS = [ | 
 |     "-Xbootclasspath/p:$(location @bazel_tools//third_party/java/jdk/langtools:javac_jar)", | 
 | ] | 
 |  | 
 | JDK9_JVM_OPTS = [ | 
 |     # Allow JavaBuilder to access internal javac APIs. | 
 |     "--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED", | 
 |     "--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED", | 
 |     "--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED", | 
 |     "--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED", | 
 |     "--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED", | 
 |     "--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED", | 
 |     "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED", | 
 |     "--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED", | 
 |  | 
 |     # override the javac in the JDK. | 
 |     "--patch-module=java.compiler=$(location @bazel_tools//third_party/java/jdk/langtools:java_compiler_jar)", | 
 |     "--patch-module=jdk.compiler=$(location @bazel_tools//third_party/java/jdk/langtools:jdk_compiler_jar)", | 
 |  | 
 |     # quiet warnings from com.google.protobuf.UnsafeUtil, | 
 |     # see: https://github.com/google/protobuf/issues/3781 | 
 |     "--add-opens=java.base/java.nio=ALL-UNNAMED", | 
 | ] | 
 |  | 
 | DEFAULT_JAVACOPTS = [ | 
 |     "-XDskipDuplicateBridges=true", | 
 |     "-g", | 
 |     "-parameters", | 
 | ] | 
 |  | 
 | PROTO_JAVACOPTS = [ | 
 |     # Restrict protos to Java 7 so that they are compatible with Android. | 
 |     "-source", | 
 |     "7", | 
 |     "-target", | 
 |     "7", | 
 | ] | 
 |  | 
 | COMPATIBLE_JAVACOPTS = { | 
 |     "proto": PROTO_JAVACOPTS, | 
 | } | 
 |  | 
 | DEFAULT_TOOLCHAIN_CONFIGURATION = { | 
 |     "encoding": "UTF-8", | 
 |     "forcibly_disable_header_compilation": 0, | 
 |     "genclass": ["@bazel_tools//tools/jdk:genclass"], | 
 |     "header_compiler": ["@bazel_tools//tools/jdk:turbine"], | 
 |     "ijar": ["@bazel_tools//tools/jdk:ijar"], | 
 |     "javabuilder": ["@bazel_tools//tools/jdk:javabuilder"], | 
 |     "javac": ["@bazel_tools//third_party/java/jdk/langtools:javac_jar"], | 
 |     "tools": [ | 
 |         "@bazel_tools//third_party/java/jdk/langtools:java_compiler_jar", | 
 |         "@bazel_tools//third_party/java/jdk/langtools:jdk_compiler_jar", | 
 |     ], | 
 |     "javac_supports_workers": 1, | 
 |     "jvm_opts": JDK8_JVM_OPTS, | 
 |     "misc": DEFAULT_JAVACOPTS, | 
 |     "compatible_javacopts": COMPATIBLE_JAVACOPTS, | 
 |     "singlejar": ["@bazel_tools//tools/jdk:singlejar"], | 
 | } | 
 |  | 
 | def default_java_toolchain(name, **kwargs): | 
 |     """Defines a java_toolchain with appropriate defaults for Bazel.""" | 
 |  | 
 |     toolchain_args = dict(DEFAULT_TOOLCHAIN_CONFIGURATION) | 
 |     toolchain_args.update(kwargs) | 
 |  | 
 |     native.java_toolchain( | 
 |         name = name, | 
 |         **toolchain_args | 
 |     ) |