diff --git a/platform/webSymbols/api-dump.txt b/platform/webSymbols/api-dump.txt index 17a6633ef2dc..d1c488de418d 100644 --- a/platform/webSymbols/api-dump.txt +++ b/platform/webSymbols/api-dump.txt @@ -122,3 +122,5 @@ f:com.intellij.webSymbols.utils.WebSymbolUtils - sf:withMatchedName(com.intellij.webSymbols.WebSymbol,java.lang.String):com.intellij.webSymbols.WebSymbol - sf:withNavigationTarget(com.intellij.webSymbols.WebSymbol,com.intellij.psi.PsiElement):com.intellij.webSymbols.WebSymbol - sf:withOffset(java.util.List,I):java.util.List +- sf:withSegments(com.intellij.webSymbols.query.WebSymbolMatch,java.util.List):com.intellij.webSymbols.query.WebSymbolMatch +- sf:withSymbols(com.intellij.webSymbols.WebSymbolNameSegment,java.util.List):com.intellij.webSymbols.WebSymbolNameSegment diff --git a/platform/webSymbols/src/com/intellij/webSymbols/impl/WebSymbolNameSegmentImpl.kt b/platform/webSymbols/src/com/intellij/webSymbols/impl/WebSymbolNameSegmentImpl.kt index 58c4966cd7b8..b4596a233f6e 100644 --- a/platform/webSymbols/src/com/intellij/webSymbols/impl/WebSymbolNameSegmentImpl.kt +++ b/platform/webSymbols/src/com/intellij/webSymbols/impl/WebSymbolNameSegmentImpl.kt @@ -57,6 +57,10 @@ class WebSymbolNameSegmentImpl internal constructor( WebSymbolNameSegmentImpl(start, end, symbols, problem, displayName, matchScore, forcedSymbolKinds, explicitApiStatus, explicitPriority, explicitProximity) + internal fun withSymbols(symbols: List) = + WebSymbolNameSegmentImpl(start, end, symbols, problem, displayName, + matchScore, forcedSymbolKinds, explicitApiStatus, explicitPriority, explicitProximity) + internal fun copy( apiStatus: WebSymbolApiStatus?, priority: WebSymbol.Priority?, diff --git a/platform/webSymbols/src/com/intellij/webSymbols/query/impl/WebSymbolMatchImpl.kt b/platform/webSymbols/src/com/intellij/webSymbols/query/impl/WebSymbolMatchImpl.kt index 0e0311ddf4b7..41515e8403c4 100644 --- a/platform/webSymbols/src/com/intellij/webSymbols/query/impl/WebSymbolMatchImpl.kt +++ b/platform/webSymbols/src/com/intellij/webSymbols/query/impl/WebSymbolMatchImpl.kt @@ -168,6 +168,9 @@ internal open class WebSymbolMatchImpl private constructor( override fun hashCode(): Int = name.hashCode() + internal fun withSegments(segments: List): WebSymbolMatch = + create(matchedName, segments, namespace, kind, origin, explicitPriority, explicitProximity) + class ReverseListIterator(list: List) : Iterator { private val iterator = list.listIterator(list.size) @@ -191,7 +194,7 @@ internal open class WebSymbolMatchImpl private constructor( origin: WebSymbolOrigin, explicitPriority: Priority?, explicitProximity: Int?): WebSymbolMatch = - if (nameSegments.all { it.start == it.end || (it.symbols.isNotEmpty() && it.symbols.all { symbol -> symbol is PsiSourcedWebSymbol }) }) + if (nameSegments.all { it.start == it.end || (it.symbols.isNotEmpty() && it.symbols.any { symbol -> symbol is PsiSourcedWebSymbol }) }) PsiSourcedWebSymbolMatch(matchedName, nameSegments, namespace, kind, origin, explicitPriority, explicitProximity) else WebSymbolMatchImpl(matchedName, nameSegments, namespace, kind, origin, diff --git a/platform/webSymbols/src/com/intellij/webSymbols/utils/WebSymbolUtils.kt b/platform/webSymbols/src/com/intellij/webSymbols/utils/WebSymbolUtils.kt index 0a8ba278c71b..41e79556d982 100644 --- a/platform/webSymbols/src/com/intellij/webSymbols/utils/WebSymbolUtils.kt +++ b/platform/webSymbols/src/com/intellij/webSymbols/utils/WebSymbolUtils.kt @@ -20,11 +20,13 @@ import com.intellij.util.containers.Stack import com.intellij.webSymbols.* import com.intellij.webSymbols.completion.WebSymbolCodeCompletionItem import com.intellij.webSymbols.html.WebSymbolHtmlAttributeValue +import com.intellij.webSymbols.impl.WebSymbolNameSegmentImpl import com.intellij.webSymbols.impl.sortSymbolsByPriority import com.intellij.webSymbols.impl.withOffset import com.intellij.webSymbols.impl.withRange import com.intellij.webSymbols.patterns.impl.applyIcons import com.intellij.webSymbols.query.* +import com.intellij.webSymbols.query.impl.WebSymbolMatchImpl import com.intellij.webSymbols.references.WebSymbolReferenceProblem.ProblemKind import java.util.* import javax.swing.Icon @@ -118,6 +120,12 @@ fun WebSymbol.unwrapMatchedSymbols(): Sequence = } } +fun WebSymbolNameSegment.withSymbols(symbols: List): WebSymbolNameSegment = + (this as WebSymbolNameSegmentImpl).withSymbols(symbols) + +fun WebSymbolMatch.withSegments(segments: List): WebSymbolMatch = + (this as WebSymbolMatchImpl).withSegments(segments) + fun WebSymbol.match(nameToMatch: String, params: WebSymbolsNameMatchQueryParams, context: Stack): List {