Skip to content

Commit 4f71988

Browse files
authored
Adding @ActionImpl annotations to New actions. Refactoring and localizing. (#207)
1 parent b381828 commit 4f71988

5 files changed

Lines changed: 275 additions & 209 deletions

File tree

plugin/src/main/java/com/intellij/java/impl/ide/actions/CreateClassAction.java

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

1918
import com.intellij.java.impl.ide.fileTemplates.JavaCreateFromTemplateHandler;
@@ -24,7 +23,11 @@
2423
import com.intellij.java.language.psi.PsiClass;
2524
import com.intellij.java.language.psi.PsiNameHelper;
2625
import com.intellij.java.language.psi.util.PsiUtil;
27-
import consulo.application.AllIcons;
26+
import consulo.annotation.access.RequiredReadAction;
27+
import consulo.annotation.component.ActionImpl;
28+
import consulo.annotation.component.ActionParentRef;
29+
import consulo.annotation.component.ActionRef;
30+
import consulo.annotation.component.ActionRefAnchor;
2831
import consulo.application.dumb.DumbAware;
2932
import consulo.fileTemplate.FileTemplate;
3033
import consulo.fileTemplate.FileTemplateManager;
@@ -51,92 +54,106 @@
5154
*
5255
* @since 5.1
5356
*/
57+
@ActionImpl(id = "JavaNewClass", parents = @ActionParentRef(value = @ActionRef(id = "NewGroup1"), anchor = ActionRefAnchor.FIRST))
5458
public class CreateClassAction extends JavaCreateTemplateInPackageAction<PsiClass> implements DumbAware {
55-
public CreateClassAction() {
56-
super(LocalizeValue.empty(), LocalizeValue.empty(), AllIcons.Nodes.Class, true);
57-
}
58-
59-
@Override
60-
protected void buildDialog(final Project project, PsiDirectory directory, CreateFileFromTemplateDialog.Builder builder) {
61-
builder.setTitle(JavaCoreLocalize.actionCreateNewClass());
62-
builder.addKind(JavaLocalize.titleClass(), AllIcons.Nodes.Class, JavaTemplateUtil.INTERNAL_CLASS_TEMPLATE_NAME);
63-
builder.addKind(JavaLocalize.titleInterface(), AllIcons.Nodes.Interface, JavaTemplateUtil.INTERNAL_INTERFACE_TEMPLATE_NAME);
64-
65-
LanguageLevel level = PsiUtil.getLanguageLevel(directory);
66-
if (level.isAtLeast(LanguageLevel.JDK_16)) {
67-
builder.addKind(JavaLocalize.titleRecord(), PlatformIconGroup.nodesRecord(), JavaTemplateUtil.INTERNAL_RECORD_TEMPLATE_NAME);
59+
public CreateClassAction() {
60+
super(LocalizeValue.empty(), LocalizeValue.empty(), PlatformIconGroup.nodesClass(), true);
61+
}
62+
63+
@Override
64+
@RequiredReadAction
65+
protected void buildDialog(final Project project, PsiDirectory directory, CreateFileFromTemplateDialog.Builder builder) {
66+
builder.setTitle(JavaCoreLocalize.actionCreateNewClass());
67+
builder.addKind(JavaLocalize.titleClass(), PlatformIconGroup.nodesClass(), JavaTemplateUtil.INTERNAL_CLASS_TEMPLATE_NAME);
68+
builder.addKind(
69+
JavaLocalize.titleInterface(),
70+
PlatformIconGroup.nodesInterface(),
71+
JavaTemplateUtil.INTERNAL_INTERFACE_TEMPLATE_NAME
72+
);
73+
74+
LanguageLevel level = PsiUtil.getLanguageLevel(directory);
75+
if (level.isAtLeast(LanguageLevel.JDK_16)) {
76+
builder.addKind(JavaLocalize.titleRecord(), PlatformIconGroup.nodesRecord(), JavaTemplateUtil.INTERNAL_RECORD_TEMPLATE_NAME);
77+
}
78+
if (level.isAtLeast(LanguageLevel.JDK_1_5)) {
79+
builder.addKind(JavaLocalize.titleEnum(), PlatformIconGroup.nodesEnum(), JavaTemplateUtil.INTERNAL_ENUM_TEMPLATE_NAME);
80+
builder.addKind(
81+
JavaLocalize.titleAnnotation(),
82+
PlatformIconGroup.nodesAnnotationtype(),
83+
JavaTemplateUtil.INTERNAL_ANNOTATION_TYPE_TEMPLATE_NAME
84+
);
85+
}
86+
87+
for (FileTemplate template : FileTemplateManager.getInstance(project).getAllTemplates()) {
88+
JavaCreateFromTemplateHandler handler = new JavaCreateFromTemplateHandler();
89+
if (handler.handlesTemplate(template) && JavaCreateFromTemplateHandler.canCreate(directory)) {
90+
builder.addKind(LocalizeValue.of(template.getName()), JavaFileType.INSTANCE.getIcon(), template.getName());
91+
}
92+
}
93+
94+
builder.setValidator(new InputValidatorEx() {
95+
@Override
96+
public String getErrorText(String inputString) {
97+
if (inputString.length() > 0 && !PsiNameHelper.getInstance(project).isQualifiedName(inputString)) {
98+
return "This is not a valid Java qualified name";
99+
}
100+
return null;
101+
}
102+
103+
@RequiredUIAccess
104+
@Override
105+
public boolean checkInput(String inputString) {
106+
return true;
107+
}
108+
109+
@RequiredUIAccess
110+
@Override
111+
public boolean canClose(String inputString) {
112+
return !StringUtil.isEmptyOrSpaces(inputString) && getErrorText(inputString) == null;
113+
}
114+
});
68115
}
69-
if (level.isAtLeast(LanguageLevel.JDK_1_5)) {
70-
builder.addKind(JavaLocalize.titleEnum(), AllIcons.Nodes.Enum, JavaTemplateUtil.INTERNAL_ENUM_TEMPLATE_NAME);
71-
builder.addKind(JavaLocalize.titleAnnotation(), AllIcons.Nodes.Annotationtype, JavaTemplateUtil.INTERNAL_ANNOTATION_TYPE_TEMPLATE_NAME);
116+
117+
@Override
118+
protected Class<? extends ModuleExtension> getModuleExtensionClass() {
119+
return JavaModuleExtension.class;
72120
}
73121

74-
for (FileTemplate template : FileTemplateManager.getInstance(project).getAllTemplates()) {
75-
final JavaCreateFromTemplateHandler handler = new JavaCreateFromTemplateHandler();
76-
if (handler.handlesTemplate(template) && JavaCreateFromTemplateHandler.canCreate(directory)) {
77-
builder.addKind(LocalizeValue.of(template.getName()), JavaFileType.INSTANCE.getIcon(), template.getName());
78-
}
122+
@Nonnull
123+
@Override
124+
protected LocalizeValue getErrorTitle() {
125+
return JavaCoreLocalize.titleCannotCreateClass();
79126
}
80127

81-
builder.setValidator(new InputValidatorEx() {
82-
@Override
83-
public String getErrorText(String inputString) {
84-
if (inputString.length() > 0 && !PsiNameHelper.getInstance(project).isQualifiedName(inputString)) {
85-
return "This is not a valid Java qualified name";
86-
}
87-
return null;
88-
}
89-
90-
@RequiredUIAccess
91-
@Override
92-
public boolean checkInput(String inputString) {
93-
return true;
94-
}
95-
96-
@RequiredUIAccess
97-
@Override
98-
public boolean canClose(String inputString) {
99-
return !StringUtil.isEmptyOrSpaces(inputString) && getErrorText(inputString) == null;
100-
}
101-
});
102-
}
103-
104-
@Override
105-
protected Class<? extends ModuleExtension> getModuleExtensionClass() {
106-
return JavaModuleExtension.class;
107-
}
108-
109-
@Nonnull
110-
@Override
111-
protected LocalizeValue getErrorTitle() {
112-
return JavaCoreLocalize.titleCannotCreateClass();
113-
}
114-
115-
@Nonnull
116-
@Override
117-
protected LocalizeValue getActionName(PsiDirectory directory, String newName, String templateName) {
118-
return JavaCoreLocalize.progressCreatingClass(StringUtil.getQualifiedName(JavaDirectoryService.getInstance().getPackage(directory).getQualifiedName(), newName));
119-
}
120-
121-
@Override
122-
protected final PsiClass doCreate(PsiDirectory dir, String className, String templateName) throws IncorrectOperationException {
123-
return JavaDirectoryService.getInstance().createClass(dir, className, templateName, true);
124-
}
125-
126-
@Override
127-
protected String removeExtension(String templateName, String className) {
128-
return StringUtil.trimEnd(className, ".java");
129-
}
130-
131-
@Override
132-
protected PsiElement getNavigationElement(@Nonnull PsiClass createdElement) {
133-
return createdElement.getLBrace();
134-
}
135-
136-
@Override
137-
protected void postProcess(PsiClass createdElement, String templateName, Map<String, String> customProperties) {
138-
super.postProcess(createdElement, templateName, customProperties);
139-
140-
moveCaretAfterNameIdentifier(createdElement);
141-
}
128+
@Nonnull
129+
@Override
130+
protected LocalizeValue getActionName(PsiDirectory directory, String newName, String templateName) {
131+
return JavaCoreLocalize.progressCreatingClass(StringUtil.getQualifiedName(
132+
JavaDirectoryService.getInstance().getPackage(directory).getQualifiedName(),
133+
newName
134+
));
135+
}
136+
137+
@Override
138+
protected final PsiClass doCreate(PsiDirectory dir, String className, String templateName) throws IncorrectOperationException {
139+
return JavaDirectoryService.getInstance().createClass(dir, className, templateName, true);
140+
}
141+
142+
@Override
143+
protected String removeExtension(String templateName, String className) {
144+
return StringUtil.trimEnd(className, ".java");
145+
}
146+
147+
@Override
148+
protected PsiElement getNavigationElement(@Nonnull PsiClass createdElement) {
149+
return createdElement.getLBrace();
150+
}
151+
152+
@Override
153+
@RequiredUIAccess
154+
protected void postProcess(PsiClass createdElement, String templateName, Map<String, String> customProperties) {
155+
super.postProcess(createdElement, templateName, customProperties);
156+
157+
moveCaretAfterNameIdentifier(createdElement);
158+
}
142159
}

plugin/src/main/java/com/intellij/java/impl/ide/actions/CreateModuleInfoAction.java

Lines changed: 57 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.intellij.java.language.impl.JavaFileType;
1919
import com.intellij.java.language.impl.psi.impl.light.AutomaticJavaModule;
2020
import com.intellij.java.language.psi.util.PsiUtil;
21+
import consulo.annotation.component.ActionImpl;
2122
import consulo.dataContext.DataContext;
2223
import consulo.fileTemplate.AttributesDefaults;
2324
import consulo.fileTemplate.FileTemplate;
@@ -26,12 +27,11 @@
2627
import consulo.ide.action.CreateFromTemplateActionBase;
2728
import consulo.java.localize.JavaLocalize;
2829
import consulo.language.content.LanguageContentFolderScopes;
29-
import consulo.language.editor.LangDataKeys;
3030
import consulo.language.psi.PsiDirectory;
31+
import consulo.language.psi.PsiElement;
3132
import consulo.language.psi.PsiFile;
3233
import consulo.language.psi.scope.GlobalSearchScope;
3334
import consulo.language.psi.search.FilenameIndex;
34-
import consulo.language.util.ModuleUtilCore;
3535
import consulo.module.Module;
3636
import consulo.module.content.ProjectFileIndex;
3737
import consulo.module.content.ProjectRootManager;
@@ -49,51 +49,67 @@
4949
import static com.intellij.java.language.psi.PsiJavaModule.MODULE_INFO_CLASS;
5050
import static com.intellij.java.language.psi.PsiJavaModule.MODULE_INFO_FILE;
5151

52+
@ActionImpl(id = "NewModuleInfo")
5253
public class CreateModuleInfoAction extends CreateFromTemplateActionBase {
53-
public CreateModuleInfoAction() {
54-
super(JavaLocalize.actionCreateNewModuleInfoTitle(), JavaLocalize.actionCreateNewModuleInfoDescription(), JavaFileType.INSTANCE.getIcon());
55-
}
56-
57-
@Override
58-
public void update(@Nonnull AnActionEvent e) {
59-
if (!e.getPresentation().isVisible()) {
60-
return;
54+
public CreateModuleInfoAction() {
55+
super(
56+
JavaLocalize.actionCreateNewModuleInfoTitle(),
57+
JavaLocalize.actionCreateNewModuleInfoDescription(),
58+
JavaFileType.INSTANCE.getIcon()
59+
);
6160
}
62-
DataContext ctx = e.getDataContext();
63-
boolean available = Optional.ofNullable(ctx.getData(IdeView.KEY)).map(view -> getTargetDirectory(ctx, view)).filter(PsiUtil::isLanguageLevel9OrHigher).map
64-
(ModuleUtilCore::findModuleForPsiElement).map(module -> FilenameIndex.getVirtualFilesByName(module.getProject(), MODULE_INFO_FILE, GlobalSearchScope.moduleScope(module)).isEmpty()).orElse(false);
65-
e.getPresentation().setEnabledAndVisible(available);
66-
}
6761

68-
@Nullable
69-
@Override
70-
protected PsiDirectory getTargetDirectory(DataContext ctx, IdeView view) {
71-
PsiDirectory[] directories = view.getDirectories();
72-
if (directories.length == 1) {
73-
PsiDirectory psiDir = directories[0];
74-
VirtualFile vDir = psiDir.getVirtualFile();
75-
ProjectFileIndex index = ProjectRootManager.getInstance(psiDir.getProject()).getFileIndex();
76-
if (vDir.equals(index.getSourceRootForFile(vDir)) && index.isUnderContentFolderType(vDir, LanguageContentFolderScopes.onlyProduction())) {
77-
return psiDir;
78-
}
62+
@Override
63+
public void update(@Nonnull AnActionEvent e) {
64+
if (!e.getPresentation().isVisible()) {
65+
return;
66+
}
67+
DataContext ctx = e.getDataContext();
68+
boolean available = Optional.ofNullable(ctx.getData(IdeView.KEY))
69+
.map(view -> getTargetDirectory(ctx, view))
70+
.filter(PsiUtil::isLanguageLevel9OrHigher)
71+
.map(PsiElement::getModule)
72+
.map(
73+
module -> FilenameIndex.getVirtualFilesByName(
74+
module.getProject(),
75+
MODULE_INFO_FILE,
76+
GlobalSearchScope.moduleScope(module)
77+
).isEmpty()
78+
)
79+
.orElse(false);
80+
e.getPresentation().setEnabledAndVisible(available);
7981
}
8082

81-
return null;
82-
}
83+
@Nullable
84+
@Override
85+
protected PsiDirectory getTargetDirectory(DataContext ctx, IdeView view) {
86+
PsiDirectory[] directories = view.getDirectories();
87+
if (directories.length == 1) {
88+
PsiDirectory psiDir = directories[0];
89+
VirtualFile vDir = psiDir.getVirtualFile();
90+
ProjectFileIndex index = ProjectRootManager.getInstance(psiDir.getProject()).getFileIndex();
91+
if (vDir.equals(index.getSourceRootForFile(vDir))
92+
&& index.isUnderContentFolderType(vDir, LanguageContentFolderScopes.onlyProduction())) {
93+
return psiDir;
94+
}
95+
}
96+
97+
return null;
98+
}
8399

84-
@Override
85-
protected FileTemplate getTemplate(@Nonnull Project project, @Nonnull PsiDirectory dir) {
86-
return FileTemplateManager.getInstance(project).getInternalTemplate(INTERNAL_MODULE_INFO_TEMPLATE_NAME);
87-
}
100+
@Override
101+
protected FileTemplate getTemplate(@Nonnull Project project, @Nonnull PsiDirectory dir) {
102+
return FileTemplateManager.getInstance(project).getInternalTemplate(INTERNAL_MODULE_INFO_TEMPLATE_NAME);
103+
}
88104

89-
@Override
90-
protected AttributesDefaults getAttributesDefaults(@Nonnull DataContext ctx) {
91-
return new AttributesDefaults(MODULE_INFO_CLASS).withFixedName(true);
92-
}
105+
@Override
106+
protected AttributesDefaults getAttributesDefaults(@Nonnull DataContext ctx) {
107+
return new AttributesDefaults(MODULE_INFO_CLASS).withFixedName(true);
108+
}
93109

94-
@Override
95-
protected Map<String, String> getLiveTemplateDefaults(@Nonnull DataContext ctx, @Nonnull PsiFile file) {
96-
Module module = ctx.getData(LangDataKeys.MODULE);
97-
return Collections.singletonMap("MODULE_NAME", module != null ? AutomaticJavaModule.moduleName(module.getName()) : "module_name");
98-
}
110+
@Override
111+
protected Map<String, String> getLiveTemplateDefaults(@Nonnull DataContext ctx, @Nonnull PsiFile file) {
112+
Module module = ctx.getData(Module.KEY);
113+
return Collections.singletonMap("MODULE_NAME", module != null ? AutomaticJavaModule.moduleName(module.getName()) : "module_name");
114+
}
99115
}

0 commit comments

Comments
 (0)