Rename: ClassReceiver ---> ImplicitClassReceiver, CastClassReceiver ---> CastImplicitClassReceiver

This commit is contained in:
Mikhail Glukhikh
2015-11-17 12:29:36 +03:00
parent 04569dd4af
commit 657052e1d2
8 changed files with 24 additions and 21 deletions
@@ -2484,8 +2484,8 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
@NotNull @NotNull
public StackValue generateReceiverValue(@NotNull ReceiverValue receiverValue, boolean isSuper) { public StackValue generateReceiverValue(@NotNull ReceiverValue receiverValue, boolean isSuper) {
if (receiverValue instanceof ClassReceiver) { if (receiverValue instanceof ImplicitClassReceiver) {
ClassDescriptor receiverDescriptor = ((ClassReceiver) receiverValue).getDeclarationDescriptor(); ClassDescriptor receiverDescriptor = ((ImplicitClassReceiver) receiverValue).getDeclarationDescriptor();
if (DescriptorUtils.isCompanionObject(receiverDescriptor)) { if (DescriptorUtils.isCompanionObject(receiverDescriptor)) {
CallableMemberDescriptor contextDescriptor = context.getContextDescriptor(); CallableMemberDescriptor contextDescriptor = context.getContextDescriptor();
if (contextDescriptor instanceof FunctionDescriptor && receiverDescriptor == contextDescriptor.getContainingDeclaration()) { if (contextDescriptor instanceof FunctionDescriptor && receiverDescriptor == contextDescriptor.getContainingDeclaration()) {
@@ -2497,7 +2497,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
} }
else { else {
return StackValue.thisOrOuter(this, receiverDescriptor, isSuper, return StackValue.thisOrOuter(this, receiverDescriptor, isSuper,
receiverValue instanceof CastClassReceiver || isEnumEntry(receiverDescriptor)); receiverValue instanceof CastImplicitClassReceiver || isEnumEntry(receiverDescriptor));
} }
} }
else if (receiverValue instanceof ScriptReceiver) { else if (receiverValue instanceof ScriptReceiver) {
@@ -3371,7 +3371,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
if (dispatchReceiver != null) { if (dispatchReceiver != null) {
Type receiverType = typeMapper.mapType(dispatchReceiver.getType()); Type receiverType = typeMapper.mapType(dispatchReceiver.getType());
ReceiverValue receiver = resolvedCall.getDispatchReceiver(); ReceiverValue receiver = resolvedCall.getDispatchReceiver();
boolean callSuper = containingDeclaration.isInner() && receiver instanceof ClassReceiver; boolean callSuper = containingDeclaration.isInner() && receiver instanceof ImplicitClassReceiver;
generateReceiverValue(receiver, callSuper).put(receiverType, v); generateReceiverValue(receiver, callSuper).put(receiverType, v);
} }
@@ -126,7 +126,7 @@ public class DataFlowValueFactory {
) { ) {
if (receiverValue instanceof TransientReceiver || if (receiverValue instanceof TransientReceiver ||
receiverValue instanceof ScriptReceiver || receiverValue instanceof ScriptReceiver ||
receiverValue instanceof ClassReceiver || receiverValue instanceof ImplicitClassReceiver ||
receiverValue instanceof ExtensionReceiver) { receiverValue instanceof ExtensionReceiver) {
return createDataFlowValueForStableReceiver(receiverValue); return createDataFlowValueForStableReceiver(receiverValue);
} }
@@ -37,8 +37,8 @@ import org.jetbrains.kotlin.resolve.calls.util.FakeCallableDescriptorForObject
import org.jetbrains.kotlin.resolve.descriptorUtil.hasLowPriorityInOverloadResolution import org.jetbrains.kotlin.resolve.descriptorUtil.hasLowPriorityInOverloadResolution
import org.jetbrains.kotlin.resolve.scopes.ImportingScope import org.jetbrains.kotlin.resolve.scopes.ImportingScope
import org.jetbrains.kotlin.resolve.scopes.LexicalScope import org.jetbrains.kotlin.resolve.scopes.LexicalScope
import org.jetbrains.kotlin.resolve.scopes.receivers.CastClassReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.CastImplicitClassReceiver
import org.jetbrains.kotlin.resolve.scopes.receivers.ClassReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitClassReceiver
import org.jetbrains.kotlin.resolve.scopes.receivers.QualifierReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.QualifierReceiver
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue.NO_RECEIVER 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 filteredMembers = if (filter == null) membersForThisVariant else membersForThisVariant.filter(filter)
val dispatchReceiver = val dispatchReceiver =
if (explicitReceiver.value is ClassReceiver && type != explicitReceiver.value.type) { if (explicitReceiver.value is ImplicitClassReceiver && type != explicitReceiver.value.type) {
CastClassReceiver(explicitReceiver.value.classDescriptor, type) CastImplicitClassReceiver(explicitReceiver.value.classDescriptor, type)
} }
else { else {
explicitReceiver.value explicitReceiver.value
@@ -37,7 +37,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getParentResolvedCall
import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor 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.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
@@ -77,7 +77,7 @@ public abstract class AbstractResolvedCallsTest : KotlinLiteFixture() {
private fun ReceiverValue.getText() = when (this) { private fun ReceiverValue.getText() = when (this) {
is ExpressionReceiver -> "${expression.getText()} {${getType()}}" is ExpressionReceiver -> "${expression.getText()} {${getType()}}"
is ClassReceiver -> "Class{${getType()}}" is ImplicitClassReceiver -> "Class{${getType()}}"
is ExtensionReceiver -> "${getType()}Ext{${declarationDescriptor.getText()}}" is ExtensionReceiver -> "${getType()}Ext{${declarationDescriptor.getText()}}"
else -> toString() else -> toString()
} }
@@ -19,16 +19,16 @@ package org.jetbrains.kotlin.descriptors.impl;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.descriptors.ClassDescriptor; import org.jetbrains.kotlin.descriptors.ClassDescriptor;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; 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; import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
public class LazyClassReceiverParameterDescriptor extends AbstractReceiverParameterDescriptor { public class LazyClassReceiverParameterDescriptor extends AbstractReceiverParameterDescriptor {
private final ClassDescriptor descriptor; private final ClassDescriptor descriptor;
private final ClassReceiver receiverValue; private final ImplicitClassReceiver receiverValue;
public LazyClassReceiverParameterDescriptor(@NotNull ClassDescriptor descriptor) { public LazyClassReceiverParameterDescriptor(@NotNull ClassDescriptor descriptor) {
this.descriptor = descriptor; this.descriptor = descriptor;
this.receiverValue = new ClassReceiver(descriptor); this.receiverValue = new ImplicitClassReceiver(descriptor);
} }
@NotNull @NotNull
@@ -20,5 +20,5 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.KotlinType
// ClassReceiver cast to given target type // ClassReceiver cast to given target type
// NB: equals / hashCode are inherited from ClassReceiver (as designed) // NB: equals / hashCode are inherited from ImplicitClassReceiver (as designed)
class CastClassReceiver(originalDescriptor: ClassDescriptor, val targetType: KotlinType) : ClassReceiver(originalDescriptor) class CastImplicitClassReceiver(originalDescriptor: ClassDescriptor, val targetType: KotlinType) : ImplicitClassReceiver(originalDescriptor)
@@ -25,7 +25,10 @@ interface ThisClassReceiver : ReceiverValue {
val classDescriptor: ClassDescriptor 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 override fun exists() = true
@@ -33,7 +36,7 @@ open class ClassReceiver(override val classDescriptor: ClassDescriptor) : ThisCl
override val declarationDescriptor = classDescriptor 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() override fun hashCode() = classDescriptor.hashCode()
@@ -52,7 +52,7 @@ import org.jetbrains.kotlin.psi.psiUtil.effectiveDeclarations
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
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.ClassReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitClassReceiver
import java.util.* import java.util.*
public class KotlinFindClassUsagesHandler( public class KotlinFindClassUsagesHandler(
@@ -163,8 +163,8 @@ public class KotlinFindClassUsagesHandler(
val bindingContext = element.analyze() val bindingContext = element.analyze()
val resolvedCall = bindingContext[BindingContext.CALL, element]?.getResolvedCall(bindingContext) ?: return val resolvedCall = bindingContext[BindingContext.CALL, element]?.getResolvedCall(bindingContext) ?: return
if ((resolvedCall.getDispatchReceiver() as? ClassReceiver)?.declarationDescriptor == companionObjectDescriptor if ((resolvedCall.getDispatchReceiver() as? ImplicitClassReceiver)?.declarationDescriptor == companionObjectDescriptor
|| (resolvedCall.getExtensionReceiver() as? ClassReceiver)?.declarationDescriptor == companionObjectDescriptor) { || (resolvedCall.getExtensionReceiver() as? ImplicitClassReceiver)?.declarationDescriptor == companionObjectDescriptor) {
element.getReferences().forEach { element.getReferences().forEach {
if (!stop && !processor.process(it)) { if (!stop && !processor.process(it)) {
stop = true stop = true