From b65a8a3a35cbe21f2635aaddacc00aa2944265dc Mon Sep 17 00:00:00 2001 From: Peter Gromov Date: Wed, 2 Sep 2020 18:09:12 +0200 Subject: [PATCH] java: fix PIEAE when completing a constructor call invalidates the class being completed GitOrigin-RevId: bf6a03e359482f777e63e38383ecc4160cca82ec --- .../completion/JavaClassNameInsertHandler.java | 10 +++++++--- ...onsWhenCompletingInapplicableClassNameAfterNew.java | 7 +++++++ ...nCompletingInapplicableClassNameAfterNew_after.java | 7 +++++++ .../codeInsight/completion/NormalCompletionTest.groovy | 2 ++ 4 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normal/NoExceptionsWhenCompletingInapplicableClassNameAfterNew.java create mode 100644 java/java-tests/testData/codeInsight/completion/normal/NoExceptionsWhenCompletingInapplicableClassNameAfterNew_after.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameInsertHandler.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameInsertHandler.java index 41308f7e2fd3..aead8a0c1339 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameInsertHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameInsertHandler.java @@ -52,6 +52,7 @@ class JavaClassNameInsertHandler implements InsertHandler classPointer = SmartPointerManager.createPointer(psiClass); final Project project = context.getProject(); final Editor editor = context.getEditor(); @@ -90,18 +91,21 @@ class JavaClassNameInsertHandler implements InsertHandlerAnother( + f -> ((String)f).stream().anyMatch(c -> c.m(f) != null)); + +} + +class Another {} diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoExceptionsWhenCompletingInapplicableClassNameAfterNew_after.java b/java/java-tests/testData/codeInsight/completion/normal/NoExceptionsWhenCompletingInapplicableClassNameAfterNew_after.java new file mode 100644 index 000000000000..0ed168b6e9fd --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/NoExceptionsWhenCompletingInapplicableClassNameAfterNew_after.java @@ -0,0 +1,7 @@ +class Cx { + Another F = new Cx()Another( + f -> ((String)f).stream().anyMatch(c -> c.m(f) != null)); + +} + +class Another {} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.groovy index 937aebd9c166..475b3057c151 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.groovy @@ -2216,4 +2216,6 @@ class Abc { assert !lookup }.assertTiming() } + + void testNoExceptionsWhenCompletingInapplicableClassNameAfterNew() { doTest('\n') } }