correct field/getters naming in extract method object (EA-26268 - assert: ExtractMethodObjectProcessor.b)

This commit is contained in:
anna
2011-04-15 20:24:51 +02:00
parent c5bfe74da9
commit b4a99e051b
4 changed files with 52 additions and 6 deletions
@@ -238,11 +238,14 @@ public class ExtractMethodObjectProcessor extends BaseRefactoringProcessor {
final PsiField outputField = myOutputFields[i];
final String name = getPureName(var);
LOG.assertTrue(name != null);
final PsiField field;
if (outputField != null) {
var2FieldNames.put(var.getName(), outputField.getName());
myInnerClass.add(outputField);
field = outputField;
} else {
field = PropertyUtil.findPropertyField(myProject, myInnerClass, name, false);
}
final PsiField field = PropertyUtil.findPropertyField(myProject, myInnerClass, name, false);
LOG.assertTrue(field != null, "i:" + i + "; output variables: " + Arrays.toString(outputVariables) + "; parameters: " + Arrays.toString(getMethod().getParameterList().getParameters()) + "; output field: " + outputField );
myInnerClass.add(PropertyUtil.generateGetterPrototype(field));
}
@@ -364,8 +367,8 @@ public class ExtractMethodObjectProcessor extends BaseRefactoringProcessor {
private String getPureName(PsiVariable var) {
final JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(myProject);
return var instanceof PsiLocalVariable
? styleManager.variableNameToPropertyName(var.getName(), VariableKind.LOCAL_VARIABLE) : styleManager.variableNameToPropertyName(var.getName(), VariableKind.PARAMETER);
final VariableKind kind = var instanceof PsiLocalVariable ? VariableKind.LOCAL_VARIABLE : VariableKind.PARAMETER;
return styleManager.variableNameToPropertyName(var.getName(), kind);
}
public PsiExpression processMethodDeclaration( PsiExpressionList expressionList) throws IncorrectOperationException {
@@ -716,9 +719,12 @@ public class ExtractMethodObjectProcessor extends BaseRefactoringProcessor {
String name = variable.getName();
LOG.assertTrue(name != null);
PsiStatement st = null;
final String pureName = getPureName(variable);
final int varIdxInOutput = ArrayUtil.find(myOutputVariables, variable);
final String getterName = varIdxInOutput > -1 && myOutputFields[varIdxInOutput] != null ? PropertyUtil.suggestGetterName(myProject, myOutputFields[varIdxInOutput]) : PropertyUtil.suggestGetterName(pureName, variable.getType());
if (isDeclaredInside(variable)) {
st = myElementFactory.createStatementFromText(
variable.getType().getCanonicalText() + " " + name + " = " + object + "." + PropertyUtil.suggestGetterName(getPureName(variable), variable.getType()) + "();",
variable.getType().getCanonicalText() + " " + name + " = " + object + "." + getterName + "();",
myInnerMethod);
if (reassigned.contains(new ControlFlowUtil.VariableInfo(variable, null))) {
final PsiElement[] psiElements = ((PsiDeclarationStatement)st).getDeclaredElements();
@@ -728,8 +734,8 @@ public class ExtractMethodObjectProcessor extends BaseRefactoringProcessor {
}
}
else {
if (ArrayUtil.find(myOutputVariables, variable) != -1) {
st = myElementFactory.createStatementFromText(name + " = " + object + "." + PropertyUtil.suggestGetterName(getPureName(variable), variable.getType()) + "();", myInnerMethod);
if (varIdxInOutput != -1) {
st = myElementFactory.createStatementFromText(name + " = " + object + "." + getterName + "();", myInnerMethod);
}
}
if (st != null) {
@@ -0,0 +1,8 @@
class Test {
void ft() {
<selection>String _result = "";
_result +="s";
int k = 0;</selection>
System.out.println(_result + k);
}
}
@@ -0,0 +1,28 @@
class Test {
void ft() {
Inner inner = new Inner().invoke();
String _result = inner.getResult();
int k = inner.getK();
System.out.println(_result + k);
}
private class Inner {
private String result;
private int k;
public String getResult() {
return result;
}
public int getK() {
return k;
}
public Inner invoke() {
result = "";
result +="s";
k = 0;
return this;
}
}
}
@@ -97,4 +97,8 @@ public class ExtractMethodObjectWithMultipleExitPointsTest extends LightCodeInsi
public void testWithInnerClasses() throws Exception {
doTest();
}
public void testNonCanonicalNaming() throws Exception {
doTest();
}
}