diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt index b46e928cab8..696cda75774 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt @@ -16,46 +16,28 @@ package org.jetbrains.kotlin.resolve.calls.tasks -import org.jetbrains.kotlin.psi.Call -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl +import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor -import org.jetbrains.kotlin.descriptors.SourceElement -import org.jetbrains.kotlin.descriptors.impl.ReceiverParameterDescriptorImpl -import org.jetbrains.kotlin.types.DynamicType -import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.descriptors.Visibilities -import org.jetbrains.kotlin.descriptors.CallableDescriptor -import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl -import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor -import org.jetbrains.kotlin.descriptors.impl.TypeParameterDescriptorImpl -import org.jetbrains.kotlin.types.Variance -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor -import org.jetbrains.kotlin.types.JetType -import kotlin.platform.platformStatic -import org.jetbrains.kotlin.resolve.scopes.receivers.TransientReceiver -import org.jetbrains.kotlin.types.isDynamic -import org.jetbrains.kotlin.resolve.calls.tasks.collectors.CallableDescriptorCollector -import org.jetbrains.kotlin.resolve.scopes.JetScope -import org.jetbrains.kotlin.resolve.BindingTrace -import org.jetbrains.kotlin.resolve.calls.tasks.collectors.CallableDescriptorCollectors -import org.jetbrains.kotlin.resolve.scopes.JetScopeImpl -import org.jetbrains.kotlin.utils.Printer -import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.descriptors.VariableDescriptor +import org.jetbrains.kotlin.descriptors.impl.* import org.jetbrains.kotlin.lexer.JetTokens -import org.jetbrains.kotlin.types.expressions.OperatorConventions -import org.jetbrains.kotlin.psi.JetOperationReferenceExpression +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.DescriptorFactory -import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl -import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.psi.ValueArgument -import java.util.ArrayList -import org.jetbrains.kotlin.psi.JetFunctionLiteralExpression -import org.jetbrains.kotlin.psi.JetPsiUtil +import org.jetbrains.kotlin.resolve.calls.tasks.collectors.CallableDescriptorCollector +import org.jetbrains.kotlin.resolve.calls.tasks.collectors.CallableDescriptorCollectors import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns +import org.jetbrains.kotlin.resolve.scopes.JetScope +import org.jetbrains.kotlin.resolve.scopes.JetScopeImpl +import org.jetbrains.kotlin.resolve.scopes.receivers.TransientReceiver +import org.jetbrains.kotlin.types.DynamicType +import org.jetbrains.kotlin.types.JetType +import org.jetbrains.kotlin.types.Variance +import org.jetbrains.kotlin.types.expressions.OperatorConventions +import org.jetbrains.kotlin.types.isDynamic +import org.jetbrains.kotlin.utils.Printer +import java.util.ArrayList +import kotlin.platform.platformStatic object DynamicCallableDescriptors { @@ -150,11 +132,7 @@ object DynamicCallableDescriptors { } private fun createDynamicDispatchReceiverParameter(owner: CallableDescriptor): ReceiverParameterDescriptorImpl { - return ReceiverParameterDescriptorImpl( - owner, - DynamicType, - TransientReceiver(DynamicType) - ) + return ReceiverParameterDescriptorImpl(owner, TransientReceiver(DynamicType)) } private fun createTypeParameters(owner: DeclarationDescriptor, call: Call): List = call.getTypeArguments().indices.map { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyScriptDescriptor.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyScriptDescriptor.kt index 4fd8535d455..bd1d1bb6fec 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyScriptDescriptor.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyScriptDescriptor.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.resolve.lazy.descriptors -import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.DeclarationDescriptorVisitor import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.ScriptDescriptor @@ -56,7 +55,7 @@ public class LazyScriptDescriptor( resolveSession.getTrace().record(BindingContext.SCRIPT, jetScript, this) } - private val implicitReceiver = ReceiverParameterDescriptorImpl(this, KotlinBuiltIns.getInstance().getAnyType(), ScriptReceiver(this)) + private val implicitReceiver = ReceiverParameterDescriptorImpl(this, ScriptReceiver(this)) override fun getThisAsReceiverParameter() = implicitReceiver @@ -81,7 +80,7 @@ public class LazyScriptDescriptor( override fun getScriptCodeDescriptor() = scriptCodeDescriptor() override fun getScopeForBodyResolution(): JetScope { - val parametersScope = WritableScopeImpl(JetScope.Empty, this, RedeclarationHandler.DO_NOTHING, "Parameters of " + this, implicitReceiver) + val parametersScope = WritableScopeImpl(JetScope.Empty, this, RedeclarationHandler.DO_NOTHING, "Parameters of $this", implicitReceiver) for (valueParameterDescriptor in getScriptCodeDescriptor().getValueParameters()) { parametersScope.addVariableDescriptor(valueParameterDescriptor) } diff --git a/compiler/tests/org/jetbrains/kotlin/types/JetTypeCheckerTest.java b/compiler/tests/org/jetbrains/kotlin/types/JetTypeCheckerTest.java index 7f99415756d..a00efd960a8 100644 --- a/compiler/tests/org/jetbrains/kotlin/types/JetTypeCheckerTest.java +++ b/compiler/tests/org/jetbrains/kotlin/types/JetTypeCheckerTest.java @@ -571,7 +571,6 @@ public class JetTypeCheckerTest extends JetLiteFixture { public List getImplicitReceiversHierarchy() { return Lists.newArrayList(new ReceiverParameterDescriptorImpl( getContainingDeclaration(), - thisType, new ExpressionReceiver(JetPsiFactory(getProject()).createExpression(expression), thisType) )); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractReceiverParameterDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractReceiverParameterDescriptor.java index 34e90c54d6f..2b9d78b72c2 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractReceiverParameterDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractReceiverParameterDescriptor.java @@ -44,7 +44,7 @@ public abstract class AbstractReceiverParameterDescriptor extends DeclarationDes JetType substitutedType = substitutor.substitute(getType(), Variance.INVARIANT); if (substitutedType == null) return null; - return new ReceiverParameterDescriptorImpl(getContainingDeclaration(), substitutedType, new TransientReceiver(substitutedType)); + return new ReceiverParameterDescriptorImpl(getContainingDeclaration(), new TransientReceiver(substitutedType)); } @Override @@ -76,6 +76,12 @@ public abstract class AbstractReceiverParameterDescriptor extends DeclarationDes return getType(); } + @NotNull + @Override + public JetType getType() { + return getValue().getType(); + } + @NotNull @Override public List getValueParameters() { 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 f7dfdb12912..eacd090d67b 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazyClassReceiverParameterDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazyClassReceiverParameterDescriptor.java @@ -21,7 +21,6 @@ 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.ReceiverValue; -import org.jetbrains.kotlin.types.JetType; public class LazyClassReceiverParameterDescriptor extends AbstractReceiverParameterDescriptor { private final ClassDescriptor descriptor; @@ -32,12 +31,6 @@ public class LazyClassReceiverParameterDescriptor extends AbstractReceiverParame this.receiverValue = new ClassReceiver(descriptor); } - @NotNull - @Override - public JetType getType() { - return descriptor.getDefaultType(); - } - @NotNull @Override public ReceiverValue getValue() { diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ReceiverParameterDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ReceiverParameterDescriptorImpl.java index 7a32f1b54f3..cbc87e8d9e7 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ReceiverParameterDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ReceiverParameterDescriptorImpl.java @@ -19,29 +19,16 @@ package org.jetbrains.kotlin.descriptors.impl; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue; -import org.jetbrains.kotlin.types.JetType; public class ReceiverParameterDescriptorImpl extends AbstractReceiverParameterDescriptor { private final DeclarationDescriptor containingDeclaration; - private final JetType type; private final ReceiverValue value; - public ReceiverParameterDescriptorImpl( - @NotNull DeclarationDescriptor containingDeclaration, - @NotNull JetType type, - @NotNull ReceiverValue value - ) { + public ReceiverParameterDescriptorImpl(@NotNull DeclarationDescriptor containingDeclaration, @NotNull ReceiverValue value) { this.containingDeclaration = containingDeclaration; - this.type = type; this.value = value; } - @NotNull - @Override - public JetType getType() { - return type; - } - @NotNull @Override public ReceiverValue getValue() { diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorFactory.java b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorFactory.java index a39f612201c..c5f382ecae9 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorFactory.java +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorFactory.java @@ -115,6 +115,6 @@ public class DescriptorFactory { ) { return receiverParameterType == null ? NO_RECEIVER_PARAMETER - : new ReceiverParameterDescriptorImpl(owner, receiverParameterType, new ExtensionReceiver(owner, receiverParameterType)); + : new ReceiverParameterDescriptorImpl(owner, new ExtensionReceiver(owner, receiverParameterType)); } }