encapsulate fields: preserve comments inside (IDEA-124747)

This commit is contained in:
Anna Kozlova
2014-06-06 17:47:25 +04:00
parent 1a3c6c6b80
commit 693bbf6ef8
4 changed files with 42 additions and 21 deletions
@@ -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,
@@ -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;
}
}
@@ -0,0 +1,8 @@
public class A {
public int i;
void foo(A a) {
System.out.println(a./*comment*/i);
a/*comment*/.i = 42;
}
}
@@ -59,6 +59,10 @@ public class EncapsulateFieldsTest extends MultiFileTestCase{
doTest("i", "A.B", "There is already a method <b><code>A.getI()</code></b> 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