Minor. refactoring in Qualifier.

This commit is contained in:
Stanislav Erokhin
2016-02-22 21:12:36 +03:00
parent f130de2468
commit 226e690a86
3 changed files with 19 additions and 23 deletions
@@ -21,10 +21,7 @@ import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.resolve.descriptorUtil.classValueDescriptor import org.jetbrains.kotlin.resolve.descriptorUtil.classValueDescriptor
import org.jetbrains.kotlin.resolve.descriptorUtil.classValueTypeDescriptor import org.jetbrains.kotlin.resolve.descriptorUtil.classValueTypeDescriptor
import org.jetbrains.kotlin.resolve.descriptorUtil.hasCompanionObject import org.jetbrains.kotlin.resolve.descriptorUtil.hasCompanionObject
import org.jetbrains.kotlin.resolve.scopes.receivers.ClassQualifier import org.jetbrains.kotlin.resolve.scopes.receivers.*
import org.jetbrains.kotlin.resolve.scopes.receivers.PackageQualifier
import org.jetbrains.kotlin.resolve.scopes.receivers.Qualifier
import org.jetbrains.kotlin.resolve.scopes.receivers.TypeParameterQualifier
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator
import org.jetbrains.kotlin.types.expressions.ExpressionTypingContext import org.jetbrains.kotlin.types.expressions.ExpressionTypingContext
@@ -27,42 +27,44 @@ import org.jetbrains.kotlin.types.KotlinType
import java.util.* import java.util.*
interface QualifierReceiver : Receiver { interface QualifierReceiver : Receiver {
val descriptor: DeclarationDescriptor
val staticScope: MemberScope val staticScope: MemberScope
val classValueReceiver: ReceiverValue? val classValueReceiver: ReceiverValue?
} }
abstract class Qualifier(val referenceExpression: KtSimpleNameExpression) : QualifierReceiver { interface Qualifier : QualifierReceiver {
val expression: KtExpression val referenceExpression: KtSimpleNameExpression
get() = referenceExpression.getTopmostParentQualifiedExpressionForSelector() ?: referenceExpression
abstract val descriptor: DeclarationDescriptor
} }
val Qualifier.expression: KtExpression
get() = referenceExpression.getTopmostParentQualifiedExpressionForSelector() ?: referenceExpression
class PackageQualifier( class PackageQualifier(
referenceExpression: KtSimpleNameExpression, override val referenceExpression: KtSimpleNameExpression,
override val descriptor: PackageViewDescriptor override val descriptor: PackageViewDescriptor
) : Qualifier(referenceExpression) { ) : Qualifier {
override val staticScope: MemberScope get() = descriptor.memberScope
override val classValueReceiver: ReceiverValue? get() = null override val classValueReceiver: ReceiverValue? get() = null
override val staticScope: MemberScope get() = descriptor.memberScope
override fun toString() = "Package{$descriptor}" override fun toString() = "Package{$descriptor}"
} }
class TypeParameterQualifier( class TypeParameterQualifier(
referenceExpression: KtSimpleNameExpression, override val referenceExpression: KtSimpleNameExpression,
override val descriptor: TypeParameterDescriptor override val descriptor: TypeParameterDescriptor
) : Qualifier(referenceExpression) { ) : Qualifier {
override val staticScope: MemberScope get() = MemberScope.Empty
override val classValueReceiver: ReceiverValue? get() = null override val classValueReceiver: ReceiverValue? get() = null
override val staticScope: MemberScope get() = MemberScope.Empty
override fun toString() = "TypeParameter{$descriptor}"
} }
class ClassQualifier( class ClassQualifier(
referenceExpression: KtSimpleNameExpression, override val referenceExpression: KtSimpleNameExpression,
override val descriptor: ClassDescriptor override val descriptor: ClassDescriptor
) : Qualifier(referenceExpression) { ) : Qualifier {
override val classValueReceiver: ClassValueReceiver? = descriptor.classValueType?.let { override val classValueReceiver: ClassValueReceiver? = descriptor.classValueType?.let {
ClassValueReceiver(this, it) ClassValueReceiver(this, it)
} }
@@ -40,10 +40,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getCall
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
import org.jetbrains.kotlin.resolve.descriptorUtil.classValueType import org.jetbrains.kotlin.resolve.descriptorUtil.classValueType
import org.jetbrains.kotlin.resolve.scopes.receivers.ClassQualifier import org.jetbrains.kotlin.resolve.scopes.receivers.*
import org.jetbrains.kotlin.resolve.scopes.receivers.Qualifier
import org.jetbrains.kotlin.resolve.scopes.receivers.Receiver
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
import org.jetbrains.kotlin.resolve.source.getPsi import org.jetbrains.kotlin.resolve.source.getPsi
import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf