Use QUALIFIER info in JetFileReferenceResolver

This commit is contained in:
Alexey Sedunov
2014-10-16 19:23:59 +04:00
parent f3a219f062
commit 80321b610a
@@ -23,15 +23,12 @@ import org.jetbrains.jet.lang.psi.JetFile
import org.jetbrains.jet.lang.psi.JetTreeVisitorVoid import org.jetbrains.jet.lang.psi.JetTreeVisitorVoid
import com.intellij.util.containers.HashMap import com.intellij.util.containers.HashMap
import org.jetbrains.jet.lang.psi.JetUserType import org.jetbrains.jet.lang.psi.JetUserType
import org.jetbrains.jet.lang.psi.JetDotQualifiedExpression
import org.jetbrains.jet.lang.psi.JetExpression import org.jetbrains.jet.lang.psi.JetExpression
import org.jetbrains.jet.lang.psi.JetCallExpression import org.jetbrains.jet.lang.psi.JetCallExpression
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression import org.jetbrains.jet.lang.psi.JetSimpleNameExpression
import java.util.Collections import java.util.Collections
import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession
import org.jetbrains.jet.lang.psi.JetQualifiedExpression import org.jetbrains.jet.lang.psi.JetQualifiedExpression
import org.jetbrains.jet.lang.descriptors.ClassDescriptor
import org.jetbrains.jet.lang.descriptors.PackageViewDescriptor
object JetFileReferencesResolver { object JetFileReferencesResolver {
fun resolve( fun resolve(
@@ -79,24 +76,23 @@ object JetFileReferencesResolver {
} }
} }
private fun JetExpression.isReceiver(): Boolean { override fun visitQualifiedExpression(expression: JetQualifiedExpression) {
val parent = getParent() val receiverExpression = expression.getReceiverExpression()
if (parent !is JetQualifiedExpression) return false if (resolveQualifiers || resolveSession.resolveToElement(expression)[BindingContext.QUALIFIER, receiverExpression] == null) {
if (parent.getReceiverExpression() == this) return true receiverExpression.accept(this)
}
val parentParent = parent.getParent() val referenceExpression = expression.getSelectorExpression()?.referenceExpression()
return parentParent is JetQualifiedExpression && parentParent.getReceiverExpression() == parent if (referenceExpression != null) {
resolveMap[referenceExpression] = resolveSession.resolveToElement(referenceExpression)
}
expression.getSelectorExpression()?.accept(this)
} }
override fun visitSimpleNameExpression(expression: JetSimpleNameExpression) { override fun visitSimpleNameExpression(expression: JetSimpleNameExpression) {
val context = resolveSession.resolveToElement(expression) if (resolveShortNames) {
val descriptor = context[BindingContext.REFERENCE_TARGET, expression] resolveMap[expression] = resolveSession.resolveToElement(expression)
if ((descriptor is ClassDescriptor || descriptor is PackageViewDescriptor) && expression.isReceiver()) {
if (!resolveQualifiers) return
} }
if (!resolveShortNames) return
resolveMap[expression] = context
} }
} }
} }