1- package com.github.tempest.framework
1+ package com.github.tempest.framework.views.references
22
3- import com.github.tempest.framework.php.getPhpViewVariables
4- import com.intellij.codeInsight.completion.InsertionContext
5- import com.intellij.codeInsight.completion.XmlAttributeInsertHandler
3+ import com.github.tempest.framework.TempestFrameworkUtil
64import com.intellij.openapi.vfs.findPsiFile
75import com.intellij.patterns.PlatformPatterns
86import com.intellij.patterns.XmlPatterns
97import com.intellij.psi.PsiElement
10- import com.intellij.psi.PsiPolyVariantReferenceBase
118import com.intellij.psi.PsiReference
129import com.intellij.psi.PsiReferenceBase
1310import com.intellij.psi.PsiReferenceContributor
1411import com.intellij.psi.PsiReferenceProvider
1512import com.intellij.psi.PsiReferenceRegistrar
16- import com.intellij.psi.PsiReferenceRegistrar.HIGHER_PRIORITY
17- import com.intellij.psi.ResolveResult
1813import com.intellij.psi.html.HtmlTag
1914import com.intellij.psi.search.FilenameIndex
2015import com.intellij.psi.search.GlobalSearchScope
2116import com.intellij.psi.xml.XmlAttribute
2217import com.intellij.psi.xml.XmlChildRole
2318import com.intellij.util.ProcessingContext
24- import com.jetbrains.php.completion.PhpLookupElement
25- import com.jetbrains.php.lang.psi.PhpFile
2619
2720class ComponentReferenceContributor : PsiReferenceContributor () {
2821 override fun registerReferenceProviders (registrar : PsiReferenceRegistrar ) {
@@ -69,48 +62,14 @@ class ComponentReferenceContributor : PsiReferenceContributor() {
6962 element : PsiElement ,
7063 context : ProcessingContext
7164 ): Array <out PsiReference > {
72- val result = mutableListOf<PsiReference >()
7365 val attribute = element as ? XmlAttribute ? : return emptyArray()
7466 val htmlTag = attribute.parent as ? HtmlTag ? : return emptyArray()
7567
76- result.add(TempestAttributeReference (element, htmlTag))
77- return result.toTypedArray()
68+ return arrayOf(TempestAttributeReference (element, htmlTag))
7869// .apply { println("found references for ${element} ${this.joinToString { it.toString() }}") }
7970 }
8071 },
81- HIGHER_PRIORITY
72+ PsiReferenceRegistrar . HIGHER_PRIORITY ,
8273 )
8374 }
84- }
85-
86- class TempestAttributeReference (element : XmlAttribute , private val htmlTag : HtmlTag ) :
87- PsiPolyVariantReferenceBase <PsiElement >(element, element.nameElement.textRangeInParent, false ) {
88- override fun getVariants (): Array <out Any > {
89- val fileReferences = htmlTag.references.filter { it is Immediate <* > }
90-
91- val lookupPrefix = element.text.commonPrefixWith(" ::" )
92-
93- return fileReferences
94- .mapNotNull { it.resolve() as ? PhpFile }
95- .flatMap { it.getPhpViewVariables() }
96- .flatMap {
97- listOf (
98- object : PhpLookupElement (it) {
99- override fun getLookupString () = lookupPrefix + lookupString
100- override fun getAllLookupStrings () = setOf (lookupPrefix + lookupString)
101- override fun handleInsert (context : InsertionContext ) {
102- XmlAttributeInsertHandler .INSTANCE .handleInsert(context, this )
103- }
104- },
105- )
106- }
107- .toTypedArray()
108- }
109-
110- override fun multiResolve (incompleteCode : Boolean ): Array <out ResolveResult ?> {
111- // println("resolve ${element.text} for ${htmlTag.name}")
112- // println("range ${element.textRangeInParent} ${element.textRange}")
113-
114- return emptyArray()
115- }
116- }
75+ }
0 commit comments