From eeb2728b7e68bac28a1eb9c43880787cefa4517a Mon Sep 17 00:00:00 2001
From: Dmitry Jemerov
Date: Wed, 15 Apr 2015 20:43:31 +0200
Subject: [PATCH] show "defined in" for declarations in quick doc popup
#KT-7320 Fixed
---
.../idea/KotlinQuickDocumentationProvider.kt | 28 ++++++++++---------
.../editor/quickDoc/AtFunctionParameter.kt | 2 +-
.../editor/quickDoc/AtTypeParameter.kt | 2 +-
.../editor/quickDoc/AtVariableDeclaration.kt | 2 +-
.../editor/quickDoc/MethodFromStdLib.kt | 2 +-
.../OnClassDeclarationWithNoPackage.kt | 2 +-
.../OnFunctionDeclarationWithPackage.kt | 2 +-
.../editor/quickDoc/OnInheritedMethodUsage.kt | 2 +-
.../quickDoc/OnInheritedPropertyUsage.kt | 2 +-
.../testData/editor/quickDoc/OnMethodUsage.kt | 2 +-
.../OnMethodUsageWithBracketsInParam.kt | 2 +-
.../quickDoc/OnMethodUsageWithMarkdown.kt | 2 +-
.../OnMethodUsageWithReturnAndThrows.kt | 2 +-
.../editor/quickDoc/OnMethodUsageWithSee.kt | 2 +-
.../quickDoc/TopLevelMethodFromJava.java | 2 +-
15 files changed, 29 insertions(+), 27 deletions(-)
diff --git a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt
index cac54ab035c..c40803ec917 100644
--- a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt
@@ -19,33 +19,28 @@ package org.jetbrains.kotlin.idea
import com.intellij.lang.documentation.AbstractDocumentationProvider
import com.intellij.lang.java.JavaDocumentationProvider
import com.intellij.openapi.diagnostic.Logger
-import com.intellij.openapi.project.Project
import com.intellij.openapi.util.text.StringUtil
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiManager
-import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.asJava.KotlinLightMethod
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource
-import org.jetbrains.kotlin.descriptors.SourceElement
-import org.jetbrains.kotlin.idea.caches.resolve.KotlinCacheService
-import org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacade
-import org.jetbrains.kotlin.idea.caches.resolve.*
+import org.jetbrains.kotlin.idea.caches.resolve.analyze
+import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.kdoc.KDocFinder
import org.jetbrains.kotlin.idea.kdoc.KDocRenderer
-import org.jetbrains.kotlin.idea.kdoc.*
-import org.jetbrains.kotlin.idea.project.ResolveSessionForBodies
-import org.jetbrains.kotlin.kdoc.psi.impl.KDocTag
+import org.jetbrains.kotlin.idea.kdoc.resolveKDocLink
import org.jetbrains.kotlin.psi.JetDeclaration
import org.jetbrains.kotlin.psi.JetElement
import org.jetbrains.kotlin.psi.JetPsiUtil
import org.jetbrains.kotlin.psi.JetReferenceExpression
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
import org.jetbrains.kotlin.renderer.DescriptorRenderer
+import org.jetbrains.kotlin.renderer.DescriptorRendererBuilder
+import org.jetbrains.kotlin.renderer.NameShortness
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.resolve.source.PsiSourceElement
-import java.util.Collections
public class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() {
@@ -79,6 +74,14 @@ public class KotlinQuickDocumentationProvider : AbstractDocumentationProvider()
companion object {
private val LOG = Logger.getInstance(javaClass())
+ val quickDocNameFormat = DescriptorRendererBuilder()
+ .setWithDefinedIn(true)
+ .setNameShortness(NameShortness.SHORT)
+ .setRenderCompanionObjectName(true)
+ .setTextFormat(DescriptorRenderer.TextFormat.HTML)
+ .build()
+
+
private fun getText(element: PsiElement, originalElement: PsiElement, quickNavigation: Boolean): String? {
if (element is JetDeclaration) {
return renderKotlinDeclaration(element, quickNavigation)
@@ -115,11 +118,10 @@ public class KotlinQuickDocumentationProvider : AbstractDocumentationProvider()
return "No documentation available"
}
- var renderedDecl = DescriptorRenderer.HTML_NAMES_WITH_SHORT_TYPES.render(declarationDescriptor)
+ var renderedDecl = quickDocNameFormat.render(declarationDescriptor)
if (!quickNavigation) {
- renderedDecl = "" + DescriptorRenderer.HTML_NAMES_WITH_SHORT_TYPES.render(declarationDescriptor) + "
"
+ renderedDecl = "" + renderedDecl + "
"
}
-
val comment = KDocFinder.findKDoc(declarationDescriptor)
if (comment != null) {
renderedDecl = renderedDecl + "
" + KDocRenderer.renderKDoc(comment)
diff --git a/idea/testData/editor/quickDoc/AtFunctionParameter.kt b/idea/testData/editor/quickDoc/AtFunctionParameter.kt
index 0f6610a47c6..6dc2f04f73a 100644
--- a/idea/testData/editor/quickDoc/AtFunctionParameter.kt
+++ b/idea/testData/editor/quickDoc/AtFunctionParameter.kt
@@ -1,3 +1,3 @@
fun some(f: (Int) -> String) : String? = null
-// INFO: value-parameter val f: (Int) → String
\ No newline at end of file
+//INFO: value-parameter val f: (Int) → String defined in some
diff --git a/idea/testData/editor/quickDoc/AtTypeParameter.kt b/idea/testData/editor/quickDoc/AtTypeParameter.kt
index 646082ac249..ed345b8ddca 100644
--- a/idea/testData/editor/quickDoc/AtTypeParameter.kt
+++ b/idea/testData/editor/quickDoc/AtTypeParameter.kt
@@ -2,4 +2,4 @@ trait Base
class Some<T: Base>
-// INFO: <T : Base>
\ No newline at end of file
+//INFO: <T : Base> defined in Some
diff --git a/idea/testData/editor/quickDoc/AtVariableDeclaration.kt b/idea/testData/editor/quickDoc/AtVariableDeclaration.kt
index f0799b25abb..6eef2e9091f 100644
--- a/idea/testData/editor/quickDoc/AtVariableDeclaration.kt
+++ b/idea/testData/editor/quickDoc/AtVariableDeclaration.kt
@@ -5,4 +5,4 @@ fun test() {
}
-// INFO: val test: String?
\ No newline at end of file
+//INFO: val test: String? defined in test
diff --git a/idea/testData/editor/quickDoc/MethodFromStdLib.kt b/idea/testData/editor/quickDoc/MethodFromStdLib.kt
index 72cc73da994..a0f6b0a2c0d 100644
--- a/idea/testData/editor/quickDoc/MethodFromStdLib.kt
+++ b/idea/testData/editor/quickDoc/MethodFromStdLib.kt
@@ -2,5 +2,5 @@ fun test() {
listOf(1, 2, 4).filter { it > 0 }
}
-//INFO: inline public fun <T> Iterable<T>.filter(predicate: (T) → Boolean): List<T>
Returns a list containing all elements matching the given predicate
+//INFO: inline public fun <T> Iterable<T>.filter(predicate: (T) → Boolean): List<T> defined in kotlin
Returns a list containing all elements matching the given predicate
//INFO:
diff --git a/idea/testData/editor/quickDoc/OnClassDeclarationWithNoPackage.kt b/idea/testData/editor/quickDoc/OnClassDeclarationWithNoPackage.kt
index b329cc907b0..dca8597b69b 100644
--- a/idea/testData/editor/quickDoc/OnClassDeclarationWithNoPackage.kt
+++ b/idea/testData/editor/quickDoc/OnClassDeclarationWithNoPackage.kt
@@ -3,5 +3,5 @@
*/
class Some
-//INFO: internal final class Some
Usefull comment
+//INFO: internal final class Some defined in root package
Usefull comment
//INFO:
diff --git a/idea/testData/editor/quickDoc/OnFunctionDeclarationWithPackage.kt b/idea/testData/editor/quickDoc/OnFunctionDeclarationWithPackage.kt
index 758db8e473b..fb35b6666b6 100644
--- a/idea/testData/editor/quickDoc/OnFunctionDeclarationWithPackage.kt
+++ b/idea/testData/editor/quickDoc/OnFunctionDeclarationWithPackage.kt
@@ -12,6 +12,6 @@ package test
*/
fun testFun(first: String, second: Int) = 12
-//INFO: internal fun testFun(first: String, second: Int): Int
Test function
+//INFO: internal fun testFun(first: String, second: Int): Int defined in test
Test function
//INFO:
- Parameters:
first - Somesecond - Other
//INFO:
diff --git a/idea/testData/editor/quickDoc/OnInheritedMethodUsage.kt b/idea/testData/editor/quickDoc/OnInheritedMethodUsage.kt
index 337d5fa80c9..7a4a587d5ae 100644
--- a/idea/testData/editor/quickDoc/OnInheritedMethodUsage.kt
+++ b/idea/testData/editor/quickDoc/OnInheritedMethodUsage.kt
@@ -14,5 +14,5 @@ fun test() {
D().foo()
}
-//INFO: internal open fun foo(): Int
This method returns zero.
+//INFO: internal open fun foo(): Int defined in D
This method returns zero.
//INFO:
diff --git a/idea/testData/editor/quickDoc/OnInheritedPropertyUsage.kt b/idea/testData/editor/quickDoc/OnInheritedPropertyUsage.kt
index 902c241713a..c9c19758f8c 100644
--- a/idea/testData/editor/quickDoc/OnInheritedPropertyUsage.kt
+++ b/idea/testData/editor/quickDoc/OnInheritedPropertyUsage.kt
@@ -14,5 +14,5 @@ fun test() {
D().foo
}
-//INFO: internal open val foo: Int
This property returns zero.
+//INFO: internal open val foo: Int defined in D
This property returns zero.
//INFO:
diff --git a/idea/testData/editor/quickDoc/OnMethodUsage.kt b/idea/testData/editor/quickDoc/OnMethodUsage.kt
index fa3c76d7675..f95cfe9e6f6 100644
--- a/idea/testData/editor/quickDoc/OnMethodUsage.kt
+++ b/idea/testData/editor/quickDoc/OnMethodUsage.kt
@@ -12,6 +12,6 @@ fun test() {
testMethod(1, "value")
}
-//INFO: internal fun testMethod(a: Int, b: String): Unit
Some documentation
+//INFO: internal fun testMethod(a: Int, b: String): Unit defined in root package
Some documentation
//INFO:
- Parameters:
a - Some intb - String
//INFO:
diff --git a/idea/testData/editor/quickDoc/OnMethodUsageWithBracketsInParam.kt b/idea/testData/editor/quickDoc/OnMethodUsageWithBracketsInParam.kt
index acd0dde376e..1b4b83ae749 100644
--- a/idea/testData/editor/quickDoc/OnMethodUsageWithBracketsInParam.kt
+++ b/idea/testData/editor/quickDoc/OnMethodUsageWithBracketsInParam.kt
@@ -12,6 +12,6 @@ fun test() {
testMethod(1, "value")
}
-//INFO: internal fun testMethod(a: Int, b: String): Unit
Some documentation
+//INFO: internal fun testMethod(a: Int, b: String): Unit defined in root package
Some documentation
//INFO:
- Parameters:
a - Some intb - String
//INFO:
diff --git a/idea/testData/editor/quickDoc/OnMethodUsageWithMarkdown.kt b/idea/testData/editor/quickDoc/OnMethodUsageWithMarkdown.kt
index 5039d12cdf4..4b4f39acae9 100644
--- a/idea/testData/editor/quickDoc/OnMethodUsageWithMarkdown.kt
+++ b/idea/testData/editor/quickDoc/OnMethodUsageWithMarkdown.kt
@@ -18,7 +18,7 @@ fun test() {
testMethod(1, "value")
}
-//INFO: internal fun testMethod(): Unit
Some documentation. Bold underline code foo: bar (baz) quux
+//INFO: internal fun testMethod(): Unit defined in root package
Some documentation. Bold underline code foo: bar (baz) quux
//INFO: a href="http://www.kotlinlang.org">Kotlin
//INFO: C
//INFO: See this class
diff --git a/idea/testData/editor/quickDoc/OnMethodUsageWithReturnAndThrows.kt b/idea/testData/editor/quickDoc/OnMethodUsageWithReturnAndThrows.kt
index 3bb5eec0621..5394c0b978a 100644
--- a/idea/testData/editor/quickDoc/OnMethodUsageWithReturnAndThrows.kt
+++ b/idea/testData/editor/quickDoc/OnMethodUsageWithReturnAndThrows.kt
@@ -14,7 +14,7 @@ fun test() {
testMethod(1, "value")
}
-//INFO: internal fun testMethod(a: Int, b: String): Unit
Some documentation
+//INFO: internal fun testMethod(a: Int, b: String): Unit defined in root package
Some documentation
//INFO:
- Parameters:
a - Some intb - String
//INFO: - Returns:
- Return value
//INFO: - Throws:
IllegalArgumentException - if the weather is bad
diff --git a/idea/testData/editor/quickDoc/OnMethodUsageWithSee.kt b/idea/testData/editor/quickDoc/OnMethodUsageWithSee.kt
index cb4d1a9d12b..28eebb459bf 100644
--- a/idea/testData/editor/quickDoc/OnMethodUsageWithSee.kt
+++ b/idea/testData/editor/quickDoc/OnMethodUsageWithSee.kt
@@ -16,5 +16,5 @@ fun test() {
testMethod(1, "value")
}
-//INFO: internal fun testMethod(): Unit
+//INFO: internal fun testMethod(): Unit defined in root package
//INFO:
- See Also:
C, D
diff --git a/idea/testData/editor/quickDoc/TopLevelMethodFromJava.java b/idea/testData/editor/quickDoc/TopLevelMethodFromJava.java
index a58793107d9..cca09b295a3 100644
--- a/idea/testData/editor/quickDoc/TopLevelMethodFromJava.java
+++ b/idea/testData/editor/quickDoc/TopLevelMethodFromJava.java
@@ -8,5 +8,5 @@ class Testing {
}
}
-//INFO: internal fun foo(bar: Int): Unit
KDoc foo
+//INFO: internal fun foo(bar: Int): Unit defined in some
KDoc foo
//INFO: