show icon of class initializer

#KT-11775 Fixed
This commit is contained in:
Dmitry Jemerov
2016-08-24 20:33:37 +02:00
parent 8ff0814221
commit 3ec583bb16
7 changed files with 14 additions and 4 deletions
@@ -23,8 +23,8 @@ import com.intellij.openapi.util.text.StringUtil
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.ui.RowIcon import com.intellij.ui.RowIcon
import com.intellij.util.PlatformIcons 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.KtLightClassForFacade
import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration
import org.jetbrains.kotlin.idea.caches.resolve.KtLightClassForDecompiledDeclaration import org.jetbrains.kotlin.idea.caches.resolve.KtLightClassForDecompiledDeclaration
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
@@ -40,7 +40,7 @@ class KotlinIconProvider : IconProvider(), DumbAware {
} }
val result = psiElement.getBaseIcon() 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 val list = psiElement.modifierList
return createRowIcon(result, getVisibilityIcon(list)) return createRowIcon(result, getVisibilityIcon(list))
} }
@@ -114,6 +114,7 @@ class KotlinIconProvider : IconProvider(), DumbAware {
KotlinIcons.PARAMETER KotlinIcons.PARAMETER
} }
is KtProperty -> if (isVar) KotlinIcons.FIELD_VAR else KotlinIcons.FIELD_VAL is KtProperty -> if (isVar) KotlinIcons.FIELD_VAR else KotlinIcons.FIELD_VAL
is KtClassInitializer -> KotlinIcons.CLASS_INITIALIZER
else -> null else -> null
} }
} }
@@ -42,6 +42,7 @@ public interface KotlinIcons {
Icon PARAMETER = PlatformIcons.PARAMETER_ICON; Icon PARAMETER = PlatformIcons.PARAMETER_ICON;
Icon FIELD_VAL = IconLoader.getIcon("/org/jetbrains/kotlin/idea/icons/field_value.png"); 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 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"); Icon LAUNCH = IconLoader.getIcon("/org/jetbrains/kotlin/idea/icons/kotlin_launch_configuration.png");
} }
@@ -22,6 +22,7 @@ import com.intellij.navigation.ItemPresentation
import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.DumbService
import com.intellij.openapi.ui.Queryable import com.intellij.openapi.ui.Queryable
import com.intellij.psi.NavigatablePsiElement import com.intellij.psi.NavigatablePsiElement
import com.intellij.psi.PsiElement
import org.jetbrains.annotations.TestOnly import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
@@ -89,11 +90,11 @@ class KotlinStructureViewElement(val element: NavigatablePsiElement,
is KtFile -> element.declarations is KtFile -> element.declarations
is KtClass -> element.getPrimaryConstructorParameters().filter { it.hasValOrVar() } + element.declarations is KtClass -> element.getPrimaryConstructorParameters().filter { it.hasValOrVar() } + element.declarations
is KtClassOrObject -> element.declarations is KtClassOrObject -> element.declarations
is KtFunction -> element.collectLocalDeclarations() is KtFunction, is KtClassInitializer -> element.collectLocalDeclarations()
else -> emptyList() else -> emptyList()
} }
private fun KtFunction.collectLocalDeclarations(): List<KtDeclaration> { private fun PsiElement.collectLocalDeclarations(): List<KtDeclaration> {
val result = mutableListOf<KtDeclaration>() val result = mutableListOf<KtDeclaration>()
acceptChildren(object : KtTreeVisitorVoid() { acceptChildren(object : KtTreeVisitorVoid() {
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -2,4 +2,6 @@
-foo(): Unit -foo(): Unit
bar(): Unit bar(): Unit
-X -X
-<class initializer>
quux(): Unit
xyzzy(): Unit xyzzy(): Unit
@@ -2,6 +2,11 @@ fun foo() {
fun bar() { } fun bar() { }
class X { class X {
init {
fun quux() {
}
}
fun xyzzy() { fun xyzzy() {
} }
} }