Drop QualifierReceiver::resultingDescriptor. Use REFERENCE_TARGET.
This commit is contained in:
+2
-3
@@ -74,9 +74,8 @@ private fun resolveAndRecordReferenceTarget(
|
||||
selector: DeclarationDescriptor?,
|
||||
symbolUsageValidator: SymbolUsageValidator
|
||||
) {
|
||||
// TODO get rid of QualifierReceiver::resultingDescriptor. REFERENCE_TARGET should be enough.
|
||||
qualifier.resultingDescriptor = resolveReferenceTarget(qualifier, context, selector, symbolUsageValidator)
|
||||
context.trace.record(BindingContext.REFERENCE_TARGET, qualifier.referenceExpression, qualifier.resultingDescriptor)
|
||||
val resultingDescriptor = resolveReferenceTarget(qualifier, context, selector, symbolUsageValidator)
|
||||
context.trace.record(BindingContext.REFERENCE_TARGET, qualifier.referenceExpression, resultingDescriptor)
|
||||
}
|
||||
|
||||
private fun resolveReferenceTarget(
|
||||
|
||||
@@ -44,26 +44,23 @@ public interface Qualifier: Receiver {
|
||||
|
||||
public val expression: KtExpression
|
||||
|
||||
public val referenceExpression: KtSimpleNameExpression
|
||||
|
||||
public val name: Name
|
||||
get() = descriptor.name
|
||||
|
||||
public val descriptor: DeclarationDescriptor
|
||||
|
||||
// package, classifier or companion object descriptor
|
||||
public val resultingDescriptor: DeclarationDescriptor
|
||||
|
||||
public val scope: MemberScope
|
||||
}
|
||||
|
||||
abstract class QualifierReceiver(
|
||||
val referenceExpression: KtSimpleNameExpression
|
||||
override val referenceExpression: KtSimpleNameExpression
|
||||
) : Qualifier {
|
||||
|
||||
override val expression: KtExpression
|
||||
get() = referenceExpression.getTopmostParentQualifiedExpressionForSelector() ?: referenceExpression
|
||||
|
||||
override var resultingDescriptor: DeclarationDescriptor by Delegates.notNull()
|
||||
|
||||
abstract fun getNestedClassesAndPackageMembersScope(): MemberScope
|
||||
|
||||
override fun exists() = true
|
||||
|
||||
+2
-2
@@ -45,7 +45,7 @@ public object CreateClassFromConstructorCallActionFactory: CreateClassFromUsageF
|
||||
val (context, moduleDescriptor) = element.analyzeFullyAndGetResult()
|
||||
val file = element.containingFile as? KtFile ?: return emptyList()
|
||||
val call = element.getCall(context) ?: return emptyList()
|
||||
val targetParent = getTargetParentByCall(call, file) ?: return emptyList()
|
||||
val targetParent = getTargetParentByCall(call, file, context) ?: return emptyList()
|
||||
|
||||
val classKind = if (inAnnotationEntry) ClassKind.ANNOTATION_CLASS else ClassKind.PLAIN_CLASS
|
||||
val fullCallExpr = element.getQualifiedExpressionForSelectorOrThis()
|
||||
@@ -77,7 +77,7 @@ public object CreateClassFromConstructorCallActionFactory: CreateClassFromUsageF
|
||||
val (context, moduleDescriptor) = callExpr.analyzeFullyAndGetResult()
|
||||
|
||||
val call = callExpr.getCall(context) ?: return null
|
||||
val targetParent = getTargetParentByCall(call, file) ?: return null
|
||||
val targetParent = getTargetParentByCall(call, file, context) ?: return null
|
||||
val inner = isInnerClassExpected(call)
|
||||
|
||||
val valueArguments = callExpr.valueArguments
|
||||
|
||||
+2
-2
@@ -96,7 +96,7 @@ public object CreateClassFromReferenceExpressionActionFactory : CreateClassFromU
|
||||
if (fullCallExpr.getAssignmentByLHS() != null) return Collections.emptyList()
|
||||
|
||||
val call = element.getCall(context) ?: return Collections.emptyList()
|
||||
val targetParent = getTargetParentByCall(call, file) ?: return Collections.emptyList()
|
||||
val targetParent = getTargetParentByCall(call, file, context) ?: return Collections.emptyList()
|
||||
if (isInnerClassExpected(call)) return Collections.emptyList()
|
||||
|
||||
val filter = fullCallExpr.getInheritableTypeInfo(context, moduleDescriptor, targetParent).second
|
||||
@@ -136,7 +136,7 @@ public object CreateClassFromReferenceExpressionActionFactory : CreateClassFromU
|
||||
}
|
||||
|
||||
val call = element.getCall(context) ?: return null
|
||||
val targetParent = getTargetParentByCall(call, file) ?: return null
|
||||
val targetParent = getTargetParentByCall(call, file, context) ?: return null
|
||||
|
||||
val expectedTypeInfo = fullCallExpr.getInheritableTypeInfo(context, moduleDescriptor, targetParent).first
|
||||
|
||||
|
||||
+2
-2
@@ -68,11 +68,11 @@ internal fun getTargetParentByQualifier(
|
||||
return if (targetParent.canRefactor()) return targetParent else null
|
||||
}
|
||||
|
||||
internal fun getTargetParentByCall(call: Call, file: KtFile): PsiElement? {
|
||||
internal fun getTargetParentByCall(call: Call, file: KtFile, context: BindingContext): PsiElement? {
|
||||
val receiver = call.getExplicitReceiver()
|
||||
return when (receiver) {
|
||||
ReceiverValue.NO_RECEIVER -> getTargetParentByQualifier(file, false, null)
|
||||
is Qualifier -> getTargetParentByQualifier(file, true, receiver.resultingDescriptor)
|
||||
is Qualifier -> getTargetParentByQualifier(file, true, context[BindingContext.REFERENCE_TARGET, receiver.referenceExpression])
|
||||
is ReceiverValue -> getTargetParentByQualifier(file, true, receiver.getType().getConstructor().getDeclarationDescriptor())
|
||||
else -> throw AssertionError("Unexpected receiver: $receiver")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user