[java-intentions] ReplaceConstructorWithFactoryAction: fix reference when outer class is selected (IDEA-324475)

GitOrigin-RevId: be488adf9bf28eccb3f8a91f9527c23c7c120578
This commit is contained in:
Tagir Valeev
2023-07-10 11:29:26 +02:00
committed by intellij-monorepo-bot
parent 9d63ecb44c
commit 4e73b61fc5
4 changed files with 45 additions and 1 deletions

View File

@@ -105,7 +105,7 @@ public class ReplaceConstructorWithFactoryAction implements ModCommandAction {
PsiElementFactory factory = JavaPsiFacade.getElementFactory(project);
PsiClass wrContainingClass = updater.getWritable(
constructorOrClass instanceof PsiClass cls ? cls : Objects.requireNonNull(constructorOrClass.getContainingClass()));
PsiReferenceExpression classReferenceExpression = factory.createReferenceExpression(wrContainingClass);
PsiReferenceExpression classReferenceExpression = factory.createReferenceExpression(targetClass);
String factoryName = suggestName(wrContainingClass);
PsiReferenceExpression qualifiedMethodReference = (PsiReferenceExpression)factory.createExpressionFromText("A." + factoryName, null);
PsiMethod constructor = ObjectUtils.tryCast(constructorOrClass, PsiMethod.class);

View File

@@ -0,0 +1,23 @@
class SimpleClass {
public SimpleClass() {
}
public static SimpleInnerClass createSimpleInnerClass() {
return new SimpleInnerClass();
}
public static class SimpleInnerClass {
private SimpleInnerClass() {
}
}
}
class Main {
public static void main(String[] args) {
SimpleClass.SimpleInnerClass s2 = SimpleClass.createSimpleInnerClass();
}
}

View File

@@ -0,0 +1,19 @@
class SimpleClass {
public SimpleClass() {
}
public static class SimpleInnerClass {
public <caret>SimpleInnerClass() {
}
}
}
class Main {
public static void main(String[] args) {
SimpleClass.SimpleInnerClass s2 = new SimpleClass.SimpleInnerClass();
}
}

View File

@@ -37,6 +37,8 @@ public class ReplaceConstructorWithFactoryTest extends LightRefactoringTestCase
public void testImplicitConstructorCreation() { runTest("07", null); }
public void testConstructorTypeParameters() { runTest("08", null); }
public void testInnerClass2() { runTest("InnerClass2", "SimpleClass"); }
private void runTest(final String testIndex, @NonNls String targetClassName) {
configureByFile("/refactoring/replaceConstructorWithFactory/before" + testIndex + ".java");