From 53fbe15288d69c3f35a14bcef08d5fc5125540e7 Mon Sep 17 00:00:00 2001 From: Max Medvedev Date: Wed, 28 May 2014 10:46:16 +0400 Subject: [PATCH] IDEA-125556 New Groovy class dialog contains trait option IDEA-125577 new icons for Groovy traits --- .../daemon/impl/quickfix/ClassKind.java | 23 +++++++++++ .../daemon/impl/quickfix/CreateClassKind.java | 3 +- .../intention/impl/CreateClassDialog.java | 4 +- .../groovy-psi/gen/icons/JetgroovyIcons.java | 1 + .../fileTemplates/j2ee/GroovyTrait.groovy.ft | 7 ++++ .../j2ee/GroovyTrait.groovy.html | 30 ++++++++++++++ .../resources/icons/groovy/trait.png | Bin 0 -> 1200 bytes .../resources/icons/groovy/trait@2x.png | Bin 0 -> 1490 bytes .../codeInspection/GroovyQuickFixFactory.java | 4 +- .../GrUnresolvedAccessChecker.java | 20 ++++----- .../groovy/lang/GrCreateClassKind.groovy | 39 ++++++++++++++++++ .../typedef/GrTypeDefinitionImpl.java | 4 +- .../groovy/actions/GroovyTemplates.java | 1 + .../groovy/actions/NewGroovyClassAction.java | 9 +++- .../intentions/CreateClassActionBase.java | 8 ++-- .../annotator/intentions/CreateClassFix.java | 10 +++-- .../GroovyQuickFixFactoryImpl.java | 4 +- .../ConvertMapToClassIntention.java | 8 ++-- 18 files changed, 144 insertions(+), 31 deletions(-) create mode 100644 java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ClassKind.java create mode 100644 plugins/groovy/groovy-psi/resources/fileTemplates/j2ee/GroovyTrait.groovy.ft create mode 100644 plugins/groovy/groovy-psi/resources/fileTemplates/j2ee/GroovyTrait.groovy.html create mode 100644 plugins/groovy/groovy-psi/resources/icons/groovy/trait.png create mode 100644 plugins/groovy/groovy-psi/resources/icons/groovy/trait@2x.png create mode 100644 plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/GrCreateClassKind.groovy 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 0000000000000000000000000000000000000000..332a16437c69ae519f58bf3ccb9c020c72b85ba4 GIT binary patch literal 1200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m=!ZaB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxR5#hc&_u!9QqR!T z(8R(}N5ROz&{*HVSl`fC*U-qyz|zXlQ~?TIxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr7KMf<|~|UP^v> zu_jo#udkJ7UU5lcUUI6Zi>(sS0KLr26e}kK12Z#MGecJsM@K_LS7S>H3j<3xM@v^@ zb0bSfR|A+{m;B_?+|;}hnBEkGUL%}(K`9}(0BEyIYEfocYKmJ?ey#%8$5xp*-D2v7 z(>$o&6x?nxz^PXs=oo!ayduRjObD2GKumb51#;l&J~a=R*o%Ov`ryICQy3T+RXtrC zLn>}1{rUgjo>{el)n&{57f+dj{yNBT9@)e4rH1X%Q-_#{m4SbHS+#EHozk78c1-uw zfip*X!oT0Iudj@+t)2Vr*X!Bx4taLMAvSSS+*=wac20aK&&Uy^d`Oq)(qxYBOadR8 zJL>=c7krxU=H|vWBRukfAG4Fh4fA68!%yc<4>WmM`NGg*nPn2c%LYb|ZMRi!8f92z z8@`#nufK6>^VEZ87pFN!#7VgFiZKi5B`~xt-Z064S=*YMSz26sM(;wl!whUbC;ta@ z`0^cYu>b!*!JJ{ng$*YkerLMF(4lzaNr%yawHJAp%j{yD|Nqbb)7-uBO$@W@9Xw|- zP7@NZ`TtLLiqFALPIUb*H!v_WWKNy8&nrE2 QFQ^RhboFyt=akR{0Qzy6(EtDd literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8f2683c19658a12143389b70c9f5c305b5b31e38 GIT binary patch literal 1490 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%!-*I5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0;1ij}jGsf($rsj;hxqobjrtFeWXnT4f^o0$tR z=*z*Q}aq-dQ%X3O>pW3rG(r9pv^9+MVV!(DQ-pixe8z(TV>*Qiy=<) zpn6kqyTu5nUVWfr^g;286wfdrVB!HW;i(qLfv5Y_JYZrk0;cNA-b+?9Ffh4$x;TbZ z+!Iu@QkN~XS&%nthw;Xs#R}~UuBnGt&*5TM-`2D>rm&SGDKTA9!_16*TT{Z~ zh@0`697@MU&E_fnn7+pI#u3^3(P@wK=Dbj`?rzQhG41%fGu8R~zNeMBCHEYR_F~?% zu|+oZUBSh`#~t%KJYD3SzQ0uN|IvNJZH*F7)lQo&Pk0+ns~?eDNn`tg@8 z<|d}c94?zA*h$}1h~C>N=V4aPkX{}Z(qjK&VwZZY_1bGeANh`7pQ6FK_sfODfgD+x zZik;%y%T4>@Ipf*S0P*O@$Zh}sdF$*Orhl6M;y1_7 z*)k$|pA)9a+1z)UDDYyfZ%2f$sY=3vUk}a~FHZgY=>^ZfHL^E;o%j=;;a@*t(?f06 zc}LqM(CaLoGz<= z(BZ9SLfKtyt^<>FmU*%1gt}_jPd-(;po{TjQqlL#6+$9!nTw1&m*0MH`k2ev$5RXi zj@-Yn#F#NxLn@=uqWJAJ)rQr>v2in8pQ#2|LYY z;-eQagb6IaIfpU4{Ce4zk|p1&1yrTeE^f({vb1gpKC(-LRq}}W5xufE&*p}5FRi?@ zQ@G<@+wnha&fm8v*RB1eo$^>gTe~ HDWM4f-E%1r literal 0 HcmV?d00001 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