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 00000000000..4083c1fc7dd Binary files /dev/null and b/idea/resources/org/jetbrains/kotlin/idea/icons/classInitializerKotlin.png differ 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 00000000000..477de2223ca Binary files /dev/null and b/idea/resources/org/jetbrains/kotlin/idea/icons/classInitializerKotlin@2x.png differ 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() { } }