From de9873d15da46a0bad59c08c51ff8138857e7c20 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 1 Oct 2021 13:00:06 +0200 Subject: [PATCH] [java] visibility inspection: fix class references in annotation list (IDEA-279225) GitOrigin-RevId: cb8bebcfdc0bde638a70ee8b67de29893af63033 --- .../visibility/VisibilityInspection.java | 18 +++++------------- .../expected.xml | 18 +++++++++--------- .../src/ThisClass.java | 5 +++++ 3 files changed, 19 insertions(+), 22 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/VisibilityInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/VisibilityInspection.java index f4b409a33adc..3587e2025e1e 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/VisibilityInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/VisibilityInspection.java @@ -1,4 +1,4 @@ -// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.codeInspection.visibility; @@ -435,18 +435,10 @@ public final class VisibilityInspection extends GlobalJavaBatchInspectionTool { if (modifierList == null) return false; final PsiElement toElement = to.getPsiElement(); - final boolean [] resolved = {false}; - modifierList.accept(new JavaRecursiveElementWalkingVisitor() { - @Override - public void visitReferenceExpression(PsiReferenceExpression expression) { - if (resolved[0]) return; - super.visitReferenceExpression(expression); - if (expression.resolve() == toElement) { - resolved[0] = true; - } - } - }); - return resolved[0]; + return SyntaxTraverser.psiTraverser(modifierList) + .filter(PsiJavaCodeReferenceElement.class) + .filter(ref -> ref.isReferenceTo(toElement)) + .first() != null; } private static boolean isInExtendsList(final RefJavaElement to, final PsiReferenceList extendsList) { diff --git a/java/java-tests/testData/inspection/visibility/usedFromAnnotationsExtendsList/expected.xml b/java/java-tests/testData/inspection/visibility/usedFromAnnotationsExtendsList/expected.xml index 410fac51c885..73e6154743cd 100644 --- a/java/java-tests/testData/inspection/visibility/usedFromAnnotationsExtendsList/expected.xml +++ b/java/java-tests/testData/inspection/visibility/usedFromAnnotationsExtendsList/expected.xml @@ -1,5 +1,14 @@ + + ThisClass.java + 6 + Declaration access can be weaker + + + + Can be package-private + ThisClass.java 5 @@ -9,14 +18,5 @@ Can be package-private - - ThisClass.java - 4 - Declaration access can be weaker - - - - Can be package-private - diff --git a/java/java-tests/testData/inspection/visibility/usedFromAnnotationsExtendsList/src/ThisClass.java b/java/java-tests/testData/inspection/visibility/usedFromAnnotationsExtendsList/src/ThisClass.java index 67433f26feee..218f3c417725 100644 --- a/java/java-tests/testData/inspection/visibility/usedFromAnnotationsExtendsList/src/ThisClass.java +++ b/java/java-tests/testData/inspection/visibility/usedFromAnnotationsExtendsList/src/ThisClass.java @@ -1,9 +1,14 @@ import java.util.ArrayList; @SuppressWarnings(ThisClass.PUBLICFINALNAME) +@Anno(ThisClass.FFF) public class ThisClass extends ArrayList { public static final String PUBLICFINALNAME = "stuff"; public static class FF {} + static class FF {} public static void main(String[] args) { } +} +@interface Anno { + Class value() default String.class; } \ No newline at end of file