Rewrite Java resolve to use static class scope instead of synthesized packages

#KT-4149 Fixed
 #KT-4839 Fixed
This commit is contained in:
Alexander Udalov
2014-09-03 14:42:03 +04:00
parent 75df4a9ad8
commit bcfb5f3b09
41 changed files with 217 additions and 419 deletions
@@ -24,14 +24,10 @@ import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.plugin.project.ResolveSessionForBodies;
import org.jetbrains.jet.plugin.quickfix.ImportInsertHelper;
import org.jetbrains.jet.renderer.DescriptorRenderer;
import java.util.HashSet;
import com.intellij.psi.util.PsiTreeUtil
import java.util.ArrayList
import org.jetbrains.jet.lang.psi.psiUtil.getParentByType
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPropertyDescriptor
import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyPackageFragmentForJavaClass
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaMethodDescriptor
import com.intellij.openapi.util.TextRange
import com.intellij.psi.PsiDocumentManager
import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession
@@ -245,19 +241,9 @@ public object ShortenReferences {
refExpression: JetReferenceExpression,
bindingContext: BindingContext
): PsiElement {
val receiverExpression = qualifiedExpression.getReceiverExpression()
val target = bindingContext[BindingContext.REFERENCE_TARGET, refExpression]
if (target != null) {
if ((target is JavaPropertyDescriptor || target is JavaMethodDescriptor) && receiverExpression is JetDotQualifiedExpression) {
val containingDescriptor = target.getContainingDeclaration()
if (containingDescriptor is LazyPackageFragmentForJavaClass) {
return shortenIfPossibleByDescriptor(receiverExpression, containingDescriptor.getCorrespondingClass(), bindingContext)
}
}
return shortenIfPossibleByDescriptor(qualifiedExpression, target, bindingContext)
}
return qualifiedExpression
if (target == null) return qualifiedExpression
return shortenIfPossibleByDescriptor(qualifiedExpression, target, bindingContext)
}
private fun instantiatedClass(calleeExpression: JetReferenceExpression): ClassDescriptor? {
@@ -18,16 +18,9 @@ package org.jetbrains.jet.plugin.completion.smart
import com.intellij.codeInsight.lookup.LookupElement
import org.jetbrains.jet.lang.types.TypeUtils
import org.jetbrains.jet.lang.descriptors.ClassDescriptor
import org.jetbrains.jet.lang.descriptors.*
import org.jetbrains.jet.lang.resolve.scopes.JetScope
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorWithVisibility
import org.jetbrains.jet.lang.descriptors.Visibilities
import org.jetbrains.jet.lang.descriptors.CallableDescriptor
import org.jetbrains.jet.lang.descriptors.ClassKind
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassDescriptor
import org.jetbrains.jet.lang.resolve.DescriptorUtils
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor
import com.intellij.codeInsight.lookup.LookupElementDecorator
import com.intellij.codeInsight.lookup.LookupElementPresentation
import org.jetbrains.jet.renderer.DescriptorRenderer
@@ -95,12 +88,7 @@ class StaticMembers(val bindingContext: BindingContext, val resolveSession: Reso
collection.addLookupElements(expectedInfos, classifier, { createLookupElement(descriptor, classDescriptor) })
}
if (classDescriptor is JavaClassDescriptor) {
val pseudoPackage = classDescriptor.getCorrespondingPackageFragment()
if (pseudoPackage != null) {
pseudoPackage.getMemberScope().getAllDescriptors().forEach(::processMember)
}
}
classDescriptor.getStaticScope().getAllDescriptors().forEach(::processMember)
val classObject = classDescriptor.getClassObjectDescriptor()
if (classObject != null) {