Drop QualifierReceiver::resultingDescriptor. Use REFERENCE_TARGET.

This commit is contained in:
Dmitry Petrov
2015-11-10 11:48:58 +03:00
parent eef8c7ae09
commit 49570ba1ea
5 changed files with 11 additions and 15 deletions
@@ -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
@@ -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
@@ -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")
}