[groovy] move resolver logic to GroovyReferenceBase

This commit is contained in:
Daniil Ovchinnikov
2018-10-02 19:49:42 +03:00
parent 3bf2f2e525
commit 18ea3d076e
3 changed files with 20 additions and 25 deletions
@@ -4,10 +4,21 @@ package org.jetbrains.plugins.groovy.lang.psi.impl
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiPolyVariantReferenceBase
import org.jetbrains.plugins.groovy.lang.psi.api.GroovyReference
import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult
import org.jetbrains.plugins.groovy.lang.psi.dataFlow.types.TypeInferenceHelper
import org.jetbrains.plugins.groovy.lang.resolve.GroovyResolver
abstract class GroovyReferenceBase<T : PsiElement>(
element: T
) : PsiPolyVariantReferenceBase<T>(element), GroovyReference {
abstract class GroovyReferenceBase<T : PsiElement>(element: T) : PsiPolyVariantReferenceBase<T>(element), GroovyReference {
override fun resolve(): PsiElement? = super<GroovyReference>.resolve()
final override fun resolve(): PsiElement? = super<GroovyReference>.resolve()
final override fun resolve(incomplete: Boolean): Collection<GroovyResolveResult> {
return TypeInferenceHelper.getCurrentContext().resolve(this, incomplete, Resolver)
}
private object Resolver : GroovyResolver<GroovyReferenceBase<*>> {
override fun resolve(ref: GroovyReferenceBase<*>, incomplete: Boolean) = ref.doResolve(incomplete)
}
abstract fun doResolve(incomplete: Boolean): Collection<GroovyResolveResult>
}
@@ -2,22 +2,14 @@
package org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions
import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult
import org.jetbrains.plugins.groovy.lang.psi.dataFlow.types.TypeInferenceHelper
import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyReferenceBase
import org.jetbrains.plugins.groovy.lang.resolve.GroovyResolver
class GrReferenceExpressionReference(
private val ref: GrReferenceExpressionImpl,
ref: GrReferenceExpressionImpl,
private val forceRValue: Boolean
) : GroovyReferenceBase<GrReferenceExpressionImpl>(ref) {
override fun resolve(incomplete: Boolean): Collection<GroovyResolveResult> {
return TypeInferenceHelper.getCurrentContext().resolve(this, incomplete, Resolver)
}
private object Resolver : GroovyResolver<GrReferenceExpressionReference> {
override fun resolve(ref: GrReferenceExpressionReference, incomplete: Boolean): Collection<GroovyResolveResult> {
return ref.ref.doPolyResolve(incomplete, ref.forceRValue)
}
override fun doResolve(incomplete: Boolean): Collection<GroovyResolveResult> {
return element.doPolyResolve(incomplete, forceRValue)
}
}
@@ -6,13 +6,11 @@ import com.intellij.psi.PsiType
import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrAssignmentExpression
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.path.GrIndexProperty
import org.jetbrains.plugins.groovy.lang.psi.dataFlow.types.TypeInferenceHelper
import org.jetbrains.plugins.groovy.lang.psi.impl.GrTupleType
import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyReferenceBase
import org.jetbrains.plugins.groovy.lang.psi.util.getArgumentListType
import org.jetbrains.plugins.groovy.lang.psi.util.isClassLiteral
import org.jetbrains.plugins.groovy.lang.psi.util.isSimpleArrayAccess
import org.jetbrains.plugins.groovy.lang.resolve.GroovyResolver
import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil
class GrIndexPropertyReference(element: GrIndexProperty, val rhs: Boolean) : GroovyReferenceBase<GrIndexProperty>(element) {
@@ -30,14 +28,8 @@ class GrIndexPropertyReference(element: GrIndexProperty, val rhs: Boolean) : Gro
return TextRange.from(rangeStart, 1)
}
override fun resolve(incomplete: Boolean): Collection<GroovyResolveResult> {
return TypeInferenceHelper.getCurrentContext().resolve(this, incomplete, Resolver)
}
private object Resolver : GroovyResolver<GrIndexPropertyReference> {
override fun resolve(ref: GrIndexPropertyReference, incomplete: Boolean): Collection<GroovyResolveResult> {
return ref.element?.doMultiResolve(ref.rhs, incomplete) ?: emptyList()
}
override fun doResolve(incomplete: Boolean): Collection<GroovyResolveResult> {
return element.doMultiResolve(rhs, incomplete) ?: emptyList()
}
}