2424import com .intellij .java .impl .refactoring .extractMethod .ExtractMethodHandler ;
2525import com .intellij .java .impl .refactoring .extractMethod .PrepareFailedException ;
2626import com .intellij .java .impl .refactoring .util .duplicates .DuplicatesImpl ;
27- import consulo .application .ApplicationManager ;
2827import consulo .codeEditor .Editor ;
2928import consulo .codeEditor .ScrollType ;
3029import consulo .dataContext .DataContext ;
3130import consulo .document .RangeMarker ;
3231import consulo .document .util .TextRange ;
3332import consulo .language .codeStyle .PostprocessReformattingAspect ;
34- import consulo .language .editor .refactoring .RefactoringBundle ;
3533import consulo .language .editor .refactoring .action .RefactoringActionHandler ;
3634import consulo .language .editor .refactoring .localize .RefactoringLocalize ;
3735import consulo .language .editor .refactoring .util .CommonRefactoringUtil ;
4240import consulo .localize .LocalizeValue ;
4341import consulo .logging .Logger ;
4442import consulo .project .Project ;
43+ import consulo .ui .annotation .RequiredUIAccess ;
4544import consulo .undoRedo .CommandProcessor ;
46-
4745import jakarta .annotation .Nonnull ;
46+
4847import java .util .function .Consumer ;
4948
5049public 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