mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-61541 Alt-enter interface creation feature request
This commit is contained in:
@@ -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<GrTypeDefinition> 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<GrTy
|
||||
protected void buildDialog(Project project, PsiDirectory directory, CreateFileFromTemplateDialog.Builder builder) {
|
||||
builder
|
||||
.setTitle(GroovyBundle.message("newclass.dlg.title"))
|
||||
.addKind("Class", GroovyIcons.CLASS, "GroovyClass.groovy")
|
||||
.addKind("Interface", GroovyIcons.INTERFACE, "GroovyInterface.groovy")
|
||||
.addKind("Enum", GroovyIcons.ENUM, "GroovyEnum.groovy")
|
||||
.addKind("Annotation", GroovyIcons.ANNOTATION_TYPE, "GroovyAnnotation.groovy");
|
||||
.addKind("Class", GroovyIcons.CLASS, GROOVY_CLASS)
|
||||
.addKind("Interface", GroovyIcons.INTERFACE, GROOVY_INTERFACE)
|
||||
.addKind("Enum", GroovyIcons.ENUM, GROOVY_ENUM)
|
||||
.addKind("Annotation", GroovyIcons.ANNOTATION_TYPE, GROOVY_ANNOTATION);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+4
-4
@@ -64,16 +64,16 @@ public abstract class CreateClassActionBase implements IntentionAction {
|
||||
}
|
||||
|
||||
public static PsiClass createClassByType(final PsiDirectory directory,
|
||||
final String name,
|
||||
final PsiManager manager,
|
||||
final PsiElement contextElement) {
|
||||
final String name,
|
||||
final PsiManager manager,
|
||||
final PsiElement contextElement, final String templateName) {
|
||||
return ApplicationManager.getApplication().runWriteAction(
|
||||
new Computable<PsiClass>() {
|
||||
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);
|
||||
|
||||
+5
-2
@@ -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);
|
||||
|
||||
+2
-1
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user