Minor. Removed usage of ExpressionReceiver constructor from Qualifier.kt
This commit is contained in:
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ClassifierQualifier
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.PackageQualifier
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.createClassifierQualifier
|
||||
import org.jetbrains.kotlin.resolve.scopes.utils.findClassifier
|
||||
import org.jetbrains.kotlin.resolve.source.KotlinSourceElement
|
||||
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator
|
||||
@@ -442,7 +443,7 @@ public class QualifiedExpressionResolver(val symbolUsageValidator: SymbolUsageVa
|
||||
val qualifier =
|
||||
when (descriptor) {
|
||||
is PackageViewDescriptor -> PackageQualifier(referenceExpression, descriptor)
|
||||
is ClassifierDescriptor -> ClassifierQualifier(referenceExpression, descriptor)
|
||||
is ClassifierDescriptor -> createClassifierQualifier(referenceExpression, descriptor, trace.bindingContext)
|
||||
else -> return
|
||||
}
|
||||
|
||||
|
||||
@@ -99,12 +99,9 @@ public class TaskPrioritizer(
|
||||
qualifierReceiver: QualifierReceiver,
|
||||
taskPrioritizerContext: TaskPrioritizerContext<D, F>
|
||||
) {
|
||||
val classObjectReceiver = qualifierReceiver.getClassObjectReceiver()
|
||||
if (!classObjectReceiver.exists()) {
|
||||
return
|
||||
}
|
||||
val companionObject = qualifierReceiver.companionObjectReceiver ?: return
|
||||
val classifierDescriptor = qualifierReceiver.classifier
|
||||
doComputeTasks(classObjectReceiver, taskPrioritizerContext.filterCollectors {
|
||||
doComputeTasks(companionObject, taskPrioritizerContext.filterCollectors {
|
||||
when {
|
||||
classifierDescriptor is ClassDescriptor && classifierDescriptor.getCompanionObjectDescriptor() != null -> {
|
||||
// nested classes and objects should not be accessible via short reference to companion object
|
||||
|
||||
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getTopmostParentQualifiedExpressionForSelector
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.BindingContext.*
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils.getFqName
|
||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.recordScope
|
||||
@@ -70,9 +71,7 @@ abstract class QualifierReceiver(
|
||||
|
||||
override var resultingDescriptor: DeclarationDescriptor by Delegates.notNull()
|
||||
|
||||
fun getClassObjectReceiver(): ReceiverValue =
|
||||
(classifier as? ClassDescriptor)?.classObjectType?.let { ExpressionReceiver(referenceExpression, it) }
|
||||
?: ReceiverValue.NO_RECEIVER
|
||||
abstract val companionObjectReceiver: ReceiverValue?
|
||||
|
||||
abstract fun getNestedClassesAndPackageMembersScope(): MemberScope
|
||||
|
||||
@@ -93,11 +92,15 @@ class PackageQualifier(
|
||||
override fun getNestedClassesAndPackageMembersScope(): MemberScope = packageView.memberScope
|
||||
|
||||
override fun toString() = "Package{$packageView}"
|
||||
|
||||
override val companionObjectReceiver: ReceiverValue?
|
||||
get() = null
|
||||
}
|
||||
|
||||
class ClassifierQualifier(
|
||||
referenceExpression: KtSimpleNameExpression,
|
||||
override val classifier: ClassifierDescriptor
|
||||
override val classifier: ClassifierDescriptor,
|
||||
override val companionObjectReceiver: ReceiverValue?
|
||||
) : QualifierReceiver(referenceExpression) {
|
||||
|
||||
override val packageView: PackageViewDescriptor? get() = null
|
||||
@@ -142,6 +145,17 @@ class ClassifierQualifier(
|
||||
override fun toString() = "Classifier{$classifier}"
|
||||
}
|
||||
|
||||
fun createClassifierQualifier(
|
||||
referenceExpression: KtSimpleNameExpression,
|
||||
classifier: ClassifierDescriptor,
|
||||
bindingContext: BindingContext
|
||||
): ClassifierQualifier {
|
||||
val companionObjectReceiver = (classifier as? ClassDescriptor)?.classObjectType?.let {
|
||||
ExpressionReceiver.create(referenceExpression, it, bindingContext)
|
||||
}
|
||||
return ClassifierQualifier(referenceExpression, classifier, companionObjectReceiver)
|
||||
}
|
||||
|
||||
|
||||
fun createQualifier(
|
||||
expression: KtSimpleNameExpression,
|
||||
@@ -167,10 +181,10 @@ fun createQualifier(
|
||||
if (packageViewDescriptor != null)
|
||||
PackageQualifier(expression, packageViewDescriptor)
|
||||
else
|
||||
ClassifierQualifier(expression, classifierDescriptor!!)
|
||||
createClassifierQualifier(expression, classifierDescriptor!!, context.trace.bindingContext)
|
||||
else
|
||||
if (classifierDescriptor != null)
|
||||
ClassifierQualifier(expression, classifierDescriptor)
|
||||
createClassifierQualifier(expression, classifierDescriptor, context.trace.bindingContext)
|
||||
else
|
||||
PackageQualifier(expression, packageViewDescriptor!!)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user