From cc168d9f635ee4b72dbd4db98e31f258ac27fdec Mon Sep 17 00:00:00 2001 From: Aleksei Berezkin Date: Tue, 26 Mar 2024 15:21:31 +0100 Subject: [PATCH] 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 --- .../impl/IdeDocumentationTargetProviderImpl.kt | 4 ++-- .../intellij/lang/documentation/psi/util.kt | 18 ++++++++++++++++-- .../PsiDocumentationTargetProvider.java | 5 +++++ .../src/META-INF/LangExtensionPoints.xml | 2 ++ 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/lang/documentation/ide/impl/IdeDocumentationTargetProviderImpl.kt b/platform/lang-impl/src/com/intellij/lang/documentation/ide/impl/IdeDocumentationTargetProviderImpl.kt index 88ea1c5901af..dc8460ce78db 100644 --- a/platform/lang-impl/src/com/intellij/lang/documentation/ide/impl/IdeDocumentationTargetProviderImpl.kt +++ b/platform/lang-impl/src/com/intellij/lang/documentation/ide/impl/IdeDocumentationTargetProviderImpl.kt @@ -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 { diff --git a/platform/lang-impl/src/com/intellij/lang/documentation/psi/util.kt b/platform/lang-impl/src/com/intellij/lang/documentation/psi/util.kt index 91013a61941a..fed08f77d172 100644 --- a/platform/lang-impl/src/com/intellij/lang/documentation/psi/util.kt +++ b/platform/lang-impl/src/com/intellij/lang/documentation/psi/util.kt @@ -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 { - for (ext in PsiDocumentationTargetProvider.EP_NAME.extensionList) { +fun psiLookupElementDocumentationTargets(element: PsiElement, originalElement: PsiElement?): List = + psiDocumentationTargetsImpl( + element, + originalElement, + PsiDocumentationTargetProvider.LOOKUP_ELEMENT_EP_NAME.extensionList + PsiDocumentationTargetProvider.EP_NAME.extensionList + ) + +fun psiDocumentationTargets(element: PsiElement, originalElement: PsiElement?): List = + psiDocumentationTargetsImpl( + element, + originalElement, + PsiDocumentationTargetProvider.EP_NAME.extensionList + ) + +private fun psiDocumentationTargetsImpl(element: PsiElement, originalElement: PsiElement?, providers: List): List { + for (ext in providers) { val targets = ext.documentationTargets(element, originalElement) if (targets.isNotEmpty()) return targets } diff --git a/platform/lang-impl/src/com/intellij/platform/backend/documentation/PsiDocumentationTargetProvider.java b/platform/lang-impl/src/com/intellij/platform/backend/documentation/PsiDocumentationTargetProvider.java index 2c01ba28def8..4743a32d9dac 100644 --- a/platform/lang-impl/src/com/intellij/platform/backend/documentation/PsiDocumentationTargetProvider.java +++ b/platform/lang-impl/src/com/intellij/platform/backend/documentation/PsiDocumentationTargetProvider.java @@ -28,6 +28,11 @@ public interface PsiDocumentationTargetProvider { "com.intellij.platform.backend.documentation.psiTargetProvider" ); + @Internal + ExtensionPointName 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 diff --git a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml index cb93dc44bfff..d6f22cf7b271 100644 --- a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml @@ -671,6 +671,8 @@ interface="com.intellij.platform.backend.documentation.SymbolDocumentationTargetProvider"/> +