replace constructor with builder: qualify references ( IDEA-55476 )

This commit is contained in:
anna
2010-06-04 12:00:38 +04:00
parent b0c58c5e70
commit 563dc867cc
8 changed files with 50 additions and 3 deletions
@@ -90,7 +90,7 @@ public class ReplaceConstructorWithBuilderProcessor extends FixableUsagesRefacto
final PsiElement element = reference.getElement();
final PsiNewExpression newExpression = PsiTreeUtil.getParentOfType(element, PsiNewExpression.class);
if (newExpression != null && !PsiTreeUtil.isAncestor(builderClass, element, false)) {
usages.add(new ReplaceConstructorWithSettersChainInfo(newExpression, myClassName, myParametersMap));
usages.add(new ReplaceConstructorWithSettersChainInfo(newExpression, StringUtil.getQualifiedName(myPackageName, myClassName), myParametersMap));
}
}
}
@@ -73,7 +73,7 @@ public class ReplaceConstructorWithSettersChainInfo extends FixableUsageInfo {
"new " + myBuilderClass + "()." + buf.toString() + "create" + StringUtil.capitalize(constructor.getName()) + "()",
null);
expr.replace(settersChain);
styleManager.shortenClassReferences(expr.replace(settersChain));
}
}
}
@@ -0,0 +1,5 @@
import foo.Builder;
public class Bar {
final Test foo = new Builder().setBar("bar").createTest();
}
@@ -0,0 +1,7 @@
public class Test {
private final String bar;
public Test(final String bar) {
this.bar = bar;
}
}
@@ -0,0 +1,14 @@
package foo;
public class Builder {
private String bar;
public Builder setBar(String bar) {
this.bar = bar;
return this;
}
public Test createTest() {
return new Test(bar);
}
}
@@ -0,0 +1,3 @@
public class Bar {
final Test foo = new Test("bar");
}
@@ -0,0 +1,7 @@
public class Test {
private final String bar;
public Test(final String bar) {
this.bar = bar;
}
}
@@ -58,6 +58,10 @@ public class ReplaceConstructorWithBuilderTest extends MultiFileTestCase {
doTest(true);
}
public void testImports() throws Exception {
doTest(true, null, null, "foo");
}
private void doTest(final boolean createNewBuilderClass) throws Exception {
doTest(createNewBuilderClass, null);
}
@@ -67,6 +71,13 @@ public class ReplaceConstructorWithBuilderTest extends MultiFileTestCase {
}
private void doTest(final boolean createNewBuilderClass, final Map<String, String> expectedDefaults, final String conflicts) throws Exception {
doTest(createNewBuilderClass, expectedDefaults, conflicts, "");
}
private void doTest(final boolean createNewBuilderClass,
final Map<String, String> expectedDefaults,
final String conflicts,
final String packageName) throws Exception {
doTest(new PerformAction() {
public void performAction(final VirtualFile rootDir, final VirtualFile rootAfter) throws Exception {
final PsiClass aClass = myJavaFacade.findClass("Test", GlobalSearchScope.projectScope(getProject()));
@@ -85,7 +96,7 @@ public class ReplaceConstructorWithBuilderTest extends MultiFileTestCase {
}
}
try {
new ReplaceConstructorWithBuilderProcessor(getProject(), constructors, map, "Builder", "", createNewBuilderClass).run();
new ReplaceConstructorWithBuilderProcessor(getProject(), constructors, map, "Builder", packageName, createNewBuilderClass).run();
if (conflicts != null) {
fail("Conflicts were not detected:" + conflicts);
}