IDEA-59749 groovy: provide convenience intentions "implement interface" / "create subclass"

This commit is contained in:
Maxim.Medvedev
2012-04-29 20:30:23 +04:00
parent c47155935a
commit 10eac0023e
7 changed files with 226 additions and 3 deletions
@@ -229,6 +229,7 @@ public class HighlightNamesUtil {
PsiElement endElement = aClass instanceof PsiAnonymousClass ?
((PsiAnonymousClass)aClass).getBaseClassReference() :
aClass.getImplementsList();
if (endElement == null) endElement = aClass.getNameIdentifier();
TextRange endTextRange = endElement == null ? null : endElement.getTextRange();
int end = endTextRange == null ? start : endTextRange.getEndOffset();
return new TextRange(start, end);
@@ -36,6 +36,7 @@ import com.intellij.codeInsight.template.Template;
import com.intellij.codeInsight.template.TemplateBuilderFactory;
import com.intellij.codeInsight.template.TemplateBuilderImpl;
import com.intellij.codeInsight.template.TemplateEditingAdapter;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.Result;
import com.intellij.openapi.command.WriteCommandAction;
@@ -86,6 +87,7 @@ public class CreateSubclassAction extends BaseIntentionAction {
psiClass.hasModifierProperty(PsiModifier.FINAL)) {
return false;
}
if (!isSupportedLanguage(psiClass)) return false;
final PsiMethod[] constructors = psiClass.getConstructors();
if (constructors.length > 0) {
boolean hasNonPrivateConstructor = false;
@@ -114,7 +116,11 @@ public class CreateSubclassAction extends BaseIntentionAction {
return true;
}
private static String getTitle(PsiClass psiClass) {
protected boolean isSupportedLanguage(PsiClass aClass) {
return aClass.getLanguage() == JavaLanguage.INSTANCE;
}
protected static String getTitle(PsiClass psiClass) {
return psiClass.isInterface()
? CodeInsightBundle.message("intention.implement.abstract.class.interface.text")
: psiClass.hasModifierProperty(PsiModifier.ABSTRACT)
@@ -150,7 +156,7 @@ public class CreateSubclassAction extends BaseIntentionAction {
}.execute();
}
private static void createTopLevelClass(PsiClass psiClass) {
protected void createTopLevelClass(PsiClass psiClass) {
final CreateClassDialog dlg = chooseSubclassToCreate(psiClass);
if (dlg != null) {
createSubclass(psiClass, dlg.getTargetDirectory(), dlg.getClassName());
@@ -287,7 +293,7 @@ public class CreateSubclassAction extends BaseIntentionAction {
return typeParameterList.replace(oldTypeParameterList);
}
private static void chooseAndImplement(PsiClass psiClass, Project project, PsiClass targetClass, Editor editor) {
protected static void chooseAndImplement(PsiClass psiClass, Project project, PsiClass targetClass, Editor editor) {
boolean hasNonTrivialConstructor = false;
final PsiMethod[] constructors = psiClass.getConstructors();
for (PsiMethod constructor : constructors) {