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