diff --git a/java/java-psi-impl/src/com/intellij/psi/scope/processor/MethodCandidatesProcessor.java b/java/java-psi-impl/src/com/intellij/psi/scope/processor/MethodCandidatesProcessor.java index 11e5d16e998a..5bf3b4712d63 100644 --- a/java/java-psi-impl/src/com/intellij/psi/scope/processor/MethodCandidatesProcessor.java +++ b/java/java-psi-impl/src/com/intellij/psi/scope/processor/MethodCandidatesProcessor.java @@ -10,6 +10,7 @@ import com.intellij.psi.scope.PsiConflictResolver; import com.intellij.psi.scope.conflictResolvers.DuplicateConflictResolver; import com.intellij.psi.util.ImportsUtil; import com.intellij.psi.util.PsiUtil; +import com.intellij.util.ObjectUtils; import com.intellij.util.SmartList; import org.jetbrains.annotations.NotNull; @@ -113,9 +114,10 @@ public class MethodCandidatesProcessor extends MethodsProcessor{ private boolean isShadowed(@NotNull PsiMethod candidate) { if (myCurrentFileContext instanceof PsiImportStaticStatement) { for (JavaResolveResult result : getResults()) { - if (result.getElement() != candidate && - result.isAccessible() && - !(result.getCurrentFileResolveScope() instanceof PsiImportStaticStatement)) return true; + PsiMethod method = ObjectUtils.tryCast(result.getElement(), PsiMethod.class); + if (method != null && method != candidate && result.isAccessible() && + !(result.getCurrentFileResolveScope() instanceof PsiImportStaticStatement) && + isInterfaceStaticMethodAccessibleThroughInheritance(method)) return true; } } return false; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting11/StaticImportArrayCopyOfAccess.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting11/StaticImportArrayCopyOfAccess.java new file mode 100644 index 000000000000..fa7b185f9582 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting11/StaticImportArrayCopyOfAccess.java @@ -0,0 +1,28 @@ +import static java.util.Arrays.copyOf; + +import java.util.AbstractList; + +// IDEA-355152 +class Main extends AbstractList { + + @Override + public T get(int index) { + return null; + } + + @Override + public int size() { + return 0; + } + + protected static class Node { + protected void copy() { + int[] ary = new int[]{1,2,3,4,5}; + copyOf(ary, 6); + } + } + + public static void main(String[] args) { + Main main = new Main<>(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightJava11HighlightingTest.kt b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightJava11HighlightingTest.kt index e5044056aed6..c77d8240b431 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightJava11HighlightingTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightJava11HighlightingTest.kt @@ -38,6 +38,10 @@ class LightJava11HighlightingTest : LightJavaCodeInsightFixtureTestCase() { doTest() } + fun testStaticImportArrayCopyOfAccess() { + doTest() + } + fun testJavaShebang() { val file = myFixture.configureByText("hello", """#!/path/to/java