From 7eacec658f8a33bf6f07b0694c653e93239901b7 Mon Sep 17 00:00:00 2001 From: Karol Lewandowski Date: Tue, 18 Nov 2025 20:52:32 +0100 Subject: [PATCH] [devkit] IJPL-216103: Render plugin ID if the file name is plugin.xml GitOrigin-RevId: d212d259efd0baf8fdbb7c17fed50a909484f5d4 --- .../ExtensionPointDocumentationProvider.java | 25 ++++++++++++++++++- .../testData/references/extensions/plugin.xml | 16 ++++++++++++ ...tensionPointDocumentationProviderTest.java | 19 +++++++++----- 3 files changed, 53 insertions(+), 7 deletions(-) create mode 100644 plugins/devkit/devkit-java-tests/testData/references/extensions/plugin.xml diff --git a/plugins/devkit/devkit-core/src/references/extensions/ExtensionPointDocumentationProvider.java b/plugins/devkit/devkit-core/src/references/extensions/ExtensionPointDocumentationProvider.java index c39b7b97b833..ce929cc58a56 100644 --- a/plugins/devkit/devkit-core/src/references/extensions/ExtensionPointDocumentationProvider.java +++ b/plugins/devkit/devkit-core/src/references/extensions/ExtensionPointDocumentationProvider.java @@ -5,6 +5,7 @@ import com.intellij.codeInsight.documentation.DocumentationManager; import com.intellij.codeInsight.documentation.DocumentationManagerProtocol; import com.intellij.codeInsight.javadoc.JavaDocUtil; import com.intellij.icons.AllIcons; +import com.intellij.ide.plugins.PluginManagerCore; import com.intellij.lang.documentation.DocumentationMarkup; import com.intellij.lang.documentation.DocumentationProvider; import com.intellij.openapi.module.Module; @@ -17,12 +18,16 @@ import com.intellij.pom.PomTargetPsiElement; import com.intellij.psi.*; import com.intellij.psi.xml.XmlFile; import com.intellij.psi.xml.XmlTag; +import com.intellij.util.xml.DomElement; +import com.intellij.util.xml.DomFileElement; import com.intellij.util.xml.DomUtil; import org.jetbrains.annotations.Nls; +import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.devkit.DevKitBundle; import org.jetbrains.idea.devkit.dom.ExtensionPoint; +import org.jetbrains.idea.devkit.dom.IdeaPlugin; import org.jetbrains.idea.devkit.util.DescriptorUtil; import static com.intellij.lang.documentation.DocumentationMarkup.DEFINITION_ELEMENT; @@ -92,10 +97,28 @@ final class ExtensionPointDocumentationProvider implements DocumentationProvider HtmlChunk.text(extensionPoint.getEffectiveQualifiedName()).bold().wrapWith(PRE_ELEMENT), HtmlChunk.icon("AllIcons.Nodes.Plugin", AllIcons.Nodes.Plugin), HtmlChunk.nbsp(), - HtmlChunk.text(DomUtil.getFile(extensionPoint).getName()) + HtmlChunk.text(getNameAndOptionalPluginId(extensionPoint)) ).wrapWith(DEFINITION_ELEMENT); } + private static @Nls @NotNull String getNameAndOptionalPluginId(ExtensionPoint extensionPoint) { + XmlFile file = DomUtil.getFile(extensionPoint); + String fileName = file.getName(); + if (!PluginManagerCore.PLUGIN_XML.equals(fileName)) { + return fileName; + } + DomFileElement element = DomUtil.getFileElement(extensionPoint); + if (element == null) return fileName; + DomElement rootElement = element.getRootElement(); + if (rootElement instanceof IdeaPlugin ideaPlugin) { + String pluginId = ideaPlugin.getId().getStringValue(); + if (StringUtil.isNotEmpty(pluginId)) { + return fileName + " (" + pluginId + ")"; + } + } + return fileName; + } + private static @NotNull HtmlChunk epBeanDocAndFields(ExtensionPoint extensionPoint) { final PsiClass beanClass = extensionPoint.getBeanClass().getValue(); if (beanClass != null) { diff --git a/plugins/devkit/devkit-java-tests/testData/references/extensions/plugin.xml b/plugins/devkit/devkit-java-tests/testData/references/extensions/plugin.xml new file mode 100644 index 000000000000..1bfa55b0e84f --- /dev/null +++ b/plugins/devkit/devkit-java-tests/testData/references/extensions/plugin.xml @@ -0,0 +1,16 @@ + + + foo.bar + + + + + + + + + + ar/> + + + \ No newline at end of file diff --git a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/references/extensions/ExtensionPointDocumentationProviderTest.java b/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/references/extensions/ExtensionPointDocumentationProviderTest.java index 7580b3fbe8bd..b2abb914b11c 100644 --- a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/references/extensions/ExtensionPointDocumentationProviderTest.java +++ b/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/references/extensions/ExtensionPointDocumentationProviderTest.java @@ -21,15 +21,22 @@ public class ExtensionPointDocumentationProviderTest extends LightJavaCodeInsigh } public void testBeanClassExtensionPointDocumentation() { - doBeanClassExtensionPointTest("beanClassExtensionPointDocumentation.xml"); + doBeanClassExtensionPointTest("beanClassExtensionPointDocumentation.xml", + "beanClassExtensionPointDocumentation.xml"); } public void testBeanClassExtensionPointQualifiedNameDocumentation() { - doBeanClassExtensionPointTest("beanClassExtensionPointQualifiedNameDocumentation.xml"); + doBeanClassExtensionPointTest("beanClassExtensionPointQualifiedNameDocumentation.xml", + "beanClassExtensionPointQualifiedNameDocumentation.xml"); } - private void doBeanClassExtensionPointTest(String pluginXml) { - myFixture.configureByFiles(pluginXml, + public void testBeanClassExtensionPointDocumentationWhenFileNameIsPluginXml() { + doBeanClassExtensionPointTest("plugin.xml", + "plugin.xml (foo.bar)"); + } + + private void doBeanClassExtensionPointTest(String pluginXmlFileName, String expectedEpLocationString) { + myFixture.configureByFiles(pluginXmlFileName, "bar/MyExtensionPoint.java", "bar/MyExtension.java"); myFixture.addClass("package com.intellij.openapi.extensions; public @interface RequiredElement {}"); myFixture.addClass("package com.intellij.util.xmlb.annotations; public @interface Attribute {}"); @@ -41,14 +48,14 @@ public class ExtensionPointDocumentationProviderTest extends LightJavaCodeInsigh DocumentationProvider provider = DocumentationManager.getProviderFromElement(docElement); String epDefinition = "[" + getModule().getName() + "]" + - "
foo.bar (" + pluginXml + ")
" + + "
foo.bar (" + pluginXmlFileName + ")
" + "MyExtensionPoint
" + "MyExtension"; assertEquals(epDefinition, provider.getQuickNavigateInfo(docElement, getOriginalElement())); assertEquals( - "
foo.bar
 " + pluginXml + "
" +
+      "
foo.bar
 " + expectedEpLocationString + "
" +
       "
 bar
public class MyExtensionPoint
\n" + " MyExtensionPoint JavaDoc.\n" + "


implementationClass

String (required)

stringCanBeEmpty

String (required, empty allowed)

<intValue>

Integer

Extension Point Implementation

 bar
public interface MyExtension
\n" +