diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ClassKind.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ClassKind.java new file mode 100644 index 000000000000..fd1c7e0fa75f --- /dev/null +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ClassKind.java @@ -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(); +} diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassKind.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassKind.java index 5aa7b63cfb16..1f78bbab94ab 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassKind.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassKind.java @@ -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; } diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateClassDialog.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateClassDialog.java index e21f032c5d2e..a9a6d60b759a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateClassDialog.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateClassDialog.java @@ -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); diff --git a/plugins/groovy/groovy-psi/gen/icons/JetgroovyIcons.java b/plugins/groovy/groovy-psi/gen/icons/JetgroovyIcons.java index d540e46e3998..622af34de0fb 100644 --- a/plugins/groovy/groovy-psi/gen/icons/JetgroovyIcons.java +++ b/plugins/groovy/groovy-psi/gen/icons/JetgroovyIcons.java @@ -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 } diff --git a/plugins/groovy/groovy-psi/resources/fileTemplates/j2ee/GroovyTrait.groovy.ft b/plugins/groovy/groovy-psi/resources/fileTemplates/j2ee/GroovyTrait.groovy.ft new file mode 100644 index 000000000000..f2d385d675e0 --- /dev/null +++ b/plugins/groovy/groovy-psi/resources/fileTemplates/j2ee/GroovyTrait.groovy.ft @@ -0,0 +1,7 @@ +#if (${PACKAGE_NAME} && $PACKAGE_NAME != "" )package ${PACKAGE_NAME} +#end + +#parse("File Header.java") +public trait ${NAME} { + +} \ No newline at end of file diff --git a/plugins/groovy/groovy-psi/resources/fileTemplates/j2ee/GroovyTrait.groovy.html b/plugins/groovy/groovy-psi/resources/fileTemplates/j2ee/GroovyTrait.groovy.html new file mode 100644 index 000000000000..42e0eee678e0 --- /dev/null +++ b/plugins/groovy/groovy-psi/resources/fileTemplates/j2ee/GroovyTrait.groovy.html @@ -0,0 +1,30 @@ + + + + + + + + +
+ + This is a built-in template used each time you create a + Groovy trait + +
+ + \ No newline at end of file diff --git a/plugins/groovy/groovy-psi/resources/icons/groovy/trait.png b/plugins/groovy/groovy-psi/resources/icons/groovy/trait.png new file mode 100644 index 000000000000..332a16437c69 Binary files /dev/null and b/plugins/groovy/groovy-psi/resources/icons/groovy/trait.png differ diff --git a/plugins/groovy/groovy-psi/resources/icons/groovy/trait@2x.png b/plugins/groovy/groovy-psi/resources/icons/groovy/trait@2x.png new file mode 100644 index 000000000000..8f2683c19658 Binary files /dev/null and b/plugins/groovy/groovy-psi/resources/icons/groovy/trait@2x.png differ diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/GroovyQuickFixFactory.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/GroovyQuickFixFactory.java index 5574cd9f7758..edb0ebb4aff5 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/GroovyQuickFixFactory.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/GroovyQuickFixFactory.java @@ -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); diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/untypedUnresolvedAccess/GrUnresolvedAccessChecker.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/untypedUnresolvedAccess/GrUnresolvedAccessChecker.java index e0c2409dc5cd..1ea9e6becc53 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/untypedUnresolvedAccess/GrUnresolvedAccessChecker.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/untypedUnresolvedAccess/GrUnresolvedAccessChecker.java @@ -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); } } } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/GrCreateClassKind.groovy b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/GrCreateClassKind.groovy new file mode 100644 index 000000000000..87285024e237 --- /dev/null +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/GrCreateClassKind.groovy @@ -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; + } +} diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/GrTypeDefinitionImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/GrTypeDefinitionImpl.java index bc52bd696eb9..b54b7a8e78f8 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/GrTypeDefinitionImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/GrTypeDefinitionImpl.java @@ -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