From 7e0038ce147cab546af5d60985838d28fd59db8e Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 5 Sep 2024 16:42:02 +0200 Subject: [PATCH] Java: "Open in editor" checkbox for Replace constructor with builder (IDEA-358746) GitOrigin-RevId: 72f2bf32432a2b623ab562cefac5568904fb5cee --- .../ReplaceConstructorWithBuilderDialog.java | 4 ++-- .../ReplaceConstructorWithBuilderProcessor.java | 15 +++++++++++---- .../ReplaceConstructorWithBuilderTest.java | 15 +++++++-------- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/java/java-impl-refactorings/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderDialog.java b/java/java-impl-refactorings/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderDialog.java index fec75e90b3fd..a40f8bd6c3a2 100644 --- a/java/java-impl-refactorings/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderDialog.java +++ b/java/java-impl-refactorings/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderDialog.java @@ -74,7 +74,7 @@ public class ReplaceConstructorWithBuilderDialog extends RefactoringDialog { private static final String SETTER_PREFIX_KEY = "ConstructorWithBuilder.SetterPrefix"; protected ReplaceConstructorWithBuilderDialog(@NotNull Project project, PsiMethod[] constructors) { - super(project, false); + super(project, false, true); myConstructors = constructors; myParametersMap = new LinkedHashMap<>(); mySetterPrefix = PropertiesComponent.getInstance(project).getValue(SETTER_PREFIX_KEY, "set"); @@ -130,7 +130,7 @@ public class ReplaceConstructorWithBuilderDialog extends RefactoringDialog { MoveDestination destination = ((DestinationFolderComboBox)myDestinationCb).selectDirectory(new PackageWrapper(myConstructors[0].getManager(), packageName), false); invokeRefactoring(new ReplaceConstructorWithBuilderProcessor(getProject(), myConstructors, myParametersMap, className, packageName, - destination, createNewBuilder)); + destination, createNewBuilder, isOpenInEditor())); } private void showErrorDialog(@NlsContexts.DialogMessage String message) { diff --git a/java/java-impl-refactorings/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderProcessor.java b/java/java-impl-refactorings/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderProcessor.java index 164d9b9f8174..ce2ed942d90a 100644 --- a/java/java-impl-refactorings/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderProcessor.java +++ b/java/java-impl-refactorings/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderProcessor.java @@ -2,6 +2,7 @@ package com.intellij.refactoring.replaceConstructorWithBuilder; import com.intellij.ide.highlighter.JavaFileType; +import com.intellij.ide.util.EditorHelper; import com.intellij.ide.util.PackageUtil; import com.intellij.java.refactoring.JavaRefactoringBundle; import com.intellij.openapi.module.Module; @@ -52,23 +53,25 @@ public class ReplaceConstructorWithBuilderProcessor extends FixableUsagesRefacto private final boolean myCreateNewBuilderClass; private final PsiElementFactory myElementFactory; private final MoveDestination myMoveDestination; - + private final boolean myOpenInEditor; public ReplaceConstructorWithBuilderProcessor(Project project, PsiMethod[] constructors, Map parametersMap, @NotNull String className, String packageName, - MoveDestination moveDestination, boolean createNewBuilderClass) { + MoveDestination moveDestination, + boolean createNewBuilderClass, + boolean openInEditor) { super(project); - myMoveDestination = moveDestination; myElementFactory = JavaPsiFacade.getElementFactory(myProject); myConstructors = constructors; myParametersMap = parametersMap; - myClassName = className; myPackageName = packageName; + myMoveDestination = moveDestination; myCreateNewBuilderClass = createNewBuilderClass; + myOpenInEditor = openInEditor; } @Override @@ -154,6 +157,10 @@ public class ReplaceConstructorWithBuilderProcessor extends FixableUsagesRefacto VisibilityUtil.escalateVisibility(containingClass, builderClass); containingClass = containingClass.getContainingClass(); } + + if (myOpenInEditor) { + EditorHelper.openInEditor(builderClass); + } } private void createSetter(PsiClass builderClass, ParameterData parameterData, PsiField field) { diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/ReplaceConstructorWithBuilderTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/ReplaceConstructorWithBuilderTest.java index 2a0d9492cbb5..3861186ae6f6 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/ReplaceConstructorWithBuilderTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/ReplaceConstructorWithBuilderTest.java @@ -68,22 +68,19 @@ public class ReplaceConstructorWithBuilderTest extends LightMultiFileTestCase { doTest(true); } - private void doTest(final boolean createNewBuilderClass) { + private void doTest(boolean createNewBuilderClass) { doTest(createNewBuilderClass, null); } - private void doTest(final boolean createNewBuilderClass, final Map expectedDefaults) { + private void doTest(boolean createNewBuilderClass, Map expectedDefaults) { doTest(createNewBuilderClass, expectedDefaults, null); } - private void doTest(final boolean createNewBuilderClass, final Map expectedDefaults, final String conflicts) { + private void doTest(boolean createNewBuilderClass, Map expectedDefaults, String conflicts) { doTest(createNewBuilderClass, expectedDefaults, conflicts, ""); } - private void doTest(final boolean createNewBuilderClass, - final Map expectedDefaults, - final String conflicts, - final String packageName) { + private void doTest(boolean createNew, Map expectedDefaults, String conflicts, String packageName) { doTest(() -> { final PsiClass aClass = myFixture.findClass("Test"); @@ -100,7 +97,9 @@ public class ReplaceConstructorWithBuilderTest extends LightMultiFileTestCase { } } try { - new ReplaceConstructorWithBuilderProcessor(getProject(), constructors, map, "Builder", packageName, null, createNewBuilderClass).run(); + final ReplaceConstructorWithBuilderProcessor processor = + new ReplaceConstructorWithBuilderProcessor(getProject(), constructors, map, "Builder", packageName, null, createNew, false); + processor.run(); if (conflicts != null) { fail("Conflicts were not detected: " + conflicts); }