@@ -6,6 +6,7 @@ import com.emberjs.hbs.ResolvedReference
66import com.emberjs.psi.EmberNamedElement
77import com.emberjs.utils.ifTrue
88import com.intellij.lang.ecmascript6.psi.ES6ImportSpecifier
9+ import com.intellij.lang.javascript.JavaScriptSupportLoader
910import com.intellij.lang.javascript.psi.JSPsiNamedElementBase
1011import com.intellij.lang.javascript.psi.JSVariable
1112import com.intellij.openapi.application.QueryExecutorBase
@@ -23,66 +24,86 @@ import com.intellij.util.Processor
2324
2425class GtsReferenceSearcher : QueryExecutorBase <PsiReference ?, ReferencesSearch .SearchParameters >(true ) {
2526 override fun processQuery (queryParameters : ReferencesSearch .SearchParameters , consumer : Processor <in PsiReference ?>) {
26- val element = queryParameters.elementToSearch
27+ var element = queryParameters.elementToSearch
2728 if (element is JSPsiNamedElementBase ) {
2829 val name = element.name
2930 if (name != null ) {
31+ if (element.containingFile is GtsFile ){
32+ if (element is JSVariable ) {
33+ val psi = element.containingFile.viewProvider.getPsi(JavaScriptSupportLoader .TYPESCRIPT ) ? : element.containingFile.viewProvider.getPsi(JavaScriptSupportLoader .ECMA_SCRIPT_6 )
34+ element = psi.findElementAt(element.textOffset)?.parent ? : element
35+ }
36+ }
3037 val effectiveScope = if (element is JSVariable && (queryParameters.effectiveSearchScope as ? LocalSearchScope )?.scope?.size == 1 ) {
3138 LocalSearchScope (element.containingFile)
3239 } else {
3340 queryParameters.effectiveSearchScope
3441 }
3542 val collector = queryParameters.optimizer
36- collector.searchWord(name, effectiveScope, 1 .toShort(), true , element, MyProcessor (queryParameters))
43+ collector.searchWord(name, effectiveScope, 1 .toShort(), true , element, MyProcessor (queryParameters, element ))
3744 }
3845 }
3946 }
4047
41- private class MyProcessor (queryParameters : ReferencesSearch .SearchParameters ) : RequestResultProcessor() {
48+ private class MyProcessor (queryParameters : ReferencesSearch .SearchParameters , elementToSearch : PsiElement ) : RequestResultProcessor() {
4249 private val myQueryParameters: ReferencesSearch .SearchParameters
4350 private val myOwnCollector: SearchRequestCollector
51+ private val myElementToSearch: PsiElement
4452
4553 init {
4654 myQueryParameters = queryParameters
55+ myElementToSearch = elementToSearch
4756 myOwnCollector = SearchRequestCollector (queryParameters.optimizer.searchSession)
4857 }
4958
5059 override fun processTextOccurrence (element : PsiElement , offsetInElement : Int , consumer : Processor <in PsiReference >): Boolean {
51- if (myQueryParameters.elementToSearch .containingFile is GtsFile ) {
52- consumer.process(ResolvedReference (myQueryParameters.elementToSearch, myQueryParameters.elementToSearch ))
60+ if (myElementToSearch .containingFile is GtsFile ) {
61+ consumer.process(ResolvedReference (myElementToSearch, myElementToSearch ))
5362 return false
5463 }
5564 return if ((element is HbPsiElement && element.elementType == HbTokenTypes .ID ) || (element is XmlToken && element.parent is HtmlTag )) {
5665 val elem = (element is XmlToken && element.parent is HtmlTag ).ifTrue { element.parent } ? : element
57- var found = elem.reference?.isReferenceTo(myQueryParameters.elementToSearch) == true || elem.references.any {
58- it.isReferenceTo(myQueryParameters.elementToSearch)
66+ var foundRef = (elem.reference?.isReferenceTo(myElementToSearch) == true ).ifTrue { elem.reference } ? : elem.references.find {
67+ it.isReferenceTo(myElementToSearch)
68+ }
69+
70+ if (foundRef != null ) {
71+ consumer.process(foundRef)
72+ return false
5973 }
6074
61- if (! found) {
62- var resolved = elem.reference?.resolve()
63- if (resolved is EmberNamedElement ) {
64- resolved = resolved.target
65- }
66- if (resolved == myQueryParameters.elementToSearch) {
67- return false
68- }
69- found = (resolved as ? ES6ImportSpecifier )?.let {
70- val results = it.multiResolve(false )
71- results.any { it.element == myQueryParameters.elementToSearch }
72- } ? : false
75+ var resolved = elem.reference?.resolve()
76+ if (resolved is EmberNamedElement ) {
77+ resolved = resolved.target
78+ }
79+ if (resolved == myElementToSearch) {
80+ foundRef = elem.reference
81+ consumer.process(foundRef)
82+ return false
83+ }
84+ foundRef = (resolved as ? ES6ImportSpecifier )?.let {
85+ val results = it.multiResolve(false )
86+ results.find { it.element == myElementToSearch }?.let { ResolvedReference (element, myElementToSearch) }
87+ }
88+ if (foundRef != null ) {
89+ consumer.process(foundRef)
90+ return false
91+ }
92+ val ref = elem.references.find { it.resolve() is ES6ImportSpecifier || it.resolve() is EmberNamedElement }
93+ resolved = ref?.resolve()
94+ if (resolved is EmberNamedElement ) {
95+ resolved = resolved.target
96+ }
97+ if (resolved == myElementToSearch) {
98+ consumer.process(ref)
99+ return false
73100 }
74- if (! found) {
75- var resolved = elem.references.find { it.resolve() is ES6ImportSpecifier || it.resolve() is EmberNamedElement }?.resolve()
76- if (resolved is EmberNamedElement ) {
77- resolved = resolved.target
78- }
79- if (resolved == myQueryParameters.elementToSearch) {
80- return false
81- }
82- found = (resolved as ? ES6ImportSpecifier )?.let {
83- val results = it.multiResolve(false )
84- results.any { it.element == myQueryParameters.elementToSearch }
85- } ? : false
101+ val found = (resolved as ? ES6ImportSpecifier )?.let {
102+ val results = it.multiResolve(false )
103+ results.any { it.element == myElementToSearch }
104+ } ? : false
105+ if (found) {
106+ consumer.process(ref)
86107 }
87108 return ! found
88109 } else {
0 commit comments