From 81c3351af9ff97341b2d89e40867a6acf9a56a75 Mon Sep 17 00:00:00 2001 From: Patrick Koenig Date: Tue, 30 Jun 2020 13:45:30 -0700 Subject: [PATCH 1/3] Disable FallThrough on Java 14 for switch expressions --- .../baseline/errorprone/FallThroughTest.java | 48 +++++++++++++++++++ .../baseline/plugins/BaselineErrorProne.java | 8 ++++ 2 files changed, 56 insertions(+) create mode 100644 baseline-error-prone/src/test/java/com/palantir/baseline/errorprone/FallThroughTest.java diff --git a/baseline-error-prone/src/test/java/com/palantir/baseline/errorprone/FallThroughTest.java b/baseline-error-prone/src/test/java/com/palantir/baseline/errorprone/FallThroughTest.java new file mode 100644 index 000000000..ed8e9cff5 --- /dev/null +++ b/baseline-error-prone/src/test/java/com/palantir/baseline/errorprone/FallThroughTest.java @@ -0,0 +1,48 @@ +/* + * (c) Copyright 2020 Palantir Technologies Inc. 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.palantir.baseline.errorprone; + +import com.google.common.collect.ImmutableList; +import com.google.errorprone.CompilationTestHelper; +import com.google.errorprone.bugpatterns.FallThrough; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledForJreRange; +import org.junit.jupiter.api.condition.JRE; + +public class FallThroughTest { + + @Test + @DisabledForJreRange(max = JRE.JAVA_13) + public void testSwitchExpression() { + CompilationTestHelper compilationHelper = CompilationTestHelper.newInstance(FallThrough.class, getClass()) + .setArgs(ImmutableList.of("--enable-preview", "--release", "14")); + + compilationHelper + .addSourceLines( + "Test.java", + "class Test {", + " static void foo(int value) {", + " switch (value) {", + " case 42 -> {}", + " // BUG: Diagnostic matches: X", + " default -> {}", + " };", + " }", + "}") + .expectErrorMessage("X", input -> input.contains("Execution may fall through from the previous case")) + .doTest(); + } +} diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineErrorProne.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineErrorProne.java index 6be24780e..b1522715f 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineErrorProne.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineErrorProne.java @@ -210,6 +210,14 @@ private static void configureErrorProneOptions( "%s%s(build|src%sgenerated.*)%s.*", Pattern.quote(projectPath), separator, separator, separator)); + // FallThrough does not currently work with switch expressions + // See https://github.com/google/error-prone/issues/1649 + errorProneOptions.check("FallThrough", project.provider(() -> { + JavaPluginExtension ext = project.getExtensions().getByType(JavaPluginExtension.class); + return ext.getSourceCompatibility().compareTo(JavaVersion.toVersion(14)) < 0 + ? CheckSeverity.DEFAULT + : CheckSeverity.OFF; + })); // UnnecessaryParentheses does not currently work with switch expressions errorProneOptions.check("UnnecessaryParentheses", project.provider(() -> { JavaPluginExtension ext = project.getExtensions().getByType(JavaPluginExtension.class); From eb2d7700baf14be1bc9b44ec5a940c232715a093 Mon Sep 17 00:00:00 2001 From: Patrick Koenig Date: Tue, 30 Jun 2020 20:45:30 +0000 Subject: [PATCH 2/3] Add generated changelog entries --- changelog/@unreleased/pr-1442.v2.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 changelog/@unreleased/pr-1442.v2.yml diff --git a/changelog/@unreleased/pr-1442.v2.yml b/changelog/@unreleased/pr-1442.v2.yml new file mode 100644 index 000000000..2f0451d38 --- /dev/null +++ b/changelog/@unreleased/pr-1442.v2.yml @@ -0,0 +1,14 @@ +type: improvement +improvement: + description: |- + Disable FallThrough on Java 14 for switch expressions + + ## Before this PR + There is a false negative with `FallThrough` on Java 14 when using switch expressions where the case arms are statements (as opposed to expressions). + + See https://github.com/google/error-prone/issues/1649. + + ## After this PR + Disable `FallThrough` on Java 14 source to avoid false positives + links: + - https://github.com/palantir/gradle-baseline/pull/1442 From 69b744aa2923ed76c013c9793842764287c1d632 Mon Sep 17 00:00:00 2001 From: Patrick Koenig Date: Tue, 30 Jun 2020 20:45:30 +0000 Subject: [PATCH 3/3] Add generated changelog entries --- changelog/@unreleased/pr-1442.v2.yml | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/changelog/@unreleased/pr-1442.v2.yml b/changelog/@unreleased/pr-1442.v2.yml index 2f0451d38..d2ca7ce8b 100644 --- a/changelog/@unreleased/pr-1442.v2.yml +++ b/changelog/@unreleased/pr-1442.v2.yml @@ -1,14 +1,5 @@ type: improvement improvement: - description: |- - Disable FallThrough on Java 14 for switch expressions - - ## Before this PR - There is a false negative with `FallThrough` on Java 14 when using switch expressions where the case arms are statements (as opposed to expressions). - - See https://github.com/google/error-prone/issues/1649. - - ## After this PR - Disable `FallThrough` on Java 14 source to avoid false positives + description: Disable `FallThrough` on Java 14 source to avoid false positives links: - https://github.com/palantir/gradle-baseline/pull/1442