From 6951a6944bb1fd8f9b76ae8098e51bb253328d71 Mon Sep 17 00:00:00 2001 From: Piotr Tomiak Date: Wed, 25 Oct 2023 14:16:06 +0200 Subject: [PATCH] WEB-63554 Web Symbols: refactor WebSymbolCodeCompletionItemCustomizer#customize and WebSymbolsCompletionProviderBase to use qualified kinds GitOrigin-RevId: 8a6f6947c61b11fcd95d709cc37e2f9992590866 --- .../WebSymbolCodeCompletionItemCustomizer.kt | 11 ++++------- .../WebSymbolsCompletionProviderBase.kt | 15 ++++++--------- .../webSymbols/query/WebSymbolsQueryExecutor.kt | 5 +++-- .../WebSymbolAttributeNameCompletionProvider.kt | 10 +++++----- .../WebSymbolElementNameCompletionProvider.kt | 7 +++---- ...ebSymbolElementNameInTextCompletionProvider.kt | 7 +++---- .../webSymbols/WebSymbolsHtmlQueryConfigurator.kt | 15 +++++---------- ...bSymbolHtmlAttributeValueCompletionProvider.kt | 9 +++++---- .../elements/WebSymbolElementDescriptor.kt | 5 +++-- 9 files changed, 37 insertions(+), 47 deletions(-) diff --git a/platform/webSymbols/src/com/intellij/webSymbols/completion/WebSymbolCodeCompletionItemCustomizer.kt b/platform/webSymbols/src/com/intellij/webSymbols/completion/WebSymbolCodeCompletionItemCustomizer.kt index 218ef55861d0..5354c9171907 100644 --- a/platform/webSymbols/src/com/intellij/webSymbols/completion/WebSymbolCodeCompletionItemCustomizer.kt +++ b/platform/webSymbols/src/com/intellij/webSymbols/completion/WebSymbolCodeCompletionItemCustomizer.kt @@ -4,15 +4,13 @@ package com.intellij.webSymbols.completion import com.intellij.openapi.extensions.ExtensionPointName import com.intellij.psi.PsiElement import com.intellij.webSymbols.FrameworkId -import com.intellij.webSymbols.SymbolKind -import com.intellij.webSymbols.SymbolNamespace +import com.intellij.webSymbols.WebSymbolQualifiedKind interface WebSymbolCodeCompletionItemCustomizer { fun customize(item: WebSymbolCodeCompletionItem, framework: FrameworkId?, - namespace: SymbolNamespace, - kind: SymbolKind, + qualifiedKind: WebSymbolQualifiedKind, location: PsiElement): WebSymbolCodeCompletionItem? companion object { @@ -21,8 +19,7 @@ interface WebSymbolCodeCompletionItemCustomizer { internal fun Sequence.customizeItems( framework: FrameworkId?, - namespace: SymbolNamespace, - kind: SymbolKind, + qualifiedKind: WebSymbolQualifiedKind, location: PsiElement ): Sequence { val customizers = EP_NAME.extensionList @@ -31,7 +28,7 @@ interface WebSymbolCodeCompletionItemCustomizer { customizers.foldRight(item) { customizer, acc: WebSymbolCodeCompletionItem? -> if (acc == null) null - else customizer.customize(acc, framework, namespace, kind, location) + else customizer.customize(acc, framework, qualifiedKind, location) } } else this diff --git a/platform/webSymbols/src/com/intellij/webSymbols/completion/WebSymbolsCompletionProviderBase.kt b/platform/webSymbols/src/com/intellij/webSymbols/completion/WebSymbolsCompletionProviderBase.kt index ebccfa5f5695..0de5206df577 100644 --- a/platform/webSymbols/src/com/intellij/webSymbols/completion/WebSymbolsCompletionProviderBase.kt +++ b/platform/webSymbols/src/com/intellij/webSymbols/completion/WebSymbolsCompletionProviderBase.kt @@ -12,8 +12,7 @@ import com.intellij.psi.PsiElement import com.intellij.refactoring.suggested.startOffset import com.intellij.util.ProcessingContext import com.intellij.webSymbols.FrameworkId -import com.intellij.webSymbols.SymbolKind -import com.intellij.webSymbols.SymbolNamespace +import com.intellij.webSymbols.WebSymbolQualifiedKind import com.intellij.webSymbols.WebSymbolsScope import com.intellij.webSymbols.completion.WebSymbolCodeCompletionItemCustomizer.Companion.customizeItems import com.intellij.webSymbols.query.WebSymbolsQueryExecutor @@ -58,8 +57,7 @@ abstract class WebSymbolsCompletionProviderBase : CompletionProv @JvmStatic fun processCompletionQueryResults(queryExecutor: WebSymbolsQueryExecutor, result: CompletionResultSet, - namespace: SymbolNamespace, - kind: SymbolKind, + qualifiedKind: WebSymbolQualifiedKind, name: String, position: Int, location: PsiElement, @@ -68,16 +66,15 @@ abstract class WebSymbolsCompletionProviderBase : CompletionProv filter: ((WebSymbolCodeCompletionItem) -> Boolean)? = null, consumer: (WebSymbolCodeCompletionItem) -> Unit) { processWebSymbolCodeCompletionItems( - queryExecutor.runCodeCompletionQuery(namespace, kind, name, position, scope = queryContext), - result, namespace, kind, name, queryExecutor.framework, location, providedNames, filter, consumer + queryExecutor.runCodeCompletionQuery(qualifiedKind, name, position, scope = queryContext), + result, qualifiedKind, name, queryExecutor.framework, location, providedNames, filter, consumer ) } @JvmStatic fun processWebSymbolCodeCompletionItems(symbols: List, result: CompletionResultSet, - namespace: SymbolNamespace, - kind: SymbolKind, + qualifiedKind: WebSymbolQualifiedKind, name: String, framework: FrameworkId?, location: PsiElement, @@ -89,7 +86,7 @@ abstract class WebSymbolsCompletionProviderBase : CompletionProv symbols .asSequence() .distinctBy { Triple(it.offset, it.name, it.completeAfterInsert) } - .customizeItems(framework, namespace, kind, location) + .customizeItems(framework, qualifiedKind, location) .filter { item -> (filter == null || filter(item)) && item.offset <= prefixLength diff --git a/platform/webSymbols/src/com/intellij/webSymbols/query/WebSymbolsQueryExecutor.kt b/platform/webSymbols/src/com/intellij/webSymbols/query/WebSymbolsQueryExecutor.kt index f8a545860f30..9521c00871e1 100644 --- a/platform/webSymbols/src/com/intellij/webSymbols/query/WebSymbolsQueryExecutor.kt +++ b/platform/webSymbols/src/com/intellij/webSymbols/query/WebSymbolsQueryExecutor.kt @@ -80,12 +80,13 @@ interface WebSymbolsQueryExecutor : ModificationTracker { scope: List = emptyList()): List = runCodeCompletionQuery(listOf(WebSymbolQualifiedName(namespace, kind, name)), position, virtualSymbols, scope) - fun runCodeCompletionQuery(qualifiedName: WebSymbolQualifiedName, + fun runCodeCompletionQuery(qualifiedKind: WebSymbolQualifiedKind, + name: String, /** Position to complete at in the last segment of the path **/ position: Int, virtualSymbols: Boolean = true, scope: List = emptyList()): List = - runCodeCompletionQuery(listOf(qualifiedName), position, virtualSymbols, scope) + runCodeCompletionQuery(listOf(qualifiedKind.withName(name)), position, virtualSymbols, scope) fun runCodeCompletionQuery(path: List, /** Position to complete at in the last segment of the path **/ diff --git a/xml/impl/src/com/intellij/html/webSymbols/attributes/WebSymbolAttributeNameCompletionProvider.kt b/xml/impl/src/com/intellij/html/webSymbols/attributes/WebSymbolAttributeNameCompletionProvider.kt index 768b572ade9e..ed7eff110f1d 100644 --- a/xml/impl/src/com/intellij/html/webSymbols/attributes/WebSymbolAttributeNameCompletionProvider.kt +++ b/xml/impl/src/com/intellij/html/webSymbols/attributes/WebSymbolAttributeNameCompletionProvider.kt @@ -14,13 +14,14 @@ import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.xml.XmlAttribute import com.intellij.psi.xml.XmlElement import com.intellij.psi.xml.XmlTag +import com.intellij.webSymbols.WebSymbol.Companion.HTML_ATTRIBUTES import com.intellij.webSymbols.WebSymbol.Companion.KIND_HTML_ATTRIBUTES import com.intellij.webSymbols.WebSymbol.Companion.KIND_HTML_ELEMENTS import com.intellij.webSymbols.WebSymbol.Companion.NAMESPACE_HTML -import com.intellij.webSymbols.query.WebSymbolsQueryExecutor -import com.intellij.webSymbols.query.WebSymbolsQueryExecutorFactory import com.intellij.webSymbols.completion.AsteriskAwarePrefixMatcher import com.intellij.webSymbols.completion.WebSymbolsCompletionProviderBase +import com.intellij.webSymbols.query.WebSymbolsQueryExecutor +import com.intellij.webSymbols.query.WebSymbolsQueryExecutorFactory import com.intellij.webSymbols.utils.asSingleSymbol class WebSymbolAttributeNameCompletionProvider : WebSymbolsCompletionProviderBase() { @@ -52,8 +53,7 @@ class WebSymbolAttributeNameCompletionProvider : WebSymbolsCompletionProviderBas processCompletionQueryResults( queryExecutor, patchedResultSet, - NAMESPACE_HTML, - KIND_HTML_ATTRIBUTES, + HTML_ATTRIBUTES, name, position, context, @@ -81,7 +81,7 @@ class WebSymbolAttributeNameCompletionProvider : WebSymbolsCompletionProviderBas val fullName = name.substring(0, item.offset) + item.name val match = freshRegistry.runNameMatchQuery(NAMESPACE_HTML, KIND_HTML_ATTRIBUTES, fullName, scope = symbols) - .asSingleSymbol() ?: return@withInsertHandlerAdded + .asSingleSymbol() ?: return@withInsertHandlerAdded val info = WebSymbolHtmlAttributeInfo.create(fullName, freshRegistry, match) if (info.acceptsValue && !info.acceptsNoValue) { XmlAttributeInsertHandler.INSTANCE.handleInsert(insertionContext, lookupItem) diff --git a/xml/impl/src/com/intellij/html/webSymbols/elements/WebSymbolElementNameCompletionProvider.kt b/xml/impl/src/com/intellij/html/webSymbols/elements/WebSymbolElementNameCompletionProvider.kt index 0d410b6ee5d3..bc26f0b0ba7f 100644 --- a/xml/impl/src/com/intellij/html/webSymbols/elements/WebSymbolElementNameCompletionProvider.kt +++ b/xml/impl/src/com/intellij/html/webSymbols/elements/WebSymbolElementNameCompletionProvider.kt @@ -10,11 +10,10 @@ import com.intellij.psi.PsiElement import com.intellij.psi.html.HtmlTag import com.intellij.psi.impl.source.xml.TagNameReference import com.intellij.psi.util.PsiTreeUtil -import com.intellij.webSymbols.WebSymbol.Companion.KIND_HTML_ELEMENTS -import com.intellij.webSymbols.WebSymbol.Companion.NAMESPACE_HTML +import com.intellij.webSymbols.WebSymbol.Companion.HTML_ELEMENTS import com.intellij.webSymbols.completion.WebSymbolCodeCompletionItem -import com.intellij.webSymbols.query.WebSymbolsQueryExecutor import com.intellij.webSymbols.completion.WebSymbolsCompletionProviderBase +import com.intellij.webSymbols.query.WebSymbolsQueryExecutor class WebSymbolElementNameCompletionProvider : WebSymbolsCompletionProviderBase() { @@ -34,7 +33,7 @@ class WebSymbolElementNameCompletionProvider : WebSymbolsCompletionProviderBase< if (endTag) return val patchedResultSet = result.withPrefixMatcher(result.prefixMatcher.cloneWithPrefix(name)) - processCompletionQueryResults(queryExecutor, patchedResultSet, NAMESPACE_HTML, KIND_HTML_ELEMENTS, name, + processCompletionQueryResults(queryExecutor, patchedResultSet, HTML_ELEMENTS, name, position, context, filter = Companion::filterStandardHtmlSymbols) { it.withInsertHandlerAdded(XmlTagInsertHandler.INSTANCE) .addToResult(parameters, patchedResultSet) diff --git a/xml/impl/src/com/intellij/html/webSymbols/elements/WebSymbolElementNameInTextCompletionProvider.kt b/xml/impl/src/com/intellij/html/webSymbols/elements/WebSymbolElementNameInTextCompletionProvider.kt index a424d7537d31..0dfc33c8370e 100644 --- a/xml/impl/src/com/intellij/html/webSymbols/elements/WebSymbolElementNameInTextCompletionProvider.kt +++ b/xml/impl/src/com/intellij/html/webSymbols/elements/WebSymbolElementNameInTextCompletionProvider.kt @@ -11,10 +11,9 @@ import com.intellij.psi.xml.XmlDocument import com.intellij.psi.xml.XmlElement import com.intellij.psi.xml.XmlText import com.intellij.util.asSafely -import com.intellij.webSymbols.WebSymbol.Companion.KIND_HTML_ELEMENTS -import com.intellij.webSymbols.WebSymbol.Companion.NAMESPACE_HTML -import com.intellij.webSymbols.query.WebSymbolsQueryExecutor +import com.intellij.webSymbols.WebSymbol.Companion.HTML_ELEMENTS import com.intellij.webSymbols.completion.WebSymbolsCompletionProviderBase +import com.intellij.webSymbols.query.WebSymbolsQueryExecutor class WebSymbolElementNameInTextCompletionProvider : WebSymbolsCompletionProviderBase() { @@ -33,7 +32,7 @@ class WebSymbolElementNameInTextCompletionProvider : WebSymbolsCompletionProvide val patchedResultSet = patchResultSetForHtmlElementInTextCompletion( result.withPrefixMatcher(result.prefixMatcher.cloneWithPrefix(name)), parameters) - processCompletionQueryResults(queryExecutor, patchedResultSet, NAMESPACE_HTML, KIND_HTML_ELEMENTS, + processCompletionQueryResults(queryExecutor, patchedResultSet, HTML_ELEMENTS, name, position, context, filter = WebSymbolElementNameCompletionProvider.Companion::filterStandardHtmlSymbols) { it.withInsertHandlerAdded(XmlTagInsertHandler.INSTANCE) diff --git a/xml/xml-psi-impl/src/com/intellij/html/webSymbols/WebSymbolsHtmlQueryConfigurator.kt b/xml/xml-psi-impl/src/com/intellij/html/webSymbols/WebSymbolsHtmlQueryConfigurator.kt index c2195ddbc731..dbf8099ea212 100644 --- a/xml/xml-psi-impl/src/com/intellij/html/webSymbols/WebSymbolsHtmlQueryConfigurator.kt +++ b/xml/xml-psi-impl/src/com/intellij/html/webSymbols/WebSymbolsHtmlQueryConfigurator.kt @@ -118,17 +118,12 @@ class WebSymbolsHtmlQueryConfigurator : WebSymbolsQueryConfigurator { class HtmlSymbolsCodeCompletionItemCustomizer : WebSymbolCodeCompletionItemCustomizer { override fun customize(item: WebSymbolCodeCompletionItem, framework: FrameworkId?, - namespace: SymbolNamespace, - kind: SymbolKind, + qualifiedKind: WebSymbolQualifiedKind, location: PsiElement): WebSymbolCodeCompletionItem = - item.let { - if (namespace == WebSymbol.NAMESPACE_HTML) - when (kind) { - WebSymbol.KIND_HTML_ELEMENTS -> it.withTypeText(it.symbol?.origin?.library) - WebSymbol.KIND_HTML_ATTRIBUTES -> it // TODO - we can figure out the actual type with full match provided - else -> it - } - else it + when (qualifiedKind) { + WebSymbol.HTML_ELEMENTS -> item.withTypeText(item.symbol?.origin?.library) + WebSymbol.HTML_ATTRIBUTES -> item // TODO - we can figure out the actual type with full match provided + else -> item } } diff --git a/xml/xml-psi-impl/src/com/intellij/html/webSymbols/attributeValues/WebSymbolHtmlAttributeValueCompletionProvider.kt b/xml/xml-psi-impl/src/com/intellij/html/webSymbols/attributeValues/WebSymbolHtmlAttributeValueCompletionProvider.kt index b42d97a6aff5..57308270af8c 100644 --- a/xml/xml-psi-impl/src/com/intellij/html/webSymbols/attributeValues/WebSymbolHtmlAttributeValueCompletionProvider.kt +++ b/xml/xml-psi-impl/src/com/intellij/html/webSymbols/attributeValues/WebSymbolHtmlAttributeValueCompletionProvider.kt @@ -32,14 +32,15 @@ class WebSymbolHtmlAttributeValueCompletionProvider : WebSymbolsCompletionProvid val providedNames = mutableSetOf(context.name) if (type == Type.ENUM) { - processCompletionQueryResults(queryExecutor, patchedResultSet, WebSymbol.NAMESPACE_HTML, - WebSymbol.KIND_HTML_ATTRIBUTE_VALUES, name, position, context, queryScope, providedNames) { + processCompletionQueryResults(queryExecutor, patchedResultSet, WebSymbol.HTML_ATTRIBUTE_VALUES, name, + position, context, queryScope, providedNames) { if (!it.completeAfterInsert) { it.addToResult(parameters, patchedResultSet) } } - } else { - processCompletionQueryResults(queryExecutor, patchedResultSet, WebSymbol.NAMESPACE_HTML, WebSymbol.KIND_HTML_ATTRIBUTE_VALUES, name, + } + else { + processCompletionQueryResults(queryExecutor, patchedResultSet, WebSymbol.HTML_ATTRIBUTE_VALUES, name, position, context, queryScope, providedNames) { it.addToResult(parameters, patchedResultSet) } diff --git a/xml/xml-psi-impl/src/com/intellij/html/webSymbols/elements/WebSymbolElementDescriptor.kt b/xml/xml-psi-impl/src/com/intellij/html/webSymbols/elements/WebSymbolElementDescriptor.kt index e3d3c35d008e..842044600ed9 100644 --- a/xml/xml-psi-impl/src/com/intellij/html/webSymbols/elements/WebSymbolElementDescriptor.kt +++ b/xml/xml-psi-impl/src/com/intellij/html/webSymbols/elements/WebSymbolElementDescriptor.kt @@ -52,12 +52,13 @@ open class WebSymbolElementDescriptor private constructor(private val tag: XmlTa WebSymbolsQueryExecutorFactory.create(tag) .runListSymbolsQuery(qualifiedKind, expandPatterns, virtualSymbols, abstractSymbols, strictScope, listOf(symbol)) - fun runCodeCompletionQuery(qualifiedName: WebSymbolQualifiedName, + fun runCodeCompletionQuery(qualifiedKind: WebSymbolQualifiedKind, + name: String, /** Position to complete at in the last segment of the path **/ position: Int, virtualSymbols: Boolean = true): List = WebSymbolsQueryExecutorFactory.create(tag) - .runCodeCompletionQuery(qualifiedName, position, virtualSymbols, listOf(symbol)) + .runCodeCompletionQuery(qualifiedKind, name, position, virtualSymbols, listOf(symbol)) override fun getQualifiedName(): String { return name