replace constructor with factory: skip new expression inside old factory to avoid recursion (following IDEA-CR-9194)

This commit is contained in:
Anna Kozlova
2016-03-15 19:09:04 +01:00
parent 0c583feae6
commit 1e9aebde4f
@@ -177,7 +177,7 @@ public class ReplaceConstructorWithFactoryProcessor extends BaseRefactoringProce
final PsiMethod factoryMethod = myTargetClass.findMethodBySignature(createFactoryMethod(), false);
if (factoryMethod != null) {
conflicts.putValue(factoryMethod, "Factory method " + factoryMethod.getName() + " already exists and would be used instead of newly created.");
conflicts.putValue(factoryMethod, "Factory method " + RefactoringUIUtil.getDescription(factoryMethod, false) + " already exists and will be used instead of newly created.");
}
return showConflicts(conflicts, usages);
@@ -220,6 +220,9 @@ public class ReplaceConstructorWithFactoryProcessor extends BaseRefactoringProce
for (UsageInfo usage : usages) {
PsiNewExpression newExpression = (PsiNewExpression)usage.getElement();
if (newExpression == null) continue;
if (oldFactoryMethod != null && PsiTreeUtil.isAncestor(oldFactoryMethod, newExpression, false)) {
continue;
}
VisibilityUtil.escalateVisibility(factoryMethod, newExpression);
PsiMethodCallExpression factoryCall =