From 3ec4138207d01d21dfd0ae1788e4b9d36f2f3ce6 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 30 Mar 2011 15:39:59 +0200 Subject: [PATCH] groovy create interface in interface's extends clause, more apt name --- .../jetbrains/plugins/groovy/GroovyBundle.properties | 1 + .../annotator/intentions/CreateClassActionBase.java | 11 ++++++++++- .../groovy/annotator/intentions/CreateClassFix.java | 3 +-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/GroovyBundle.properties b/plugins/groovy/src/org/jetbrains/plugins/groovy/GroovyBundle.properties index 061901668483..3f1095fbe9e6 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/GroovyBundle.properties +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/GroovyBundle.properties @@ -167,6 +167,7 @@ import.what=Import ''{0}'' import.class=Import Class create.class.family.name=Create Class create.class.text=Create Class ''{0}'' +create.interface.text=Create Interface ''{0}'' dynamize.invalid.interface.text=Dynamize invalid interface instantiation dynamize.invalid.interface.family.name=Dynamize invalid code class.to.import.chooser.title=Choose class to import diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/CreateClassActionBase.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/CreateClassActionBase.java index efa93c88e7fb..8830fc1dce88 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/CreateClassActionBase.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/CreateClassActionBase.java @@ -33,6 +33,9 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.GroovyBundle; import org.jetbrains.plugins.groovy.actions.GroovyTemplatesFactory; import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrExtendsClause; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrImplementsClause; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrInterfaceDefinition; /** * @author ilyas @@ -47,7 +50,8 @@ public abstract class CreateClassActionBase implements IntentionAction { @NotNull public String getText() { - return GroovyBundle.message("create.class.text", myRefElement.getReferenceName()); + String referenceName = myRefElement.getReferenceName(); + return shouldCreateInterface() ? GroovyBundle.message("create.interface.text", referenceName) : GroovyBundle.message("create.class.text", referenceName); } @NotNull @@ -63,6 +67,11 @@ public abstract class CreateClassActionBase implements IntentionAction { return true; } + protected boolean shouldCreateInterface() { + PsiElement parent = myRefElement.getParent(); + return parent instanceof GrImplementsClause || parent instanceof GrExtendsClause && parent.getParent() instanceof GrInterfaceDefinition; + } + public static PsiClass createClassByType(final PsiDirectory directory, final String name, final PsiManager manager, 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 dde6cd0d67f8..f5771ff8c91f 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 @@ -35,7 +35,6 @@ 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; @@ -111,7 +110,7 @@ public abstract class CreateClassFix { PsiDirectory targetDirectory = getTargetDirectory(project, qualifier, name, module); if (targetDirectory == null) return; - String templateName = myRefElement.getParent() instanceof GrImplementsClause ? NewGroovyClassAction.GROOVY_INTERFACE : NewGroovyClassAction.GROOVY_CLASS; + String templateName = shouldCreateInterface() ? NewGroovyClassAction.GROOVY_INTERFACE : NewGroovyClassAction.GROOVY_CLASS; PsiClass targetClass = createClassByType(targetDirectory, name, manager, myRefElement, templateName); if (targetClass != null) { addImportForClass(groovyFile, qualifier, targetClass);