diff --git a/java/java-impl/src/com/intellij/refactoring/encapsulateFields/JavaEncapsulateFieldHelper.java b/java/java-impl/src/com/intellij/refactoring/encapsulateFields/JavaEncapsulateFieldHelper.java index 19a6fb15ee0d..e9d597449e2f 100644 --- a/java/java-impl/src/com/intellij/refactoring/encapsulateFields/JavaEncapsulateFieldHelper.java +++ b/java/java-impl/src/com/intellij/refactoring/encapsulateFields/JavaEncapsulateFieldHelper.java @@ -236,19 +236,10 @@ public class JavaEncapsulateFieldHelper extends EncapsulateFieldHelper { PsiReferenceExpression expr, PsiClass aClass, PsiMethod setter) throws IncorrectOperationException { - PsiElementFactory factory = JavaPsiFacade.getInstance(expr.getProject()).getElementFactory(); final String setterName = fieldDescriptor.getSetterName(); @NonNls String text = setterName + "(a)"; - PsiExpression qualifier = expr.getQualifierExpression(); - if (qualifier != null){ - text = "q." + text; - } - PsiMethodCallExpression methodCall = (PsiMethodCallExpression)factory.createExpressionFromText(text, expr); - + PsiMethodCallExpression methodCall = prepareMethodCall(expr, text); methodCall.getArgumentList().getExpressions()[0].replace(setterArgument); - if (qualifier != null){ - methodCall.getMethodExpression().getQualifierExpression().replace(qualifier); - } methodCall = checkMethodResolvable(methodCall, setter, expr, aClass); if (methodCall == null) { VisibilityUtil.escalateVisibility(fieldDescriptor.getField(), expr); @@ -261,19 +252,9 @@ public class JavaEncapsulateFieldHelper extends EncapsulateFieldHelper { PsiReferenceExpression expr, PsiClass aClass, PsiMethod getter) throws IncorrectOperationException { - PsiElementFactory factory = JavaPsiFacade.getInstance(expr.getProject()).getElementFactory(); final String getterName = fieldDescriptor.getGetterName(); @NonNls String text = getterName + "()"; - PsiExpression qualifier = expr.getQualifierExpression(); - if (qualifier != null) { - text = "q." + text; - } - PsiMethodCallExpression methodCall = (PsiMethodCallExpression)factory.createExpressionFromText(text, expr); - - if (qualifier != null) { - methodCall.getMethodExpression().getQualifierExpression().replace(qualifier); - } - + PsiMethodCallExpression methodCall = prepareMethodCall(expr, text); methodCall = checkMethodResolvable(methodCall, getter, expr, aClass); if (methodCall == null) { VisibilityUtil.escalateVisibility(fieldDescriptor.getField(), expr); @@ -281,6 +262,18 @@ public class JavaEncapsulateFieldHelper extends EncapsulateFieldHelper { return methodCall; } + private static PsiMethodCallExpression prepareMethodCall(PsiReferenceExpression expr, String text) { + PsiExpression qualifier = expr.getQualifierExpression(); + if (qualifier != null) { + final PsiElement referenceNameElement = expr.getReferenceNameElement(); + if (referenceNameElement != null) { + text = expr.getText().substring(0, referenceNameElement.getStartOffsetInParent()) + text; + } + } + final PsiElementFactory factory = JavaPsiFacade.getInstance(expr.getProject()).getElementFactory(); + return (PsiMethodCallExpression)factory.createExpressionFromText(text, expr); + } + @Nullable private static PsiMethodCallExpression checkMethodResolvable(PsiMethodCallExpression methodCall, PsiMethod targetMethod, diff --git a/java/java-tests/testData/refactoring/encapsulateFields/commentsInside/after/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/commentsInside/after/Test.java new file mode 100644 index 000000000000..f77bc3bfffbc --- /dev/null +++ b/java/java-tests/testData/refactoring/encapsulateFields/commentsInside/after/Test.java @@ -0,0 +1,16 @@ +public class A { + public int i; + + void foo(A a) { + System.out.println(a./*comment*/getI()); + a/*comment*/.setI(42); + } + + public int getI() { + return i; + } + + public void setI(int i) { + this.i = i; + } +} diff --git a/java/java-tests/testData/refactoring/encapsulateFields/commentsInside/before/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/commentsInside/before/Test.java new file mode 100644 index 000000000000..9e04d78bdb6c --- /dev/null +++ b/java/java-tests/testData/refactoring/encapsulateFields/commentsInside/before/Test.java @@ -0,0 +1,8 @@ +public class A { + public int i; + + void foo(A a) { + System.out.println(a./*comment*/i); + a/*comment*/.i = 42; + } +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/EncapsulateFieldsTest.java b/java/java-tests/testSrc/com/intellij/refactoring/EncapsulateFieldsTest.java index a24ffb056003..9c820bc65bec 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/EncapsulateFieldsTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/EncapsulateFieldsTest.java @@ -59,6 +59,10 @@ public class EncapsulateFieldsTest extends MultiFileTestCase{ doTest("i", "A.B", "There is already a method A.getI() which would be hidden by generated getter"); } + public void testCommentsInside() throws Exception { + doTest("i", "A", null); + } + public void testMoveJavadocToGetter() throws Exception { doTest(new PerformAction() { @Override