1919import com .intellij .java .language .JavaLanguage ;
2020import com .intellij .java .language .psi .PsiClass ;
2121import com .intellij .java .language .psi .PsiField ;
22+ import consulo .annotation .access .RequiredReadAction ;
23+ import consulo .annotation .component .ActionImpl ;
2224import consulo .dataContext .DataContext ;
2325import consulo .codeEditor .Editor ;
26+ import consulo .java .localize .JavaLocalize ;
2427import consulo .language .psi .PsiElement ;
2528import consulo .language .psi .PsiFile ;
2629import consulo .language .psi .util .PsiTreeUtil ;
2730import consulo .language .editor .refactoring .action .RefactoringActionHandler ;
2831import consulo .language .editor .refactoring .action .BaseRefactoringAction ;
2932import jakarta .annotation .Nonnull ;
3033
34+ @ ActionImpl (id = "EncapsulateFields" )
3135public class EncapsulateFieldsAction extends BaseRefactoringAction {
32- public boolean isAvailableInEditorOnly () {
33- return false ;
34- }
36+ public EncapsulateFieldsAction () {
37+ super ( JavaLocalize . actionEncapsulateFieldsText (), JavaLocalize . actionEncapsulateFieldsDescription ()) ;
38+ }
3539
36- @ Override
37- protected boolean isAvailableOnElementInEditorAndFile (@ Nonnull PsiElement element , @ Nonnull Editor editor , @ Nonnull PsiFile file , @ Nonnull DataContext context ) {
38- final PsiElement psiElement = file .findElementAt (editor .getCaretModel ().getOffset ());
39- final PsiClass containingClass = PsiTreeUtil .getParentOfType (psiElement , PsiClass .class , false );
40- if (containingClass != null ) {
41- final PsiField [] fields = containingClass .getFields ();
42- for (PsiField field : fields ) {
43- if (isAcceptedField (field )) return true ;
44- }
40+ @ Override
41+ public boolean isAvailableInEditorOnly () {
42+ return false ;
4543 }
46- return false ;
47- }
4844
49- public boolean isEnabledOnElements (@ Nonnull PsiElement [] elements ) {
50- if (elements .length == 1 ) {
51- return elements [0 ] instanceof PsiClass && elements [0 ].getLanguage ().isKindOf (JavaLanguage .INSTANCE ) || isAcceptedField (elements [0 ]);
52- } else if (elements .length > 1 ) {
53- for (int idx = 0 ; idx < elements .length ; idx ++) {
54- if (!isAcceptedField (elements [idx ])) {
55- return false ;
45+ @ Override
46+ @ RequiredReadAction
47+ protected boolean isAvailableOnElementInEditorAndFile (
48+ @ Nonnull PsiElement element ,
49+ @ Nonnull Editor editor ,
50+ @ Nonnull PsiFile file ,
51+ @ Nonnull DataContext context
52+ ) {
53+ PsiElement psiElement = file .findElementAt (editor .getCaretModel ().getOffset ());
54+ PsiClass containingClass = PsiTreeUtil .getParentOfType (psiElement , PsiClass .class , false );
55+ if (containingClass != null ) {
56+ PsiField [] fields = containingClass .getFields ();
57+ for (PsiField field : fields ) {
58+ if (isAcceptedField (field )) {
59+ return true ;
60+ }
61+ }
5662 }
57- }
58- return true ;
63+ return false ;
5964 }
60- return false ;
61- }
6265
63- public RefactoringActionHandler getHandler (@ Nonnull DataContext dataContext ) {
64- return new EncapsulateFieldsHandler ();
65- }
66+ @ Override
67+ @ RequiredReadAction
68+ public boolean isEnabledOnElements (@ Nonnull PsiElement [] elements ) {
69+ if (elements .length == 1 ) {
70+ return elements [0 ] instanceof PsiClass psiClass && psiClass .getLanguage ().isKindOf (JavaLanguage .INSTANCE )
71+ || isAcceptedField (elements [0 ]);
72+ }
73+ else if (elements .length > 1 ) {
74+ for (PsiElement element : elements ) {
75+ if (!isAcceptedField (element )) {
76+ return false ;
77+ }
78+ }
79+ return true ;
80+ }
81+ return false ;
82+ }
6683
67- private static boolean isAcceptedField (PsiElement element ) {
68- return element instanceof PsiField &&
69- element .getLanguage ().isKindOf (JavaLanguage .INSTANCE ) &&
70- ((PsiField ) element ).getContainingClass () != null ;
71- }
84+ @ Override
85+ public RefactoringActionHandler getHandler (@ Nonnull DataContext dataContext ) {
86+ return new EncapsulateFieldsHandler ();
87+ }
88+
89+ @ RequiredReadAction
90+ private static boolean isAcceptedField (PsiElement element ) {
91+ return element instanceof PsiField field
92+ && field .getLanguage ().isKindOf (JavaLanguage .INSTANCE )
93+ && field .getContainingClass () != null ;
94+ }
7295}
0 commit comments