From 91c92dacdcab9b0f94e18e4f630080df93298563 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 29 Mar 2011 19:33:02 +0200 Subject: [PATCH] IDEA-61541 Alt-enter interface creation feature request --- .../groovy/actions/NewGroovyClassAction.java | 13 +++++++++---- .../annotator/intentions/CreateClassActionBase.java | 8 ++++---- .../groovy/annotator/intentions/CreateClassFix.java | 7 +++++-- .../conversions/ConvertMapToClassIntention.java | 3 ++- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/NewGroovyClassAction.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/NewGroovyClassAction.java index 05ddae7713e5..a62046e2b58d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/NewGroovyClassAction.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/NewGroovyClassAction.java @@ -36,6 +36,11 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefini import org.jetbrains.plugins.groovy.util.LibrariesUtil; public class NewGroovyClassAction extends JavaCreateTemplateInPackageAction implements DumbAware { + public static final String GROOVY_CLASS = "GroovyClass.groovy"; + public static final String GROOVY_INTERFACE = "GroovyInterface.groovy"; + public static final String GROOVY_ENUM = "GroovyEnum.groovy"; + public static final String GROOVY_ANNOTATION = "GroovyAnnotation.groovy"; + public NewGroovyClassAction() { super(GroovyBundle.message("newclass.menu.action.text"), GroovyBundle.message("newclass.menu.action.description"), GroovyIcons.CLASS, true); } @@ -44,10 +49,10 @@ public class NewGroovyClassAction extends JavaCreateTemplateInPackageAction() { public PsiClass compute() { try { PsiClass targetClass = null; try { - PsiFile file = GroovyTemplatesFactory.createFromTemplate(directory, name, name + ".groovy", "GroovyClass.groovy"); + PsiFile file = GroovyTemplatesFactory.createFromTemplate(directory, name, name + ".groovy", templateName); for (PsiElement element : file.getChildren()) { if (element instanceof PsiClass) { targetClass = ((PsiClass) element); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/CreateClassFix.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/CreateClassFix.java index 46b7f9d3166d..dde6cd0d67f8 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/CreateClassFix.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/CreateClassFix.java @@ -26,6 +26,7 @@ import com.intellij.psi.*; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.groovy.GroovyBundle; +import org.jetbrains.plugins.groovy.actions.NewGroovyClassAction; import org.jetbrains.plugins.groovy.intentions.base.IntentionUtils; import org.jetbrains.plugins.groovy.lang.editor.template.expressions.ChooseTypeExpression; import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement; @@ -34,6 +35,7 @@ import org.jetbrains.plugins.groovy.lang.psi.GroovyFileBase; import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory; import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgumentList; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrNewExpression; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrImplementsClause; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrMemberOwner; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod; import org.jetbrains.plugins.groovy.lang.psi.expectedTypes.SupertypeConstraint; @@ -61,7 +63,7 @@ public abstract class CreateClassFix { PsiDirectory targetDirectory = getTargetDirectory(project, qualifier, name, module); if (targetDirectory == null) return; - PsiClass targetClass = createClassByType(targetDirectory, name, manager, myRefElement); + PsiClass targetClass = createClassByType(targetDirectory, name, manager, myRefElement, NewGroovyClassAction.GROOVY_CLASS); GrArgumentList argList = expression.getArgumentList(); if (argList != null && @@ -109,7 +111,8 @@ public abstract class CreateClassFix { PsiDirectory targetDirectory = getTargetDirectory(project, qualifier, name, module); if (targetDirectory == null) return; - PsiClass targetClass = createClassByType(targetDirectory, name, manager, myRefElement); + String templateName = myRefElement.getParent() instanceof GrImplementsClause ? NewGroovyClassAction.GROOVY_INTERFACE : NewGroovyClassAction.GROOVY_CLASS; + PsiClass targetClass = createClassByType(targetDirectory, name, manager, myRefElement, templateName); if (targetClass != null) { addImportForClass(groovyFile, qualifier, targetClass); putCursor(project, targetClass.getContainingFile(), targetClass); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/ConvertMapToClassIntention.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/ConvertMapToClassIntention.java index 35af53fcf29d..4448802b2f2d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/ConvertMapToClassIntention.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/intentions/conversions/ConvertMapToClassIntention.java @@ -32,6 +32,7 @@ import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.GroovyBundle; +import org.jetbrains.plugins.groovy.actions.NewGroovyClassAction; import org.jetbrains.plugins.groovy.annotator.intentions.CreateClassActionBase; import org.jetbrains.plugins.groovy.codeInspection.utils.ControlFlowUtils; import org.jetbrains.plugins.groovy.intentions.GroovyIntentionsBundle; @@ -93,7 +94,7 @@ public class ConvertMapToClassIntention extends Intention { final GrTypeDefinition typeDefinition = createClass(project, namedArguments, selectedPackageName, shortName); final PsiClass generatedClass = CreateClassActionBase.createClassByType( - dialog.getTargetDirectory(), typeDefinition.getName(), PsiManager.getInstance(project), map); + dialog.getTargetDirectory(), typeDefinition.getName(), PsiManager.getInstance(project), map, NewGroovyClassAction.GROOVY_CLASS); final PsiClass replaced = (PsiClass)generatedClass.replace(typeDefinition); replaceMapWithClass(project, map, replaced, replaceReturnType, variableDeclaration, methodParameter); }