From fa588ace57c66c688b572f0feee38803e14ea99c Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 19 Jun 2015 19:41:24 +0300 Subject: [PATCH] Fixed icons for java and compiled classes broken before --- .../completion/DeclarationLookupObjectImpl.kt | 10 +++--- .../idea/completion/LookupElementFactory.kt | 31 ++++++++++++------- .../completion/DeclarationLookupObject.kt | 3 +- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/DeclarationLookupObjectImpl.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/DeclarationLookupObjectImpl.kt index 31f84729041..896084589e0 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/DeclarationLookupObjectImpl.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/DeclarationLookupObjectImpl.kt @@ -17,27 +17,29 @@ package org.jetbrains.kotlin.idea.completion import com.intellij.openapi.diagnostic.Logger +import com.intellij.openapi.util.Iconable import com.intellij.psi.PsiDocCommentOwner import com.intellij.psi.PsiElement import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.core.completion.DeclarationLookupObject +import javax.swing.Icon /** * Stores information about resolved descriptor and position of that descriptor. * Position will be used for sorting */ -public class DeclarationLookupObjectImpl( - public override val descriptor: DeclarationDescriptor?, - public override val psiElement: PsiElement?, +public abstract class DeclarationLookupObjectImpl( + public final override val descriptor: DeclarationDescriptor?, + public final override val psiElement: PsiElement?, private val resolutionFacade: ResolutionFacade ): DeclarationLookupObject { init { assert(descriptor != null || psiElement != null) } - override fun toString() = super.toString() + " " + (descriptor ?: psiElement) + override fun toString() = super.toString() + " " + (descriptor ?: psiElement) override fun hashCode(): Int { return if (descriptor != null) descriptor.getOriginal().hashCode() else psiElement!!.hashCode() diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/LookupElementFactory.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/LookupElementFactory.kt index f85e8e96253..2a3a4dabb17 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/LookupElementFactory.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/LookupElementFactory.kt @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.TypeUtils +import javax.swing.Icon public class LookupElementFactory( private val resolutionFacade: ResolutionFacade, @@ -98,7 +99,9 @@ public class LookupElementFactory( } public fun createLookupElementForJavaClass(psiClass: PsiClass): LookupElement { - val lookupObject = DeclarationLookupObjectImpl(null, psiClass, resolutionFacade) + val lookupObject = object : DeclarationLookupObjectImpl(null, psiClass, resolutionFacade) { + override fun getIcon(flags: Int) = psiClass.getIcon(flags) + } var element = LookupElementBuilder.create(lookupObject, psiClass.getName()) .withInsertHandler(KotlinClassInsertHandler) @@ -115,13 +118,7 @@ public class LookupElementFactory( element = element.setStrikeout(true) } - // add icon in renderElement only to pass presentation.isReal() - return object : LookupElementDecorator(element) { - override fun renderElement(presentation: LookupElementPresentation) { - super.renderElement(presentation) - presentation.setIcon(DefaultLookupItemRenderer.getRawIcon(element, presentation.isReal())) - } - } + return element.withIconFromLookupObject() } private fun createLookupElement( @@ -149,11 +146,11 @@ public class LookupElementFactory( iconDeclaration = declaration } val name = nameAndIconDescriptor.getName().asString() - val icon = JetDescriptorIconProvider.getIcon(nameAndIconDescriptor, iconDeclaration, Iconable.ICON_FLAG_VISIBILITY) - val lookupObject = DeclarationLookupObjectImpl(descriptor, declaration, resolutionFacade) + val lookupObject = object : DeclarationLookupObjectImpl(descriptor, declaration, resolutionFacade) { + override fun getIcon(flags: Int) = JetDescriptorIconProvider.getIcon(nameAndIconDescriptor, iconDeclaration, flags) + } var element = LookupElementBuilder.create(lookupObject, name) - .withIcon(icon) when (descriptor) { is FunctionDescriptor -> { @@ -213,7 +210,17 @@ public class LookupElementFactory( element.putUserData(KotlinCompletionCharFilter.ACCEPT_OPENING_BRACE, Unit) } - return element + return element.withIconFromLookupObject() + } + + private fun LookupElement.withIconFromLookupObject(): LookupElement { + // add icon in renderElement only to pass presentation.isReal() + return object : LookupElementDecorator(this) { + override fun renderElement(presentation: LookupElementPresentation) { + super.renderElement(presentation) + presentation.setIcon(DefaultLookupItemRenderer.getRawIcon(this@withIconFromLookupObject, presentation.isReal())) + } + } } private fun callableWeight(descriptor: DeclarationDescriptor): CallableWeight? { diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/completion/DeclarationLookupObject.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/completion/DeclarationLookupObject.kt index b0073696f6f..654eafb4247 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/completion/DeclarationLookupObject.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/completion/DeclarationLookupObject.kt @@ -16,10 +16,11 @@ package org.jetbrains.kotlin.idea.core.completion +import com.intellij.openapi.util.Iconable import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -public interface DeclarationLookupObject { +public interface DeclarationLookupObject : Iconable { public val psiElement: PsiElement? public val descriptor: DeclarationDescriptor? public val isDeprecated: Boolean