IDEA-125556 New Groovy class dialog contains trait option

IDEA-125577 new icons for Groovy traits
This commit is contained in:
Max Medvedev
2014-05-29 17:42:30 +04:00
parent 90ec82d0ab
commit 53fbe15288
18 changed files with 144 additions and 31 deletions
@@ -0,0 +1,23 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.codeInsight.daemon.impl.quickfix;
/**
* Created by Max Medvedev on 28/05/14
*/
public interface ClassKind {
String getDescription();
}
@@ -20,7 +20,7 @@ import com.intellij.codeInsight.daemon.QuickFixBundle;
/**
* @author ven
*/
public enum CreateClassKind {
public enum CreateClassKind implements ClassKind {
CLASS (QuickFixBundle.message("create.class")),
INTERFACE (QuickFixBundle.message("create.interface")),
ENUM (QuickFixBundle.message("create.enum")),
@@ -32,6 +32,7 @@ public enum CreateClassKind {
myDescription = description;
}
@Override
public String getDescription() {
return myDescription;
}
@@ -17,7 +17,7 @@ package com.intellij.codeInsight.intention.impl;
import com.intellij.CommonBundle;
import com.intellij.codeInsight.CodeInsightBundle;
import com.intellij.codeInsight.daemon.impl.quickfix.CreateClassKind;
import com.intellij.codeInsight.daemon.impl.quickfix.ClassKind;
import com.intellij.ide.util.PackageUtil;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
@@ -88,7 +88,7 @@ public class CreateClassDialog extends DialogWrapper {
@NotNull String title,
@NotNull String targetClassName,
@NotNull String targetPackageName,
@NotNull CreateClassKind kind,
@NotNull ClassKind kind,
boolean classNameEditable,
@Nullable Module defaultModule) {
super(project, true);
@@ -57,6 +57,7 @@ public class JetgroovyIcons {
public static final Icon Interface = load("/icons/groovy/interface.png"); // 16x16
public static final Icon Method = load("/icons/groovy/method.png"); // 16x16
public static final Icon Property = load("/icons/groovy/property.png"); // 16x16
public static final Icon Trait = load("/icons/groovy/trait.png"); // 16x16
public static final Icon Variable = load("/icons/groovy/variable.png"); // 16x16
}
@@ -0,0 +1,7 @@
#if (${PACKAGE_NAME} && $PACKAGE_NAME != "" )package ${PACKAGE_NAME}
#end
#parse("File Header.java")
public trait ${NAME} {
}
@@ -0,0 +1,30 @@
<!--
~ Copyright 2000-20014 JetBrains s.r.o.
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
~
-->
<html>
<body>
<table border="0" cellpadding="2" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
<tr>
<td colspan="3">
<font face="verdana" size="-1">
This is a built-in template used each time you create a
Groovy trait
</font>
</td>
</tr>
</table>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -15,12 +15,12 @@
*/
package org.jetbrains.plugins.groovy.codeInspection;
import com.intellij.codeInsight.daemon.impl.quickfix.CreateClassKind;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiType;
import org.jetbrains.plugins.groovy.lang.GrCreateClassKind;
import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgumentLabel;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrNamedArgument;
@@ -44,7 +44,7 @@ public abstract class GroovyQuickFixFactory {
public abstract IntentionAction createClassFromNewAction(GrNewExpression parent);
public abstract IntentionAction createClassFixAction(GrReferenceElement element, CreateClassKind anInterface);
public abstract IntentionAction createClassFixAction(GrReferenceElement element, GrCreateClassKind anInterface);
public abstract IntentionAction createCreateFieldFromUsageFix(GrReferenceExpression expr);
@@ -19,7 +19,6 @@ import com.intellij.codeHighlighting.HighlightDisplayLevel;
import com.intellij.codeInsight.daemon.HighlightDisplayKey;
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
import com.intellij.codeInsight.daemon.impl.HighlightInfoType;
import com.intellij.codeInsight.daemon.impl.quickfix.CreateClassKind;
import com.intellij.codeInsight.daemon.impl.quickfix.QuickFixAction;
import com.intellij.codeInsight.intention.EmptyIntentionAction;
import com.intellij.codeInsight.intention.QuickFixFactory;
@@ -41,11 +40,12 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.groovy.GroovyBundle;
import org.jetbrains.plugins.groovy.annotator.GrHighlightUtil;
import org.jetbrains.plugins.groovy.annotator.intentions.*;
import org.jetbrains.plugins.groovy.annotator.intentions.QuickfixUtil;
import org.jetbrains.plugins.groovy.codeInspection.GroovyQuickFixFactory;
import org.jetbrains.plugins.groovy.extensions.GroovyUnresolvedHighlightFilter;
import org.jetbrains.plugins.groovy.findUsages.MissingMethodAndPropertyUtil;
import org.jetbrains.plugins.groovy.highlighter.DefaultHighlighter;
import org.jetbrains.plugins.groovy.lang.GrCreateClassKind;
import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GroovyDocPsiElement;
import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes;
import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement;
@@ -534,26 +534,26 @@ public class GrUnresolvedAccessChecker {
else if (canBeClassOrPackage(refElement)) {
if (shouldBeInterface(refElement)) {
QuickFixAction.registerQuickFixAction(info, GroovyQuickFixFactory.getInstance().createClassFixAction(refElement,
CreateClassKind.INTERFACE), key);
GrCreateClassKind.INTERFACE), key);
}
else if (shouldBeClass(refElement)) {
QuickFixAction.registerQuickFixAction(info, GroovyQuickFixFactory.getInstance().createClassFixAction(refElement, CreateClassKind.CLASS), key);
QuickFixAction.registerQuickFixAction(info, GroovyQuickFixFactory.getInstance().createClassFixAction(refElement, GrCreateClassKind.CLASS), key);
QuickFixAction.registerQuickFixAction(info, GroovyQuickFixFactory.getInstance().createClassFixAction(refElement,
CreateClassKind.ENUM), key);
GrCreateClassKind.ENUM), key);
}
else if (shouldBeAnnotation(refElement)) {
QuickFixAction.registerQuickFixAction(info, GroovyQuickFixFactory.getInstance().createClassFixAction(refElement,
CreateClassKind.ANNOTATION), key);
GrCreateClassKind.ANNOTATION), key);
}
else {
QuickFixAction.registerQuickFixAction(info, GroovyQuickFixFactory.getInstance().createClassFixAction(refElement,
CreateClassKind.CLASS), key);
GrCreateClassKind.CLASS), key);
QuickFixAction.registerQuickFixAction(info, GroovyQuickFixFactory.getInstance().createClassFixAction(refElement,
CreateClassKind.INTERFACE), key);
GrCreateClassKind.INTERFACE), key);
QuickFixAction.registerQuickFixAction(info, GroovyQuickFixFactory.getInstance().createClassFixAction(refElement,
CreateClassKind.ENUM), key);
GrCreateClassKind.ENUM), key);
QuickFixAction.registerQuickFixAction(info, GroovyQuickFixFactory.getInstance().createClassFixAction(refElement,
CreateClassKind.ANNOTATION), key);
GrCreateClassKind.ANNOTATION), key);
}
}
}
@@ -0,0 +1,39 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.plugins.groovy.lang
import com.intellij.codeInsight.daemon.impl.quickfix.ClassKind
/**
* Created by Max Medvedev on 28/05/14
*/
enum GrCreateClassKind implements ClassKind {
CLASS ("class"),
INTERFACE ("interface"),
TRAIT ("trait"),
ENUM ("enum"),
ANNOTATION("annotation");
private final String myDescription;
public GrCreateClassKind(final String description) {
myDescription = description;
}
public String getDescription() {
return myDescription;
}
}
@@ -68,8 +68,8 @@ import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyFileImpl;
import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil;
import org.jetbrains.plugins.groovy.lang.psi.stubs.GrTypeDefinitionStub;
import org.jetbrains.plugins.groovy.lang.psi.util.GrClassImplUtil;
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
import org.jetbrains.plugins.groovy.lang.psi.util.GroovyRunnerPsiUtil;
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
import javax.swing.*;
import java.util.ArrayList;
@@ -644,6 +644,8 @@ public abstract class GrTypeDefinitionImpl extends GrStubElementBase<GrTypeDefin
private Icon getIconInner() {
if (isAnnotationType()) return JetgroovyIcons.Groovy.AnnotationType;
if (isTrait()) return JetgroovyIcons.Groovy.Trait;
if (isInterface()) return JetgroovyIcons.Groovy.Interface;
if (isEnum()) return JetgroovyIcons.Groovy.Enum;
@@ -23,6 +23,7 @@ import org.jetbrains.annotations.NonNls;
public interface GroovyTemplates {
@NonNls String GROOVY_CLASS = "GroovyClass.groovy";
@NonNls String GROOVY_INTERFACE = "GroovyInterface.groovy";
@NonNls String GROOVY_TRAIT = "GroovyTrait.groovy";
@NonNls String GROOVY_ENUM = "GroovyEnum.groovy";
@NonNls String GROOVY_ANNOTATION = "GroovyAnnotation.groovy";
@NonNls String GROOVY_SCRIPT = "GroovyScript.groovy";
@@ -37,6 +37,7 @@ import icons.JetgroovyIcons;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.groovy.GroovyBundle;
import org.jetbrains.plugins.groovy.GroovyFileType;
import org.jetbrains.plugins.groovy.config.GroovyConfigUtils;
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition;
import org.jetbrains.plugins.groovy.util.LibrariesUtil;
@@ -53,7 +54,13 @@ public class NewGroovyClassAction extends JavaCreateTemplateInPackageAction<GrTy
builder
.setTitle(GroovyBundle.message("newclass.dlg.title"))
.addKind("Class", JetgroovyIcons.Groovy.Class, GroovyTemplates.GROOVY_CLASS)
.addKind("Interface", JetgroovyIcons.Groovy.Interface, GroovyTemplates.GROOVY_INTERFACE)
.addKind("Interface", JetgroovyIcons.Groovy.Interface, GroovyTemplates.GROOVY_INTERFACE);
if (GroovyConfigUtils.getInstance().isVersionAtLeast(directory, GroovyConfigUtils.GROOVY2_3, true)) {
builder.addKind("Trait", JetgroovyIcons.Groovy.Trait, GroovyTemplates.GROOVY_TRAIT);
}
builder
.addKind("Enum", JetgroovyIcons.Groovy.Enum, GroovyTemplates.GROOVY_ENUM)
.addKind("Annotation", JetgroovyIcons.Groovy.AnnotationType, GroovyTemplates.GROOVY_ANNOTATION);
@@ -16,7 +16,6 @@
package org.jetbrains.plugins.groovy.annotator.intentions;
import com.intellij.codeInsight.daemon.impl.quickfix.CreateClassKind;
import com.intellij.codeInsight.intention.impl.CreateClassDialog;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
@@ -36,6 +35,7 @@ import org.jetbrains.plugins.groovy.GroovyBundle;
import org.jetbrains.plugins.groovy.actions.GroovyTemplatesFactory;
import org.jetbrains.plugins.groovy.intentions.base.Intention;
import org.jetbrains.plugins.groovy.intentions.base.PsiElementPredicate;
import org.jetbrains.plugins.groovy.lang.GrCreateClassKind;
import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition;
@@ -43,12 +43,12 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefini
* @author ilyas
*/
public abstract class CreateClassActionBase extends Intention {
private final CreateClassKind myType;
private final GrCreateClassKind myType;
protected final GrReferenceElement myRefElement;
private static final Logger LOG = Logger.getInstance("#org.jetbrains.plugins.groovy.annotator.intentions.CreateClassActionBase");
public CreateClassActionBase(CreateClassKind type, GrReferenceElement refElement) {
public CreateClassActionBase(GrCreateClassKind type, GrReferenceElement refElement) {
myType = type;
myRefElement = refElement;
}
@@ -88,7 +88,7 @@ public abstract class CreateClassActionBase extends Intention {
}
protected CreateClassKind getType() {
protected GrCreateClassKind getType() {
return myType;
}
@@ -17,7 +17,6 @@
package org.jetbrains.plugins.groovy.annotator.intentions;
import com.intellij.codeInsight.FileModificationService;
import com.intellij.codeInsight.daemon.impl.quickfix.CreateClassKind;
import com.intellij.codeInsight.hint.HintManager;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.openapi.application.AccessToken;
@@ -37,6 +36,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.groovy.actions.GroovyTemplates;
import org.jetbrains.plugins.groovy.intentions.GroovyIntentionsBundle;
import org.jetbrains.plugins.groovy.intentions.base.IntentionUtils;
import org.jetbrains.plugins.groovy.lang.GrCreateClassKind;
import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement;
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile;
import org.jetbrains.plugins.groovy.lang.psi.GroovyFileBase;
@@ -59,7 +59,7 @@ import org.jetbrains.plugins.groovy.template.expressions.ChooseTypeExpression;
public abstract class CreateClassFix {
public static IntentionAction createClassFromNewAction(final GrNewExpression expression) {
return new CreateClassActionBase(CreateClassKind.CLASS, expression.getReferenceElement()) {
return new CreateClassActionBase(GrCreateClassKind.CLASS, expression.getReferenceElement()) {
@Override
protected void processIntention(@NotNull PsiElement element, Project project, Editor editor) throws IncorrectOperationException {
@@ -144,7 +144,7 @@ public abstract class CreateClassFix {
}
}
public static IntentionAction createClassFixAction(final GrReferenceElement refElement, CreateClassKind type) {
public static IntentionAction createClassFixAction(final GrReferenceElement refElement, GrCreateClassKind type) {
return new CreateClassActionBase(type, refElement) {
@Override
protected void processIntention(@NotNull PsiElement element, Project project, Editor editor) throws IncorrectOperationException {
@@ -292,8 +292,10 @@ public abstract class CreateClassFix {
});
}
private static String getTemplateName(CreateClassKind createClassKind) {
private static String getTemplateName(GrCreateClassKind createClassKind) {
switch (createClassKind) {
case TRAIT:
return GroovyTemplates.GROOVY_TRAIT;
case ENUM:
return GroovyTemplates.GROOVY_ENUM;
case CLASS:
@@ -15,7 +15,6 @@
*/
package org.jetbrains.plugins.groovy.codeInspection;
import com.intellij.codeInsight.daemon.impl.quickfix.CreateClassKind;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.psi.PsiClass;
@@ -28,6 +27,7 @@ import org.jetbrains.plugins.groovy.codeInspection.bugs.AddMethodFix;
import org.jetbrains.plugins.groovy.codeInspection.confusing.ReplaceWithImportFix;
import org.jetbrains.plugins.groovy.codeInspection.local.RemoveUnusedGrParameterFix;
import org.jetbrains.plugins.groovy.dsl.InvestigateFix;
import org.jetbrains.plugins.groovy.lang.GrCreateClassKind;
import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgumentLabel;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrNamedArgument;
@@ -60,7 +60,7 @@ public class GroovyQuickFixFactoryImpl extends GroovyQuickFixFactory {
}
@Override
public IntentionAction createClassFixAction(GrReferenceElement element, CreateClassKind anInterface) {
public IntentionAction createClassFixAction(GrReferenceElement element, GrCreateClassKind anInterface) {
return CreateClassFix.createClassFixAction(element, anInterface);
}
@@ -15,12 +15,11 @@
*/
package org.jetbrains.plugins.groovy.intentions.conversions;
import com.intellij.codeInsight.daemon.impl.quickfix.CreateClassKind;
import com.intellij.codeInsight.intention.impl.CreateClassDialog;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.module.ModuleUtil;
import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.Messages;
@@ -41,6 +40,7 @@ import org.jetbrains.plugins.groovy.intentions.GroovyIntentionsBundle;
import org.jetbrains.plugins.groovy.intentions.base.Intention;
import org.jetbrains.plugins.groovy.intentions.base.IntentionUtils;
import org.jetbrains.plugins.groovy.intentions.base.PsiElementPredicate;
import org.jetbrains.plugins.groovy.lang.GrCreateClassKind;
import org.jetbrains.plugins.groovy.lang.psi.GroovyFileBase;
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory;
import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult;
@@ -82,8 +82,8 @@ public class ConvertMapToClassIntention extends Intention {
final String packageName = file instanceof GroovyFileBase ? ((GroovyFileBase)file).getPackageName() : "";
final CreateClassDialog dialog =
new CreateClassDialog(project, GroovyBundle.message("create.class.family.name"), "", packageName, CreateClassKind.CLASS, true,
ModuleUtil.findModuleForPsiElement(element));
new CreateClassDialog(project, GroovyBundle.message("create.class.family.name"), "", packageName, GrCreateClassKind.CLASS, true,
ModuleUtilCore.findModuleForPsiElement(element));
dialog.show();
if (dialog.getExitCode() != DialogWrapper.OK_EXIT_CODE) return;