Skip to content

Commit cd5471b

Browse files
authored
Adding @ActionImpl annotations to Refactoring actions. Refactoring and localizing. (#223)
1 parent 3400867 commit cd5471b

26 files changed

Lines changed: 745 additions & 389 deletions

java-properties-impl/pom.xml

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!--
3-
- Copyright 2013-2017 consulo.io
3+
- Copyright 2013-2025 consulo.io
44
-
55
- Licensed under the Apache License, Version 2.0 (the "License");
66
- you may not use this file except in compliance with the License.
@@ -41,6 +41,25 @@
4141
<version>3-SNAPSHOT</version>
4242
<packaging>jar</packaging>
4343

44+
<build>
45+
<plugins>
46+
<plugin>
47+
<groupId>consulo.maven</groupId>
48+
<artifactId>maven-consulo-plugin</artifactId>
49+
<extensions>true</extensions>
50+
<executions>
51+
<execution>
52+
<id>generate-sources</id>
53+
<phase>generate-sources</phase>
54+
<goals>
55+
<goal>generate-localize</goal>
56+
</goals>
57+
</execution>
58+
</executions>
59+
</plugin>
60+
</plugins>
61+
</build>
62+
4463
<dependencies>
4564
<dependency>
4665
<groupId>${project.groupId}</groupId>

java-properties-impl/src/main/java/consulo/java/properties/impl/i18n/I18nizeAction.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import consulo.codeEditor.Editor;
2525
import consulo.document.util.TextRange;
2626
import consulo.java.analysis.impl.util.JavaI18nUtil;
27+
import consulo.java.properties.impl.localize.JavaPropertiesLocalize;
2728
import consulo.language.editor.FileModificationService;
2829
import consulo.language.editor.localize.CodeInsightLocalize;
2930
import consulo.language.editor.refactoring.util.CommonRefactoringUtil;
@@ -48,6 +49,10 @@
4849
public class I18nizeAction extends AnAction {
4950
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.i18n.I18nizeAction");
5051

52+
public I18nizeAction() {
53+
super(JavaPropertiesLocalize.actionI18nizeText(), JavaPropertiesLocalize.actionI18nizeDescription());
54+
}
55+
5156
@Override
5257
@RequiredUIAccess
5358
public void update(@Nonnull AnActionEvent e) {
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
action.I18nize.description:
2+
text: Replace Java string literal or JSP text with internationalized expression
3+
action.I18nize.text:
4+
text: Internationali_ze...

plugin/src/main/java/com/intellij/java/impl/refactoring/actions/AnonymousToInnerAction.java

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,11 @@
1818
import com.intellij.java.impl.refactoring.anonymousToInner.AnonymousToInnerHandler;
1919
import com.intellij.java.language.psi.PsiAnonymousClass;
2020
import com.intellij.java.language.psi.PsiNewExpression;
21+
import consulo.annotation.access.RequiredReadAction;
22+
import consulo.annotation.component.ActionImpl;
2123
import consulo.dataContext.DataContext;
2224
import consulo.codeEditor.Editor;
25+
import consulo.java.localize.JavaLocalize;
2326
import consulo.language.psi.PsiElement;
2427
import consulo.language.psi.PsiFile;
2528
import consulo.language.psi.util.PsiTreeUtil;
@@ -28,28 +31,43 @@
2831

2932
import jakarta.annotation.Nonnull;
3033

34+
@ActionImpl(id = "AnonymousToInner")
3135
public class AnonymousToInnerAction extends BaseRefactoringAction {
32-
public boolean isAvailableInEditorOnly() {
33-
return true;
34-
}
36+
public AnonymousToInnerAction() {
37+
super(JavaLocalize.actionAnonymousToInnerText(), JavaLocalize.actionAnonymousToInnerDescription());
38+
}
3539

36-
public boolean isEnabledOnElements(@Nonnull PsiElement[] elements) {
37-
return false;
38-
}
40+
@Override
41+
public boolean isAvailableInEditorOnly() {
42+
return true;
43+
}
3944

40-
protected boolean isAvailableOnElementInEditorAndFile(@Nonnull final PsiElement element, @Nonnull final Editor editor, @Nonnull PsiFile file, @Nonnull DataContext context) {
41-
final PsiElement targetElement = file.findElementAt(editor.getCaretModel().getOffset());
42-
if (PsiTreeUtil.getParentOfType(targetElement, PsiAnonymousClass.class) != null) {
43-
return true;
45+
@Override
46+
public boolean isEnabledOnElements(@Nonnull PsiElement[] elements) {
47+
return false;
4448
}
45-
if (PsiTreeUtil.getParentOfType(element, PsiAnonymousClass.class) != null) {
46-
return true;
49+
50+
@Override
51+
@RequiredReadAction
52+
protected boolean isAvailableOnElementInEditorAndFile(
53+
@Nonnull PsiElement element,
54+
@Nonnull Editor editor,
55+
@Nonnull PsiFile file,
56+
@Nonnull DataContext context
57+
) {
58+
PsiElement targetElement = file.findElementAt(editor.getCaretModel().getOffset());
59+
if (PsiTreeUtil.getParentOfType(targetElement, PsiAnonymousClass.class) != null) {
60+
return true;
61+
}
62+
if (PsiTreeUtil.getParentOfType(element, PsiAnonymousClass.class) != null) {
63+
return true;
64+
}
65+
PsiNewExpression newExpression = PsiTreeUtil.getParentOfType(element, PsiNewExpression.class);
66+
return newExpression != null && newExpression.getAnonymousClass() != null;
4767
}
48-
final PsiNewExpression newExpression = PsiTreeUtil.getParentOfType(element, PsiNewExpression.class);
49-
return newExpression != null && newExpression.getAnonymousClass() != null;
50-
}
5168

52-
public RefactoringActionHandler getHandler(@Nonnull DataContext dataContext) {
53-
return new AnonymousToInnerHandler();
54-
}
69+
@Override
70+
public RefactoringActionHandler getHandler(@Nonnull DataContext dataContext) {
71+
return new AnonymousToInnerHandler();
72+
}
5573
}

plugin/src/main/java/com/intellij/java/impl/refactoring/actions/ConvertToInstanceMethodAction.java

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@
1818
import com.intellij.java.impl.refactoring.convertToInstanceMethod.ConvertToInstanceMethodHandler;
1919
import com.intellij.java.language.psi.PsiIdentifier;
2020
import com.intellij.java.language.psi.PsiMethod;
21-
import com.intellij.java.language.psi.PsiModifier;
21+
import consulo.annotation.component.ActionImpl;
2222
import consulo.dataContext.DataContext;
2323
import consulo.codeEditor.Editor;
24+
import consulo.java.localize.JavaLocalize;
2425
import consulo.language.psi.PsiElement;
2526
import consulo.language.psi.PsiFile;
2627
import consulo.language.editor.refactoring.action.RefactoringActionHandler;
@@ -31,21 +32,37 @@
3132
/**
3233
* @author dsl
3334
*/
35+
@ActionImpl(id = "ConvertToInstanceMethod")
3436
public class ConvertToInstanceMethodAction extends BaseRefactoringAction {
35-
protected boolean isAvailableInEditorOnly() {
36-
return false;
37-
}
37+
public ConvertToInstanceMethodAction() {
38+
super(JavaLocalize.actionConvertToInstanceMethodText(), JavaLocalize.actionConvertToInstanceMethodDescription());
39+
}
3840

39-
protected boolean isEnabledOnElements(@Nonnull PsiElement[] elements) {
40-
return elements.length == 1 && elements[0] instanceof PsiMethod;
41-
}
41+
@Override
42+
protected boolean isAvailableInEditorOnly() {
43+
return false;
44+
}
4245

43-
protected boolean isAvailableOnElementInEditorAndFile(@Nonnull PsiElement element, @Nonnull final Editor editor, @Nonnull PsiFile file, @Nonnull DataContext context) {
44-
if (element instanceof PsiIdentifier) element = element.getParent();
45-
return element instanceof PsiMethod && ((PsiMethod) element).hasModifierProperty(PsiModifier.STATIC);
46-
}
46+
@Override
47+
protected boolean isEnabledOnElements(@Nonnull PsiElement[] elements) {
48+
return elements.length == 1 && elements[0] instanceof PsiMethod;
49+
}
4750

48-
protected RefactoringActionHandler getHandler(@Nonnull DataContext dataContext) {
49-
return new ConvertToInstanceMethodHandler();
50-
}
51+
@Override
52+
protected boolean isAvailableOnElementInEditorAndFile(
53+
@Nonnull PsiElement element,
54+
@Nonnull Editor editor,
55+
@Nonnull PsiFile file,
56+
@Nonnull DataContext context
57+
) {
58+
if (element instanceof PsiIdentifier) {
59+
element = element.getParent();
60+
}
61+
return element instanceof PsiMethod method && method.isStatic();
62+
}
63+
64+
@Override
65+
protected RefactoringActionHandler getHandler(@Nonnull DataContext dataContext) {
66+
return new ConvertToInstanceMethodHandler();
67+
}
5168
}

plugin/src/main/java/com/intellij/java/impl/refactoring/actions/EncapsulateFieldsAction.java

Lines changed: 56 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -19,54 +19,77 @@
1919
import com.intellij.java.language.JavaLanguage;
2020
import com.intellij.java.language.psi.PsiClass;
2121
import com.intellij.java.language.psi.PsiField;
22+
import consulo.annotation.access.RequiredReadAction;
23+
import consulo.annotation.component.ActionImpl;
2224
import consulo.dataContext.DataContext;
2325
import consulo.codeEditor.Editor;
26+
import consulo.java.localize.JavaLocalize;
2427
import consulo.language.psi.PsiElement;
2528
import consulo.language.psi.PsiFile;
2629
import consulo.language.psi.util.PsiTreeUtil;
2730
import consulo.language.editor.refactoring.action.RefactoringActionHandler;
2831
import consulo.language.editor.refactoring.action.BaseRefactoringAction;
2932
import jakarta.annotation.Nonnull;
3033

34+
@ActionImpl(id = "EncapsulateFields")
3135
public 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
}

plugin/src/main/java/com/intellij/java/impl/refactoring/actions/InheritanceToDelegationAction.java

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,37 @@
1818
import com.intellij.java.impl.refactoring.inheritanceToDelegation.InheritanceToDelegationHandler;
1919
import com.intellij.java.language.JavaLanguage;
2020
import com.intellij.java.language.psi.PsiClass;
21+
import consulo.annotation.access.RequiredReadAction;
22+
import consulo.annotation.component.ActionImpl;
2123
import consulo.dataContext.DataContext;
24+
import consulo.java.localize.JavaLocalize;
2225
import consulo.language.psi.PsiElement;
2326
import consulo.language.editor.refactoring.action.RefactoringActionHandler;
2427
import consulo.language.editor.refactoring.action.BaseRefactoringAction;
2528
import jakarta.annotation.Nonnull;
2629

30+
@ActionImpl(id = "InheritanceToDelegation")
2731
public class InheritanceToDelegationAction extends BaseRefactoringAction {
28-
public boolean isAvailableInEditorOnly() {
29-
return false;
30-
}
32+
public InheritanceToDelegationAction() {
33+
super(JavaLocalize.actionInheritanceToDelegationText(), JavaLocalize.actionInheritanceToDelegationDescription());
34+
}
3135

32-
public boolean isEnabledOnElements(@Nonnull PsiElement[] elements) {
33-
return elements.length == 1 &&
34-
elements[0] instanceof PsiClass &&
35-
!((PsiClass) elements[0]).isInterface() &&
36-
elements[0].getLanguage().isKindOf(JavaLanguage.INSTANCE);
37-
}
36+
@Override
37+
public boolean isAvailableInEditorOnly() {
38+
return false;
39+
}
3840

39-
public RefactoringActionHandler getHandler(@Nonnull DataContext dataContext) {
40-
return new InheritanceToDelegationHandler();
41-
}
41+
@Override
42+
@RequiredReadAction
43+
public boolean isEnabledOnElements(@Nonnull PsiElement[] elements) {
44+
return elements.length == 1
45+
&& elements[0] instanceof PsiClass psiClass
46+
&& !psiClass.isInterface()
47+
&& psiClass.getLanguage().isKindOf(JavaLanguage.INSTANCE);
48+
}
49+
50+
@Override
51+
public RefactoringActionHandler getHandler(@Nonnull DataContext dataContext) {
52+
return new InheritanceToDelegationHandler();
53+
}
4254
}

0 commit comments

Comments
 (0)