4141import com .google .errorprone .bugpatterns .BugChecker .CompilationUnitTreeMatcher ;
4242import com .google .errorprone .bugpatterns .BugChecker .CompoundAssignmentTreeMatcher ;
4343import com .google .errorprone .bugpatterns .BugChecker .ConditionalExpressionTreeMatcher ;
44+ import com .google .errorprone .bugpatterns .BugChecker .ConstantCaseLabelTreeMatcher ;
4445import com .google .errorprone .bugpatterns .BugChecker .ContinueTreeMatcher ;
46+ import com .google .errorprone .bugpatterns .BugChecker .DeconstructionPatternTreeMatcher ;
47+ import com .google .errorprone .bugpatterns .BugChecker .DefaultCaseLabelTreeMatcher ;
4548import com .google .errorprone .bugpatterns .BugChecker .DoWhileLoopTreeMatcher ;
4649import com .google .errorprone .bugpatterns .BugChecker .EmptyStatementTreeMatcher ;
4750import com .google .errorprone .bugpatterns .BugChecker .EnhancedForLoopTreeMatcher ;
6871import com .google .errorprone .bugpatterns .BugChecker .PackageTreeMatcher ;
6972import com .google .errorprone .bugpatterns .BugChecker .ParameterizedTypeTreeMatcher ;
7073import com .google .errorprone .bugpatterns .BugChecker .ParenthesizedTreeMatcher ;
74+ import com .google .errorprone .bugpatterns .BugChecker .PatternCaseLabelTreeMatcher ;
7175import com .google .errorprone .bugpatterns .BugChecker .PrimitiveTypeTreeMatcher ;
7276import com .google .errorprone .bugpatterns .BugChecker .ProvidesTreeMatcher ;
7377import com .google .errorprone .bugpatterns .BugChecker .RequiresTreeMatcher ;
105109import com .sun .source .tree .CompilationUnitTree ;
106110import com .sun .source .tree .CompoundAssignmentTree ;
107111import com .sun .source .tree .ConditionalExpressionTree ;
112+ import com .sun .source .tree .ConstantCaseLabelTree ;
108113import com .sun .source .tree .ContinueTree ;
114+ import com .sun .source .tree .DeconstructionPatternTree ;
115+ import com .sun .source .tree .DefaultCaseLabelTree ;
109116import com .sun .source .tree .DoWhileLoopTree ;
110117import com .sun .source .tree .EmptyStatementTree ;
111118import com .sun .source .tree .EnhancedForLoopTree ;
132139import com .sun .source .tree .PackageTree ;
133140import com .sun .source .tree .ParameterizedTypeTree ;
134141import com .sun .source .tree .ParenthesizedTree ;
142+ import com .sun .source .tree .PatternCaseLabelTree ;
135143import com .sun .source .tree .PrimitiveTypeTree ;
136144import com .sun .source .tree .ProvidesTree ;
137145import com .sun .source .tree .RequiresTree ;
@@ -233,6 +241,7 @@ protected Set<? extends Name> getCustomSuppressionAnnotations(VisitorState state
233241 return customSuppressionAnnotations .get (state );
234242 }
235243
244+ // keep-sorted start
236245 private final List <AnnotatedTypeTreeMatcher > annotatedTypeMatchers = new ArrayList <>();
237246 private final List <AnnotationTreeMatcher > annotationMatchers = new ArrayList <>();
238247 private final List <ArrayAccessTreeMatcher > arrayAccessMatchers = new ArrayList <>();
@@ -250,7 +259,11 @@ protected Set<? extends Name> getCustomSuppressionAnnotations(VisitorState state
250259 private final List <CompoundAssignmentTreeMatcher > compoundAssignmentMatchers = new ArrayList <>();
251260 private final List <ConditionalExpressionTreeMatcher > conditionalExpressionMatchers =
252261 new ArrayList <>();
262+ private final List <ConstantCaseLabelTreeMatcher > constantCaseLabelMatchers = new ArrayList <>();
253263 private final List <ContinueTreeMatcher > continueMatchers = new ArrayList <>();
264+ private final List <DeconstructionPatternTreeMatcher > deconstructionPatternMatchers =
265+ new ArrayList <>();
266+ private final List <DefaultCaseLabelTreeMatcher > defaultCaseLabelMatchers = new ArrayList <>();
254267 private final List <DoWhileLoopTreeMatcher > doWhileLoopMatchers = new ArrayList <>();
255268 private final List <EmptyStatementTreeMatcher > emptyStatementMatchers = new ArrayList <>();
256269 private final List <EnhancedForLoopTreeMatcher > enhancedForLoopMatchers = new ArrayList <>();
@@ -268,8 +281,8 @@ protected Set<? extends Name> getCustomSuppressionAnnotations(VisitorState state
268281 private final List <LiteralTreeMatcher > literalMatchers = new ArrayList <>();
269282 private final List <MemberReferenceTreeMatcher > memberReferenceMatchers = new ArrayList <>();
270283 private final List <MemberSelectTreeMatcher > memberSelectMatchers = new ArrayList <>();
271- private final List <MethodTreeMatcher > methodMatchers = new ArrayList <>();
272284 private final List <MethodInvocationTreeMatcher > methodInvocationMatchers = new ArrayList <>();
285+ private final List <MethodTreeMatcher > methodMatchers = new ArrayList <>();
273286 private final List <ModifiersTreeMatcher > modifiersMatchers = new ArrayList <>();
274287 private final List <ModuleTreeMatcher > moduleMatchers = new ArrayList <>();
275288 private final List <NewArrayTreeMatcher > newArrayMatchers = new ArrayList <>();
@@ -278,6 +291,7 @@ protected Set<? extends Name> getCustomSuppressionAnnotations(VisitorState state
278291 private final List <PackageTreeMatcher > packageMatchers = new ArrayList <>();
279292 private final List <ParameterizedTypeTreeMatcher > parameterizedTypeMatchers = new ArrayList <>();
280293 private final List <ParenthesizedTreeMatcher > parenthesizedMatchers = new ArrayList <>();
294+ private final List <PatternCaseLabelTreeMatcher > patternCaseLabelMatchers = new ArrayList <>();
281295 private final List <PrimitiveTypeTreeMatcher > primitiveTypeMatchers = new ArrayList <>();
282296 private final List <ProvidesTreeMatcher > providesMatchers = new ArrayList <>();
283297 private final List <RequiresTreeMatcher > requiresMatchers = new ArrayList <>();
@@ -297,11 +311,14 @@ protected Set<? extends Name> getCustomSuppressionAnnotations(VisitorState state
297311 private final List <WildcardTreeMatcher > wildcardMatchers = new ArrayList <>();
298312 private final List <YieldTreeMatcher > yieldMatchers = new ArrayList <>();
299313
314+ // keep-sorted end
315+
300316 private void registerNodeTypes (
301317 BugChecker checker ,
302318 ImmutableSet .Builder <Class <? extends Annotation >> customSuppressionAnnotationClasses ) {
303319 customSuppressionAnnotationClasses .addAll (checker .customSuppressionAnnotations ());
304320
321+ // keep-sorted start
305322 if (checker instanceof AnnotatedTypeTreeMatcher annotatedTypeTreeMatcher ) {
306323 annotatedTypeMatchers .add (annotatedTypeTreeMatcher );
307324 }
@@ -350,9 +367,18 @@ private void registerNodeTypes(
350367 if (checker instanceof ConditionalExpressionTreeMatcher conditionalExpressionTreeMatcher ) {
351368 conditionalExpressionMatchers .add (conditionalExpressionTreeMatcher );
352369 }
370+ if (checker instanceof ConstantCaseLabelTreeMatcher constantCaseLabelTreeMatcher ) {
371+ constantCaseLabelMatchers .add (constantCaseLabelTreeMatcher );
372+ }
353373 if (checker instanceof ContinueTreeMatcher continueTreeMatcher ) {
354374 continueMatchers .add (continueTreeMatcher );
355375 }
376+ if (checker instanceof DeconstructionPatternTreeMatcher deconstructionPatternTreeMatcher ) {
377+ deconstructionPatternMatchers .add (deconstructionPatternTreeMatcher );
378+ }
379+ if (checker instanceof DefaultCaseLabelTreeMatcher defaultCaseLabelTreeMatcher ) {
380+ defaultCaseLabelMatchers .add (defaultCaseLabelTreeMatcher );
381+ }
356382 if (checker instanceof DoWhileLoopTreeMatcher doWhileLoopTreeMatcher ) {
357383 doWhileLoopMatchers .add (doWhileLoopTreeMatcher );
358384 }
@@ -401,12 +427,12 @@ private void registerNodeTypes(
401427 if (checker instanceof MemberSelectTreeMatcher memberSelectTreeMatcher ) {
402428 memberSelectMatchers .add (memberSelectTreeMatcher );
403429 }
404- if (checker instanceof MethodTreeMatcher methodTreeMatcher ) {
405- methodMatchers .add (methodTreeMatcher );
406- }
407430 if (checker instanceof MethodInvocationTreeMatcher methodInvocationTreeMatcher ) {
408431 methodInvocationMatchers .add (methodInvocationTreeMatcher );
409432 }
433+ if (checker instanceof MethodTreeMatcher methodTreeMatcher ) {
434+ methodMatchers .add (methodTreeMatcher );
435+ }
410436 if (checker instanceof ModifiersTreeMatcher modifiersTreeMatcher ) {
411437 modifiersMatchers .add (modifiersTreeMatcher );
412438 }
@@ -431,6 +457,9 @@ private void registerNodeTypes(
431457 if (checker instanceof ParenthesizedTreeMatcher parenthesizedTreeMatcher ) {
432458 parenthesizedMatchers .add (parenthesizedTreeMatcher );
433459 }
460+ if (checker instanceof PatternCaseLabelTreeMatcher patternCaseLabelTreeMatcher ) {
461+ patternCaseLabelMatchers .add (patternCaseLabelTreeMatcher );
462+ }
434463 if (checker instanceof PrimitiveTypeTreeMatcher primitiveTypeTreeMatcher ) {
435464 primitiveTypeMatchers .add (primitiveTypeTreeMatcher );
436465 }
@@ -485,6 +514,7 @@ private void registerNodeTypes(
485514 if (checker instanceof YieldTreeMatcher yieldTreeMatcher ) {
486515 yieldMatchers .add (yieldTreeMatcher );
487516 }
517+ // keep-sorted end
488518 }
489519
490520 @ FunctionalInterface
@@ -654,13 +684,47 @@ public Void visitConditionalExpression(
654684 return super .visitConditionalExpression (tree , state );
655685 }
656686
687+ @ Override
688+ public Void visitConstantCaseLabel (ConstantCaseLabelTree tree , VisitorState visitorState ) {
689+ VisitorState state =
690+ processMatchers (
691+ constantCaseLabelMatchers ,
692+ tree ,
693+ ConstantCaseLabelTreeMatcher ::matchConstantCaseLabel ,
694+ visitorState );
695+ return super .visitConstantCaseLabel (tree , state );
696+ }
697+
657698 @ Override
658699 public Void visitContinue (ContinueTree tree , VisitorState visitorState ) {
659700 VisitorState state =
660701 processMatchers (continueMatchers , tree , ContinueTreeMatcher ::matchContinue , visitorState );
661702 return super .visitContinue (tree , state );
662703 }
663704
705+ @ Override
706+ public Void visitDeconstructionPattern (
707+ DeconstructionPatternTree tree , VisitorState visitorState ) {
708+ VisitorState state =
709+ processMatchers (
710+ deconstructionPatternMatchers ,
711+ tree ,
712+ DeconstructionPatternTreeMatcher ::matchDeconstructionPattern ,
713+ visitorState );
714+ return super .visitDeconstructionPattern (tree , state );
715+ }
716+
717+ @ Override
718+ public Void visitDefaultCaseLabel (DefaultCaseLabelTree tree , VisitorState visitorState ) {
719+ VisitorState state =
720+ processMatchers (
721+ defaultCaseLabelMatchers ,
722+ tree ,
723+ DefaultCaseLabelTreeMatcher ::matchDefaultCaseLabel ,
724+ visitorState );
725+ return super .visitDefaultCaseLabel (tree , state );
726+ }
727+
664728 @ Override
665729 public Void visitDoWhileLoop (DoWhileLoopTree tree , VisitorState visitorState ) {
666730 VisitorState state =
@@ -874,6 +938,17 @@ public Void visitPackage(PackageTree tree, VisitorState visitorState) {
874938 return super .visitPackage (tree , state );
875939 }
876940
941+ @ Override
942+ public Void visitPatternCaseLabel (PatternCaseLabelTree tree , VisitorState visitorState ) {
943+ VisitorState state =
944+ processMatchers (
945+ patternCaseLabelMatchers ,
946+ tree ,
947+ PatternCaseLabelTreeMatcher ::matchPatternCaseLabel ,
948+ visitorState );
949+ return super .visitPatternCaseLabel (tree , state );
950+ }
951+
877952 // Intentionally skip visitOther. It seems to be used only for let expressions, which are
878953 // generated by javac to implement autoboxing. We are only interested in source-level constructs.
879954
0 commit comments