diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/AutowiredConstructorCheck.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/AutowiredConstructorCheck.java index 854e72bc..50e7f783 100644 --- a/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/AutowiredConstructorCheck.java +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/AutowiredConstructorCheck.java @@ -8,6 +8,7 @@ import static com.google.errorprone.matchers.Matchers.annotations; import static com.google.errorprone.matchers.Matchers.isType; import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.errorprone.BugPattern; import com.google.errorprone.VisitorState; @@ -43,7 +44,7 @@ public final class AutowiredConstructorCheck extends BugChecker implements Class return Description.NO_MATCH; } - List annotations = + ImmutableList annotations = AUTOWIRED_ANNOTATION .multiMatchResult(Iterables.getOnlyElement(constructors), state) .matchingNodes(); diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/FormatStringConcatenationCheck.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/FormatStringConcatenationCheck.java index a414874b..e3ea8e86 100644 --- a/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/FormatStringConcatenationCheck.java +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/FormatStringConcatenationCheck.java @@ -31,6 +31,7 @@ import com.sun.source.util.SimpleTreeVisitor; import java.util.ArrayList; import java.util.List; import java.util.Optional; +import javax.annotation.Nullable; /** * A {@link BugChecker} which flags string concatenations that produce a format string; in such @@ -210,6 +211,7 @@ public final class FormatStringConcatenationCheck extends BugChecker this.formatSpecifier = formatSpecifier; } + @Nullable @Override public Void visitBinary(BinaryTree tree, VisitorState state) { if (tree.getKind() == Kind.PLUS && isStringTyped(tree, state)) { @@ -222,11 +224,13 @@ public final class FormatStringConcatenationCheck extends BugChecker return null; } + @Nullable @Override public Void visitParenthesized(ParenthesizedTree tree, VisitorState state) { return tree.getExpression().accept(this, state); } + @Nullable @Override protected Void defaultAction(Tree tree, VisitorState state) { appendExpression(tree); diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/LexicographicalAnnotationAttributeListingCheck.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/LexicographicalAnnotationAttributeListingCheck.java index a78a655a..b6f2e9d5 100644 --- a/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/LexicographicalAnnotationAttributeListingCheck.java +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/LexicographicalAnnotationAttributeListingCheck.java @@ -37,6 +37,7 @@ import java.util.List; import java.util.Optional; import java.util.Set; import java.util.stream.Stream; +import javax.annotation.Nullable; /** * A {@link BugChecker} which flags annotation array listings which aren't sorted lexicographically. @@ -171,18 +172,21 @@ public final class LexicographicalAnnotationAttributeListingCheck extends BugChe ImmutableList.Builder> nodes = ImmutableList.builder(); new TreeScanner() { + @Nullable @Override public Void visitIdentifier(IdentifierTree node, Void ctx) { nodes.add(tokenize(node)); return super.visitIdentifier(node, ctx); } + @Nullable @Override public Void visitLiteral(LiteralTree node, Void ctx) { nodes.add(tokenize(node)); return super.visitLiteral(node, ctx); } + @Nullable @Override public Void visitPrimitiveType(PrimitiveTypeTree node, Void ctx) { nodes.add(tokenize(node)); diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/RefasterCheck.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/RefasterCheck.java index 93698286..81212cd1 100644 --- a/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/RefasterCheck.java +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/RefasterCheck.java @@ -166,11 +166,12 @@ public final class RefasterCheck extends BugChecker implements CompilationUnitTr flags .get(INCLUDED_TEMPLATES_PATTERN_FLAG) .map(Pattern::compile) - .map(nameFilter -> filterCodeTransformers(allTransformers, nameFilter)) + .>map( + nameFilter -> filterCodeTransformers(allTransformers, nameFilter)) .orElseGet(allTransformers::values)); } - private static ImmutableCollection filterCodeTransformers( + private static ImmutableList filterCodeTransformers( ImmutableListMultimap transformers, Pattern nameFilter) { return transformers.entries().stream() .filter(e -> nameFilter.matcher(e.getKey()).matches()) diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/ScheduledTransactionTraceCheck.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/ScheduledTransactionTraceCheck.java index 5479d0f1..e7f4704c 100644 --- a/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/ScheduledTransactionTraceCheck.java +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/ScheduledTransactionTraceCheck.java @@ -75,7 +75,7 @@ public final class ScheduledTransactionTraceCheck extends BugChecker implements return describeMatch( traceAnnotation, SuggestedFixes.updateAnnotationArgumentValues( - traceAnnotation, "dispatcher", ImmutableList.of("true")) + traceAnnotation, state, "dispatcher", ImmutableList.of("true")) .build()); } diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/TimeZoneUsageCheck.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/TimeZoneUsageCheck.java index 3f5ba8d1..4dfee845 100644 --- a/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/TimeZoneUsageCheck.java +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/bugpatterns/TimeZoneUsageCheck.java @@ -59,7 +59,7 @@ public final class TimeZoneUsageCheck extends BugChecker implements MethodInvoca LocalDateTime.class.getName(), LocalTime.class.getName()) .named("now"), - staticMethod().onClassAny(Instant.class.getName()).named("now").withParameters()); + staticMethod().onClassAny(Instant.class.getName()).named("now").withNoParameters()); @Override public Description matchMethodInvocation(MethodInvocationTree tree, VisitorState state) { diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/AssertJThrowingCallableTemplates.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/AssertJThrowingCallableTemplates.java index c507dd87..29afc7df 100644 --- a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/AssertJThrowingCallableTemplates.java +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/AssertJThrowingCallableTemplates.java @@ -268,9 +268,9 @@ final class AssertJThrowingCallableTemplates { } static final class AssertThatThrownByIOExceptionHasMessage { + @BeforeTemplate @SuppressWarnings( "AssertThatThrownByIOException" /* Matches strictly more specific expressions. */) - @BeforeTemplate AbstractObjectAssert before(ThrowingCallable throwingCallable, String message) { return assertThatIOException().isThrownBy(throwingCallable).withMessage(message); } diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/ImmutableListMultimapTemplates.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/ImmutableListMultimapTemplates.java index 78c59608..2ef8696f 100644 --- a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/ImmutableListMultimapTemplates.java +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/ImmutableListMultimapTemplates.java @@ -92,7 +92,7 @@ final class ImmutableListMultimapTemplates { */ static final class EntryToImmutableListMultimap { @BeforeTemplate - ImmutableMultimap before(Map.Entry entry) { + ImmutableListMultimap before(Map.Entry entry) { return Refaster.anyOf( ImmutableListMultimap.builder().put(entry).build(), Stream.of(entry) diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/ImmutableSortedMultisetTemplates.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/ImmutableSortedMultisetTemplates.java index 748b1cd5..68252ae2 100644 --- a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/ImmutableSortedMultisetTemplates.java +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/ImmutableSortedMultisetTemplates.java @@ -4,7 +4,6 @@ import static com.google.common.collect.ImmutableSortedMultiset.toImmutableSorte import static com.google.errorprone.refaster.ImportPolicy.STATIC_IMPORT_ALWAYS; import static java.util.Comparator.naturalOrder; -import com.google.common.collect.ImmutableMultiset; import com.google.common.collect.ImmutableSortedMultiset; import com.google.common.collect.Streams; import com.google.errorprone.refaster.Refaster; @@ -91,14 +90,14 @@ final class ImmutableSortedMultisetTemplates { // `reverseOrder`.) Worth the hassle? static final class IterableToImmutableSortedMultiset> { @BeforeTemplate - ImmutableMultiset before(T[] iterable) { + ImmutableSortedMultiset before(T[] iterable) { return Refaster.anyOf( ImmutableSortedMultiset.naturalOrder().add(iterable).build(), Arrays.stream(iterable).collect(toImmutableSortedMultiset(naturalOrder()))); } @BeforeTemplate - ImmutableMultiset before(Iterator iterable) { + ImmutableSortedMultiset before(Iterator iterable) { return Refaster.anyOf( ImmutableSortedMultiset.copyOf(naturalOrder(), iterable), ImmutableSortedMultiset.naturalOrder().addAll(iterable).build(), @@ -106,7 +105,7 @@ final class ImmutableSortedMultisetTemplates { } @BeforeTemplate - ImmutableMultiset before(Iterable iterable) { + ImmutableSortedMultiset before(Iterable iterable) { return Refaster.anyOf( ImmutableSortedMultiset.copyOf(naturalOrder(), iterable), ImmutableSortedMultiset.naturalOrder().addAll(iterable).build(), diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/ImmutableSortedSetTemplates.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/ImmutableSortedSetTemplates.java index 3ed79be0..bac035d3 100644 --- a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/ImmutableSortedSetTemplates.java +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/ImmutableSortedSetTemplates.java @@ -4,7 +4,6 @@ import static com.google.common.collect.ImmutableSortedSet.toImmutableSortedSet; import static com.google.errorprone.refaster.ImportPolicy.STATIC_IMPORT_ALWAYS; import static java.util.Comparator.naturalOrder; -import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Streams; import com.google.errorprone.refaster.Refaster; @@ -89,14 +88,14 @@ final class ImmutableSortedSetTemplates { // `reverseOrder`.) Worth the hassle? static final class IterableToImmutableSortedSet> { @BeforeTemplate - ImmutableSet before(T[] iterable) { + ImmutableSortedSet before(T[] iterable) { return Refaster.anyOf( ImmutableSortedSet.naturalOrder().add(iterable).build(), Arrays.stream(iterable).collect(toImmutableSortedSet(naturalOrder()))); } @BeforeTemplate - ImmutableSet before(Iterator iterable) { + ImmutableSortedSet before(Iterator iterable) { return Refaster.anyOf( ImmutableSortedSet.copyOf(naturalOrder(), iterable), ImmutableSortedSet.naturalOrder().addAll(iterable).build(), @@ -104,7 +103,7 @@ final class ImmutableSortedSetTemplates { } @BeforeTemplate - ImmutableSet before(Iterable iterable) { + ImmutableSortedSet before(Iterable iterable) { return Refaster.anyOf( ImmutableSortedSet.copyOf(naturalOrder(), iterable), ImmutableSortedSet.naturalOrder().addAll(iterable).build(), diff --git a/error-prone-contrib/src/test/java/tech/picnic/errorprone/bugpatterns/ScheduledTransactionTraceCheckTest.java b/error-prone-contrib/src/test/java/tech/picnic/errorprone/bugpatterns/ScheduledTransactionTraceCheckTest.java index 7446fad7..0174d71a 100644 --- a/error-prone-contrib/src/test/java/tech/picnic/errorprone/bugpatterns/ScheduledTransactionTraceCheckTest.java +++ b/error-prone-contrib/src/test/java/tech/picnic/errorprone/bugpatterns/ScheduledTransactionTraceCheckTest.java @@ -4,8 +4,6 @@ import com.google.errorprone.BugCheckerRefactoringTestHelper; import com.google.errorprone.BugCheckerRefactoringTestHelper.TestMode; import com.google.errorprone.CompilationTestHelper; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.DisabledForJreRange; -import org.junit.jupiter.api.condition.JRE; final class ScheduledTransactionTraceCheckTest { private final CompilationTestHelper compilationTestHelper = @@ -45,10 +43,7 @@ final class ScheduledTransactionTraceCheckTest { .doTest(); } - // XXX: Enable this test for all JREs once https://github.com/google/error-prone/pull/2820 is - // merged and released. @Test - @DisabledForJreRange(min = JRE.JAVA_12) void replacement() { refactoringTestHelper .addInputLines( diff --git a/pom.xml b/pom.xml index c55e9347..4885b3bb 100644 --- a/pom.xml +++ b/pom.xml @@ -134,9 +134,9 @@ 1.0.1 1.9 ${version.error-prone-orig} - v${version.error-prone-orig}-picnic-3 - 2.10.0 - 0.1.4 + v${version.error-prone-orig}-picnic-2 + 2.14.0 + 0.1.12 3.0.0 1.0 11 @@ -348,6 +348,11 @@ checker-qual 3.23.0 + + org.hamcrest + hamcrest-core + 2.2 + org.junit junit-bom @@ -1264,7 +1269,7 @@ `BugChecker` test code and the Refaster test files) does not exhibit anti-patterns other than those associated with the check/template under test. Ideally all test cases are realistic. --> - -Xep:MethodReferenceUsage:OFF + -XepAllSuggestionsAsWarnings -Xep:MethodReferenceUsage:OFF @@ -1492,18 +1497,28 @@ -Xep:BetaApi:OFF + + -Xep:BugPatternNaming:OFF -Xep:Java7ApiChecker:OFF -Xep:Java8ApiChecker:OFF -Xep:StaticOrDefaultInterfaceMethod:OFF + + -Xep:Varifier:OFF -Xep:VoidMissingNullable:OFF + -XepOpt:CheckReturnValue:CheckAllConstructors=true + + -XepOpt:InlineMe:SkipInliningsWithComments=false -XepOpt:NullAway:AnnotatedPackages=tech.picnic -XepOpt:NullAway:AssertsEnabled=true -XepOpt:NullAway:CheckOptionalEmptiness=true + -XepOpt:Nullness:Conservative=false ${error-prone.patch-args} ${error-prone.self-check-args} diff --git a/refaster-compiler/src/main/java/tech/picnic/errorprone/refaster/plugin/RefasterRuleCompilerTaskListener.java b/refaster-compiler/src/main/java/tech/picnic/errorprone/refaster/plugin/RefasterRuleCompilerTaskListener.java index 7bc2d3ef..eac10a01 100644 --- a/refaster-compiler/src/main/java/tech/picnic/errorprone/refaster/plugin/RefasterRuleCompilerTaskListener.java +++ b/refaster-compiler/src/main/java/tech/picnic/errorprone/refaster/plugin/RefasterRuleCompilerTaskListener.java @@ -29,6 +29,7 @@ import java.io.UncheckedIOException; import java.util.List; import java.util.Map; import java.util.Optional; +import javax.annotation.Nullable; import javax.tools.FileObject; import javax.tools.JavaFileManager; import javax.tools.StandardLocation; @@ -91,6 +92,7 @@ final class RefasterRuleCompilerTaskListener implements TaskListener { ClassTree tree) { ListMultimap rules = ArrayListMultimap.create(); new TreeScanner() { + @Nullable @Override public Void visitClass(ClassTree node, Void v) { rules.putAll(node, RefasterRuleBuilderScanner.extractRules(node, context));