summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Ostrovsky <david@ostrovsky.org>2018-08-26 15:53:01 +0200
committerDavid Ostrovsky <david@ostrovsky.org>2018-09-05 07:52:23 +0200
commit08fca6a7d51046fb2aa1c335ebf4cd107c122654 (patch)
treeb3546860a46880e403f519789dbe6c2b7a1a2289
parentdf5992e2ad86d9768d567a6cdde1cd5d712a4a20 (diff)
Bazel: Provide toolchain with activated error prone warnings
On recent bazel versions it's trivial to apply package specific checks. Provide custom java toolchain with all error prone warnings activated. The list of all error prone warning was borrowed from here: [1]. For compatibility reasons with Bazel releases two java_toolchains are added for now: * Compatible with Bazel 0.16.1: error_prone_warnings_toolchain_bazel_0.16 compatible with 0.16.1 * Compatible with Bazel@HEAD: error_prone_warnings_toolchain Test Plan: $ bazel build --java_toolchain //tools:error_prone_warnings_toolchain \ //... [1] https://github.com/bazelbuild/BUILD_file_generator/blob/master/tools/bazel_defs/java.bzl Change-Id: I9a098c2d43cbfd87dbc261ce2cf9085dec3431e8 (cherry picked from commit 4b60cd7febb0a9a1e4a511dfb1855cc50c588820)
-rw-r--r--Documentation/dev-bazel.txt5
-rw-r--r--tools/BUILD148
2 files changed, 153 insertions, 0 deletions
diff --git a/Documentation/dev-bazel.txt b/Documentation/dev-bazel.txt
index caa4ba8e77..129071e188 100644
--- a/Documentation/dev-bazel.txt
+++ b/Documentation/dev-bazel.txt
@@ -121,6 +121,11 @@ The output JAR file will be be placed in:
Note that when building an individual plugin, the `core.zip` package
is not regenerated.
+To build with all Error Prone warnings activated, run:
+
+----
+ bazel build --java_toolchain //tools:error_prone_warnings_toolchain //...
+----
[[IDEs]]
diff --git a/tools/BUILD b/tools/BUILD
index 060cbd8787..379ea6cb10 100644
--- a/tools/BUILD
+++ b/tools/BUILD
@@ -1,6 +1,154 @@
+load("@bazel_tools//tools/jdk:default_java_toolchain.bzl", "default_java_toolchain")
+
py_binary(
name = "merge_jars",
srcs = ["merge_jars.py"],
main = "merge_jars.py",
visibility = ["//visibility:public"],
)
+
+# TODO(davido): remove this when minimum suported Bazel version >= 0.17
+# Copied from tools/jdk/default_java_toolchain.bzl to make Bazel 0.16
+# and later Bazel released to work as expected. See this issue for context:
+# https://github.com/bazelbuild/bazel/issues/6009
+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",
+]
+
+# See https://github.com/bazelbuild/bazel/issues/3427 for more context
+default_java_toolchain(
+ name = "error_prone_warnings_toolchain_bazel_0.16",
+ bootclasspath = ["@bazel_tools//tools/jdk:platformclasspath.jar"],
+ jvm_opts = JDK9_JVM_OPTS,
+ package_configuration = [
+ ":error_prone",
+ ],
+ visibility = ["//visibility:public"],
+)
+
+default_java_toolchain(
+ name = "error_prone_warnings_toolchain",
+ bootclasspath = ["@bazel_tools//tools/jdk:platformclasspath8.jar"],
+ package_configuration = [
+ ":error_prone",
+ ],
+ visibility = ["//visibility:public"],
+)
+
+# This EP warnings list is based on:
+# https://github.com/bazelbuild/BUILD_file_generator/blob/master/tools/bazel_defs/java.bzl
+java_package_configuration(
+ name = "error_prone",
+ javacopts = [
+ "-XepDisableWarningsInGeneratedCode",
+ "-Xep:MissingCasesInEnumSwitch:ERROR",
+ "-Xep:ReferenceEquality:WARN",
+ "-Xep:StringEquality:WARN",
+ "-Xep:WildcardImport:WARN",
+ "-Xep:AmbiguousMethodReference:WARN",
+ "-Xep:BadAnnotationImplementation:WARN",
+ "-Xep:BadComparable:WARN",
+ "-Xep:BoxedPrimitiveConstructor:ERROR",
+ "-Xep:CannotMockFinalClass:WARN",
+ "-Xep:ClassCanBeStatic:WARN",
+ "-Xep:ClassNewInstance:WARN",
+ "-Xep:DefaultCharset:WARN",
+ "-Xep:DoubleCheckedLocking:WARN",
+ "-Xep:ElementsCountedInLoop:WARN",
+ "-Xep:EqualsHashCode:WARN",
+ "-Xep:EqualsIncompatibleType:WARN",
+ "-Xep:ExpectedExceptionChecker:ERROR",
+ "-Xep:Finally:WARN",
+ "-Xep:FloatingPointLiteralPrecision:WARN",
+ "-Xep:FragmentInjection:WARN",
+ "-Xep:FragmentNotInstantiable:WARN",
+ "-Xep:FunctionalInterfaceClash:WARN",
+ "-Xep:FutureReturnValueIgnored:WARN",
+ "-Xep:GetClassOnEnum:WARN",
+ "-Xep:ImmutableAnnotationChecker:WARN",
+ "-Xep:ImmutableEnumChecker:WARN",
+ "-Xep:IncompatibleModifiers:WARN",
+ "-Xep:InjectOnConstructorOfAbstractClass:WARN",
+ "-Xep:InputStreamSlowMultibyteRead:WARN",
+ "-Xep:IterableAndIterator:WARN",
+ "-Xep:JUnit3FloatingPointComparisonWithoutDelta:WARN",
+ "-Xep:JUnitAmbiguousTestClass:WARN",
+ "-Xep:LiteralClassName:WARN",
+ "-Xep:MissingFail:WARN",
+ "-Xep:MissingOverride:WARN",
+ "-Xep:MutableConstantField:WARN",
+ "-Xep:NarrowingCompoundAssignment:WARN",
+ "-Xep:NonAtomicVolatileUpdate:WARN",
+ "-Xep:NonOverridingEquals:WARN",
+ "-Xep:NullableConstructor:WARN",
+ "-Xep:NullablePrimitive:WARN",
+ "-Xep:NullableVoid:WARN",
+ "-Xep:OperatorPrecedence:WARN",
+ "-Xep:OverridesGuiceInjectableMethod:WARN",
+ "-Xep:PreconditionsInvalidPlaceholder:WARN",
+ "-Xep:ProtoFieldPreconditionsCheckNotNull:WARN",
+ "-Xep:ProtocolBufferOrdinal:WARN",
+ "-Xep:RequiredModifiers:WARN",
+ "-Xep:ShortCircuitBoolean:WARN",
+ "-Xep:SimpleDateFormatConstant:WARN",
+ "-Xep:StaticGuardedByInstance:WARN",
+ "-Xep:SynchronizeOnNonFinalField:WARN",
+ "-Xep:TruthConstantAsserts:WARN",
+ "-Xep:TypeParameterShadowing:WARN",
+ "-Xep:TypeParameterUnusedInFormals:WARN",
+ "-Xep:URLEqualsHashCode:WARN",
+ "-Xep:UnsynchronizedOverridesSynchronized:WARN",
+ "-Xep:WaitNotInLoop:WARN",
+ ],
+ packages = ["error_prone_packages"],
+)
+
+package_group(
+ name = "error_prone_packages",
+ packages = [
+ "//gerrit-acceptance-framework/...",
+ "//gerrit-acceptance-tests/...",
+ "//gerrit-cache-h2/...",
+ "//gerrit-cache-mem/...",
+ "//gerrit-common/...",
+ "//gerrit-elasticsearch/...",
+ "//gerrit-extension-api/...",
+ "//gerrit-gpg/...",
+ "//gerrit-httpd/...",
+ "//gerrit-launcher/...",
+ "//gerrit-lucene/...",
+ "//gerrit-main/...",
+ "//gerrit-oauth/...",
+ "//gerrit-openid/...",
+ "//gerrit-patch-commonsnet/...",
+ "//gerrit-patch-jgit/...",
+ "//gerrit-pgm/...",
+ "//gerrit-plugin-api/...",
+ "//gerrit-plugin-gwtui/...",
+ "//gerrit-prettify/...",
+ "//gerrit-reviewdb/...",
+ "//gerrit-server/...",
+ "//gerrit-sshd/...",
+ "//gerrit-test-util/...",
+ "//gerrit-util-cli/...",
+ "//gerrit-util-http/...",
+ "//gerrit-util-ssl/...",
+ "//gerrit-war/...",
+ ],
+)