diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSorting.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSorting.kt index 87f898b1747..7a995527dc8 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSorting.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSorting.kt @@ -16,30 +16,30 @@ package org.jetbrains.kotlin.idea.completion -import com.intellij.codeInsight.completion.CompletionResultSet import com.intellij.codeInsight.completion.CompletionParameters +import com.intellij.codeInsight.completion.CompletionResultSet import com.intellij.codeInsight.completion.CompletionSorter -import org.jetbrains.kotlin.psi.JetFile -import com.intellij.codeInsight.lookup.LookupElementWeigher -import com.intellij.codeInsight.lookup.LookupElement -import com.intellij.codeInsight.lookup.WeighingContext -import org.jetbrains.kotlin.idea.completion.* -import org.jetbrains.kotlin.descriptors.PackageViewDescriptor -import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.resolve.DescriptorUtils -import org.jetbrains.kotlin.name.isValidJavaFqName -import org.jetbrains.kotlin.resolve.ImportPath import com.intellij.codeInsight.completion.CompletionType +import com.intellij.codeInsight.lookup.LookupElement +import com.intellij.codeInsight.lookup.LookupElementWeigher +import com.intellij.codeInsight.lookup.WeighingContext +import com.intellij.psi.PsiClass +import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.descriptors.PackageViewDescriptor +import org.jetbrains.kotlin.descriptors.VariableDescriptor import org.jetbrains.kotlin.idea.completion.smart.NameSimilarityWeigher import org.jetbrains.kotlin.idea.completion.smart.SMART_COMPLETION_ITEM_PRIORITY_KEY import org.jetbrains.kotlin.idea.completion.smart.SmartCompletionItemPriority -import com.intellij.psi.PsiClass -import java.util.HashSet -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.platform.JavaToKotlinClassMap +import org.jetbrains.kotlin.idea.core.completion.DeclarationDescriptorLookupObject import org.jetbrains.kotlin.idea.util.ImportInsertHelper -import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.descriptors.VariableDescriptor +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.isValidJavaFqName +import org.jetbrains.kotlin.platform.JavaToKotlinClassMap +import org.jetbrains.kotlin.psi.JetFile +import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.resolve.ImportPath +import java.util.HashSet public fun CompletionResultSet.addKotlinSorting(parameters: CompletionParameters): CompletionResultSet { var sorter = CompletionSorter.defaultSorter(parameters, getPrefixMatcher())!! @@ -89,7 +89,7 @@ private object KindWeigher : LookupElementWeigher("kotlin.kind") { val o = element.getObject() return when (o) { - is DeclarationDescriptorLookupObject -> { + is DeclarationDescriptorLookupObjectImpl -> { val descriptor = o.descriptor when (descriptor) { is VariableDescriptor -> CompoundWeight(Weight.variable, element.getUserData(CALLABLE_WEIGHT_KEY)) @@ -136,7 +136,7 @@ private class JetDeclarationRemotenessWeigher(private val file: JetFile) : Looku override fun weigh(element: LookupElement): Weight { val o = element.getObject() - if (o is DeclarationDescriptorLookupObject) { + if (o is DeclarationDescriptorLookupObjectImpl) { val elementFile = o.psiElement?.getContainingFile() if (elementFile is JetFile && elementFile.getOriginalFile() == file) { return Weight.thisFile diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/DeclarationDescriptorLookupObject.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/DeclarationDescriptorLookupObjectImpl.kt similarity index 86% rename from idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/DeclarationDescriptorLookupObject.kt rename to idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/DeclarationDescriptorLookupObjectImpl.kt index e875538c68c..79628bbdbbd 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/DeclarationDescriptorLookupObject.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/DeclarationDescriptorLookupObjectImpl.kt @@ -20,16 +20,17 @@ import com.intellij.openapi.diagnostic.Logger import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacade +import org.jetbrains.kotlin.idea.core.completion.DeclarationDescriptorLookupObject /** * Stores information about resolved descriptor and position of that descriptor. * Position will be used for sorting */ -public class DeclarationDescriptorLookupObject( - public val descriptor: DeclarationDescriptor, +public class DeclarationDescriptorLookupObjectImpl( + public override val descriptor: DeclarationDescriptor, private val resolutionFacade: ResolutionFacade, - public val psiElement: PsiElement? -) { + public override val psiElement: PsiElement? +): DeclarationDescriptorLookupObject { override fun toString(): String { return super.toString() + " " + descriptor } @@ -42,7 +43,7 @@ public class DeclarationDescriptorLookupObject( if (this identityEquals other) return true if (other == null || javaClass != other.javaClass) return false - val lookupObject = other as DeclarationDescriptorLookupObject + val lookupObject = other as DeclarationDescriptorLookupObjectImpl if (resolutionFacade != lookupObject.resolutionFacade) { LOG.warn("Descriptors from different resolve sessions") 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 2f0f01330f6..bc79414d1f5 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 @@ -154,7 +154,7 @@ public class LookupElementFactory( val name = nameAndIconDescriptor.getName().asString() val icon = JetDescriptorIconProvider.getIcon(nameAndIconDescriptor, iconDeclaration, Iconable.ICON_FLAG_VISIBILITY) - var element = LookupElementBuilder.create(DeclarationDescriptorLookupObject(descriptor, resolutionFacade, declaration), name) + var element = LookupElementBuilder.create(DeclarationDescriptorLookupObjectImpl(descriptor, resolutionFacade, declaration), name) .withIcon(icon) when (descriptor) { diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/BaseDeclarationInsertHandler.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/BaseDeclarationInsertHandler.kt index b330f2f0cfc..fa9eb273768 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/BaseDeclarationInsertHandler.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/BaseDeclarationInsertHandler.kt @@ -17,10 +17,10 @@ package org.jetbrains.kotlin.idea.completion.handlers import com.intellij.codeInsight.completion.InsertHandler -import com.intellij.codeInsight.lookup.LookupElement import com.intellij.codeInsight.completion.InsertionContext -import org.jetbrains.kotlin.idea.completion.DeclarationDescriptorLookupObject +import com.intellij.codeInsight.lookup.LookupElement import com.intellij.openapi.util.TextRange +import org.jetbrains.kotlin.idea.core.completion.DeclarationDescriptorLookupObject import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers open class BaseDeclarationInsertHandler : InsertHandler { diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinCallableInsertHandler.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinCallableInsertHandler.kt index 515423b6d8a..89814f20418 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinCallableInsertHandler.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinCallableInsertHandler.kt @@ -28,8 +28,8 @@ import com.intellij.psi.PsiElement import com.intellij.psi.codeStyle.CodeStyleSettingsManager import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.descriptors.CallableDescriptor -import org.jetbrains.kotlin.idea.completion.DeclarationDescriptorLookupObject import org.jetbrains.kotlin.idea.completion.isAfterDot +import org.jetbrains.kotlin.idea.core.completion.DeclarationDescriptorLookupObject import org.jetbrains.kotlin.idea.core.formatter.JetCodeStyleSettings import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.idea.util.ImportInsertHelper diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinClassInsertHandler.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinClassInsertHandler.kt index 50fa2c24621..729ef21509f 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinClassInsertHandler.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinClassInsertHandler.kt @@ -18,18 +18,18 @@ package org.jetbrains.kotlin.idea.completion.handlers import com.intellij.codeInsight.completion.InsertionContext import com.intellij.codeInsight.lookup.LookupElement -import com.intellij.psi.PsiDocumentManager -import org.jetbrains.kotlin.psi.JetFile -import org.jetbrains.kotlin.idea.util.ShortenReferences -import org.jetbrains.kotlin.idea.completion.DeclarationDescriptorLookupObject -import org.jetbrains.kotlin.descriptors.ClassDescriptor import com.intellij.psi.PsiClass -import org.jetbrains.kotlin.psi.JetNameReferenceExpression +import com.intellij.psi.PsiDocumentManager +import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade +import org.jetbrains.kotlin.idea.completion.isAfterDot +import org.jetbrains.kotlin.idea.core.completion.DeclarationDescriptorLookupObject +import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers +import org.jetbrains.kotlin.idea.util.ShortenReferences +import org.jetbrains.kotlin.psi.JetFile +import org.jetbrains.kotlin.psi.JetNameReferenceExpression import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode -import org.jetbrains.kotlin.idea.completion.isAfterDot -import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers public object KotlinClassInsertHandler : BaseDeclarationInsertHandler() { override fun handleInsert(context: InsertionContext, item: LookupElement) { diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/completion/DeclarationDescriptorLookupObject.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/completion/DeclarationDescriptorLookupObject.kt new file mode 100644 index 00000000000..7857fd36861 --- /dev/null +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/completion/DeclarationDescriptorLookupObject.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2015 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.kotlin.idea.core.completion + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor + +public trait DeclarationDescriptorLookupObject { + public val psiElement: PsiElement? + public val descriptor: DeclarationDescriptor +} diff --git a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt index c40803ec917..895b1e450a5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade +import org.jetbrains.kotlin.idea.core.completion.DeclarationDescriptorLookupObject import org.jetbrains.kotlin.idea.kdoc.KDocFinder import org.jetbrains.kotlin.idea.kdoc.KDocRenderer import org.jetbrains.kotlin.idea.kdoc.resolveKDocLink @@ -71,6 +72,13 @@ public class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() return null } + override fun getDocumentationElementForLookupItem(psiManager: PsiManager, `object`: Any?, element: PsiElement?): PsiElement? { + if (`object` is DeclarationDescriptorLookupObject) { + return `object`.psiElement + } + return null + } + companion object { private val LOG = Logger.getInstance(javaClass()) diff --git a/idea/testData/kdoc/inCompletion/simple.kt b/idea/testData/kdoc/inCompletion/simple.kt new file mode 100644 index 00000000000..598c958c995 --- /dev/null +++ b/idea/testData/kdoc/inCompletion/simple.kt @@ -0,0 +1,11 @@ +class Xyzzy { + +} + +class Xyzzy2 { + +} + +fun foo() { + val x = Xy +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/editor/quickDoc/QuickDocInCompletionTest.kt b/idea/tests/org/jetbrains/kotlin/idea/editor/quickDoc/QuickDocInCompletionTest.kt new file mode 100644 index 00000000000..01a5a3f35f2 --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/idea/editor/quickDoc/QuickDocInCompletionTest.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2010-2015 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.kotlin.idea.editor.quickDoc + +import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase +import org.jetbrains.kotlin.idea.JetFileType +import org.jetbrains.kotlin.idea.KotlinQuickDocumentationProvider +import org.jetbrains.kotlin.idea.test.PluginTestCaseBase +import org.jetbrains.kotlin.psi.JetClass +import org.junit.Assert + +public class QuickDocInCompletionTest(): LightPlatformCodeInsightFixtureTestCase() { + override fun getTestDataPath(): String { + return PluginTestCaseBase.getTestDataPathBase() + "/kdoc/inCompletion/" + } + public fun testSimple() { + myFixture.configureByFile(getTestName(true) + ".kt") + val lookupElements = myFixture.completeBasic() + val lookupObject = lookupElements.first().getObject() + val element = KotlinQuickDocumentationProvider().getDocumentationElementForLookupItem( + myFixture.getPsiManager(), lookupObject, null) + Assert.assertTrue(element is JetClass) + } +} \ No newline at end of file