Use QUALIFIER info in JetFileReferenceResolver
This commit is contained in:
+12
-16
@@ -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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user