Remove scope from Qualifier

This commit is contained in:
Stanislav Erokhin
2016-02-22 20:53:06 +03:00
parent 4b3c6d52ef
commit f130de2468
7 changed files with 70 additions and 35 deletions
@@ -407,16 +407,17 @@ class QualifiedExpressionResolver(val symbolUsageValidator: SymbolUsageValidator
): Qualifier? {
val name = expression.getReferencedNameAsName()
val location = KotlinLookupLocation(expression)
val qualifierDescriptor = when (receiver) {
is PackageQualifier -> {
val childPackageFQN = receiver.descriptor.fqName.child(name)
receiver.descriptor.module.getPackage(childPackageFQN).check { !it.isEmpty() } ?:
receiver.descriptor.memberScope.getContributedClassifier(name, KotlinLookupLocation(expression))
receiver.descriptor.memberScope.getContributedClassifier(name, location)
}
is ClassQualifier -> receiver.scope.getContributedClassifier(name, KotlinLookupLocation(expression))
null -> context.scope.findClassifier(name, KotlinLookupLocation(expression)) ?:
is ClassQualifier -> receiver.staticScope.getContributedClassifier(name, location)
null -> context.scope.findClassifier(name, location) ?:
context.scope.ownerDescriptor.module.getPackage(FqName.ROOT.child(name)).check { !it.isEmpty() }
is ReceiverValue -> receiver.type.memberScope.memberScopeAsImportingScope().findClassifier(name, KotlinLookupLocation(expression))
is ReceiverValue -> receiver.type.memberScope.memberScopeAsImportingScope().findClassifier(name, location)
else -> null
}
@@ -22,11 +22,8 @@ import org.jetbrains.kotlin.psi.KtSimpleNameExpression
import org.jetbrains.kotlin.psi.psiUtil.getTopmostParentQualifiedExpressionForSelector
import org.jetbrains.kotlin.resolve.descriptorUtil.classValueType
import org.jetbrains.kotlin.resolve.scopes.ChainedMemberScope
import org.jetbrains.kotlin.resolve.scopes.FilteringScope
import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.resolve.scopes.ScopeUtils
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.utils.addIfNotNull
import java.util.*
interface QualifierReceiver : Receiver {
@@ -40,8 +37,6 @@ abstract class Qualifier(val referenceExpression: KtSimpleNameExpression) : Qual
get() = referenceExpression.getTopmostParentQualifiedExpressionForSelector() ?: referenceExpression
abstract val descriptor: DeclarationDescriptor
abstract val scope: MemberScope
}
class PackageQualifier(
@@ -49,8 +44,6 @@ class PackageQualifier(
override val descriptor: PackageViewDescriptor
) : Qualifier(referenceExpression) {
override val scope: MemberScope get() = descriptor.memberScope
override val staticScope: MemberScope get() = descriptor.memberScope
override val classValueReceiver: ReceiverValue? get() = null
@@ -62,7 +55,6 @@ class TypeParameterQualifier(
referenceExpression: KtSimpleNameExpression,
override val descriptor: TypeParameterDescriptor
) : Qualifier(referenceExpression) {
override val scope: MemberScope get() = MemberScope.Empty
override val staticScope: MemberScope get() = MemberScope.Empty
override val classValueReceiver: ReceiverValue? get() = null
}
@@ -75,30 +67,13 @@ class ClassQualifier(
ClassValueReceiver(this, it)
}
override val scope: MemberScope get() {
val scopes = ArrayList<MemberScope>(3)
val classObjectTypeScope = descriptor.classValueType?.memberScope?.let {
FilteringScope(it) { it !is ClassDescriptor }
}
scopes.addIfNotNull(classObjectTypeScope)
scopes.add(descriptor.staticScope)
if (descriptor.kind != ClassKind.ENUM_ENTRY) {
scopes.add(descriptor.unsubstitutedInnerClassesScope)
}
return ChainedMemberScope("Member scope for ${descriptor.name} as class or object", scopes)
}
override val staticScope: MemberScope get() {
val scopes = ArrayList<MemberScope>(2)
scopes.add(descriptor.staticScope)
if (descriptor.kind != ClassKind.ENUM_ENTRY) {
scopes.add(ScopeUtils.getStaticNestedClassesScope(descriptor))
scopes.add(descriptor.unsubstitutedInnerClassesScope)
}
return ChainedMemberScope("Static scope for ${descriptor.name} as class or object", scopes)