Rename: ThisReceiver ---> ImplicitReceiver
This commit is contained in:
@@ -63,7 +63,7 @@ import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterSignature
|
|||||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature;
|
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver;
|
||||||
import org.jetbrains.kotlin.serialization.DescriptorSerializer;
|
import org.jetbrains.kotlin.serialization.DescriptorSerializer;
|
||||||
import org.jetbrains.kotlin.serialization.ProtoBuf;
|
import org.jetbrains.kotlin.serialization.ProtoBuf;
|
||||||
import org.jetbrains.kotlin.types.KotlinType;
|
import org.jetbrains.kotlin.types.KotlinType;
|
||||||
@@ -1220,7 +1220,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void lookupReceiver(@NotNull ReceiverValue value) {
|
private void lookupReceiver(@NotNull ReceiverValue value) {
|
||||||
if (value instanceof ThisReceiver) {
|
if (value instanceof ImplicitReceiver) {
|
||||||
if (value instanceof ExtensionReceiver) {
|
if (value instanceof ExtensionReceiver) {
|
||||||
ReceiverParameterDescriptor parameter =
|
ReceiverParameterDescriptor parameter =
|
||||||
((ExtensionReceiver) value).getDeclarationDescriptor().getExtensionReceiverParameter();
|
((ExtensionReceiver) value).getDeclarationDescriptor().getExtensionReceiverParameter();
|
||||||
@@ -1228,7 +1228,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
lookupInContext(parameter);
|
lookupInContext(parameter);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
lookupInContext(((ThisReceiver) value).getDeclarationDescriptor());
|
lookupInContext(((ImplicitReceiver) value).getDeclarationDescriptor());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ import org.jetbrains.kotlin.resolve.constants.CompileTimeConstant;
|
|||||||
import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator;
|
import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.TransientReceiver;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.TransientReceiver;
|
||||||
import org.jetbrains.kotlin.types.KotlinType;
|
import org.jetbrains.kotlin.types.KotlinType;
|
||||||
import org.jetbrains.kotlin.types.expressions.OperatorConventions;
|
import org.jetbrains.kotlin.types.expressions.OperatorConventions;
|
||||||
@@ -1553,7 +1553,7 @@ public class JetControlFlowProcessor {
|
|||||||
) {
|
) {
|
||||||
if (!receiver.exists() || receiverValues.containsValue(receiver)) return receiverValues;
|
if (!receiver.exists() || receiverValues.containsValue(receiver)) return receiverValues;
|
||||||
|
|
||||||
if (receiver instanceof ThisReceiver) {
|
if (receiver instanceof ImplicitReceiver) {
|
||||||
receiverValues = receiverValues.plus(createSyntheticValue(callElement, MagicKind.IMPLICIT_RECEIVER), receiver);
|
receiverValues = receiverValues.plus(createSyntheticValue(callElement, MagicKind.IMPLICIT_RECEIVER), receiver);
|
||||||
}
|
}
|
||||||
else if (receiver instanceof ExpressionReceiver) {
|
else if (receiver instanceof ExpressionReceiver) {
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
|||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.getOwnerForEffectiveDispatchReceiverParameter
|
import org.jetbrains.kotlin.resolve.descriptorUtil.getOwnerForEffectiveDispatchReceiverParameter
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||||
|
|
||||||
// it returns true if call has no dispatch receiver (e.g. resulting descriptor is top-level function or local variable)
|
// it returns true if call has no dispatch receiver (e.g. resulting descriptor is top-level function or local variable)
|
||||||
// or call receiver is effectively `this` instance (explicitly or implicitly) of resulting descriptor
|
// or call receiver is effectively `this` instance (explicitly or implicitly) of resulting descriptor
|
||||||
@@ -53,7 +53,7 @@ private fun ResolvedCall<*>.hasThisOrNoDispatchReceiver(
|
|||||||
if (getResultingDescriptor().getDispatchReceiverParameter() == null || !dispatchReceiverValue.exists()) return returnForNoReceiver
|
if (getResultingDescriptor().getDispatchReceiverParameter() == null || !dispatchReceiverValue.exists()) return returnForNoReceiver
|
||||||
|
|
||||||
var dispatchReceiverDescriptor: DeclarationDescriptor? = null
|
var dispatchReceiverDescriptor: DeclarationDescriptor? = null
|
||||||
if (dispatchReceiverValue is ThisReceiver) {
|
if (dispatchReceiverValue is ImplicitReceiver) {
|
||||||
// foo() -- implicit receiver
|
// foo() -- implicit receiver
|
||||||
dispatchReceiverDescriptor = dispatchReceiverValue.declarationDescriptor
|
dispatchReceiverDescriptor = dispatchReceiverValue.declarationDescriptor
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -293,8 +293,8 @@ public class DataFlowValueFactory {
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static IdentifierInfo getIdForImplicitReceiver(@NotNull ReceiverValue receiverValue, @Nullable KtExpression expression) {
|
private static IdentifierInfo getIdForImplicitReceiver(@NotNull ReceiverValue receiverValue, @Nullable KtExpression expression) {
|
||||||
if (receiverValue instanceof ThisReceiver) {
|
if (receiverValue instanceof ImplicitReceiver) {
|
||||||
return getIdForThisReceiver(((ThisReceiver) receiverValue).getDeclarationDescriptor());
|
return getIdForThisReceiver(((ImplicitReceiver) receiverValue).getDeclarationDescriptor());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
assert !(receiverValue instanceof TransientReceiver)
|
assert !(receiverValue instanceof TransientReceiver)
|
||||||
|
|||||||
+1
-1
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.descriptors.ScriptDescriptor;
|
|||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt;
|
import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt;
|
||||||
import org.jetbrains.kotlin.types.KotlinType;
|
import org.jetbrains.kotlin.types.KotlinType;
|
||||||
|
|
||||||
public class ScriptReceiver implements ThisReceiver {
|
public class ScriptReceiver implements ImplicitReceiver {
|
||||||
private final ScriptDescriptor scriptDescriptor;
|
private final ScriptDescriptor scriptDescriptor;
|
||||||
|
|
||||||
public ScriptReceiver(@NotNull ScriptDescriptor scriptDescriptor) {
|
public ScriptReceiver(@NotNull ScriptDescriptor scriptDescriptor) {
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ interface ExpressionOrImplicitClassReceiver : ReceiverValue {
|
|||||||
val classDescriptor: ClassDescriptor
|
val classDescriptor: ClassDescriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
open class ClassReceiver(override val classDescriptor: ClassDescriptor) : ExpressionOrImplicitClassReceiver, ThisReceiver {
|
open class ClassReceiver(override val classDescriptor: ClassDescriptor) : ExpressionOrImplicitClassReceiver, ImplicitReceiver {
|
||||||
|
|
||||||
override fun exists() = true
|
override fun exists() = true
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor;
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor;
|
||||||
import org.jetbrains.kotlin.types.KotlinType;
|
import org.jetbrains.kotlin.types.KotlinType;
|
||||||
|
|
||||||
public class ExtensionReceiver extends AbstractReceiverValue implements ThisReceiver {
|
public class ExtensionReceiver extends AbstractReceiverValue implements ImplicitReceiver {
|
||||||
|
|
||||||
private final CallableDescriptor descriptor;
|
private final CallableDescriptor descriptor;
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -21,6 +21,6 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
|||||||
/**
|
/**
|
||||||
* Describes an implicit "this" receiver
|
* Describes an implicit "this" receiver
|
||||||
*/
|
*/
|
||||||
interface ThisReceiver : ReceiverValue {
|
interface ImplicitReceiver : ReceiverValue {
|
||||||
val declarationDescriptor: DeclarationDescriptor
|
val declarationDescriptor: DeclarationDescriptor
|
||||||
}
|
}
|
||||||
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.resolve.calls.smartcasts.SmartCastManager
|
|||||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.typeUtil.TypeNullability
|
import org.jetbrains.kotlin.types.typeUtil.TypeNullability
|
||||||
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
||||||
@@ -109,7 +109,7 @@ public fun ReceiverValue.getThisReceiverOwner(bindingContext: BindingContext): D
|
|||||||
bindingContext[BindingContext.REFERENCE_TARGET, thisRef]
|
bindingContext[BindingContext.REFERENCE_TARGET, thisRef]
|
||||||
}
|
}
|
||||||
|
|
||||||
is ThisReceiver -> this.declarationDescriptor
|
is ImplicitReceiver -> this.declarationDescriptor
|
||||||
|
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getCalleeExpressionIfAny
|
|||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||||
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||||
import org.jetbrains.kotlin.resolve.scopes.utils.findClassifier
|
import org.jetbrains.kotlin.resolve.scopes.utils.findClassifier
|
||||||
import org.jetbrains.kotlin.resolve.scopes.utils.findPackage
|
import org.jetbrains.kotlin.resolve.scopes.utils.findPackage
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -358,7 +358,7 @@ public class ShortenReferences(val options: (KtElement) -> Options = { Options.D
|
|||||||
ExplicitReceiverKind.BOTH_RECEIVERS, ExplicitReceiverKind.EXTENSION_RECEIVER -> newCall.getExtensionReceiver()
|
ExplicitReceiverKind.BOTH_RECEIVERS, ExplicitReceiverKind.EXTENSION_RECEIVER -> newCall.getExtensionReceiver()
|
||||||
ExplicitReceiverKind.DISPATCH_RECEIVER -> newCall.getDispatchReceiver()
|
ExplicitReceiverKind.DISPATCH_RECEIVER -> newCall.getDispatchReceiver()
|
||||||
else -> return false
|
else -> return false
|
||||||
} as? ThisReceiver ?: return false
|
} as? ImplicitReceiver ?: return false
|
||||||
|
|
||||||
val thisTarget = receiver.getInstanceReference().targets(bindingContext).singleOrNull()
|
val thisTarget = receiver.getInstanceReference().targets(bindingContext).singleOrNull()
|
||||||
if (newReceiver.declarationDescriptor.asString() != thisTarget?.asString()) return false
|
if (newReceiver.declarationDescriptor.asString() != thisTarget?.asString()) return false
|
||||||
|
|||||||
+2
-2
@@ -17,7 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.idea.completion
|
package org.jetbrains.kotlin.idea.completion
|
||||||
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValue
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValue
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||||
import org.jetbrains.kotlin.psi.KtExpression
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor
|
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor
|
||||||
@@ -29,7 +29,7 @@ fun renderDataFlowValue(value: DataFlowValue): String? {
|
|||||||
fun renderId(id: Any?): String? {
|
fun renderId(id: Any?): String? {
|
||||||
return when (id) {
|
return when (id) {
|
||||||
is KtExpression -> id.getText()
|
is KtExpression -> id.getText()
|
||||||
is ThisReceiver -> "this@${id.declarationDescriptor.getName()}"
|
is ImplicitReceiver -> "this@${id.declarationDescriptor.getName()}"
|
||||||
is VariableDescriptor -> id.getName().asString()
|
is VariableDescriptor -> id.getName().asString()
|
||||||
is PackageViewDescriptor -> id.fqName.asString()
|
is PackageViewDescriptor -> id.fqName.asString()
|
||||||
is com.intellij.openapi.util.Pair<*, *> -> renderId(id.first) + "." + renderId(id.second)
|
is com.intellij.openapi.util.Pair<*, *> -> renderId(id.first) + "." + renderId(id.second)
|
||||||
|
|||||||
+4
-4
@@ -34,7 +34,7 @@ import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValue
|
|||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.Nullability
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.Nullability
|
||||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf
|
import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf
|
||||||
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
||||||
@@ -61,7 +61,7 @@ class SmartCastCalculator(
|
|||||||
|
|
||||||
fun types(thisReceiverParameter: ReceiverParameterDescriptor): Collection<KotlinType> {
|
fun types(thisReceiverParameter: ReceiverParameterDescriptor): Collection<KotlinType> {
|
||||||
val type = thisReceiverParameter.type
|
val type = thisReceiverParameter.type
|
||||||
val thisReceiver = thisReceiverParameter.value as? ThisReceiver ?: return listOf(type)
|
val thisReceiver = thisReceiverParameter.value as? ImplicitReceiver ?: return listOf(type)
|
||||||
return entityType(thisReceiver, type)
|
return entityType(thisReceiver, type)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,12 +97,12 @@ class SmartCastCalculator(
|
|||||||
dataFlowValueToEntity = fun (value: DataFlowValue): Any? {
|
dataFlowValueToEntity = fun (value: DataFlowValue): Any? {
|
||||||
val id = value.id
|
val id = value.id
|
||||||
when(id) {
|
when(id) {
|
||||||
is VariableDescriptor, is ThisReceiver -> return id
|
is VariableDescriptor, is ImplicitReceiver -> return id
|
||||||
|
|
||||||
is Pair<*, *> -> {
|
is Pair<*, *> -> {
|
||||||
val first = id.first
|
val first = id.first
|
||||||
val second = id.second
|
val second = id.second
|
||||||
if (first !is ThisReceiver || second !is VariableDescriptor) return null
|
if (first !is ImplicitReceiver || second !is VariableDescriptor) return null
|
||||||
if (resolutionScope?.findNearestReceiverForVariable(second)?.value != first) return null
|
if (resolutionScope?.findNearestReceiverForVariable(second)?.value != first) return null
|
||||||
return second
|
return second
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ import org.jetbrains.kotlin.resolve.calls.context.ContextDependency
|
|||||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||||
import org.jetbrains.kotlin.resolve.calls.results.ResolutionStatus
|
import org.jetbrains.kotlin.resolve.calls.results.ResolutionStatus
|
||||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.TypeUtils
|
import org.jetbrains.kotlin.types.TypeUtils
|
||||||
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
||||||
@@ -88,7 +88,7 @@ public fun Call.mapArgumentsToParameters(targetDescriptor: CallableDescriptor):
|
|||||||
return map
|
return map
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun ThisReceiver.asExpression(resolutionScope: LexicalScope, psiFactory: KtPsiFactory): KtExpression? {
|
public fun ImplicitReceiver.asExpression(resolutionScope: LexicalScope, psiFactory: KtPsiFactory): KtExpression? {
|
||||||
val expressionFactory = resolutionScope.getImplicitReceiversWithInstanceToExpression()
|
val expressionFactory = resolutionScope.getImplicitReceiversWithInstanceToExpression()
|
||||||
.entrySet()
|
.entrySet()
|
||||||
.firstOrNull { it.key.getContainingDeclaration() == this.declarationDescriptor }
|
.firstOrNull { it.key.getContainingDeclaration() == this.declarationDescriptor }
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
|||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||||
import kotlin.properties.Delegates
|
import kotlin.properties.Delegates
|
||||||
|
|
||||||
public class UnusedReceiverParameterInspection : AbstractKotlinInspection() {
|
public class UnusedReceiverParameterInspection : AbstractKotlinInspection() {
|
||||||
|
|||||||
+2
-2
@@ -44,7 +44,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
|||||||
import org.jetbrains.kotlin.resolve.calls.model.*
|
import org.jetbrains.kotlin.resolve.calls.model.*
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||||
import org.jetbrains.kotlin.resolve.scopes.utils.findLocalVariable
|
import org.jetbrains.kotlin.resolve.scopes.utils.findLocalVariable
|
||||||
import org.jetbrains.kotlin.types.ErrorUtils
|
import org.jetbrains.kotlin.types.ErrorUtils
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
@@ -109,7 +109,7 @@ private fun performCallReplacement(
|
|||||||
if (receiver == null) {
|
if (receiver == null) {
|
||||||
val receiverValue = if (descriptor.isExtension) resolvedCall.extensionReceiver else resolvedCall.dispatchReceiver
|
val receiverValue = if (descriptor.isExtension) resolvedCall.extensionReceiver else resolvedCall.dispatchReceiver
|
||||||
val resolutionScope = elementToBeReplaced.getResolutionScope(bindingContext, elementToBeReplaced.getResolutionFacade())
|
val resolutionScope = elementToBeReplaced.getResolutionScope(bindingContext, elementToBeReplaced.getResolutionFacade())
|
||||||
if (receiverValue is ThisReceiver) {
|
if (receiverValue is ImplicitReceiver) {
|
||||||
receiver = receiverValue.asExpression(resolutionScope, psiFactory)
|
receiver = receiverValue.asExpression(resolutionScope, psiFactory)
|
||||||
receiverType = receiverValue.type
|
receiverType = receiverValue.type
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -44,7 +44,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.FileScopeProvider
|
import org.jetbrains.kotlin.resolve.lazy.FileScopeProvider
|
||||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.ClassResolutionScopesSupport
|
import org.jetbrains.kotlin.resolve.lazy.descriptors.ClassResolutionScopesSupport
|
||||||
import org.jetbrains.kotlin.resolve.scopes.*
|
import org.jetbrains.kotlin.resolve.scopes.*
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||||
import org.jetbrains.kotlin.resolve.scopes.utils.chainImportingScopes
|
import org.jetbrains.kotlin.resolve.scopes.utils.chainImportingScopes
|
||||||
import org.jetbrains.kotlin.resolve.scopes.utils.memberScopeAsImportingScope
|
import org.jetbrains.kotlin.resolve.scopes.utils.memberScopeAsImportingScope
|
||||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||||
@@ -140,7 +140,7 @@ object ReplaceWithAnnotationAnalyzer {
|
|||||||
resolvedCall.extensionReceiver
|
resolvedCall.extensionReceiver
|
||||||
else
|
else
|
||||||
resolvedCall.dispatchReceiver
|
resolvedCall.dispatchReceiver
|
||||||
if (receiver is ThisReceiver) {
|
if (receiver is ImplicitReceiver) {
|
||||||
val receiverExpression = receiver.asExpression(scope, psiFactory)
|
val receiverExpression = receiver.asExpression(scope, psiFactory)
|
||||||
if (receiverExpression != null) {
|
if (receiverExpression != null) {
|
||||||
receiversToAdd.add(expression to receiverExpression)
|
receiversToAdd.add(expression to receiverExpression)
|
||||||
|
|||||||
+6
-6
@@ -75,7 +75,7 @@ import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
|||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||||
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||||
import org.jetbrains.kotlin.resolve.source.getPsi
|
import org.jetbrains.kotlin.resolve.source.getPsi
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -186,11 +186,11 @@ class KotlinChangeSignatureUsageProcessor : ChangeSignatureUsageProcessor {
|
|||||||
val callElement = resolvedCall.call.callElement
|
val callElement = resolvedCall.call.callElement
|
||||||
|
|
||||||
var receiver = resolvedCall.extensionReceiver
|
var receiver = resolvedCall.extensionReceiver
|
||||||
if (receiver !is ThisReceiver) {
|
if (receiver !is ImplicitReceiver) {
|
||||||
receiver = resolvedCall.dispatchReceiver
|
receiver = resolvedCall.dispatchReceiver
|
||||||
}
|
}
|
||||||
|
|
||||||
if (receiver is ThisReceiver) {
|
if (receiver is ImplicitReceiver) {
|
||||||
result.add(KotlinImplicitThisUsage(callElement, receiver.declarationDescriptor))
|
result.add(KotlinImplicitThisUsage(callElement, receiver.declarationDescriptor))
|
||||||
}
|
}
|
||||||
else if (!receiver.exists()) {
|
else if (!receiver.exists()) {
|
||||||
@@ -349,8 +349,8 @@ class KotlinChangeSignatureUsageProcessor : ChangeSignatureUsageProcessor {
|
|||||||
|
|
||||||
private fun processImplicitThis(
|
private fun processImplicitThis(
|
||||||
callElement: KtElement,
|
callElement: KtElement,
|
||||||
receiverValue: ThisReceiver) {
|
implicitReceiver: ImplicitReceiver) {
|
||||||
val targetDescriptor = receiverValue.declarationDescriptor
|
val targetDescriptor = implicitReceiver.declarationDescriptor
|
||||||
if (compareDescriptors(callElement.project, targetDescriptor, callableDescriptor)) {
|
if (compareDescriptors(callElement.project, targetDescriptor, callableDescriptor)) {
|
||||||
assert(originalReceiverInfo != null) { "No original receiver info provided: " + functionUsageInfo.declaration.text }
|
assert(originalReceiverInfo != null) { "No original receiver info provided: " + functionUsageInfo.declaration.text }
|
||||||
result.add(KotlinImplicitThisToParameterUsage(callElement, originalReceiverInfo!!, functionUsageInfo))
|
result.add(KotlinImplicitThisToParameterUsage(callElement, originalReceiverInfo!!, functionUsageInfo))
|
||||||
@@ -373,7 +373,7 @@ class KotlinChangeSignatureUsageProcessor : ChangeSignatureUsageProcessor {
|
|||||||
if (!receiverValue.exists()) {
|
if (!receiverValue.exists()) {
|
||||||
receiverValue = resolvedCall.dispatchReceiver
|
receiverValue = resolvedCall.dispatchReceiver
|
||||||
}
|
}
|
||||||
if (receiverValue is ThisReceiver) {
|
if (receiverValue is ImplicitReceiver) {
|
||||||
processImplicitThis(resolvedCall.call.callElement, receiverValue)
|
processImplicitThis(resolvedCall.call.callElement, receiverValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
|||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ public class KotlinParameterInfo @JvmOverloads constructor (
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun selfReceiverOrNull(receiver: ThisReceiver?): DeclarationDescriptor? {
|
private fun selfReceiverOrNull(receiver: ImplicitReceiver?): DeclarationDescriptor? {
|
||||||
return selfReceiverOrNull(receiver?.declarationDescriptor)
|
return selfReceiverOrNull(receiver?.declarationDescriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,8 +104,8 @@ public class KotlinParameterInfo @JvmOverloads constructor (
|
|||||||
return if (selfReceiverOrNull(it.getContainingDeclaration()) != null) it else null
|
return if (selfReceiverOrNull(it.getContainingDeclaration()) != null) it else null
|
||||||
}
|
}
|
||||||
|
|
||||||
selfReceiverOrNull(resolvedCall.getExtensionReceiver() as? ThisReceiver)?.let { return it }
|
selfReceiverOrNull(resolvedCall.getExtensionReceiver() as? ImplicitReceiver)?.let { return it }
|
||||||
selfReceiverOrNull(resolvedCall.getDispatchReceiver() as? ThisReceiver)?.let { return it }
|
selfReceiverOrNull(resolvedCall.getDispatchReceiver() as? ImplicitReceiver)?.let { return it }
|
||||||
|
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -47,7 +47,7 @@ import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
|||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||||
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
||||||
import org.jetbrains.kotlin.types.expressions.OperatorConventions
|
import org.jetbrains.kotlin.types.expressions.OperatorConventions
|
||||||
import org.jetbrains.kotlin.utils.sure
|
import org.jetbrains.kotlin.utils.sure
|
||||||
@@ -503,7 +503,7 @@ class KotlinFunctionCallUsage(
|
|||||||
private fun getReceiverExpression(receiver: ReceiverValue, psiFactory: KtPsiFactory): KtExpression? {
|
private fun getReceiverExpression(receiver: ReceiverValue, psiFactory: KtPsiFactory): KtExpression? {
|
||||||
return when (receiver) {
|
return when (receiver) {
|
||||||
is ExpressionReceiver -> receiver.expression
|
is ExpressionReceiver -> receiver.expression
|
||||||
is ThisReceiver -> {
|
is ImplicitReceiver -> {
|
||||||
val descriptor = receiver.declarationDescriptor
|
val descriptor = receiver.declarationDescriptor
|
||||||
val thisText = if (descriptor is ClassDescriptor) "this@" + descriptor.name.asString() else "this"
|
val thisText = if (descriptor is ClassDescriptor) "this@" + descriptor.name.asString() else "this"
|
||||||
psiFactory.createExpression(thisText)
|
psiFactory.createExpression(thisText)
|
||||||
|
|||||||
+3
-3
@@ -44,7 +44,7 @@ import org.jetbrains.kotlin.resolve.calls.resolvedCallUtil.getImplicitReceiverVa
|
|||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory
|
||||||
import org.jetbrains.kotlin.resolve.calls.tasks.isSynthesizedInvoke
|
import org.jetbrains.kotlin.resolve.calls.tasks.isSynthesizedInvoke
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||||
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
|
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -177,7 +177,7 @@ data class ExtractionData(
|
|||||||
fun getPossibleTypes(expression: KtExpression, resolvedCall: ResolvedCall<*>?, context: BindingContext): Set<KotlinType> {
|
fun getPossibleTypes(expression: KtExpression, resolvedCall: ResolvedCall<*>?, context: BindingContext): Set<KotlinType> {
|
||||||
val typeInfo = context[BindingContext.EXPRESSION_TYPE_INFO, expression] ?: return emptySet()
|
val typeInfo = context[BindingContext.EXPRESSION_TYPE_INFO, expression] ?: return emptySet()
|
||||||
|
|
||||||
(resolvedCall?.getImplicitReceiverValue() as? ThisReceiver)?.let {
|
(resolvedCall?.getImplicitReceiverValue() as? ImplicitReceiver)?.let {
|
||||||
return typeInfo.dataFlowInfo.getPossibleTypes(DataFlowValueFactory.createDataFlowValueForStableReceiver(it))
|
return typeInfo.dataFlowInfo.getPossibleTypes(DataFlowValueFactory.createDataFlowValueForStableReceiver(it))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -210,7 +210,7 @@ data class ExtractionData(
|
|||||||
smartCast = originalContext[BindingContext.SMARTCAST, smartCastTarget]
|
smartCast = originalContext[BindingContext.SMARTCAST, smartCastTarget]
|
||||||
possibleTypes = getPossibleTypes(smartCastTarget, originalResolveResult.resolvedCall, originalContext)
|
possibleTypes = getPossibleTypes(smartCastTarget, originalResolveResult.resolvedCall, originalContext)
|
||||||
val receiverDescriptor =
|
val receiverDescriptor =
|
||||||
(originalResolveResult.resolvedCall?.getDispatchReceiver() as? ThisReceiver)?.declarationDescriptor
|
(originalResolveResult.resolvedCall?.getDispatchReceiver() as? ImplicitReceiver)?.declarationDescriptor
|
||||||
if (smartCast == null
|
if (smartCast == null
|
||||||
&& !DescriptorUtils.isCompanionObject(receiverDescriptor)
|
&& !DescriptorUtils.isCompanionObject(receiverDescriptor)
|
||||||
&& qualifiedExpression.getReceiverExpression() !is KtSuperExpression) continue
|
&& qualifiedExpression.getReceiverExpression() !is KtSuperExpression) continue
|
||||||
|
|||||||
+3
-3
@@ -43,7 +43,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.getImportableDescriptor
|
|||||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||||
import org.jetbrains.kotlin.resolve.scopes.utils.findFunction
|
import org.jetbrains.kotlin.resolve.scopes.utils.findFunction
|
||||||
import org.jetbrains.kotlin.types.CommonSupertypes
|
import org.jetbrains.kotlin.types.CommonSupertypes
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
@@ -125,7 +125,7 @@ private fun ExtractionData.extractReceiver(
|
|||||||
) {
|
) {
|
||||||
val (originalRef, originalDeclaration, originalDescriptor, resolvedCall) = refInfo.resolveResult
|
val (originalRef, originalDeclaration, originalDescriptor, resolvedCall) = refInfo.resolveResult
|
||||||
|
|
||||||
val thisDescriptor = (receiverToExtract as? ThisReceiver)?.declarationDescriptor
|
val thisDescriptor = (receiverToExtract as? ImplicitReceiver)?.declarationDescriptor
|
||||||
val hasThisReceiver = thisDescriptor != null
|
val hasThisReceiver = thisDescriptor != null
|
||||||
val thisExpr = refInfo.refExpr.parent as? KtThisExpression
|
val thisExpr = refInfo.refExpr.parent as? KtThisExpression
|
||||||
|
|
||||||
@@ -277,7 +277,7 @@ private fun suggestParameterType(
|
|||||||
(bindingContext[BindingContext.REFERENCE_TARGET, it] as? CallableDescriptor)?.returnType
|
(bindingContext[BindingContext.REFERENCE_TARGET, it] as? CallableDescriptor)?.returnType
|
||||||
}
|
}
|
||||||
?: if (receiverToExtract.exists()) receiverToExtract.type else null
|
?: if (receiverToExtract.exists()) receiverToExtract.type else null
|
||||||
receiverToExtract is ThisReceiver -> {
|
receiverToExtract is ImplicitReceiver -> {
|
||||||
val calleeExpression = resolvedCall!!.call.calleeExpression
|
val calleeExpression = resolvedCall!!.call.calleeExpression
|
||||||
val typeByDataFlowInfo = if (useSmartCastsIfPossible) {
|
val typeByDataFlowInfo = if (useSmartCastsIfPossible) {
|
||||||
bindingContext[BindingContext.EXPRESSION_TYPE_INFO, calleeExpression]?.dataFlowInfo?.let { dataFlowInfo ->
|
bindingContext[BindingContext.EXPRESSION_TYPE_INFO, calleeExpression]?.dataFlowInfo?.let { dataFlowInfo ->
|
||||||
|
|||||||
+3
-3
@@ -58,7 +58,7 @@ import org.jetbrains.kotlin.psi.*
|
|||||||
import org.jetbrains.kotlin.psi.psiUtil.*
|
import org.jetbrains.kotlin.psi.psiUtil.*
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||||
import org.jetbrains.kotlin.types.typeUtil.isNothing
|
import org.jetbrains.kotlin.types.typeUtil.isNothing
|
||||||
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
||||||
import org.jetbrains.kotlin.types.typeUtil.supertypes
|
import org.jetbrains.kotlin.types.typeUtil.supertypes
|
||||||
@@ -394,8 +394,8 @@ private fun findInternalUsagesOfParametersAndReceiver(
|
|||||||
val bindingContext = element.analyze()
|
val bindingContext = element.analyze()
|
||||||
val resolvedCall = element.getResolvedCall(bindingContext) ?: return
|
val resolvedCall = element.getResolvedCall(bindingContext) ?: return
|
||||||
|
|
||||||
if ((resolvedCall.getExtensionReceiver() as? ThisReceiver)?.declarationDescriptor == targetDescriptor ||
|
if ((resolvedCall.getExtensionReceiver() as? ImplicitReceiver)?.declarationDescriptor == targetDescriptor ||
|
||||||
(resolvedCall.getDispatchReceiver() as? ThisReceiver)?.declarationDescriptor == targetDescriptor) {
|
(resolvedCall.getDispatchReceiver() as? ImplicitReceiver)?.declarationDescriptor == targetDescriptor) {
|
||||||
usages.putValue(receiverTypeRef, resolvedCall.getCall().getCallElement())
|
usages.putValue(receiverTypeRef, resolvedCall.getCall().getCallElement())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ import org.jetbrains.kotlin.resolve.calls.model.VariableAsFunctionResolvedCall
|
|||||||
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||||
import org.jetbrains.kotlin.types.ErrorUtils
|
import org.jetbrains.kotlin.types.ErrorUtils
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.TypeUtils
|
import org.jetbrains.kotlin.types.TypeUtils
|
||||||
@@ -133,7 +133,7 @@ public class KotlinPsiUnifier(
|
|||||||
rv1 is ExpressionReceiver && rv2 is ExpressionReceiver ->
|
rv1 is ExpressionReceiver && rv2 is ExpressionReceiver ->
|
||||||
doUnify(rv1.expression, rv2.expression) == MATCHED
|
doUnify(rv1.expression, rv2.expression) == MATCHED
|
||||||
|
|
||||||
rv1 is ThisReceiver && rv2 is ThisReceiver ->
|
rv1 is ImplicitReceiver && rv2 is ImplicitReceiver ->
|
||||||
matchDescriptors(rv1.declarationDescriptor, rv2.declarationDescriptor)
|
matchDescriptors(rv1.declarationDescriptor, rv2.declarationDescriptor)
|
||||||
|
|
||||||
else ->
|
else ->
|
||||||
@@ -200,11 +200,11 @@ public class KotlinPsiUnifier(
|
|||||||
val (implicitReceiver, explicitReceiver) =
|
val (implicitReceiver, explicitReceiver) =
|
||||||
when (explicitCall.getExplicitReceiverKind()) {
|
when (explicitCall.getExplicitReceiverKind()) {
|
||||||
ExplicitReceiverKind.EXTENSION_RECEIVER ->
|
ExplicitReceiverKind.EXTENSION_RECEIVER ->
|
||||||
(implicitCall.getExtensionReceiver() as? ThisReceiver) to
|
(implicitCall.getExtensionReceiver() as? ImplicitReceiver) to
|
||||||
(explicitCall.getExtensionReceiver() as? ExpressionReceiver)
|
(explicitCall.getExtensionReceiver() as? ExpressionReceiver)
|
||||||
|
|
||||||
ExplicitReceiverKind.DISPATCH_RECEIVER ->
|
ExplicitReceiverKind.DISPATCH_RECEIVER ->
|
||||||
(implicitCall.getDispatchReceiver() as? ThisReceiver) to
|
(implicitCall.getDispatchReceiver() as? ImplicitReceiver) to
|
||||||
(explicitCall.getDispatchReceiver() as? ExpressionReceiver)
|
(explicitCall.getDispatchReceiver() as? ExpressionReceiver)
|
||||||
|
|
||||||
else ->
|
else ->
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.name.Name;
|
|||||||
import org.jetbrains.kotlin.psi.KtExpression;
|
import org.jetbrains.kotlin.psi.KtExpression;
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver;
|
||||||
import org.jetbrains.kotlin.types.KotlinType;
|
import org.jetbrains.kotlin.types.KotlinType;
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions;
|
import org.jetbrains.kotlin.util.OperatorNameConventions;
|
||||||
|
|
||||||
@@ -108,8 +108,8 @@ public final class JsDescriptorUtils {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static DeclarationDescriptor getDeclarationDescriptorForReceiver(@NotNull ReceiverValue receiverParameter) {
|
private static DeclarationDescriptor getDeclarationDescriptorForReceiver(@NotNull ReceiverValue receiverParameter) {
|
||||||
if (receiverParameter instanceof ThisReceiver) {
|
if (receiverParameter instanceof ImplicitReceiver) {
|
||||||
DeclarationDescriptor declarationDescriptor = ((ThisReceiver) receiverParameter).getDeclarationDescriptor();
|
DeclarationDescriptor declarationDescriptor = ((ImplicitReceiver) receiverParameter).getDeclarationDescriptor();
|
||||||
return declarationDescriptor.getOriginal();
|
return declarationDescriptor.getOriginal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user