diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index 88446e6552e..3ec3ca7aa5d 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -2484,8 +2484,8 @@ public class ExpressionCodegen extends KtVisitor impleme @NotNull public StackValue generateReceiverValue(@NotNull ReceiverValue receiverValue, boolean isSuper) { - if (receiverValue instanceof ClassReceiver) { - ClassDescriptor receiverDescriptor = ((ClassReceiver) receiverValue).getDeclarationDescriptor(); + if (receiverValue instanceof ImplicitClassReceiver) { + ClassDescriptor receiverDescriptor = ((ImplicitClassReceiver) receiverValue).getDeclarationDescriptor(); if (DescriptorUtils.isCompanionObject(receiverDescriptor)) { CallableMemberDescriptor contextDescriptor = context.getContextDescriptor(); if (contextDescriptor instanceof FunctionDescriptor && receiverDescriptor == contextDescriptor.getContainingDeclaration()) { @@ -2497,7 +2497,7 @@ public class ExpressionCodegen extends KtVisitor impleme } else { return StackValue.thisOrOuter(this, receiverDescriptor, isSuper, - receiverValue instanceof CastClassReceiver || isEnumEntry(receiverDescriptor)); + receiverValue instanceof CastImplicitClassReceiver || isEnumEntry(receiverDescriptor)); } } else if (receiverValue instanceof ScriptReceiver) { @@ -3371,7 +3371,7 @@ public class ExpressionCodegen extends KtVisitor impleme if (dispatchReceiver != null) { Type receiverType = typeMapper.mapType(dispatchReceiver.getType()); ReceiverValue receiver = resolvedCall.getDispatchReceiver(); - boolean callSuper = containingDeclaration.isInner() && receiver instanceof ClassReceiver; + boolean callSuper = containingDeclaration.isInner() && receiver instanceof ImplicitClassReceiver; generateReceiverValue(receiver, callSuper).put(receiverType, v); } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DataFlowValueFactory.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DataFlowValueFactory.java index 5dc5935846e..6257a9d5b5b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DataFlowValueFactory.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DataFlowValueFactory.java @@ -126,7 +126,7 @@ public class DataFlowValueFactory { ) { if (receiverValue instanceof TransientReceiver || receiverValue instanceof ScriptReceiver || - receiverValue instanceof ClassReceiver || + receiverValue instanceof ImplicitClassReceiver || receiverValue instanceof ExtensionReceiver) { return createDataFlowValueForStableReceiver(receiverValue); } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/TaskPrioritizer.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/TaskPrioritizer.kt index e004acd0965..88f1a38de23 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/TaskPrioritizer.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/TaskPrioritizer.kt @@ -37,8 +37,8 @@ import org.jetbrains.kotlin.resolve.calls.util.FakeCallableDescriptorForObject import org.jetbrains.kotlin.resolve.descriptorUtil.hasLowPriorityInOverloadResolution import org.jetbrains.kotlin.resolve.scopes.ImportingScope import org.jetbrains.kotlin.resolve.scopes.LexicalScope -import org.jetbrains.kotlin.resolve.scopes.receivers.CastClassReceiver -import org.jetbrains.kotlin.resolve.scopes.receivers.ClassReceiver +import org.jetbrains.kotlin.resolve.scopes.receivers.CastImplicitClassReceiver +import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitClassReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.QualifierReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue.NO_RECEIVER @@ -234,8 +234,8 @@ public class TaskPrioritizer( val filteredMembers = if (filter == null) membersForThisVariant else membersForThisVariant.filter(filter) val dispatchReceiver = - if (explicitReceiver.value is ClassReceiver && type != explicitReceiver.value.type) { - CastClassReceiver(explicitReceiver.value.classDescriptor, type) + if (explicitReceiver.value is ImplicitClassReceiver && type != explicitReceiver.value.type) { + CastImplicitClassReceiver(explicitReceiver.value.classDescriptor, type) } else { explicitReceiver.value diff --git a/compiler/tests/org/jetbrains/kotlin/resolve/calls/AbstractResolvedCallsTest.kt b/compiler/tests/org/jetbrains/kotlin/resolve/calls/AbstractResolvedCallsTest.kt index 4c619d693ad..e94a2032789 100644 --- a/compiler/tests/org/jetbrains/kotlin/resolve/calls/AbstractResolvedCallsTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/resolve/calls/AbstractResolvedCallsTest.kt @@ -37,7 +37,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getParentResolvedCall import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.resolve.scopes.receivers.ClassReceiver +import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitClassReceiver import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.resolve.BindingContext @@ -77,7 +77,7 @@ public abstract class AbstractResolvedCallsTest : KotlinLiteFixture() { private fun ReceiverValue.getText() = when (this) { is ExpressionReceiver -> "${expression.getText()} {${getType()}}" - is ClassReceiver -> "Class{${getType()}}" + is ImplicitClassReceiver -> "Class{${getType()}}" is ExtensionReceiver -> "${getType()}Ext{${declarationDescriptor.getText()}}" else -> toString() } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazyClassReceiverParameterDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazyClassReceiverParameterDescriptor.java index eacd090d67b..4776b49a98d 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazyClassReceiverParameterDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazyClassReceiverParameterDescriptor.java @@ -19,16 +19,16 @@ package org.jetbrains.kotlin.descriptors.impl; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.descriptors.ClassDescriptor; import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; -import org.jetbrains.kotlin.resolve.scopes.receivers.ClassReceiver; +import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitClassReceiver; import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue; public class LazyClassReceiverParameterDescriptor extends AbstractReceiverParameterDescriptor { private final ClassDescriptor descriptor; - private final ClassReceiver receiverValue; + private final ImplicitClassReceiver receiverValue; public LazyClassReceiverParameterDescriptor(@NotNull ClassDescriptor descriptor) { this.descriptor = descriptor; - this.receiverValue = new ClassReceiver(descriptor); + this.receiverValue = new ImplicitClassReceiver(descriptor); } @NotNull diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/CastClassReceiver.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/CastImplicitClassReceiver.kt similarity index 78% rename from core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/CastClassReceiver.kt rename to core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/CastImplicitClassReceiver.kt index 2f16951a416..9b7aea1eed0 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/CastClassReceiver.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/CastImplicitClassReceiver.kt @@ -20,5 +20,5 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.types.KotlinType // ClassReceiver cast to given target type -// NB: equals / hashCode are inherited from ClassReceiver (as designed) -class CastClassReceiver(originalDescriptor: ClassDescriptor, val targetType: KotlinType) : ClassReceiver(originalDescriptor) +// NB: equals / hashCode are inherited from ImplicitClassReceiver (as designed) +class CastImplicitClassReceiver(originalDescriptor: ClassDescriptor, val targetType: KotlinType) : ImplicitClassReceiver(originalDescriptor) diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/ClassReceiver.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/ImplicitClassReceiver.kt similarity index 85% rename from core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/ClassReceiver.kt rename to core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/ImplicitClassReceiver.kt index 8f77aec939a..75b094ff46d 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/ClassReceiver.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/ImplicitClassReceiver.kt @@ -25,7 +25,10 @@ interface ThisClassReceiver : ReceiverValue { val classDescriptor: ClassDescriptor } -open class ClassReceiver(override val classDescriptor: ClassDescriptor) : ThisClassReceiver, ImplicitReceiver { +/** + * Same but implicit only + */ +open class ImplicitClassReceiver(override val classDescriptor: ClassDescriptor) : ThisClassReceiver, ImplicitReceiver { override fun exists() = true @@ -33,7 +36,7 @@ open class ClassReceiver(override val classDescriptor: ClassDescriptor) : ThisCl override val declarationDescriptor = classDescriptor - override fun equals(other: Any?) = classDescriptor == (other as? ClassReceiver)?.classDescriptor + override fun equals(other: Any?) = classDescriptor == (other as? ImplicitClassReceiver)?.classDescriptor override fun hashCode() = classDescriptor.hashCode() diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt index 7ad3cca111b..f7820784273 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt @@ -52,7 +52,7 @@ import org.jetbrains.kotlin.psi.psiUtil.effectiveDeclarations import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall -import org.jetbrains.kotlin.resolve.scopes.receivers.ClassReceiver +import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitClassReceiver import java.util.* public class KotlinFindClassUsagesHandler( @@ -163,8 +163,8 @@ public class KotlinFindClassUsagesHandler( val bindingContext = element.analyze() val resolvedCall = bindingContext[BindingContext.CALL, element]?.getResolvedCall(bindingContext) ?: return - if ((resolvedCall.getDispatchReceiver() as? ClassReceiver)?.declarationDescriptor == companionObjectDescriptor - || (resolvedCall.getExtensionReceiver() as? ClassReceiver)?.declarationDescriptor == companionObjectDescriptor) { + if ((resolvedCall.getDispatchReceiver() as? ImplicitClassReceiver)?.declarationDescriptor == companionObjectDescriptor + || (resolvedCall.getExtensionReceiver() as? ImplicitClassReceiver)?.declarationDescriptor == companionObjectDescriptor) { element.getReferences().forEach { if (!stop && !processor.process(it)) { stop = true