Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.intellij.java.impl.ide.actions;

import com.intellij.java.impl.ide.fileTemplates.JavaCreateFromTemplateHandler;
Expand All @@ -24,7 +23,11 @@
import com.intellij.java.language.psi.PsiClass;
import com.intellij.java.language.psi.PsiNameHelper;
import com.intellij.java.language.psi.util.PsiUtil;
import consulo.application.AllIcons;
import consulo.annotation.access.RequiredReadAction;
import consulo.annotation.component.ActionImpl;
import consulo.annotation.component.ActionParentRef;
import consulo.annotation.component.ActionRef;
import consulo.annotation.component.ActionRefAnchor;
import consulo.application.dumb.DumbAware;
import consulo.fileTemplate.FileTemplate;
import consulo.fileTemplate.FileTemplateManager;
Expand All @@ -51,92 +54,106 @@
*
* @since 5.1
*/
@ActionImpl(id = "JavaNewClass", parents = @ActionParentRef(value = @ActionRef(id = "NewGroup1"), anchor = ActionRefAnchor.FIRST))
public class CreateClassAction extends JavaCreateTemplateInPackageAction<PsiClass> implements DumbAware {
public CreateClassAction() {
super(LocalizeValue.empty(), LocalizeValue.empty(), AllIcons.Nodes.Class, true);
}

@Override
protected void buildDialog(final Project project, PsiDirectory directory, CreateFileFromTemplateDialog.Builder builder) {
builder.setTitle(JavaCoreLocalize.actionCreateNewClass());
builder.addKind(JavaLocalize.titleClass(), AllIcons.Nodes.Class, JavaTemplateUtil.INTERNAL_CLASS_TEMPLATE_NAME);
builder.addKind(JavaLocalize.titleInterface(), AllIcons.Nodes.Interface, JavaTemplateUtil.INTERNAL_INTERFACE_TEMPLATE_NAME);

LanguageLevel level = PsiUtil.getLanguageLevel(directory);
if (level.isAtLeast(LanguageLevel.JDK_16)) {
builder.addKind(JavaLocalize.titleRecord(), PlatformIconGroup.nodesRecord(), JavaTemplateUtil.INTERNAL_RECORD_TEMPLATE_NAME);
public CreateClassAction() {
super(LocalizeValue.empty(), LocalizeValue.empty(), PlatformIconGroup.nodesClass(), true);
}

@Override
@RequiredReadAction
protected void buildDialog(final Project project, PsiDirectory directory, CreateFileFromTemplateDialog.Builder builder) {
builder.setTitle(JavaCoreLocalize.actionCreateNewClass());
builder.addKind(JavaLocalize.titleClass(), PlatformIconGroup.nodesClass(), JavaTemplateUtil.INTERNAL_CLASS_TEMPLATE_NAME);
builder.addKind(
JavaLocalize.titleInterface(),
PlatformIconGroup.nodesInterface(),
JavaTemplateUtil.INTERNAL_INTERFACE_TEMPLATE_NAME
);

LanguageLevel level = PsiUtil.getLanguageLevel(directory);
if (level.isAtLeast(LanguageLevel.JDK_16)) {
builder.addKind(JavaLocalize.titleRecord(), PlatformIconGroup.nodesRecord(), JavaTemplateUtil.INTERNAL_RECORD_TEMPLATE_NAME);
}
if (level.isAtLeast(LanguageLevel.JDK_1_5)) {
builder.addKind(JavaLocalize.titleEnum(), PlatformIconGroup.nodesEnum(), JavaTemplateUtil.INTERNAL_ENUM_TEMPLATE_NAME);
builder.addKind(
JavaLocalize.titleAnnotation(),
PlatformIconGroup.nodesAnnotationtype(),
JavaTemplateUtil.INTERNAL_ANNOTATION_TYPE_TEMPLATE_NAME
);
}

for (FileTemplate template : FileTemplateManager.getInstance(project).getAllTemplates()) {
JavaCreateFromTemplateHandler handler = new JavaCreateFromTemplateHandler();
if (handler.handlesTemplate(template) && JavaCreateFromTemplateHandler.canCreate(directory)) {
builder.addKind(LocalizeValue.of(template.getName()), JavaFileType.INSTANCE.getIcon(), template.getName());
}
}

builder.setValidator(new InputValidatorEx() {
@Override
public String getErrorText(String inputString) {
if (inputString.length() > 0 && !PsiNameHelper.getInstance(project).isQualifiedName(inputString)) {
return "This is not a valid Java qualified name";
}
return null;
}

@RequiredUIAccess
@Override
public boolean checkInput(String inputString) {
return true;
}

@RequiredUIAccess
@Override
public boolean canClose(String inputString) {
return !StringUtil.isEmptyOrSpaces(inputString) && getErrorText(inputString) == null;
}
});
}
if (level.isAtLeast(LanguageLevel.JDK_1_5)) {
builder.addKind(JavaLocalize.titleEnum(), AllIcons.Nodes.Enum, JavaTemplateUtil.INTERNAL_ENUM_TEMPLATE_NAME);
builder.addKind(JavaLocalize.titleAnnotation(), AllIcons.Nodes.Annotationtype, JavaTemplateUtil.INTERNAL_ANNOTATION_TYPE_TEMPLATE_NAME);

@Override
protected Class<? extends ModuleExtension> getModuleExtensionClass() {
return JavaModuleExtension.class;
}

for (FileTemplate template : FileTemplateManager.getInstance(project).getAllTemplates()) {
final JavaCreateFromTemplateHandler handler = new JavaCreateFromTemplateHandler();
if (handler.handlesTemplate(template) && JavaCreateFromTemplateHandler.canCreate(directory)) {
builder.addKind(LocalizeValue.of(template.getName()), JavaFileType.INSTANCE.getIcon(), template.getName());
}
@Nonnull
@Override
protected LocalizeValue getErrorTitle() {
return JavaCoreLocalize.titleCannotCreateClass();
}

builder.setValidator(new InputValidatorEx() {
@Override
public String getErrorText(String inputString) {
if (inputString.length() > 0 && !PsiNameHelper.getInstance(project).isQualifiedName(inputString)) {
return "This is not a valid Java qualified name";
}
return null;
}

@RequiredUIAccess
@Override
public boolean checkInput(String inputString) {
return true;
}

@RequiredUIAccess
@Override
public boolean canClose(String inputString) {
return !StringUtil.isEmptyOrSpaces(inputString) && getErrorText(inputString) == null;
}
});
}

@Override
protected Class<? extends ModuleExtension> getModuleExtensionClass() {
return JavaModuleExtension.class;
}

@Nonnull
@Override
protected LocalizeValue getErrorTitle() {
return JavaCoreLocalize.titleCannotCreateClass();
}

@Nonnull
@Override
protected LocalizeValue getActionName(PsiDirectory directory, String newName, String templateName) {
return JavaCoreLocalize.progressCreatingClass(StringUtil.getQualifiedName(JavaDirectoryService.getInstance().getPackage(directory).getQualifiedName(), newName));
}

@Override
protected final PsiClass doCreate(PsiDirectory dir, String className, String templateName) throws IncorrectOperationException {
return JavaDirectoryService.getInstance().createClass(dir, className, templateName, true);
}

@Override
protected String removeExtension(String templateName, String className) {
return StringUtil.trimEnd(className, ".java");
}

@Override
protected PsiElement getNavigationElement(@Nonnull PsiClass createdElement) {
return createdElement.getLBrace();
}

@Override
protected void postProcess(PsiClass createdElement, String templateName, Map<String, String> customProperties) {
super.postProcess(createdElement, templateName, customProperties);

moveCaretAfterNameIdentifier(createdElement);
}
@Nonnull
@Override
protected LocalizeValue getActionName(PsiDirectory directory, String newName, String templateName) {
return JavaCoreLocalize.progressCreatingClass(StringUtil.getQualifiedName(
JavaDirectoryService.getInstance().getPackage(directory).getQualifiedName(),
newName
));
}

@Override
protected final PsiClass doCreate(PsiDirectory dir, String className, String templateName) throws IncorrectOperationException {
return JavaDirectoryService.getInstance().createClass(dir, className, templateName, true);
}

@Override
protected String removeExtension(String templateName, String className) {
return StringUtil.trimEnd(className, ".java");
}

@Override
protected PsiElement getNavigationElement(@Nonnull PsiClass createdElement) {
return createdElement.getLBrace();
}

@Override
@RequiredUIAccess
protected void postProcess(PsiClass createdElement, String templateName, Map<String, String> customProperties) {
super.postProcess(createdElement, templateName, customProperties);

moveCaretAfterNameIdentifier(createdElement);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import com.intellij.java.language.impl.JavaFileType;
import com.intellij.java.language.impl.psi.impl.light.AutomaticJavaModule;
import com.intellij.java.language.psi.util.PsiUtil;
import consulo.annotation.component.ActionImpl;
import consulo.dataContext.DataContext;
import consulo.fileTemplate.AttributesDefaults;
import consulo.fileTemplate.FileTemplate;
Expand All @@ -26,12 +27,11 @@
import consulo.ide.action.CreateFromTemplateActionBase;
import consulo.java.localize.JavaLocalize;
import consulo.language.content.LanguageContentFolderScopes;
import consulo.language.editor.LangDataKeys;
import consulo.language.psi.PsiDirectory;
import consulo.language.psi.PsiElement;
import consulo.language.psi.PsiFile;
import consulo.language.psi.scope.GlobalSearchScope;
import consulo.language.psi.search.FilenameIndex;
import consulo.language.util.ModuleUtilCore;
import consulo.module.Module;
import consulo.module.content.ProjectFileIndex;
import consulo.module.content.ProjectRootManager;
Expand All @@ -49,51 +49,67 @@
import static com.intellij.java.language.psi.PsiJavaModule.MODULE_INFO_CLASS;
import static com.intellij.java.language.psi.PsiJavaModule.MODULE_INFO_FILE;

@ActionImpl(id = "NewModuleInfo")
public class CreateModuleInfoAction extends CreateFromTemplateActionBase {
public CreateModuleInfoAction() {
super(JavaLocalize.actionCreateNewModuleInfoTitle(), JavaLocalize.actionCreateNewModuleInfoDescription(), JavaFileType.INSTANCE.getIcon());
}

@Override
public void update(@Nonnull AnActionEvent e) {
if (!e.getPresentation().isVisible()) {
return;
public CreateModuleInfoAction() {
super(
JavaLocalize.actionCreateNewModuleInfoTitle(),
JavaLocalize.actionCreateNewModuleInfoDescription(),
JavaFileType.INSTANCE.getIcon()
);
}
DataContext ctx = e.getDataContext();
boolean available = Optional.ofNullable(ctx.getData(IdeView.KEY)).map(view -> getTargetDirectory(ctx, view)).filter(PsiUtil::isLanguageLevel9OrHigher).map
(ModuleUtilCore::findModuleForPsiElement).map(module -> FilenameIndex.getVirtualFilesByName(module.getProject(), MODULE_INFO_FILE, GlobalSearchScope.moduleScope(module)).isEmpty()).orElse(false);
e.getPresentation().setEnabledAndVisible(available);
}

@Nullable
@Override
protected PsiDirectory getTargetDirectory(DataContext ctx, IdeView view) {
PsiDirectory[] directories = view.getDirectories();
if (directories.length == 1) {
PsiDirectory psiDir = directories[0];
VirtualFile vDir = psiDir.getVirtualFile();
ProjectFileIndex index = ProjectRootManager.getInstance(psiDir.getProject()).getFileIndex();
if (vDir.equals(index.getSourceRootForFile(vDir)) && index.isUnderContentFolderType(vDir, LanguageContentFolderScopes.onlyProduction())) {
return psiDir;
}
@Override
public void update(@Nonnull AnActionEvent e) {
if (!e.getPresentation().isVisible()) {
return;
}
DataContext ctx = e.getDataContext();
boolean available = Optional.ofNullable(ctx.getData(IdeView.KEY))
.map(view -> getTargetDirectory(ctx, view))
.filter(PsiUtil::isLanguageLevel9OrHigher)
.map(PsiElement::getModule)
.map(
module -> FilenameIndex.getVirtualFilesByName(
module.getProject(),
MODULE_INFO_FILE,
GlobalSearchScope.moduleScope(module)
).isEmpty()
)
.orElse(false);
e.getPresentation().setEnabledAndVisible(available);
}

return null;
}
@Nullable
@Override
protected PsiDirectory getTargetDirectory(DataContext ctx, IdeView view) {
PsiDirectory[] directories = view.getDirectories();
if (directories.length == 1) {
PsiDirectory psiDir = directories[0];
VirtualFile vDir = psiDir.getVirtualFile();
ProjectFileIndex index = ProjectRootManager.getInstance(psiDir.getProject()).getFileIndex();
if (vDir.equals(index.getSourceRootForFile(vDir))
&& index.isUnderContentFolderType(vDir, LanguageContentFolderScopes.onlyProduction())) {
return psiDir;
}
}

return null;
}

@Override
protected FileTemplate getTemplate(@Nonnull Project project, @Nonnull PsiDirectory dir) {
return FileTemplateManager.getInstance(project).getInternalTemplate(INTERNAL_MODULE_INFO_TEMPLATE_NAME);
}
@Override
protected FileTemplate getTemplate(@Nonnull Project project, @Nonnull PsiDirectory dir) {
return FileTemplateManager.getInstance(project).getInternalTemplate(INTERNAL_MODULE_INFO_TEMPLATE_NAME);
}

@Override
protected AttributesDefaults getAttributesDefaults(@Nonnull DataContext ctx) {
return new AttributesDefaults(MODULE_INFO_CLASS).withFixedName(true);
}
@Override
protected AttributesDefaults getAttributesDefaults(@Nonnull DataContext ctx) {
return new AttributesDefaults(MODULE_INFO_CLASS).withFixedName(true);
}

@Override
protected Map<String, String> getLiveTemplateDefaults(@Nonnull DataContext ctx, @Nonnull PsiFile file) {
Module module = ctx.getData(LangDataKeys.MODULE);
return Collections.singletonMap("MODULE_NAME", module != null ? AutomaticJavaModule.moduleName(module.getName()) : "module_name");
}
@Override
protected Map<String, String> getLiveTemplateDefaults(@Nonnull DataContext ctx, @Nonnull PsiFile file) {
Module module = ctx.getData(Module.KEY);
return Collections.singletonMap("MODULE_NAME", module != null ? AutomaticJavaModule.moduleName(module.getName()) : "module_name");
}
}
Loading
Loading