From 3ec583bb163b18759d78ac49e82b0e8f0c47935b Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 24 Aug 2016 20:33:37 +0200 Subject: [PATCH] show icon of class initializer #KT-11775 Fixed --- .../jetbrains/kotlin/idea/KotlinIconProvider.kt | 5 +++-- .../org/jetbrains/kotlin/idea/KotlinIcons.java | 1 + .../structureView/KotlinStructureViewElement.kt | 5 +++-- .../kotlin/idea/icons/classInitializerKotlin.png | Bin 0 -> 1480 bytes .../idea/icons/classInitializerKotlin@2x.png | Bin 0 -> 2105 bytes .../fileStructure/LocalElements.after | 2 ++ .../structureView/fileStructure/LocalElements.kt | 5 +++++ 7 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 idea/resources/org/jetbrains/kotlin/idea/icons/classInitializerKotlin.png create mode 100644 idea/resources/org/jetbrains/kotlin/idea/icons/classInitializerKotlin@2x.png diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIconProvider.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIconProvider.kt index 9dfbd6990c6..0a7bd2b0d7d 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIconProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIconProvider.kt @@ -23,8 +23,8 @@ import com.intellij.openapi.util.text.StringUtil import com.intellij.psi.PsiElement import com.intellij.ui.RowIcon import com.intellij.util.PlatformIcons -import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade +import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration import org.jetbrains.kotlin.idea.caches.resolve.KtLightClassForDecompiledDeclaration import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* @@ -40,7 +40,7 @@ class KotlinIconProvider : IconProvider(), DumbAware { } val result = psiElement.getBaseIcon() - if (flags and Iconable.ICON_FLAG_VISIBILITY > 0 && result != null && psiElement is KtModifierListOwner) { + if (flags and Iconable.ICON_FLAG_VISIBILITY > 0 && result != null && (psiElement is KtModifierListOwner && psiElement !is KtClassInitializer)) { val list = psiElement.modifierList return createRowIcon(result, getVisibilityIcon(list)) } @@ -114,6 +114,7 @@ class KotlinIconProvider : IconProvider(), DumbAware { KotlinIcons.PARAMETER } is KtProperty -> if (isVar) KotlinIcons.FIELD_VAR else KotlinIcons.FIELD_VAL + is KtClassInitializer -> KotlinIcons.CLASS_INITIALIZER else -> null } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIcons.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIcons.java index 507a49c1f3b..7179ef80cbb 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIcons.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIcons.java @@ -42,6 +42,7 @@ public interface KotlinIcons { Icon PARAMETER = PlatformIcons.PARAMETER_ICON; Icon FIELD_VAL = IconLoader.getIcon("/org/jetbrains/kotlin/idea/icons/field_value.png"); Icon FIELD_VAR = IconLoader.getIcon("/org/jetbrains/kotlin/idea/icons/field_variable.png"); + Icon CLASS_INITIALIZER = IconLoader.getIcon("/org/jetbrains/kotlin/idea/icons/classInitializerKotlin.png"); Icon LAUNCH = IconLoader.getIcon("/org/jetbrains/kotlin/idea/icons/kotlin_launch_configuration.png"); } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureViewElement.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureViewElement.kt index 0fc0a6dbc54..920bb1fe935 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureViewElement.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureViewElement.kt @@ -22,6 +22,7 @@ import com.intellij.navigation.ItemPresentation import com.intellij.openapi.project.DumbService import com.intellij.openapi.ui.Queryable import com.intellij.psi.NavigatablePsiElement +import com.intellij.psi.PsiElement import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor @@ -89,11 +90,11 @@ class KotlinStructureViewElement(val element: NavigatablePsiElement, is KtFile -> element.declarations is KtClass -> element.getPrimaryConstructorParameters().filter { it.hasValOrVar() } + element.declarations is KtClassOrObject -> element.declarations - is KtFunction -> element.collectLocalDeclarations() + is KtFunction, is KtClassInitializer -> element.collectLocalDeclarations() else -> emptyList() } - private fun KtFunction.collectLocalDeclarations(): List { + private fun PsiElement.collectLocalDeclarations(): List { val result = mutableListOf() acceptChildren(object : KtTreeVisitorVoid() { diff --git a/idea/resources/org/jetbrains/kotlin/idea/icons/classInitializerKotlin.png b/idea/resources/org/jetbrains/kotlin/idea/icons/classInitializerKotlin.png new file mode 100644 index 0000000000000000000000000000000000000000..4083c1fc7dd5eed3f2dbf321f542900d1d637427 GIT binary patch literal 1480 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nAI{vB1$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!uxOgGuk&``nLQqR!T z!q~`EN5ROz&{W^RQs2-(*TB%q(7?*bKmiJrfVLH-q*(>IxIyg#@@$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;Afr7I$IMft0!ZY(y z^2>`g!FqgstvvIJOA_;vQ$1a5m4K$`WoD*W8CaS+nHU;7nOM5G85+8pIk}n}SsEC* zS{NCa7`wU{!SuT1Czs}?=9R$orXch>Lm=%BN|=+_6XE>WCeO9MhC zZ0lg>pSLE?_KLj?N7bo=v)Nhsg9N7Ux|HK{DQ8pWruxTc-l#28>3G1NU!MN#_rC3) z@9`XxIQ(D1Nq+vk*w;QwL@TdkUU|2hSG${GbqSyHI*ErzYeFWh`>&OsWy_YkM8)p9 z&a3UJsTy+r?^%u%=E(i7TNb(6?`rq2nIT5D@hkInze}8WlyGk4RI#ahlRKm(78o74 z!7V1}U^B77F|cQ9X>Q=Olp9-e(hdc!@JyT^Yxqt>dADG@hi}dH{0pY17RH2%9kXUz zmwIn<&`JsEANS&$i!`pU44rPpwk_4~7;EF3tACd-h*_SP_W#O(TwXr}kKWxlD zJ@1?h=PaQNk&afj861Tg%PNY#25f(q^t-v>#lnw~2_N_}<{!3qSkZAeY}wsy-2D4< zPXEdJ^_HtPeUH$d`!ibqp7WPbeH>c&Nyxb4L(RU#u;ndB_|zhH+H5@QV0x1A^QsTa z42~ZW(LW+Ae=h3hWS!J0;`!H3FP--MR&DpRFS-@6I~dvDzW4bvr=!1L;-;UtR@s|q zA2szi?S4PX{Qt*`#EnQ1x^3)&{o)2I*fO3fWem1^A}3&1^hR27|P36 vZ$I$Le|_=y+&65w!5YU*s^xY5h$S#Y%rcamp}I%{RJMA$`njxgN@xNALN+E~ literal 0 HcmV?d00001 diff --git a/idea/resources/org/jetbrains/kotlin/idea/icons/classInitializerKotlin@2x.png b/idea/resources/org/jetbrains/kotlin/idea/icons/classInitializerKotlin@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..477de2223ca43fe8a330990d37e2d2a6003a514b GIT binary patch literal 2105 zcmaJ?X;c$g7S1S)EJ`B;L_{e|S%oZMFbRYuBy1W+774P9grtCUNGhEQ5F+h{BD>Ne zh^#6~6B$%spowfMC^Q0s8;T&KEyzKkQ5rbX$RxDb{bQIqr|P}?&i8%yzI(rODrK*? z`#KFn4HOEs&eMbDt5^Z$tM+%r7m-S*70X63Jy7fiM~LHCA_(Qefx{udlh2BTd?6Mm z{<{vy0fky^%JmNv2Qv1M*)Si&QerR?zEHtNp&XnfLKd3`iGgq^k}IHqlQ)||fXktP zOacSP5V}H9To0)T@{@Y|v!y&Xi32)00uB?8R_v9>SP)o( zhw@djVHi1OWt$oi!Ve#{;`a7(9V!YeTRCY;br27DvM3an?9I8IL2|;D9d= zsK_SbM38-HZeMaKA_^EK77NK(Y+PI%Ce9WEiz2aj5{ZPx*Pv*FsuR z?+cf+axE?^a$?RSQ}ryF%N}ODfgtg_)DI* zGI>!(`_PVYTW(gLir!Mi^&1e#)@k?}mY(o8R5eKkRn~_8d+O92s$Ad4E5EPL-FY$j z(Pz&fwMQO&eHZH+^i-_cv3;p2CCx$CAAD|?m1jpsM2>XN6+Y{VsI!0eu69SG@SHs| zxzHWgQ*f}m{`N-)c|PO9%@;Lo-H&ar1r$aZ$S#_Pud$jjN`JDBYxW`i_aAX5O7^$c zXoK(NLmMAvPk8p<635Ki3yd4dewC?*Dz#3-#TMcr@YN4XwAm2?_KhV zLHDfw_%XAhW0i}w;o~hiee*ghPpW(=Xpl1G^)1nbs+p*cooz?>AUEs&;P%KvnbDns zJM!-XKj`2-Rqr459aOn4)CSB-fZM4VPYB!7BZd~OZB^9?G?iZJcYWu{=Fvj{GC@ub zT7@CSx3$2mD-o#`(j&B=@^)!X1)z&Md0>iu_}Z`x+X#jVZfd<1 zQR~c(tek@$aOi>ln&9HFjG?MbgTxyKy8Q!Jby`$5XYM>&DQML#z01_Smtw#EZkW~G zUmo5f%K}^M?`xHv6!+RM8nmy4^DxDFq(-b32nzb;65-PE8M{ z498`_5#S?eP|KCOtr~iPd!xGkf&t!cJS|9 zCYOFVoHC!@MK0kX+DBuZ8Z0e8oniV9Nz233J`JLL>QjL14DY=+&s0 zD|{?*!wpsETY-+~c}@D8%$aB&>TlPAFxsY(gdeozF}dp4r(Tu^Q0iuv3$}aZY7ZxL zTb#Ac-#hJPJU5&x>p!rz$XN4}T6^0LNcPgm8*#Yh=hCVh(+4_iuGIQ*}4529;R& zef~@xahHxh-@ZSn_oX>av&p2pO?t?%pYS4hWVHvn%;nWNc4w`2s-|zvfaBypphK4$ znI$0v%ezf!eEHnF%1acztkXOq{etfAo2(u-{7cgFzV|+4_-TPxRiL&99_FIwM=uQ= znqYLz1au_50xE=EwI-ee75ObW&6N*}4jcx8lRDAJA~m72&CD)jZ1>EmpiUj9$Q>7-r;m)%w*pE#rf2}=zz?U3RCoD<2=pG%5jW_ z1_4LaKPr3_{ljj*mK}`(+l;}wv-9?6M$`;4wH_zfhU>^=4n?!-x%yRFvXC{+_C(YE z_)#EF+##~MyPB^9?Hdwqsw+>uuWc;A|i*C~z@ zlulKyNd#sSTeIX7NeR_Q2}#bNdfL0=+X~x8oqQ%Eea7VRTP0ri&G30a4Bbsn{SzHf zIww;{1yivNeS^aK5i`A-Z<(k;-n2?;*s=ct%^YAn literal 0 HcmV?d00001 diff --git a/idea/testData/structureView/fileStructure/LocalElements.after b/idea/testData/structureView/fileStructure/LocalElements.after index 3c5f427d3a2..45b4bd8025b 100644 --- a/idea/testData/structureView/fileStructure/LocalElements.after +++ b/idea/testData/structureView/fileStructure/LocalElements.after @@ -2,4 +2,6 @@ -foo(): Unit bar(): Unit -X + - + quux(): Unit xyzzy(): Unit diff --git a/idea/testData/structureView/fileStructure/LocalElements.kt b/idea/testData/structureView/fileStructure/LocalElements.kt index 2b4c0abb76c..88cdac5467c 100644 --- a/idea/testData/structureView/fileStructure/LocalElements.kt +++ b/idea/testData/structureView/fileStructure/LocalElements.kt @@ -2,6 +2,11 @@ fun foo() { fun bar() { } class X { + init { + fun quux() { + } + } + fun xyzzy() { } }