1818import com .intellij .java .language .LanguageLevel ;
1919import com .intellij .java .language .psi .*;
2020import com .intellij .java .language .psi .util .PropertyMemberType ;
21+ import consulo .annotation .DeprecationInfo ;
22+ import consulo .annotation .access .RequiredReadAction ;
2123import consulo .annotation .component .ComponentScope ;
2224import consulo .annotation .component .ServiceAPI ;
2325import consulo .ide .ServiceManager ;
3032import consulo .language .psi .PsiElement ;
3133import consulo .language .psi .PsiNamedElement ;
3234import consulo .language .psi .PsiReference ;
35+ import consulo .localize .LocalizeValue ;
3336import consulo .module .Module ;
3437import consulo .project .Project ;
35- import org .jetbrains .annotations .Nls ;
3638
3739import jakarta .annotation .Nonnull ;
3840import jakarta .annotation .Nullable ;
4648 */
4749@ ServiceAPI (ComponentScope .APPLICATION )
4850public abstract class QuickFixFactory {
49- public static QuickFixFactory getInstance () {
50- return ServiceManager .getService (QuickFixFactory .class );
51+ public abstract class ModifierFixBuilder {
52+ protected final PsiModifierList myModifierList ;
53+ protected final PsiModifierListOwner myOwner ;
54+ protected @ PsiModifier .ModifierConstant String myModifier = null ;
55+ protected boolean myShouldHave ;
56+ protected boolean myShowContainingClass ;
57+
58+ public ModifierFixBuilder (@ Nonnull PsiModifierListOwner owner ) {
59+ myModifierList = null ;
60+ myOwner = owner ;
61+ }
62+
63+ public ModifierFixBuilder (@ Nonnull PsiModifierList modifierList ) {
64+ myModifierList = modifierList ;
65+ myOwner = null ;
66+ }
67+
68+ public ModifierFixBuilder add (@ PsiModifier .ModifierConstant String modifier ) {
69+ return toggle (modifier , true );
70+ }
71+
72+ public ModifierFixBuilder remove (@ PsiModifier .ModifierConstant String modifier ) {
73+ return toggle (modifier , false );
74+ }
75+
76+ public ModifierFixBuilder toggle (@ PsiModifier .ModifierConstant String modifier , boolean shouldHave ) {
77+ if (myModifier != null ) {
78+ throw new IllegalStateException ();
79+ }
80+ myModifier = modifier ;
81+ myShouldHave = shouldHave ;
82+ return this ;
83+ }
84+
85+ public ModifierFixBuilder showContainingClass (boolean showContainingClass ) {
86+ if (showContainingClass ) {
87+ return showContainingClass ();
88+ }
89+ return this ;
90+ }
91+
92+ public ModifierFixBuilder showContainingClass () {
93+ if (myShowContainingClass ) {
94+ throw new IllegalStateException ();
95+ }
96+ myShowContainingClass = true ;
97+ return this ;
98+ }
99+
100+ @ RequiredReadAction
101+ public abstract LocalQuickFixAndIntentionActionOnPsiElement create ();
51102 }
52103
53- @ Nonnull
54- public abstract LocalQuickFixAndIntentionActionOnPsiElement createModifierListFix (
55- @ Nonnull PsiModifierList modifierList ,
56- @ PsiModifier .ModifierConstant @ Nonnull String modifier ,
57- boolean shouldHave ,
58- final boolean showContainingClass
59- );
60-
61- @ Nonnull
62- public LocalQuickFixAndIntentionActionOnPsiElement createAddModifierFix (
63- @ Nonnull PsiModifierList modifierList ,
64- @ PsiModifier .ModifierConstant @ Nonnull String modifier
65- ) {
66- return createModifierListFix (modifierList , modifier , true , false );
104+ public static QuickFixFactory getInstance () {
105+ return ServiceManager .getService (QuickFixFactory .class );
67106 }
68107
69- @ Nonnull
70- public LocalQuickFixAndIntentionActionOnPsiElement createRemoveModifierFix (
71- @ Nonnull PsiModifierList modifierList ,
72- @ PsiModifier .ModifierConstant @ Nonnull String modifier
73- ) {
74- return createModifierListFix (modifierList , modifier , false , false );
75- }
108+ public abstract ModifierFixBuilder fixModifiers (@ Nonnull PsiModifierList modifierList );
76109
77- @ Nonnull
78- public abstract LocalQuickFixAndIntentionActionOnPsiElement createModifierListFix (
79- @ Nonnull PsiModifierListOwner owner ,
80- @ PsiModifier .ModifierConstant @ Nonnull String modifier ,
81- boolean shouldHave ,
82- final boolean showContainingClass
83- );
84-
85- @ Nonnull
86- public LocalQuickFixAndIntentionActionOnPsiElement createAddModifierFix (
87- @ Nonnull PsiModifierListOwner owner ,
88- @ PsiModifier .ModifierConstant @ Nonnull String modifier
89- ) {
90- return createModifierListFix (owner , modifier , true , false );
91- }
92-
93- @ Nonnull
94- public LocalQuickFixAndIntentionActionOnPsiElement createRemoveModifierFix (
95- @ Nonnull PsiModifierListOwner owner ,
96- @ PsiModifier .ModifierConstant @ Nonnull String modifier
97- ) {
98- return createModifierListFix (owner , modifier , false , false );
99- }
110+ public abstract ModifierFixBuilder fixModifiers (@ Nonnull PsiModifierListOwner owner );
100111
101112 @ Nonnull
102113 public abstract LocalQuickFixAndIntentionActionOnPsiElement createMethodReturnFix (
@@ -472,7 +483,7 @@ public abstract IntentionAction createAddToDependencyInjectionAnnotationsFix(
472483 public abstract LocalQuickFixAndIntentionActionOnPsiElement createDeleteFix (@ Nonnull PsiElement element );
473484
474485 @ Nonnull
475- public abstract LocalQuickFixAndIntentionActionOnPsiElement createDeleteFix (@ Nonnull PsiElement element , @ Nonnull @ Nls String text );
486+ public abstract LocalQuickFixAndIntentionActionOnPsiElement createDeleteFix (@ Nonnull PsiElement element , @ Nonnull LocalizeValue text );
476487
477488 @ Nonnull
478489 public abstract IntentionAction createDeleteSideEffectAwareFix (@ Nonnull PsiExpressionStatement statement );
@@ -538,4 +549,37 @@ public abstract LocalQuickFixAndIntentionActionOnPsiElement createAccessStaticVi
538549 @ Nonnull
539550 public abstract IntentionAction createWrapSwitchRuleStatementsIntoBlockFix (PsiSwitchLabeledRuleStatement rule );
540551
552+ @ Deprecated
553+ @ DeprecationInfo ("Use #fixModifiers()...#build()" )
554+ @ Nonnull
555+ @ RequiredReadAction
556+ public LocalQuickFixAndIntentionActionOnPsiElement createModifierListFix (
557+ @ Nonnull PsiModifierList modifierList ,
558+ @ PsiModifier .ModifierConstant @ Nonnull String modifier ,
559+ boolean shouldHave ,
560+ boolean showContainingClass
561+ ) {
562+ ModifierFixBuilder builder = fixModifiers (modifierList ).toggle (modifier , shouldHave );
563+ if (showContainingClass ) {
564+ builder .showContainingClass ();
565+ }
566+ return builder .create ();
567+ }
568+
569+ @ Deprecated
570+ @ DeprecationInfo ("Use #fixModifiers()...#build()" )
571+ @ Nonnull
572+ @ RequiredReadAction
573+ public LocalQuickFixAndIntentionActionOnPsiElement createModifierListFix (
574+ @ Nonnull PsiModifierListOwner owner ,
575+ @ PsiModifier .ModifierConstant @ Nonnull String modifier ,
576+ boolean shouldHave ,
577+ boolean showContainingClass
578+ ) {
579+ ModifierFixBuilder builder = fixModifiers (owner ).toggle (modifier , shouldHave );
580+ if (showContainingClass ) {
581+ builder .showContainingClass ();
582+ }
583+ return builder .create ();
584+ }
541585}
0 commit comments