diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyReferenceBase.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyReferenceBase.kt index 2025e138b995..d3f05df069cf 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyReferenceBase.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyReferenceBase.kt @@ -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( - element: T -) : PsiPolyVariantReferenceBase(element), GroovyReference { +abstract class GroovyReferenceBase(element: T) : PsiPolyVariantReferenceBase(element), GroovyReference { - override fun resolve(): PsiElement? = super.resolve() + final override fun resolve(): PsiElement? = super.resolve() + + final override fun resolve(incomplete: Boolean): Collection { + return TypeInferenceHelper.getCurrentContext().resolve(this, incomplete, Resolver) + } + + private object Resolver : GroovyResolver> { + override fun resolve(ref: GroovyReferenceBase<*>, incomplete: Boolean) = ref.doResolve(incomplete) + } + + abstract fun doResolve(incomplete: Boolean): Collection } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionReference.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionReference.kt index b739942e430b..67298bbe0171 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionReference.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionReference.kt @@ -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(ref) { - override fun resolve(incomplete: Boolean): Collection { - return TypeInferenceHelper.getCurrentContext().resolve(this, incomplete, Resolver) - } - - private object Resolver : GroovyResolver { - override fun resolve(ref: GrReferenceExpressionReference, incomplete: Boolean): Collection { - return ref.ref.doPolyResolve(incomplete, ref.forceRValue) - } + override fun doResolve(incomplete: Boolean): Collection { + return element.doPolyResolve(incomplete, forceRValue) } } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/path/GrIndexPropertyReference.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/path/GrIndexPropertyReference.kt index b2afd374c96d..bb41400a8ab7 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/path/GrIndexPropertyReference.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/path/GrIndexPropertyReference.kt @@ -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(element) { @@ -30,14 +28,8 @@ class GrIndexPropertyReference(element: GrIndexProperty, val rhs: Boolean) : Gro return TextRange.from(rangeStart, 1) } - override fun resolve(incomplete: Boolean): Collection { - return TypeInferenceHelper.getCurrentContext().resolve(this, incomplete, Resolver) - } - - private object Resolver : GroovyResolver { - override fun resolve(ref: GrIndexPropertyReference, incomplete: Boolean): Collection { - return ref.element?.doMultiResolve(ref.rhs, incomplete) ?: emptyList() - } + override fun doResolve(incomplete: Boolean): Collection { + return element.doMultiResolve(rhs, incomplete) ?: emptyList() } }