From 3fad9a22f451b7889582898171bac22e55106de3 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 11 Jul 2018 09:37:44 +0700 Subject: [PATCH] PsiJavaCodeReferenceElementImpl: preserve tokens (comments/whitespace) between name element and parameter list --- .../source/PsiJavaCodeReferenceElementImpl.java | 12 +++++++++--- .../streamApiMigration/foreach/afterForEachVar.java | 13 +++++++++++++ .../foreach/beforeForEachVar.java | 13 +++++++++++++ 3 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/afterForEachVar.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/beforeForEachVar.java diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java index 9cf79d6bcf0b..2bc79a6f5b94 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java @@ -644,15 +644,21 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme assert qName != null : aClass; } - String text = qName; + StringBuilder text = new StringBuilder(qName); PsiReferenceParameterList parameterList = getParameterList(); if (parameterList != null) { - text += parameterList.getText(); + PsiElement cur = getReferenceNameElement(); + do { + assert cur != null : getText(); + cur = cur.getNextSibling(); + text.append(cur.getText()); + } + while (cur != parameterList); } PsiJavaCodeReferenceElement ref; try { - ref = facade.getParserFacade().createReferenceFromText(text, getParent()); + ref = facade.getParserFacade().createReferenceFromText(text.toString(), getParent()); } catch (IncorrectOperationException e) { throw new IncorrectOperationException(e.getMessage() + " [qname=" + qName + " class=" + aClass + ";" + aClass.getClass().getName() + "]"); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/afterForEachVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/afterForEachVar.java new file mode 100644 index 000000000000..6c1e3dd3d5f0 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/afterForEachVar.java @@ -0,0 +1,13 @@ +// "Replace with forEach" "true" + +import java.util.*; + +public class Test { + void test(Collection obj) { + obj.forEach(str -> { + List// declaration + s2 = Collections.singleton(str); + System.out.println(str + s2); + }); + } +} diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/beforeForEachVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/beforeForEachVar.java new file mode 100644 index 000000000000..b0ac2d7057dd --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/beforeForEachVar.java @@ -0,0 +1,13 @@ +// "Replace with forEach" "true" + +import java.util.*; + +public class Test { + void test(Collection obj) { + for(String str : obj) { + List// declaration + s2 = Collections.singleton(str); + System.out.println(str+s2); + } + } +}