Rename: ThisReceiver ---> ImplicitReceiver

This commit is contained in:
Mikhail Glukhikh
2015-11-17 12:15:17 +03:00
parent 7ba297db81
commit 59e54d1db1
24 changed files with 58 additions and 58 deletions
@@ -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
} }
@@ -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)
@@ -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
@@ -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;
@@ -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
@@ -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)
@@ -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() {
@@ -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
} }
@@ -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)
@@ -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)
} }
@@ -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
} }
@@ -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)
@@ -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
@@ -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 ->
@@ -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();
} }