WEB-65600 Fixed any type in lookup documentation

Only target element (element associated with the completion item) must contribute to lookup documentation

GitOrigin-RevId: ae836be7b3cbc66ce45ba6d82ebafb80ebd9cf08
This commit is contained in:
Aleksei Berezkin
2024-03-26 22:11:43 +00:00
committed by intellij-monorepo-bot
parent 0345d7d04f
commit cc168d9f63
4 changed files with 25 additions and 4 deletions
@@ -6,7 +6,7 @@ import com.intellij.codeInsight.documentation.DocumentationManager
import com.intellij.codeInsight.lookup.LookupElement
import com.intellij.lang.documentation.ide.IdeDocumentationTargetProvider
import com.intellij.lang.documentation.impl.documentationTargets
import com.intellij.lang.documentation.psi.psiDocumentationTargets
import com.intellij.lang.documentation.psi.psiLookupElementDocumentationTargets
import com.intellij.lang.documentation.symbol.impl.symbolDocumentationTargets
import com.intellij.model.Pointer
import com.intellij.model.Symbol
@@ -29,7 +29,7 @@ open class IdeDocumentationTargetProviderImpl(private val project: Project) : Id
val sourceElement = DocumentationManager.getContextElement(editor, file)
val targetElement = DocumentationManager.getElementFromLookup(project, editor, file, lookupElement)
?: return emptyList()
return psiDocumentationTargets(targetElement, sourceElement)
return psiLookupElementDocumentationTargets(targetElement, sourceElement)
}
override fun documentationTargets(editor: Editor, file: PsiFile, offset: Int): List<DocumentationTarget> {
@@ -9,8 +9,22 @@ import com.intellij.psi.PsiElement
@JvmField
internal val LOG: Logger = Logger.getInstance("#com.intellij.lang.documentation.psi")
fun psiDocumentationTargets(element: PsiElement, originalElement: PsiElement?): List<DocumentationTarget> {
for (ext in PsiDocumentationTargetProvider.EP_NAME.extensionList) {
fun psiLookupElementDocumentationTargets(element: PsiElement, originalElement: PsiElement?): List<DocumentationTarget> =
psiDocumentationTargetsImpl(
element,
originalElement,
PsiDocumentationTargetProvider.LOOKUP_ELEMENT_EP_NAME.extensionList + PsiDocumentationTargetProvider.EP_NAME.extensionList
)
fun psiDocumentationTargets(element: PsiElement, originalElement: PsiElement?): List<DocumentationTarget> =
psiDocumentationTargetsImpl(
element,
originalElement,
PsiDocumentationTargetProvider.EP_NAME.extensionList
)
private fun psiDocumentationTargetsImpl(element: PsiElement, originalElement: PsiElement?, providers: List<PsiDocumentationTargetProvider>): List<DocumentationTarget> {
for (ext in providers) {
val targets = ext.documentationTargets(element, originalElement)
if (targets.isNotEmpty()) return targets
}
@@ -28,6 +28,11 @@ public interface PsiDocumentationTargetProvider {
"com.intellij.platform.backend.documentation.psiTargetProvider"
);
@Internal
ExtensionPointName<PsiDocumentationTargetProvider> LOOKUP_ELEMENT_EP_NAME = ExtensionPointName.create(
"com.intellij.platform.backend.lookupElement.documentation.psiTargetProvider"
);
/**
* @return target to handle documentation actions which are invoked on the given {@code element},
* or {@code null} if this provider is not aware of the given element
@@ -671,6 +671,8 @@
interface="com.intellij.platform.backend.documentation.SymbolDocumentationTargetProvider"/>
<extensionPoint qualifiedName="com.intellij.platform.backend.documentation.psiTargetProvider" dynamic="true"
interface="com.intellij.platform.backend.documentation.PsiDocumentationTargetProvider"/>
<extensionPoint qualifiedName="com.intellij.platform.backend.lookupElement.documentation.psiTargetProvider" dynamic="true"
interface="com.intellij.platform.backend.documentation.PsiDocumentationTargetProvider"/>
<extensionPoint qualifiedName="com.intellij.platform.backend.documentation.inlineDocumentationProvider" dynamic="true"
interface="com.intellij.platform.backend.documentation.InlineDocumentationProvider"/>
<extensionPoint qualifiedName="com.intellij.platform.backend.documentation.linkHandler" dynamic="true"