Skip to content

Commit 8a70a7e

Browse files
committed
Adding @ActionImpl annotations to Generate actions. Refactoring and localizing.
1 parent 6ee043b commit 8a70a7e

20 files changed

Lines changed: 515 additions & 361 deletions

plugin/src/main/java/com/intellij/java/impl/codeInsight/generation/actions/BaseGenerateAction.java

Lines changed: 56 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,16 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
1716
package com.intellij.java.impl.codeInsight.generation.actions;
1817

18+
import consulo.annotation.access.RequiredReadAction;
1919
import consulo.language.editor.action.CodeInsightActionHandler;
2020
import consulo.language.editor.action.CodeInsightAction;
2121
import consulo.language.editor.generation.GenerateActionPopupTemplateInjector;
2222
import com.intellij.java.language.psi.PsiClass;
2323
import com.intellij.java.language.psi.PsiJavaFile;
2424
import consulo.language.editor.refactoring.ContextAwareActionHandler;
25+
import consulo.localize.LocalizeValue;
2526
import consulo.ui.ex.action.AnAction;
2627
import consulo.dataContext.DataContext;
2728
import consulo.ui.ex.action.Presentation;
@@ -34,59 +35,69 @@
3435
import jakarta.annotation.Nullable;
3536

3637
public class BaseGenerateAction extends CodeInsightAction implements GenerateActionPopupTemplateInjector {
37-
private final CodeInsightActionHandler myHandler;
38-
39-
public BaseGenerateAction(CodeInsightActionHandler handler) {
40-
myHandler = handler;
41-
}
38+
private final CodeInsightActionHandler myHandler;
4239

43-
@Override
44-
protected void update(@Nonnull Presentation presentation, @Nonnull Project project, @Nonnull Editor editor, @Nonnull PsiFile file, @Nonnull DataContext dataContext, @Nullable String actionPlace) {
45-
super.update(presentation, project, editor, file, dataContext, actionPlace);
46-
if (myHandler instanceof ContextAwareActionHandler && presentation.isEnabled()) {
47-
presentation.setEnabled(((ContextAwareActionHandler) myHandler).isAvailableForQuickList(editor, file, dataContext));
40+
public BaseGenerateAction(CodeInsightActionHandler handler, @Nonnull LocalizeValue text) {
41+
myHandler = handler;
42+
getTemplatePresentation().setTextValue(text);
4843
}
49-
}
5044

51-
@Override
52-
@Nullable
53-
public AnAction createEditTemplateAction(DataContext dataContext) {
54-
return null;
55-
}
56-
57-
@Nonnull
58-
@Override
59-
protected final CodeInsightActionHandler getHandler() {
60-
return myHandler;
61-
}
45+
@Override
46+
protected void update(
47+
@Nonnull Presentation presentation,
48+
@Nonnull Project project,
49+
@Nonnull Editor editor,
50+
@Nonnull PsiFile file,
51+
@Nonnull DataContext dataContext,
52+
@Nullable String actionPlace
53+
) {
54+
super.update(presentation, project, editor, file, dataContext, actionPlace);
55+
if (myHandler instanceof ContextAwareActionHandler contextAwareHandler && presentation.isEnabled()) {
56+
presentation.setEnabled(contextAwareHandler.isAvailableForQuickList(editor, file, dataContext));
57+
}
58+
}
6259

63-
@Nullable
64-
protected PsiClass getTargetClass(Editor editor, PsiFile file) {
65-
int offset = editor.getCaretModel().getOffset();
66-
PsiElement element = file.findElementAt(offset);
67-
if (element == null) {
68-
return null;
60+
@Override
61+
@Nullable
62+
public AnAction createEditTemplateAction(DataContext dataContext) {
63+
return null;
6964
}
70-
final PsiClass target = PsiTreeUtil.getParentOfType(element, PsiClass.class);
71-
return target instanceof SyntheticElement ? null : target;
72-
}
7365

74-
@Override
75-
protected boolean isValidForFile(@Nonnull Project project, @Nonnull Editor editor, @Nonnull PsiFile file) {
76-
if (!(file instanceof PsiJavaFile)) {
77-
return false;
66+
@Nonnull
67+
@Override
68+
protected final CodeInsightActionHandler getHandler() {
69+
return myHandler;
7870
}
79-
if (file instanceof PsiCompiledElement) {
80-
return false;
71+
72+
@Nullable
73+
@RequiredReadAction
74+
protected PsiClass getTargetClass(Editor editor, PsiFile file) {
75+
int offset = editor.getCaretModel().getOffset();
76+
PsiElement element = file.findElementAt(offset);
77+
if (element == null) {
78+
return null;
79+
}
80+
PsiClass target = PsiTreeUtil.getParentOfType(element, PsiClass.class);
81+
return target instanceof SyntheticElement ? null : target;
8182
}
8283

83-
PsiDocumentManager.getInstance(project).commitAllDocuments();
84+
@Override
85+
@RequiredReadAction
86+
protected boolean isValidForFile(@Nonnull Project project, @Nonnull Editor editor, @Nonnull PsiFile file) {
87+
if (!(file instanceof PsiJavaFile)) {
88+
return false;
89+
}
90+
if (file instanceof PsiCompiledElement) {
91+
return false;
92+
}
93+
94+
PsiDocumentManager.getInstance(project).commitAllDocuments();
8495

85-
PsiClass targetClass = getTargetClass(editor, file);
86-
return targetClass != null && isValidForClass(targetClass);
87-
}
96+
PsiClass targetClass = getTargetClass(editor, file);
97+
return targetClass != null && isValidForClass(targetClass);
98+
}
8899

89-
protected boolean isValidForClass(final PsiClass targetClass) {
90-
return !targetClass.isInterface();
91-
}
100+
protected boolean isValidForClass(PsiClass targetClass) {
101+
return !targetClass.isInterface();
102+
}
92103
}

plugin/src/main/java/com/intellij/java/impl/codeInsight/generation/actions/GenerateConstructorAction.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,23 @@
1818
import com.intellij.java.impl.codeInsight.generation.GenerateConstructorHandler;
1919
import com.intellij.java.language.psi.PsiAnonymousClass;
2020
import com.intellij.java.language.psi.PsiClass;
21+
import consulo.annotation.component.ActionImpl;
22+
import consulo.java.localize.JavaLocalize;
2123

2224
/**
23-
* Action group which contains Generate... actions
24-
* Available in the Java code editor context only
25+
* Action group which contains Generate... actions.
26+
* Available in the Java code editor context only.
27+
*
2528
* @author Alexey Kudravtsev
26-
*/
29+
*/
30+
@ActionImpl(id = "GenerateConstructor")
2731
public class GenerateConstructorAction extends BaseGenerateAction {
28-
public GenerateConstructorAction() {
29-
super(new GenerateConstructorHandler());
30-
}
32+
public GenerateConstructorAction() {
33+
super(new GenerateConstructorHandler(), JavaLocalize.actionGenerateconstructorText());
34+
}
3135

32-
@Override
33-
protected boolean isValidForClass(final PsiClass targetClass) {
34-
return super.isValidForClass(targetClass) && !(targetClass instanceof PsiAnonymousClass);
35-
}
36+
@Override
37+
protected boolean isValidForClass(PsiClass targetClass) {
38+
return super.isValidForClass(targetClass) && !(targetClass instanceof PsiAnonymousClass);
39+
}
3640
}

plugin/src/main/java/com/intellij/java/impl/codeInsight/generation/actions/GenerateCreateUIAction.java

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -17,45 +17,48 @@
1717

1818
import com.intellij.java.language.psi.*;
1919
import com.intellij.java.language.psi.util.PsiTypesUtil;
20+
import consulo.annotation.access.RequiredReadAction;
21+
import consulo.annotation.component.ActionImpl;
22+
import consulo.java.localize.JavaLocalize;
2023

2124
/**
2225
* @author Konstantin Bulenkov
2326
*/
27+
@ActionImpl(id = "GenerateCreateUI")
2428
public class GenerateCreateUIAction extends BaseGenerateAction {
25-
public GenerateCreateUIAction() {
26-
super(new GenerateCreateUIHandler());
27-
}
29+
public GenerateCreateUIAction() {
30+
super(new GenerateCreateUIHandler(), JavaLocalize.actionGeneratecreateuiText());
31+
}
2832

29-
@Override
30-
protected boolean isValidForClass(PsiClass targetClass) {
31-
final PsiModifierList list = targetClass.getModifierList();
32-
return list != null
33-
&& !list.hasModifierProperty(PsiModifier.ABSTRACT)
34-
&& !hasCreateUIMethod(targetClass)
35-
&& isComponentUI(targetClass);
36-
}
33+
@Override
34+
@RequiredReadAction
35+
protected boolean isValidForClass(PsiClass targetClass) {
36+
return !targetClass.isAbstract()
37+
&& !hasCreateUIMethod(targetClass)
38+
&& isComponentUI(targetClass);
39+
}
3740

38-
private static boolean hasCreateUIMethod(PsiClass aClass) {
39-
for (PsiMethod method : aClass.findMethodsByName("createUI", false)) {
40-
if (method.hasModifierProperty(PsiModifier.STATIC)) {
41-
final PsiParameter[] parameters = method.getParameterList().getParameters();
42-
if (parameters.length == 1) {
43-
final PsiType type = parameters[0].getType();
44-
final PsiClass typeClass = PsiTypesUtil.getPsiClass(type);
45-
return typeClass != null && "javax.swing.JComponent".equals(typeClass.getQualifiedName());
41+
private static boolean hasCreateUIMethod(PsiClass aClass) {
42+
for (PsiMethod method : aClass.findMethodsByName("createUI", false)) {
43+
if (method.isStatic()) {
44+
PsiParameter[] parameters = method.getParameterList().getParameters();
45+
if (parameters.length == 1) {
46+
PsiType type = parameters[0].getType();
47+
PsiClass typeClass = PsiTypesUtil.getPsiClass(type);
48+
return typeClass != null && "javax.swing.JComponent".equals(typeClass.getQualifiedName());
49+
}
50+
}
4651
}
47-
}
52+
return false;
4853
}
49-
return false;
50-
}
5154

52-
private static boolean isComponentUI(PsiClass aClass) {
53-
while (aClass != null) {
54-
if ("javax.swing.plaf.ComponentUI".equals(aClass.getQualifiedName())) {
55-
return true;
56-
}
57-
aClass = aClass.getSuperClass();
55+
private static boolean isComponentUI(PsiClass aClass) {
56+
while (aClass != null) {
57+
if ("javax.swing.plaf.ComponentUI".equals(aClass.getQualifiedName())) {
58+
return true;
59+
}
60+
aClass = aClass.getSuperClass();
61+
}
62+
return false;
5863
}
59-
return false;
60-
}
6164
}

plugin/src/main/java/com/intellij/java/impl/codeInsight/generation/actions/GenerateEqualsAction.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,30 @@
1616
package com.intellij.java.impl.codeInsight.generation.actions;
1717

1818
import com.intellij.java.impl.codeInsight.generation.GenerateEqualsHandler;
19+
import consulo.annotation.access.RequiredReadAction;
20+
import consulo.annotation.component.ActionImpl;
1921
import consulo.codeEditor.Editor;
2022
import com.intellij.java.language.psi.PsiAnonymousClass;
2123
import com.intellij.java.language.psi.PsiClass;
24+
import consulo.java.localize.JavaLocalize;
2225
import consulo.language.psi.PsiFile;
2326

2427
/**
2528
* @author dsl
2629
*/
30+
@ActionImpl(id = "GenerateEquals")
2731
public class GenerateEqualsAction extends BaseGenerateAction {
28-
public GenerateEqualsAction() {
29-
super(new GenerateEqualsHandler());
30-
}
32+
public GenerateEqualsAction() {
33+
super(new GenerateEqualsHandler(), JavaLocalize.actionGenerateequalsText());
34+
}
3135

32-
@Override
33-
protected PsiClass getTargetClass(Editor editor, PsiFile file) {
34-
final PsiClass targetClass = super.getTargetClass(editor, file);
35-
if (targetClass == null || targetClass instanceof PsiAnonymousClass ||
36-
targetClass.isEnum()) return null;
37-
return targetClass;
38-
}
36+
@Override
37+
@RequiredReadAction
38+
protected PsiClass getTargetClass(Editor editor, PsiFile file) {
39+
PsiClass targetClass = super.getTargetClass(editor, file);
40+
if (targetClass == null || targetClass instanceof PsiAnonymousClass || targetClass.isEnum()) {
41+
return null;
42+
}
43+
return targetClass;
44+
}
3945
}

plugin/src/main/java/com/intellij/java/impl/codeInsight/generation/actions/GenerateGetterAction.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,18 @@
1616
package com.intellij.java.impl.codeInsight.generation.actions;
1717

1818
import com.intellij.java.impl.codeInsight.generation.GenerateGetterHandler;
19+
import consulo.annotation.component.ActionImpl;
20+
import consulo.java.localize.JavaLocalize;
1921

2022
/**
2123
* Action group which contains Generate... actions
2224
* Available in the Java code editor context only
25+
*
2326
* @author Alexey Kudravtsev
2427
*/
28+
@ActionImpl(id = "GenerateGetter")
2529
public class GenerateGetterAction extends GenerateGetterSetterBaseAction {
26-
public GenerateGetterAction() {
27-
super(new GenerateGetterHandler());
28-
}
30+
public GenerateGetterAction() {
31+
super(new GenerateGetterHandler(), JavaLocalize.actionGenerategetterText());
32+
}
2933
}

plugin/src/main/java/com/intellij/java/impl/codeInsight/generation/actions/GenerateGetterAndSetterAction.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,18 @@
1616
package com.intellij.java.impl.codeInsight.generation.actions;
1717

1818
import com.intellij.java.impl.codeInsight.generation.GenerateGetterAndSetterHandler;
19+
import consulo.annotation.component.ActionImpl;
20+
import consulo.java.localize.JavaLocalize;
1921

2022
/**
2123
* Action group which contains Generate... actions
2224
* Available in the Java code editor context only
25+
*
2326
* @author Alexey Kudravtsev
24-
*/
27+
*/
28+
@ActionImpl(id = "GenerateGetterAndSetter")
2529
public class GenerateGetterAndSetterAction extends GenerateGetterSetterBaseAction {
26-
public GenerateGetterAndSetterAction() {
27-
super(new GenerateGetterAndSetterHandler());
28-
}
30+
public GenerateGetterAndSetterAction() {
31+
super(new GenerateGetterAndSetterHandler(), JavaLocalize.actionGenerategetterandsetterText());
32+
}
2933
}

plugin/src/main/java/com/intellij/java/impl/codeInsight/generation/actions/GenerateGetterSetterBaseAction.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,18 @@
1515
*/
1616
package com.intellij.java.impl.codeInsight.generation.actions;
1717

18-
import com.intellij.java.impl.codeInsight.generation.GenerateGetterSetterHandlerBase;
18+
import consulo.language.editor.action.CodeInsightActionHandler;
19+
import consulo.localize.LocalizeValue;
20+
import jakarta.annotation.Nonnull;
1921

2022
/**
2123
* Action group which contains Generate... actions
2224
* Available in the Java code editor context only
25+
*
2326
* @author Danila Ponomarenko
2427
*/
2528
public abstract class GenerateGetterSetterBaseAction extends BaseGenerateAction {
26-
public GenerateGetterSetterBaseAction(GenerateGetterSetterHandlerBase handler) {
27-
super(handler);
28-
}
29+
protected GenerateGetterSetterBaseAction(CodeInsightActionHandler handler, @Nonnull LocalizeValue text) {
30+
super(handler, text);
31+
}
2932
}

plugin/src/main/java/com/intellij/java/impl/codeInsight/generation/actions/GenerateSetterAction.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,18 @@
1616
package com.intellij.java.impl.codeInsight.generation.actions;
1717

1818
import com.intellij.java.impl.codeInsight.generation.GenerateSetterHandler;
19+
import consulo.annotation.component.ActionImpl;
20+
import consulo.java.localize.JavaLocalize;
1921

2022
/**
2123
* Action group which contains Generate... actions
2224
* Available in the Java code editor context only
25+
*
2326
* @author Alexey Kudravtsev
24-
*/
27+
*/
28+
@ActionImpl(id = "GenerateSetter")
2529
public class GenerateSetterAction extends GenerateGetterSetterBaseAction {
26-
public GenerateSetterAction() {
27-
super(new GenerateSetterHandler());
28-
}
29-
30+
public GenerateSetterAction() {
31+
super(new GenerateSetterHandler(), JavaLocalize.actionGeneratesetterText());
32+
}
3033
}

0 commit comments

Comments
 (0)