mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 11:50:54 +07:00
[api] Symbol Reference Search
GitOrigin-RevId: 726bd49dc14d557c5a97da27470e21da9bd203b5
This commit is contained in:
committed by
intellij-monorepo-bot
parent
9aa4b0cfa6
commit
a0ee74c04e
@@ -1,8 +1,11 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.model.search;
|
||||
|
||||
import com.intellij.model.Symbol;
|
||||
import com.intellij.model.SymbolReference;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
import com.intellij.util.Query;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -31,6 +34,12 @@ public interface SearchService {
|
||||
@NotNull
|
||||
SearchWordQueryBuilder searchWord(@NotNull Project project, @NotNull String word);
|
||||
|
||||
/**
|
||||
* Creates new query for searching references by symbol.
|
||||
*/
|
||||
@NotNull
|
||||
Query<SymbolReference> searchSymbol(@NotNull Project project, @NotNull Symbol symbol, @NotNull SearchScope searchScope);
|
||||
|
||||
/**
|
||||
* Merges a list of queries into a single query.
|
||||
*/
|
||||
|
||||
@@ -15,6 +15,8 @@ import java.util.Collection;
|
||||
* Implementations should be registered at {@code com.intellij.searcher} extension point.
|
||||
* <p/>
|
||||
* It's highly advised to use {@link SearchService} methods to build additional queries.
|
||||
*
|
||||
* @see SymbolReferenceSearcher
|
||||
*/
|
||||
public interface Searcher<P extends SearchParameters<R>, R> {
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.model.search;
|
||||
|
||||
import com.intellij.model.Symbol;
|
||||
import com.intellij.model.SymbolReference;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public interface SymbolReferenceSearchParameters extends SearchParameters<SymbolReference> {
|
||||
|
||||
/**
|
||||
* @return target symbol to search for references
|
||||
*/
|
||||
@NotNull
|
||||
Symbol getSymbol();
|
||||
|
||||
@NotNull
|
||||
SearchScope getSearchScope();
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.model.search;
|
||||
|
||||
import com.intellij.model.Symbol;
|
||||
import com.intellij.model.SymbolReference;
|
||||
|
||||
/**
|
||||
* Convenience interface for requestors providing additional queries to find {@link SymbolReference}s by {@link Symbol}.
|
||||
*/
|
||||
public interface SymbolReferenceSearcher extends Searcher<SymbolReferenceSearchParameters, SymbolReference> {
|
||||
}
|
||||
@@ -1,10 +1,15 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.model.search.impl
|
||||
|
||||
import com.intellij.model.Pointer
|
||||
import com.intellij.model.Symbol
|
||||
import com.intellij.model.SymbolReference
|
||||
import com.intellij.model.search.SearchParameters
|
||||
import com.intellij.model.search.SearchService
|
||||
import com.intellij.model.search.SearchWordQueryBuilder
|
||||
import com.intellij.model.search.SymbolReferenceSearchParameters
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.search.SearchScope
|
||||
import com.intellij.util.EmptyQuery
|
||||
import com.intellij.util.Query
|
||||
|
||||
@@ -14,6 +19,21 @@ class SearchServiceImpl : SearchService {
|
||||
|
||||
override fun searchWord(project: Project, word: String): SearchWordQueryBuilder = SearchWordQueryBuilderImpl(project, word)
|
||||
|
||||
override fun searchSymbol(project: Project, symbol: Symbol, searchScope: SearchScope): Query<SymbolReference> {
|
||||
return searchParameters(DefaultSymbolReferenceSearchParameters(project, symbol.createPointer(), searchScope))
|
||||
}
|
||||
|
||||
private class DefaultSymbolReferenceSearchParameters(
|
||||
private val project: Project,
|
||||
private val pointer: Pointer<out Symbol>,
|
||||
private val searchScope: SearchScope
|
||||
) : SymbolReferenceSearchParameters {
|
||||
override fun areValid(): Boolean = pointer.dereference() != null
|
||||
override fun getProject(): Project = project
|
||||
override fun getSymbol(): Symbol = requireNotNull(pointer.dereference()) { "#getSymbol() must not be called on invalid parameters" }
|
||||
override fun getSearchScope(): SearchScope = searchScope
|
||||
}
|
||||
|
||||
override fun <T : Any?> merge(queries: List<Query<out T>>): Query<out T> {
|
||||
return when (queries.size) {
|
||||
0 -> EmptyQuery.getEmptyQuery()
|
||||
|
||||
Reference in New Issue
Block a user