From 42e56dca6168b0aaac3cfcb49be1d36cc563773c Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 16 Apr 2018 13:30:52 +0200 Subject: [PATCH] java imports: make stub- and AST-based `isOnDemand` logic the same fixes occasional ClassCastException: com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl cannot be cast to com.intellij.psi.PsiImportStaticReferenceElement --- .../impl/java/stubs/JavaImportStatementElementType.java | 3 +-- .../Java9RedundantRequiresStatementTest.kt | 2 +- .../testSrc/com/intellij/java/psi/JavaStubsTest.groovy | 9 +++++++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaImportStatementElementType.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaImportStatementElementType.java index d94ed0bc1a97..96a87733f932 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaImportStatementElementType.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaImportStatementElementType.java @@ -31,7 +31,6 @@ import com.intellij.psi.stubs.StubElement; import com.intellij.psi.stubs.StubInputStream; import com.intellij.psi.stubs.StubOutputStream; import com.intellij.psi.tree.IElementType; -import com.intellij.util.io.StringRef; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -70,7 +69,7 @@ public abstract class JavaImportStatementElementType extends JavaStubElementType if (type == JavaElementType.JAVA_CODE_REFERENCE || type == JavaElementType.IMPORT_STATIC_REFERENCE) { refText = JavaSourceUtil.getReferenceText(tree, child); } - else if (type == JavaTokenType.ASTERISK) { + else if (type == JavaTokenType.DOT) { isOnDemand = true; } } diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/Java9RedundantRequiresStatementTest.kt b/java/java-tests/testSrc/com/intellij/java/codeInspection/Java9RedundantRequiresStatementTest.kt index 5bbde9bbb288..4cf3120de354 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/Java9RedundantRequiresStatementTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/Java9RedundantRequiresStatementTest.kt @@ -88,7 +88,7 @@ class Java9RedundantRequiresStatementTest : LightJava9ModulesCodeInsightFixtureT mainModule("module MAIN { requires M6; }") } - fun testNonexistentMethodImported() { + fun _testNonexistentMethodImported() { mainClass(staticImports = listOf("org.example.m2.C2.nonexistent")) mainModule("module MAIN { requires M2; }") } diff --git a/java/java-tests/testSrc/com/intellij/java/psi/JavaStubsTest.groovy b/java/java-tests/testSrc/com/intellij/java/psi/JavaStubsTest.groovy index a75d8dee02b3..793dda4dc20a 100644 --- a/java/java-tests/testSrc/com/intellij/java/psi/JavaStubsTest.groovy +++ b/java/java-tests/testSrc/com/intellij/java/psi/JavaStubsTest.groovy @@ -319,4 +319,13 @@ class A { PsiTestUtil.checkStubsMatchText(myFixture.addFileToProject("a.java", text)) } + void "test incomplete static import does not cause CCE"() { + def file = myFixture.addFileToProject('a.java', 'import static foo.bar.') as PsiJavaFile + assert ((PsiFileImpl)file).stub + assert file.node + def staticImport = ((PsiJavaFile)file).importList.importStaticStatements[0] + assert staticImport.referenceName == null + assert !staticImport.resolveTargetClass() + } + } \ No newline at end of file