Skip to content

Commit 643f516

Browse files
authored
Localizing refactoring conflicts gathering (part 4). (#257)
1 parent 612d11c commit 643f516

10 files changed

Lines changed: 3119 additions & 2688 deletions

File tree

plugin/src/main/java/com/intellij/java/impl/refactoring/extractMethodObject/ExtractMethodObjectHandler.java

Lines changed: 99 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,12 @@
2424
import com.intellij.java.impl.refactoring.extractMethod.ExtractMethodHandler;
2525
import com.intellij.java.impl.refactoring.extractMethod.PrepareFailedException;
2626
import com.intellij.java.impl.refactoring.util.duplicates.DuplicatesImpl;
27-
import consulo.application.ApplicationManager;
2827
import consulo.codeEditor.Editor;
2928
import consulo.codeEditor.ScrollType;
3029
import consulo.dataContext.DataContext;
3130
import consulo.document.RangeMarker;
3231
import consulo.document.util.TextRange;
3332
import consulo.language.codeStyle.PostprocessReformattingAspect;
34-
import consulo.language.editor.refactoring.RefactoringBundle;
3533
import consulo.language.editor.refactoring.action.RefactoringActionHandler;
3634
import consulo.language.editor.refactoring.localize.RefactoringLocalize;
3735
import consulo.language.editor.refactoring.util.CommonRefactoringUtil;
@@ -42,98 +40,116 @@
4240
import consulo.localize.LocalizeValue;
4341
import consulo.logging.Logger;
4442
import consulo.project.Project;
43+
import consulo.ui.annotation.RequiredUIAccess;
4544
import consulo.undoRedo.CommandProcessor;
46-
4745
import jakarta.annotation.Nonnull;
46+
4847
import java.util.function.Consumer;
4948

5049
public class ExtractMethodObjectHandler implements RefactoringActionHandler {
51-
private static final Logger LOG = Logger.getInstance(ExtractMethodObjectHandler.class);
52-
53-
public void invoke(@Nonnull final Project project, final Editor editor, final PsiFile file, final DataContext dataContext) {
54-
ExtractMethodHandler.selectAndPass(project, editor, file, new Consumer<PsiElement[]>() {
55-
public void accept(final PsiElement[] selectedValue) {
56-
invokeOnElements(project, editor, file, selectedValue);
57-
}
58-
});
59-
}
50+
private static final Logger LOG = Logger.getInstance(ExtractMethodObjectHandler.class);
6051

61-
private void invokeOnElements(@Nonnull final Project project, @Nonnull final Editor editor, @Nonnull PsiFile file, @Nonnull PsiElement[] elements) {
62-
if (elements.length == 0) {
63-
LocalizeValue message = RefactoringLocalize.cannotPerformRefactoringWithReason(
64-
RefactoringLocalize.selectedBlockShouldRepresentASetOfStatementsOrAnExpression()
65-
);
66-
CommonRefactoringUtil.showErrorHint(project, editor, message.get(), ExtractMethodObjectProcessor.REFACTORING_NAME, HelpID.EXTRACT_METHOD_OBJECT);
67-
return;
68-
}
69-
70-
final ExtractMethodObjectProcessor processor = new ExtractMethodObjectProcessor(project, editor, elements, "");
71-
final ExtractMethodObjectProcessor.MyExtractMethodProcessor extractProcessor = processor.getExtractProcessor();
72-
try {
73-
if (!extractProcessor.prepare()) return;
74-
} catch (PrepareFailedException e) {
75-
CommonRefactoringUtil.showErrorHint(project, editor, e.getMessage(), ExtractMethodObjectProcessor.REFACTORING_NAME, HelpID.EXTRACT_METHOD_OBJECT);
76-
ExtractMethodHandler.highlightPrepareError(e, file, editor, project);
77-
return;
52+
public void invoke(@Nonnull final Project project, final Editor editor, final PsiFile file, final DataContext dataContext) {
53+
ExtractMethodHandler.selectAndPass(project, editor, file, new Consumer<PsiElement[]>() {
54+
public void accept(final PsiElement[] selectedValue) {
55+
invokeOnElements(project, editor, file, selectedValue);
56+
}
57+
});
7858
}
7959

80-
if (!CommonRefactoringUtil.checkReadOnlyStatus(project, extractProcessor.getTargetClass().getContainingFile()))
81-
return;
82-
if (extractProcessor.showDialog()) {
83-
run(project, editor, processor, extractProcessor);
84-
}
85-
}
60+
@RequiredUIAccess
61+
private void invokeOnElements(
62+
@Nonnull final Project project,
63+
@Nonnull final Editor editor,
64+
@Nonnull PsiFile file,
65+
@Nonnull PsiElement[] elements
66+
) {
67+
if (elements.length == 0) {
68+
LocalizeValue message = RefactoringLocalize.cannotPerformRefactoringWithReason(
69+
RefactoringLocalize.selectedBlockShouldRepresentASetOfStatementsOrAnExpression()
70+
);
71+
CommonRefactoringUtil.showErrorHint(
72+
project,
73+
editor,
74+
message,
75+
ExtractMethodObjectProcessor.REFACTORING_NAME,
76+
HelpID.EXTRACT_METHOD_OBJECT
77+
);
78+
return;
79+
}
8680

87-
public static void run(@Nonnull final Project project,
88-
@Nonnull final Editor editor,
89-
@Nonnull final ExtractMethodObjectProcessor processor,
90-
@Nonnull final ExtractMethodObjectProcessor.MyExtractMethodProcessor extractProcessor) {
91-
final int offset = editor.getCaretModel().getOffset();
92-
final RangeMarker marker = editor.getDocument().createRangeMarker(new TextRange(offset, offset));
93-
CommandProcessor.getInstance().executeCommand(project, new Runnable() {
94-
public void run() {
95-
PostprocessReformattingAspect.getInstance(project).postponeFormattingInside(new Runnable() {
96-
public void run() {
97-
try {
98-
ApplicationManager.getApplication().runWriteAction(new Runnable() {
99-
@Override
100-
public void run() {
101-
extractProcessor.doRefactoring();
102-
}
103-
});
104-
processor.run();
105-
processor.runChangeSignature();
106-
} catch (IncorrectOperationException e) {
107-
LOG.error(e);
81+
final ExtractMethodObjectProcessor processor = new ExtractMethodObjectProcessor(project, editor, elements, "");
82+
final ExtractMethodObjectProcessor.MyExtractMethodProcessor extractProcessor = processor.getExtractProcessor();
83+
try {
84+
if (!extractProcessor.prepare()) {
85+
return;
10886
}
109-
}
110-
});
87+
}
88+
catch (PrepareFailedException e) {
89+
CommonRefactoringUtil.showErrorHint(
90+
project,
91+
editor,
92+
LocalizeValue.ofNullable(e.getMessage()),
93+
ExtractMethodObjectProcessor.REFACTORING_NAME,
94+
HelpID.EXTRACT_METHOD_OBJECT
95+
);
96+
ExtractMethodHandler.highlightPrepareError(e, file, editor, project);
97+
return;
98+
}
11199

112-
PsiDocumentManager.getInstance(project).commitAllDocuments();
113-
if (processor.isCreateInnerClass()) {
114-
processor.moveUsedMethodsToInner();
115-
PsiDocumentManager.getInstance(project).commitAllDocuments();
116-
DuplicatesImpl.processDuplicates(extractProcessor, project, editor);
100+
if (!CommonRefactoringUtil.checkReadOnlyStatus(project, extractProcessor.getTargetClass().getContainingFile())) {
101+
return;
117102
}
118-
ApplicationManager.getApplication().runWriteAction(new Runnable() {
119-
@Override
120-
public void run() {
121-
if (processor.isCreateInnerClass()) {
122-
processor.changeInstanceAccess(project);
123-
}
124-
final PsiElement method = processor.getMethod();
125-
LOG.assertTrue(method != null);
126-
method.delete();
127-
}
128-
});
129-
}
130-
}, ExtractMethodObjectProcessor.REFACTORING_NAME, ExtractMethodObjectProcessor.REFACTORING_NAME);
131-
editor.getCaretModel().moveToOffset(marker.getStartOffset());
132-
marker.dispose();
133-
editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
134-
}
103+
if (extractProcessor.showDialog()) {
104+
run(project, editor, processor, extractProcessor);
105+
}
106+
}
135107

136-
public void invoke(@Nonnull final Project project, @Nonnull final PsiElement[] elements, final DataContext dataContext) {
137-
throw new UnsupportedOperationException();
138-
}
108+
public static void run(
109+
@Nonnull final Project project,
110+
@Nonnull final Editor editor,
111+
@Nonnull final ExtractMethodObjectProcessor processor,
112+
@Nonnull final ExtractMethodObjectProcessor.MyExtractMethodProcessor extractProcessor
113+
) {
114+
final int offset = editor.getCaretModel().getOffset();
115+
final RangeMarker marker = editor.getDocument().createRangeMarker(new TextRange(offset, offset));
116+
CommandProcessor.getInstance().newCommand()
117+
.project(project)
118+
.name(ExtractMethodObjectProcessor.REFACTORING_NAME)
119+
.groupId(ExtractMethodObjectProcessor.REFACTORING_NAME)
120+
.run(() -> {
121+
PostprocessReformattingAspect.getInstance(project).postponeFormattingInside(() -> {
122+
try {
123+
project.getApplication().runWriteAction(() -> extractProcessor.doRefactoring());
124+
processor.run();
125+
processor.runChangeSignature();
126+
}
127+
catch (IncorrectOperationException e) {
128+
LOG.error(e);
129+
}
130+
});
131+
132+
PsiDocumentManager.getInstance(project).commitAllDocuments();
133+
if (processor.isCreateInnerClass()) {
134+
processor.moveUsedMethodsToInner();
135+
PsiDocumentManager.getInstance(project).commitAllDocuments();
136+
DuplicatesImpl.processDuplicates(extractProcessor, project, editor);
137+
}
138+
project.getApplication().runWriteAction(() -> {
139+
if (processor.isCreateInnerClass()) {
140+
processor.changeInstanceAccess(project);
141+
}
142+
PsiElement method = processor.getMethod();
143+
LOG.assertTrue(method != null);
144+
method.delete();
145+
});
146+
});
147+
editor.getCaretModel().moveToOffset(marker.getStartOffset());
148+
marker.dispose();
149+
editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
150+
}
151+
152+
public void invoke(@Nonnull final Project project, @Nonnull final PsiElement[] elements, final DataContext dataContext) {
153+
throw new UnsupportedOperationException();
154+
}
139155
}

0 commit comments

Comments
 (0)