From bc592cb5cdc0e55b70ff4d8dccfdf5f2240b6f7e Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 30 Oct 2012 11:28:13 +0400 Subject: [PATCH] Migrating descriptors onto ReceiverParameterDescriptor --- .../AccessorForFunctionDescriptor.java | 5 +- .../jetbrains/jet/codegen/ClosureCodegen.java | 3 +- .../jet/codegen/FunctionCodegen.java | 9 ++-- .../org/jetbrains/jet/codegen/StackValue.java | 2 +- .../jet/codegen/state/JetTypeMapper.java | 7 ++- .../lang/descriptors/CallableDescriptor.java | 5 +- .../jet/lang/descriptors/ClassDescriptor.java | 3 +- .../lang/descriptors/ClassDescriptorImpl.java | 11 ++-- .../ConstructorDescriptorImpl.java | 7 +-- ...clarationDescriptorVisitorEmptyBodies.java | 5 ++ .../descriptors/FunctionDescriptorImpl.java | 27 ++++------ .../descriptors/FunctionDescriptorUtil.java | 4 +- .../LazySubstitutingClassDescriptor.java | 5 +- .../descriptors/MutableClassDescriptor.java | 2 +- .../MutableClassDescriptorLite.java | 7 ++- .../PropertyAccessorDescriptor.java | 5 +- .../lang/descriptors/PropertyDescriptor.java | 54 +++++++++---------- .../descriptors/ScriptCodeDescriptor.java | 3 +- .../lang/descriptors/ScriptDescriptor.java | 29 +++++----- .../SimpleFunctionDescriptorImpl.java | 3 +- .../descriptors/VariableDescriptorImpl.java | 9 ++-- .../jet/lang/resolve/BodyResolver.java | 3 +- .../jet/lang/resolve/DescriptorResolver.java | 24 ++++----- .../jet/lang/resolve/DescriptorUtils.java | 13 ++--- .../jet/lang/resolve/OverridingUtil.java | 3 +- .../lang/resolve/ScriptHeaderResolver.java | 2 +- .../jet/lang/resolve/calls/CallResolver.java | 5 +- .../lang/resolve/calls/CandidateResolver.java | 4 +- .../ValueArgumentsToParametersMapper.java | 3 +- .../calls/autocasts/DataFlowValueFactory.java | 2 +- .../results/OverloadingConflictResolver.java | 6 +-- .../resolve/calls/tasks/ResolutionTask.java | 4 +- .../resolve/calls/tasks/TaskPrioritizer.java | 2 +- .../resolve/calls/tasks/TracingStrategy.java | 9 ++-- .../resolve/lazy/LazyClassDescriptor.java | 14 +++-- .../resolve/lazy/LazyClassMemberScope.java | 2 +- .../resolve/scopes/WritableScopeImpl.java | 4 +- .../jetbrains/jet/lang/types/ErrorUtils.java | 4 +- .../BasicExpressionTypingVisitor.java | 4 +- .../ClosureExpressionsTypingVisitor.java | 10 ++-- .../expressions/ExpressionTypingUtils.java | 22 ++++---- .../lang/types/expressions/LabelResolver.java | 8 +-- .../jet/resolve/DescriptorRenderer.java | 12 +++-- .../jet/test/util/NamespaceComparator.java | 4 +- .../OverrideImplementMethodsHandler.java | 8 +-- .../FunctionsHighlightingVisitor.java | 8 +-- .../jet/plugin/highlighter/IdeRenderers.java | 5 +- .../PropertiesHighlightingVisitor.java | 13 +++-- .../DeclarationDescriptorComparator.java | 5 +- .../libraries/JetSourceNavigationHelper.java | 5 +- .../JetStructureViewElement.java | 3 +- .../k2js/translate/reference/CallBuilder.java | 4 +- .../translate/utils/JsDescriptorUtils.java | 8 +-- 53 files changed, 210 insertions(+), 218 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java b/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java index 544e3e78620..007ced2ddc4 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java @@ -19,10 +19,11 @@ package org.jetbrains.jet.codegen; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import java.util.Collections; +import static org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER; + /** * @author alex.tkachman */ @@ -35,7 +36,7 @@ public class AccessorForFunctionDescriptor extends SimpleFunctionDescriptorImpl FunctionDescriptor fd = (FunctionDescriptor) descriptor; initialize(fd.getReceiverParameter().exists() ? fd.getReceiverParameter().getType() : null, - descriptor instanceof ConstructorDescriptor ? ReceiverDescriptor.NO_RECEIVER : fd.getExpectedThisObject(), + descriptor instanceof ConstructorDescriptor ? NO_RECEIVER_PARAMETER : fd.getExpectedThisObject(), Collections.emptyList(), fd.getValueParameters(), fd.getReturnType(), diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java index 06956d052dc..304cc89d787 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java @@ -42,7 +42,6 @@ import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContextUtils; import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.JvmClassName; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.JetType; import java.util.ArrayList; @@ -174,7 +173,7 @@ public class ClosureCodegen extends GenerationStateAware { iv.load(0, Type.getObjectType(className)); - final ReceiverDescriptor receiver = funDescriptor.getReceiverParameter(); + final ReceiverParameterDescriptor receiver = funDescriptor.getReceiverParameter(); int count = 1; if (receiver.exists()) { StackValue.local(count, OBJECT_TYPE).put(OBJECT_TYPE, iv); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java index 73574a5d0c2..c90bf1e0b76 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java @@ -46,7 +46,6 @@ import org.jetbrains.jet.lang.resolve.java.JvmClassName; import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames; import org.jetbrains.jet.lang.resolve.java.kt.DescriptorKindUtils; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import java.util.*; @@ -147,7 +146,7 @@ public class FunctionCodegen extends GenerationStateAware { MethodBounds methodBounds = generateMethodBody(mv, fun, functionDescriptor, context, asmMethod, localVariablesInfo); Type thisType; - ReceiverDescriptor expectedThisObject = functionDescriptor.getExpectedThisObject(); + ReceiverParameterDescriptor expectedThisObject = functionDescriptor.getExpectedThisObject(); if (expectedThisObject.exists()) { thisType = typeMapper.mapType(expectedThisObject.getType()); } @@ -396,7 +395,7 @@ public class FunctionCodegen extends GenerationStateAware { List paramDescrs = functionDescriptor.getValueParameters(); Modality modality = functionDescriptor.getModality(); - ReceiverDescriptor receiverParameter = functionDescriptor.getReceiverParameter(); + ReceiverParameterDescriptor receiverParameter = functionDescriptor.getReceiverParameter(); int start = 0; if (functionDescriptor instanceof PropertyAccessorDescriptor) { @@ -546,7 +545,7 @@ public class FunctionCodegen extends GenerationStateAware { return; } - ReceiverDescriptor receiverParameter = functionDescriptor.getReceiverParameter(); + ReceiverParameterDescriptor receiverParameter = functionDescriptor.getReceiverParameter(); boolean hasReceiver = receiverParameter.exists(); boolean isStatic = isStatic(kind); @@ -592,7 +591,7 @@ public class FunctionCodegen extends GenerationStateAware { Method jvmSignature, FunctionDescriptor functionDescriptor, OwnerKind kind, - ReceiverDescriptor receiverParameter, + ReceiverParameterDescriptor receiverParameter, boolean hasReceiver, boolean aStatic, JvmClassName ownerInternalName, diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java index 35e6645cd28..81e6d64321b 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java @@ -1331,7 +1331,7 @@ public abstract class StackValue { private void genReceiver( InstructionAdapter v, ReceiverDescriptor receiverArgument, Type type, - @Nullable ReceiverDescriptor receiverParameter, int depth + @Nullable ReceiverParameterDescriptor receiverParameter, int depth ) { if (receiver == StackValue.none()) { if (receiverParameter != null) { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java index a26e52396cc..4ceae095f99 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java @@ -35,7 +35,6 @@ import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.java.*; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; @@ -500,7 +499,7 @@ public class JetTypeMapper extends BindingTraceAware { writeFormalTypeParameters(f.getTypeParameters(), signatureVisitor); - final ReceiverDescriptor receiverTypeRef = f.getReceiverParameter(); + final ReceiverParameterDescriptor receiverTypeRef = f.getReceiverParameter(); final JetType receiverType = !receiverTypeRef.exists() ? null : receiverTypeRef.getType(); final List parameters = f.getValueParameters(); @@ -611,7 +610,7 @@ public class JetTypeMapper extends BindingTraceAware { } public JvmMethodSignature mapSignature(Name name, FunctionDescriptor f) { - final ReceiverDescriptor receiver = f.getReceiverParameter(); + final ReceiverParameterDescriptor receiver = f.getReceiverParameter(); BothSignatureWriter signatureWriter = new BothSignatureWriter(BothSignatureWriter.Mode.METHOD, false); @@ -638,7 +637,7 @@ public class JetTypeMapper extends BindingTraceAware { return signatureWriter.makeJvmMethodSignature(name.getName()); } - private void writeReceiverIfNeeded(ReceiverDescriptor receiver, BothSignatureWriter signatureWriter) { + private void writeReceiverIfNeeded(ReceiverParameterDescriptor receiver, BothSignatureWriter signatureWriter) { if (receiver.exists()) { signatureWriter.writeParameterType(JvmMethodParameterKind.RECEIVER); mapType(receiver.getType(), signatureWriter, JetTypeMapperMode.VALUE); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/CallableDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/CallableDescriptor.java index eadb34b2156..3814aaa6b0c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/CallableDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/CallableDescriptor.java @@ -18,7 +18,6 @@ package org.jetbrains.jet.lang.descriptors; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeSubstitutor; @@ -30,10 +29,10 @@ import java.util.Set; */ public interface CallableDescriptor extends DeclarationDescriptorWithVisibility, DeclarationDescriptorNonRoot { @NotNull - ReceiverDescriptor getReceiverParameter(); + ReceiverParameterDescriptor getReceiverParameter(); @NotNull - ReceiverDescriptor getExpectedThisObject(); + ReceiverParameterDescriptor getExpectedThisObject(); @NotNull List getTypeParameters(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptor.java index 9d476fa681d..ea82eb2c33e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptor.java @@ -19,7 +19,6 @@ package org.jetbrains.jet.lang.descriptors; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.resolve.scopes.JetScope; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeProjection; import org.jetbrains.jet.lang.types.TypeSubstitutor; @@ -75,5 +74,5 @@ public interface ClassDescriptor extends ClassifierDescriptor, MemberDescriptor, Visibility getVisibility(); @NotNull - ReceiverDescriptor getImplicitReceiver(); + ReceiverParameterDescriptor getThisAsReceiverParameter(); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptorImpl.java index f589280efbd..862a6a46a5e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ClassDescriptorImpl.java @@ -23,7 +23,6 @@ import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.SubstitutingScope; import org.jetbrains.jet.lang.resolve.scopes.receivers.ClassReceiver; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.*; import java.util.Collection; @@ -40,7 +39,7 @@ public class ClassDescriptorImpl extends DeclarationDescriptorNonRootImpl implem private JetScope memberDeclarations; private Set constructors; private ConstructorDescriptor primaryConstructor; - private ReceiverDescriptor implicitReceiver; + private ReceiverParameterDescriptor thisAsReceiverParameter; private final Modality modality; private ClassDescriptor classObjectDescriptor; private final ClassKind kind; @@ -171,11 +170,11 @@ public class ClassDescriptorImpl extends DeclarationDescriptorNonRootImpl implem @NotNull @Override - public ReceiverDescriptor getImplicitReceiver() { - if (implicitReceiver == null) { - implicitReceiver = new ClassReceiver(this); + public ReceiverParameterDescriptor getThisAsReceiverParameter() { + if (thisAsReceiverParameter == null) { + thisAsReceiverParameter = new ReceiverParameterDescriptorImpl(this, getDefaultType()); } - return implicitReceiver; + return thisAsReceiverParameter; } @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ConstructorDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ConstructorDescriptorImpl.java index 74554713586..1004013aa2a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ConstructorDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ConstructorDescriptorImpl.java @@ -20,12 +20,13 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import java.util.Collections; import java.util.List; import java.util.Set; +import static org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER; + /** * @author abreslav */ @@ -51,12 +52,12 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements //isStatic - for java only public ConstructorDescriptorImpl initialize(@NotNull List typeParameters, @NotNull List unsubstitutedValueParameters, Visibility visibility, boolean isStatic) { - super.initialize(null, isStatic ? ReceiverDescriptor.NO_RECEIVER : getExpectedThisObject(getContainingDeclaration()), typeParameters, unsubstitutedValueParameters, null, Modality.FINAL, visibility); + super.initialize(null, isStatic ? NO_RECEIVER_PARAMETER : getExpectedThisObject(getContainingDeclaration()), typeParameters, unsubstitutedValueParameters, null, Modality.FINAL, visibility); return this; } @NotNull - private static ReceiverDescriptor getExpectedThisObject(@NotNull ClassDescriptor descriptor) { + private static ReceiverParameterDescriptor getExpectedThisObject(@NotNull ClassDescriptor descriptor) { DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration(); return DescriptorUtils.getExpectedThisObjectIfNeeded(containingDeclaration); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorVisitorEmptyBodies.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorVisitorEmptyBodies.java index 342ce25e21a..39f8260fd66 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorVisitorEmptyBodies.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorVisitorEmptyBodies.java @@ -92,4 +92,9 @@ public class DeclarationDescriptorVisitorEmptyBodies implements Declaratio public R visitPropertySetterDescriptor(PropertySetterDescriptor descriptor, D data) { return visitPropertyAccessorDescriptor(descriptor, data); } + + @Override + public R visitReceiverParameterDescriptor(ReceiverParameterDescriptor descriptor, D data) { + return visitDeclarationDescriptor(descriptor, data); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java index 9feb7d33985..8c7848412a9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java @@ -23,9 +23,6 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.OverridingUtil; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ExtensionReceiver; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; -import org.jetbrains.jet.lang.resolve.scopes.receivers.TransientReceiver; import org.jetbrains.jet.lang.types.DescriptorSubstitutor; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeSubstitutor; @@ -34,7 +31,7 @@ import org.jetbrains.jet.lang.types.Variance; import java.util.List; import java.util.Set; -import static org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor.NO_RECEIVER; +import static org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER; /** * @author abreslav @@ -44,8 +41,8 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo protected List typeParameters; protected List unsubstitutedValueParameters; protected JetType unsubstitutedReturnType; - private ReceiverDescriptor receiverParameter; - protected ReceiverDescriptor expectedThisObject; + private ReceiverParameterDescriptor receiverParameter; + protected ReceiverParameterDescriptor expectedThisObject; protected Modality modality; protected Visibility visibility; @@ -76,7 +73,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo protected FunctionDescriptorImpl initialize( @Nullable JetType receiverParameterType, - @NotNull ReceiverDescriptor expectedThisObject, + @NotNull ReceiverParameterDescriptor expectedThisObject, @NotNull List typeParameters, @NotNull List unsubstitutedValueParameters, @Nullable JetType unsubstitutedReturnType, @@ -87,7 +84,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo this.unsubstitutedReturnType = unsubstitutedReturnType; this.modality = modality; this.visibility = visibility; - this.receiverParameter = receiverParameterType == null ? NO_RECEIVER : new ExtensionReceiver(this, receiverParameterType); + this.receiverParameter = receiverParameterType == null ? NO_RECEIVER_PARAMETER : new ReceiverParameterDescriptorImpl(this, receiverParameterType); this.expectedThisObject = expectedThisObject; for (int i = 0; i < typeParameters.size(); ++i) { @@ -123,13 +120,13 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo @NotNull @Override - public ReceiverDescriptor getReceiverParameter() { + public ReceiverParameterDescriptor getReceiverParameter() { return receiverParameter; } @NotNull @Override - public ReceiverDescriptor getExpectedThisObject() { + public ReceiverParameterDescriptor getExpectedThisObject() { return expectedThisObject; } @@ -207,13 +204,9 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo } } - ReceiverDescriptor substitutedExpectedThis = NO_RECEIVER; - if (expectedThisObject.exists()) { - JetType substitutedType = substitutor.substitute(expectedThisObject.getType(), Variance.INVARIANT); - if (substitutedType == null) { - return null; - } - substitutedExpectedThis = new TransientReceiver(substitutedType); + ReceiverParameterDescriptor substitutedExpectedThis = expectedThisObject.substitute(substitutor); + if (substitutedExpectedThis == null) { + return null; } List substitutedValueParameters = FunctionDescriptorUtil.getSubstitutedValueParameters(substitutedDescriptor, this, substitutor); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java index f170557cd9f..b5372d6ecfb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java @@ -105,7 +105,7 @@ public class FunctionDescriptorUtil { @NotNull public static JetScope getFunctionInnerScope(@NotNull JetScope outerScope, @NotNull FunctionDescriptor descriptor, @NotNull BindingTrace trace) { WritableScope parameterScope = new WritableScopeImpl(outerScope, descriptor, new TraceBasedRedeclarationHandler(trace), "Function inner scope"); - ReceiverDescriptor receiver = descriptor.getReceiverParameter(); + ReceiverParameterDescriptor receiver = descriptor.getReceiverParameter(); if (receiver.exists()) { parameterScope.setImplicitReceiver(receiver); } @@ -120,7 +120,7 @@ public class FunctionDescriptorUtil { return parameterScope; } - public static void initializeFromFunctionType(@NotNull FunctionDescriptorImpl functionDescriptor, @NotNull JetType functionType, @NotNull ReceiverDescriptor expectedThisObject, + public static void initializeFromFunctionType(@NotNull FunctionDescriptorImpl functionDescriptor, @NotNull JetType functionType, @NotNull ReceiverParameterDescriptor expectedThisObject, @NotNull Modality modality, @NotNull Visibility visibility) { assert KotlinBuiltIns.getInstance().isFunctionType(functionType); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/LazySubstitutingClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/LazySubstitutingClassDescriptor.java index c35913a6197..58e9744f858 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/LazySubstitutingClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/LazySubstitutingClassDescriptor.java @@ -17,18 +17,15 @@ package org.jetbrains.jet.lang.descriptors; import com.google.common.collect.Lists; -import com.google.common.collect.Sets; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.SubstitutingScope; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.*; import java.util.Collection; import java.util.List; -import java.util.Set; /** * @author abreslav @@ -107,7 +104,7 @@ public class LazySubstitutingClassDescriptor implements ClassDescriptor { @NotNull @Override - public ReceiverDescriptor getImplicitReceiver() { + public ReceiverParameterDescriptor getThisAsReceiverParameter() { throw new UnsupportedOperationException(); // TODO } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptor.java index 54de20991e3..3f3a2786da2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptor.java @@ -248,7 +248,7 @@ public class MutableClassDescriptor extends MutableClassDescriptorLite implement @NotNull @Override public ReceiverDescriptor getImplicitReceiver() { - return classObjectDescriptor.getImplicitReceiver(); + return classObjectDescriptor.getThisAsReceiverParameter(); } } ); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptorLite.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptorLite.java index e05248eeef5..458fae84f50 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptorLite.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptorLite.java @@ -25,7 +25,6 @@ import org.jetbrains.jet.lang.resolve.scopes.InnerClassesScopeWrapper; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.resolve.scopes.receivers.ClassReceiver; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.resolve.DescriptorRenderer; @@ -56,7 +55,7 @@ public abstract class MutableClassDescriptorLite extends ClassDescriptorBase { private JetScope scopeForMemberLookup; private JetScope innerClassesScope; - private ClassReceiver implicitReceiver; + private ReceiverParameterDescriptor implicitReceiver; private Name name; private final DeclarationDescriptor containingDeclaration; @@ -231,9 +230,9 @@ public abstract class MutableClassDescriptorLite extends ClassDescriptorBase { @NotNull @Override - public ReceiverDescriptor getImplicitReceiver() { + public ReceiverParameterDescriptor getThisAsReceiverParameter() { if (implicitReceiver == null) { - implicitReceiver = new ClassReceiver(this); + implicitReceiver = new ReceiverParameterDescriptorImpl(this, getDefaultType()); } return implicitReceiver; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptor.java index b8003cbb8e8..d0d1be5e632 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptor.java @@ -20,7 +20,6 @@ import com.google.common.collect.Sets; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.TypeSubstitutor; import java.util.Collections; @@ -109,13 +108,13 @@ public abstract class PropertyAccessorDescriptor extends DeclarationDescriptorNo @NotNull @Override - public ReceiverDescriptor getReceiverParameter() { + public ReceiverParameterDescriptor getReceiverParameter() { return getCorrespondingProperty().getReceiverParameter(); } @NotNull @Override - public ReceiverDescriptor getExpectedThisObject() { + public ReceiverParameterDescriptor getExpectedThisObject() { return getCorrespondingProperty().getExpectedThisObject(); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java index 59fd7fd85c9..c1f0d06a9c2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java @@ -24,9 +24,6 @@ import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.OverridingUtil; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ExtensionReceiver; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; -import org.jetbrains.jet.lang.resolve.scopes.receivers.TransientReceiver; import org.jetbrains.jet.lang.types.DescriptorSubstitutor; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeSubstitutor; @@ -36,7 +33,7 @@ import java.util.Collections; import java.util.List; import java.util.Set; -import static org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor.NO_RECEIVER; +import static org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER; /** * @author abreslav @@ -50,8 +47,8 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab private final PropertyDescriptor original; private final Kind kind; - private ReceiverDescriptor expectedThisObject; - private ReceiverDescriptor receiver; + private ReceiverParameterDescriptor expectedThisObject; + private ReceiverParameterDescriptor receiverParameter; private List typeParameters; private PropertyGetterDescriptor getter; private PropertySetterDescriptor setter; @@ -93,7 +90,7 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab @NotNull Visibility visibility, boolean isVar, @Nullable JetType receiverType, - @NotNull ReceiverDescriptor expectedThisObject, + @NotNull ReceiverParameterDescriptor expectedThisObject, @NotNull Name name, @NotNull JetType outType, @NotNull Kind kind @@ -102,19 +99,29 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab setType(outType, Collections.emptyList(), expectedThisObject, receiverType); } - public void setType(@NotNull JetType outType, @NotNull List typeParameters, @NotNull ReceiverDescriptor expectedThisObject, @Nullable JetType receiverType) { - ReceiverDescriptor receiver = receiverType == null - ? NO_RECEIVER - : new ExtensionReceiver(this, receiverType); - setType(outType, typeParameters, expectedThisObject, receiver); + public void setType( + @NotNull JetType outType, + @NotNull List typeParameters, + @NotNull ReceiverParameterDescriptor expectedThisObject, + @Nullable JetType receiverType + ) { + ReceiverParameterDescriptor receiverParameter = receiverType == null + ? NO_RECEIVER_PARAMETER + : new ReceiverParameterDescriptorImpl(this, receiverType); + setType(outType, typeParameters, expectedThisObject, receiverParameter); } - public void setType(@NotNull JetType outType, @NotNull List typeParameters, @NotNull ReceiverDescriptor expectedThisObject, @NotNull ReceiverDescriptor receiver) { + public void setType( + @NotNull JetType outType, + @NotNull List typeParameters, + @NotNull ReceiverParameterDescriptor expectedThisObject, + @NotNull ReceiverParameterDescriptor receiverParameter + ) { setOutType(outType); this.typeParameters = Lists.newArrayList(typeParameters); - this.receiver = receiver; + this.receiverParameter = receiverParameter; this.expectedThisObject = expectedThisObject; } @@ -135,13 +142,13 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab @Override @NotNull - public ReceiverDescriptor getReceiverParameter() { - return receiver; + public ReceiverParameterDescriptor getReceiverParameter() { + return receiverParameter; } @NotNull @Override - public ReceiverDescriptor getExpectedThisObject() { + public ReceiverParameterDescriptor getExpectedThisObject() { return expectedThisObject; } @@ -212,18 +219,11 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab return null; // TODO : tell the user that the property was projected out } - ReceiverDescriptor substitutedExpectedThisObject; - if (expectedThisObject.exists()) { - JetType substitutedExpectedThisObjectType = substitutor.substitute(getExpectedThisObject().getType(), Variance.INVARIANT); - substitutedExpectedThisObject = new TransientReceiver(substitutedExpectedThisObjectType); - } - else { - substitutedExpectedThisObject = NO_RECEIVER; - } + ReceiverParameterDescriptor substitutedExpectedThisObject = getExpectedThisObject().substitute(substitutor); JetType substitutedReceiverType; - if (receiver.exists()) { - substitutedReceiverType = substitutor.substitute(receiver.getType(), Variance.IN_VARIANCE); + if (receiverParameter.exists()) { + substitutedReceiverType = substitutor.substitute(receiverParameter.getType(), Variance.IN_VARIANCE); if (substitutedReceiverType == null) return null; } else { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ScriptCodeDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ScriptCodeDescriptor.java index f5bd9a5f637..c329b7cf76c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ScriptCodeDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ScriptCodeDescriptor.java @@ -19,7 +19,6 @@ package org.jetbrains.jet.lang.descriptors; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.JetType; import java.util.Collections; @@ -36,7 +35,7 @@ public class ScriptCodeDescriptor extends FunctionDescriptorImpl { } public void initialize( - @NotNull ReceiverDescriptor expectedThisObject, + @NotNull ReceiverParameterDescriptor expectedThisObject, @NotNull List valueParameters, @NotNull JetType returnType) { super.initialize(null, expectedThisObject, Collections.emptyList(), valueParameters, returnType, Modality.FINAL, Visibilities.LOCAL); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptor.java index 025a3200001..d0e0f2a41aa 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptor.java @@ -29,9 +29,6 @@ import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler; import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ClassReceiver; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ScriptReceiver; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeSubstitutor; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; @@ -52,13 +49,15 @@ public class ScriptDescriptor extends DeclarationDescriptorNonRootImpl { private List valueParameters; private final ScriptCodeDescriptor scriptCodeDescriptor = new ScriptCodeDescriptor(this); - private final ReceiverDescriptor implicitReceiver = new ScriptReceiver(this); + private final ReceiverParameterDescriptor implicitReceiver = new ReceiverParameterDescriptorImpl(this, + // Putting Any here makes no sense, + // it is simply copied from someplace else + // during a refactoring + KotlinBuiltIns.getInstance().getAnyType()); - private ClassDescriptorImpl classDescriptor; + private final ClassDescriptorImpl classDescriptor; - private WritableScopeImpl classScope; - private ClassDescriptorImpl descriptor; - private ClassReceiver classReceiver; + private final WritableScopeImpl classScope; public ScriptDescriptor(@Nullable DeclarationDescriptor containingDeclaration, int priority, JetScript script, JetScope scriptScope) { super(containingDeclaration, Collections.emptyList(), NAME); @@ -80,7 +79,6 @@ public class ScriptDescriptor extends DeclarationDescriptorNonRootImpl { classScope, new HashSet(), null); - classReceiver = new ClassReceiver(classDescriptor); } public void initialize(@NotNull JetType returnType, JetScript declaration, BindingContext bindingContext) { @@ -94,7 +92,11 @@ public class ScriptDescriptor extends DeclarationDescriptorNonRootImpl { false, Name.identifier(ScriptNameUtil.LAST_EXPRESSION_VALUE_FIELD_NAME), CallableMemberDescriptor.Kind.DECLARATION); - propertyDescriptor.setType(returnType, Collections.emptyList(), new ClassReceiver(classDescriptor), ReceiverDescriptor.NO_RECEIVER); + propertyDescriptor.setType( + returnType, + Collections.emptyList(), + classDescriptor.getThisAsReceiverParameter(), + ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER); propertyDescriptor.initialize(null, null); classScope.addPropertyDescriptor(propertyDescriptor); @@ -150,7 +152,7 @@ public class ScriptDescriptor extends DeclarationDescriptorNonRootImpl { } @NotNull - public ReceiverDescriptor getImplicitReceiver() { + public ReceiverParameterDescriptor getThisAsReceiverParameter() { return implicitReceiver; } @@ -182,7 +184,10 @@ public class ScriptDescriptor extends DeclarationDescriptorNonRootImpl { false, parameter.getName(), CallableMemberDescriptor.Kind.DECLARATION); - propertyDescriptor.setType(parameter.getType(), Collections.emptyList(), classReceiver, ReceiverDescriptor.NO_RECEIVER); + propertyDescriptor.setType( + parameter.getType(), + Collections.emptyList(), + classDescriptor.getThisAsReceiverParameter(), ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER); //PropertyGetterDescriptor getter = DescriptorResolver.createDefaultGetter(propertyDescriptor); //getter.initialize(propertyDescriptor.getType()); propertyDescriptor.initialize(null, null); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/SimpleFunctionDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/SimpleFunctionDescriptorImpl.java index 2772ee08caf..1917714395e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/SimpleFunctionDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/SimpleFunctionDescriptorImpl.java @@ -20,7 +20,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeSubstitutor; @@ -52,7 +51,7 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme public SimpleFunctionDescriptorImpl initialize( @Nullable JetType receiverParameterType, - @NotNull ReceiverDescriptor expectedThisObject, + @NotNull ReceiverParameterDescriptor expectedThisObject, @NotNull List typeParameters, @NotNull List unsubstitutedValueParameters, @Nullable JetType unsubstitutedReturnType, diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorImpl.java index efc3a322ff9..6e622d401ec 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorImpl.java @@ -20,7 +20,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.JetType; import java.util.Collections; @@ -89,14 +88,14 @@ public abstract class VariableDescriptorImpl extends DeclarationDescriptorNonRoo @NotNull @Override - public ReceiverDescriptor getReceiverParameter() { - return ReceiverDescriptor.NO_RECEIVER; + public ReceiverParameterDescriptor getReceiverParameter() { + return ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER; } @NotNull @Override - public ReceiverDescriptor getExpectedThisObject() { - return ReceiverDescriptor.NO_RECEIVER; + public ReceiverParameterDescriptor getExpectedThisObject() { + return ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER; } @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java index 8b83bedadc9..4e25d487e84 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java @@ -44,6 +44,7 @@ import org.jetbrains.jet.util.slicedmap.WritableSlice; import javax.inject.Inject; import java.util.*; +import static org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER; import static org.jetbrains.jet.lang.diagnostics.Errors.*; import static org.jetbrains.jet.lang.resolve.BindingContext.DEFERRED_TYPE; import static org.jetbrains.jet.lang.types.TypeUtils.NO_EXPECTED_TYPE; @@ -478,7 +479,7 @@ public class BodyResolver { public void resolvePropertyInitializer(JetProperty property, PropertyDescriptor propertyDescriptor, JetExpression initializer, JetScope scope) { JetType expectedTypeForInitializer = property.getTypeRef() != null ? propertyDescriptor.getType() : NO_EXPECTED_TYPE; - JetScope propertyDeclarationInnerScope = descriptorResolver.getPropertyDeclarationInnerScope(scope, propertyDescriptor.getTypeParameters(), ReceiverDescriptor.NO_RECEIVER, trace); + JetScope propertyDeclarationInnerScope = descriptorResolver.getPropertyDeclarationInnerScope(scope, propertyDescriptor.getTypeParameters(), NO_RECEIVER_PARAMETER, trace); expressionTypingServices.getType(propertyDeclarationInnerScope, initializer, expectedTypeForInitializer, DataFlowInfo.EMPTY, trace); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index 66a01344a29..948e4eb3480 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -32,7 +32,6 @@ import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl; import org.jetbrains.jet.lang.resolve.scopes.receivers.ClassReceiver; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ExtensionReceiver; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; @@ -45,6 +44,7 @@ import org.jetbrains.jet.util.lazy.LazyValueWithDefault; import javax.inject.Inject; import java.util.*; +import static org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER; import static org.jetbrains.jet.lang.diagnostics.Errors.*; import static org.jetbrains.jet.lang.resolve.BindingContext.CONSTRUCTOR; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getDefaultConstructorVisibility; @@ -336,7 +336,7 @@ public class DescriptorResolver { functionDescriptor.initialize( null, - classDescriptor.getImplicitReceiver(), + classDescriptor.getThisAsReceiverParameter(), Collections.emptyList(), Collections.emptyList(), returnType, @@ -384,7 +384,7 @@ public class DescriptorResolver { functionDescriptor.initialize( null, - classDescriptor.getImplicitReceiver(), + classDescriptor.getThisAsReceiverParameter(), Collections.emptyList(), parameterDescriptors, returnType, @@ -735,7 +735,7 @@ public class DescriptorResolver { JetType type = getVariableType(scope, variable, dataFlowInfo, false, trace); // For a local variable the type must not be deferred - propertyDescriptor.setType(type, Collections.emptyList(), scope.getImplicitReceiver(), (JetType) null); + propertyDescriptor.setType(type, Collections.emptyList(), NO_RECEIVER_PARAMETER, (JetType) null); trace.record(BindingContext.VARIABLE, variable, propertyDescriptor); return propertyDescriptor; } @@ -800,7 +800,7 @@ public class DescriptorResolver { CallableMemberDescriptor.Kind.DECLARATION ); propertyDescriptor.setType(classDescriptor.getDefaultType(), Collections.emptyList(), - getExpectedThisObjectIfNeeded(containingDeclaration), ReceiverDescriptor.NO_RECEIVER); + getExpectedThisObjectIfNeeded(containingDeclaration), NO_RECEIVER_PARAMETER); propertyDescriptor.initialize(createDefaultGetter(propertyDescriptor), null); trace.record(BindingContext.OBJECT_DECLARATION_CLASS, propertyDescriptor, classDescriptor); JetObjectDeclarationName nameAsDeclaration = objectDeclaration.getNameAsDeclaration(); @@ -899,9 +899,9 @@ public class DescriptorResolver { } } - ReceiverDescriptor receiverDescriptor = receiverType == null - ? ReceiverDescriptor.NO_RECEIVER - : new ExtensionReceiver(propertyDescriptor, receiverType); + ReceiverParameterDescriptor receiverDescriptor = receiverType == null + ? NO_RECEIVER_PARAMETER + : new ReceiverParameterDescriptorImpl(propertyDescriptor, receiverType); JetScope propertyScope = getPropertyDeclarationInnerScope(scope, typeParameterDescriptors, ReceiverDescriptor.NO_RECEIVER, trace); @@ -1169,7 +1169,7 @@ public class DescriptorResolver { CallableMemberDescriptor.Kind.DECLARATION ); propertyDescriptor.setType(type, Collections.emptyList(), - getExpectedThisObjectIfNeeded(classDescriptor), ReceiverDescriptor.NO_RECEIVER); + getExpectedThisObjectIfNeeded(classDescriptor), NO_RECEIVER_PARAMETER); PropertyGetterDescriptor getter = createDefaultGetter(propertyDescriptor); PropertySetterDescriptor setter = propertyDescriptor.isVar() ? createDefaultSetter(propertyDescriptor) : null; @@ -1234,14 +1234,13 @@ public class DescriptorResolver { new SimpleFunctionDescriptorImpl(classObjectDescriptor, annotations, VALUES_METHOD_NAME, CallableMemberDescriptor.Kind.DECLARATION); - ClassReceiver classReceiver = new ClassReceiver(classObjectDescriptor); JetType type = DeferredType.create(trace, new LazyValue() { @Override protected JetType compute() { return KotlinBuiltIns.getInstance().getArrayType(enumClassDescriptor.getDefaultType()); } }); - values.initialize(null, classReceiver, Collections.emptyList(), + values.initialize(null, classObjectDescriptor.getThisAsReceiverParameter(), Collections.emptyList(), Collections.emptyList(), type, Modality.FINAL, Visibilities.PUBLIC, false); @@ -1259,7 +1258,6 @@ public class DescriptorResolver { new SimpleFunctionDescriptorImpl(classObjectDescriptor, annotations, VALUE_OF_METHOD_NAME, CallableMemberDescriptor.Kind.DECLARATION); - ClassReceiver classReceiver = new ClassReceiver(classObjectDescriptor); JetType type = DeferredType.create(trace, new LazyValue() { @Override protected JetType compute() { @@ -1275,7 +1273,7 @@ public class DescriptorResolver { KotlinBuiltIns.getInstance().getStringType(), false, null); - values.initialize(null, classReceiver, + values.initialize(null, classObjectDescriptor.getThisAsReceiverParameter(), Collections.emptyList(), Collections.singletonList(parameterDescriptor), type, Modality.FINAL, diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java index deec0a1a4b5..74a324f83ae 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java @@ -16,7 +16,6 @@ package org.jetbrains.jet.lang.resolve; -import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -28,8 +27,6 @@ import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.scopes.JetScope; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.DescriptorSubstitutor; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeUtils; @@ -38,7 +35,7 @@ import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import java.util.*; -import static org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor.NO_RECEIVER; +import static org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER; /** * @author abreslav @@ -64,16 +61,16 @@ public class DescriptorUtils { } @NotNull - public static ReceiverDescriptor getExpectedThisObjectIfNeeded(@NotNull DeclarationDescriptor containingDeclaration) { + public static ReceiverParameterDescriptor getExpectedThisObjectIfNeeded(@NotNull DeclarationDescriptor containingDeclaration) { if (containingDeclaration instanceof ClassDescriptor) { ClassDescriptor classDescriptor = (ClassDescriptor) containingDeclaration; - return classDescriptor.getImplicitReceiver(); + return classDescriptor.getThisAsReceiverParameter(); } else if (containingDeclaration instanceof ScriptDescriptor) { ScriptDescriptor scriptDescriptor = (ScriptDescriptor) containingDeclaration; - return scriptDescriptor.getImplicitReceiver(); + return scriptDescriptor.getThisAsReceiverParameter(); } - return NO_RECEIVER; + return NO_RECEIVER_PARAMETER; } /** diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java index 12db2659e06..e661fba401f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java @@ -23,7 +23,6 @@ import com.google.common.collect.Sets; import com.intellij.util.Function; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; @@ -112,7 +111,7 @@ public class OverridingUtil { } private static List compiledValueParameters(CallableDescriptor callableDescriptor) { - ReceiverDescriptor receiverParameter = callableDescriptor.getReceiverParameter(); + ReceiverParameterDescriptor receiverParameter = callableDescriptor.getReceiverParameter(); ArrayList parameters = new ArrayList(); if (receiverParameter.exists()) { parameters.add(receiverParameter.getType()); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptHeaderResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptHeaderResolver.java index 105ef8f0e54..0e429b9debc 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptHeaderResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptHeaderResolver.java @@ -145,7 +145,7 @@ public class ScriptHeaderResolver { List valueParameters = Lists.newArrayList(); - scope.setImplicitReceiver(descriptor.getImplicitReceiver()); + scope.setImplicitReceiver(descriptor.getThisAsReceiverParameter()); JetFile file = (JetFile) declaration.getContainingFile(); JetScriptDefinition scriptDefinition = JetScriptDefinitionProvider.getInstance(file.getProject()).findScriptDefinition(file); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java index 482c8b159e0..2a605e0c0c8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java @@ -47,6 +47,7 @@ import org.jetbrains.jet.util.slicedmap.WritableSlice; import javax.inject.Inject; import java.util.*; +import static org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER; import static org.jetbrains.jet.lang.diagnostics.Errors.*; import static org.jetbrains.jet.lang.resolve.BindingContext.*; import static org.jetbrains.jet.lang.resolve.calls.results.ResolutionStatus.*; @@ -240,7 +241,7 @@ public class CallResolver { } FunctionDescriptorImpl functionDescriptor = new ExpressionAsFunctionDescriptor(context.scope.getContainingDeclaration(), Name.special("")); - FunctionDescriptorUtil.initializeFromFunctionType(functionDescriptor, calleeType, NO_RECEIVER, Modality.FINAL, Visibilities.LOCAL); + FunctionDescriptorUtil.initializeFromFunctionType(functionDescriptor, calleeType, NO_RECEIVER_PARAMETER, Modality.FINAL, Visibilities.LOCAL); ResolutionCandidate resolutionCandidate = ResolutionCandidate.create(functionDescriptor, JetPsiUtil.isSafeCall(context.call)); resolutionCandidate.setReceiverArgument(context.call.getExplicitReceiver()); resolutionCandidate.setExplicitReceiverKind(ExplicitReceiverKind.RECEIVER_ARGUMENT); @@ -591,7 +592,7 @@ public class CallResolver { boolean found = false; for (ResolutionCandidate candidate : candidates) { FunctionDescriptor functionDescriptor = candidate.getDescriptor(); - ReceiverDescriptor functionReceiver = functionDescriptor.getReceiverParameter(); + ReceiverParameterDescriptor functionReceiver = functionDescriptor.getReceiverParameter(); if (!functionReceiver.exists()) continue; if (!functionDescriptor.getTypeParameters().isEmpty()) continue; if (!typeChecker.isSubtypeOf(receiver.getType(), functionReceiver.getType())) continue; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java index 8d7529eff73..2d1cc7c94e5 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java @@ -315,7 +315,7 @@ public class CandidateResolver { // Receiver // Error is already reported if something is missing ReceiverDescriptor receiverArgument = candidateCall.getReceiverArgument(); - ReceiverDescriptor receiverParameter = candidateWithFreshVariables.getReceiverParameter(); + ReceiverParameterDescriptor receiverParameter = candidateWithFreshVariables.getReceiverParameter(); if (receiverArgument.exists() && receiverParameter.exists()) { constraintsSystem.addSubtypeConstraint(receiverParameter.getType(), receiverArgument.getType(), ConstraintPosition.RECEIVER_POSITION); @@ -467,7 +467,7 @@ public class CandidateResolver { } private ResolutionStatus checkReceiver(CallResolutionContext context, ResolvedCall candidateCall, - ReceiverDescriptor receiverParameter, ReceiverDescriptor receiverArgument, + ReceiverParameterDescriptor receiverParameter, ReceiverDescriptor receiverArgument, boolean isExplicitReceiver, boolean implicitInvokeCheck) { BindingContext bindingContext = context.candidateCall.getTrace().getBindingContext(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ValueArgumentsToParametersMapper.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ValueArgumentsToParametersMapper.java index 886ab8b161d..f7078e73095 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ValueArgumentsToParametersMapper.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ValueArgumentsToParametersMapper.java @@ -21,6 +21,7 @@ import com.google.common.collect.Sets; import com.intellij.psi.impl.source.tree.LeafPsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.CallableDescriptor; +import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.DelegatingBindingTrace; @@ -211,7 +212,7 @@ import static org.jetbrains.jet.lang.resolve.calls.ValueArgumentsToParametersMap } } - ReceiverDescriptor receiverParameter = candidate.getReceiverParameter(); + ReceiverParameterDescriptor receiverParameter = candidate.getReceiverParameter(); ReceiverDescriptor receiverArgument = candidateCall.getReceiverArgument(); if (receiverParameter.exists() &&!receiverArgument.exists()) { tracing.missingReceiver(traceForCall, receiverParameter); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/autocasts/DataFlowValueFactory.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/autocasts/DataFlowValueFactory.java index 841a42fbf93..f45cee59092 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/autocasts/DataFlowValueFactory.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/autocasts/DataFlowValueFactory.java @@ -148,7 +148,7 @@ public class DataFlowValueFactory { return Pair.create((Object) ((CallableDescriptor) declarationDescriptor).getReceiverParameter(), true); } if (declarationDescriptor instanceof ClassDescriptor) { - return Pair.create((Object) ((ClassDescriptor) declarationDescriptor).getImplicitReceiver(), true); + return Pair.create((Object) ((ClassDescriptor) declarationDescriptor).getThisAsReceiverParameter(), true); } return Pair.create(null, true); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/results/OverloadingConflictResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/results/OverloadingConflictResolver.java index 5e1ebcc237a..9c8a109f0a0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/results/OverloadingConflictResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/results/OverloadingConflictResolver.java @@ -21,12 +21,12 @@ import gnu.trove.TObjectHashingStrategy; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.CallableDescriptor; +import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor; import org.jetbrains.jet.lang.descriptors.ScriptDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.OverridingUtil; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallWithTrace; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeUtils; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; @@ -93,8 +93,8 @@ public class OverloadingConflictResolver { if (OverridingUtil.overrides(f, g)) return true; if (OverridingUtil.overrides(g, f)) return false; - ReceiverDescriptor receiverOfF = f.getReceiverParameter(); - ReceiverDescriptor receiverOfG = g.getReceiverParameter(); + ReceiverParameterDescriptor receiverOfF = f.getReceiverParameter(); + ReceiverParameterDescriptor receiverOfG = g.getReceiverParameter(); if (f.getReceiverParameter().exists() && g.getReceiverParameter().exists()) { if (!typeMoreSpecific(receiverOfF.getType(), receiverOfG.getType())) return false; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/ResolutionTask.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/ResolutionTask.java index 78a5296c9c9..c510d44b315 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/ResolutionTask.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/ResolutionTask.java @@ -149,12 +149,12 @@ public class ResolutionTask extends R } @Override - public void missingReceiver(@NotNull BindingTrace trace, @NotNull ReceiverDescriptor expectedReceiver) { + public void missingReceiver(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor expectedReceiver) { trace.report(MISSING_RECEIVER.on(reference, expectedReceiver.getType())); } @Override - public void wrongReceiverType(@NotNull BindingTrace trace, @NotNull ReceiverDescriptor receiverParameter, @NotNull ReceiverDescriptor receiverArgument) { + public void wrongReceiverType(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor receiverParameter, @NotNull ReceiverDescriptor receiverArgument) { if (receiverArgument instanceof ExpressionReceiver) { ExpressionReceiver expressionReceiver = (ExpressionReceiver)receiverArgument; trace.report(TYPE_MISMATCH.on(expressionReceiver.getExpression(), receiverParameter.getType(), receiverArgument.getType())); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TaskPrioritizer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TaskPrioritizer.java index 0069d545ece..e60e85ffbbf 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TaskPrioritizer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TaskPrioritizer.java @@ -224,7 +224,7 @@ public abstract class TaskPrioritizer { } private static boolean setImpliedThis(@NotNull JetScope scope, ResolutionCandidate candidate) { - ReceiverDescriptor expectedThisObject = candidate.getDescriptor().getExpectedThisObject(); + ReceiverParameterDescriptor expectedThisObject = candidate.getDescriptor().getExpectedThisObject(); if (!expectedThisObject.exists()) return true; List receivers = Lists.newArrayList(); scope.getImplicitReceiversHierarchy(receivers); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TracingStrategy.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TracingStrategy.java index 9db31750361..4f8da677b5a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TracingStrategy.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TracingStrategy.java @@ -19,6 +19,7 @@ package org.jetbrains.jet.lang.resolve.calls.tasks; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.CallableDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorWithVisibility; +import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.psi.JetExpression; import org.jetbrains.jet.lang.resolve.BindingTrace; @@ -52,10 +53,10 @@ public interface TracingStrategy { public void recordAmbiguity(BindingTrace trace, Collection> candidates) {} @Override - public void missingReceiver(@NotNull BindingTrace trace, @NotNull ReceiverDescriptor expectedReceiver) {} + public void missingReceiver(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor expectedReceiver) {} @Override - public void wrongReceiverType(@NotNull BindingTrace trace, @NotNull ReceiverDescriptor receiverParameter, @NotNull ReceiverDescriptor receiverArgument) {} + public void wrongReceiverType(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor receiverParameter, @NotNull ReceiverDescriptor receiverArgument) {} @Override public void noReceiverAllowed(@NotNull BindingTrace trace) {} @@ -103,9 +104,9 @@ public interface TracingStrategy { void recordAmbiguity(BindingTrace trace, Collection> candidates); - void missingReceiver(@NotNull BindingTrace trace, @NotNull ReceiverDescriptor expectedReceiver); + void missingReceiver(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor expectedReceiver); - void wrongReceiverType(@NotNull BindingTrace trace, @NotNull ReceiverDescriptor receiverParameter, @NotNull ReceiverDescriptor receiverArgument); + void wrongReceiverType(@NotNull BindingTrace trace, @NotNull ReceiverParameterDescriptor receiverParameter, @NotNull ReceiverDescriptor receiverArgument); void noReceiverAllowed(@NotNull BindingTrace trace); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java index 3900ec1afde..7765c7bcb95 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java @@ -35,8 +35,6 @@ import org.jetbrains.jet.lang.resolve.lazy.data.JetClassInfoUtil; import org.jetbrains.jet.lang.resolve.lazy.data.JetClassLikeInfo; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.*; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ClassReceiver; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.ErrorUtils; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeConstructor; @@ -70,7 +68,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc private final Visibility visibility; private final ClassKind kind; - private ClassReceiver implicitReceiver; + private ReceiverParameterDescriptor thisAsReceiverParameter; private List annotations; private ClassDescriptor classObjectDescriptor; private boolean classObjectDescriptorResolved = false; @@ -273,11 +271,11 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc @NotNull @Override - public ReceiverDescriptor getImplicitReceiver() { - if (implicitReceiver == null) { - implicitReceiver = new ClassReceiver(this); + public ReceiverParameterDescriptor getThisAsReceiverParameter() { + if (thisAsReceiverParameter == null) { + thisAsReceiverParameter = new ReceiverParameterDescriptorImpl(this, getDefaultType()); } - return implicitReceiver; + return thisAsReceiverParameter; } @Override @@ -315,7 +313,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc getClassObjectType(); getConstructors(); getContainingDeclaration(); - getImplicitReceiver(); + getThisAsReceiverParameter(); getKind(); getModality(); getName(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassMemberScope.java index caea41803a2..aa2a36e13c8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassMemberScope.java @@ -324,7 +324,7 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope properties = getPropertyGroups().get(name); - ReceiverDescriptor receiverParameter = variableDescriptor.getReceiverParameter(); + ReceiverParameterDescriptor receiverParameter = variableDescriptor.getReceiverParameter(); for (VariableDescriptor oldProperty : properties) { - ReceiverDescriptor receiverParameterForOldVariable = oldProperty.getReceiverParameter(); + ReceiverParameterDescriptor receiverParameterForOldVariable = oldProperty.getReceiverParameter(); if (((receiverParameter.exists() && receiverParameterForOldVariable.exists()) && (JetTypeChecker.INSTANCE.equalTypes(receiverParameter.getType(), receiverParameterForOldVariable.getType())))) { redeclarationHandler.handleRedeclaration(oldProperty, variableDescriptor); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/ErrorUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/ErrorUtils.java index 77919ae3926..4d1c97a5536 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/ErrorUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/ErrorUtils.java @@ -163,7 +163,7 @@ public class ErrorUtils { Visibilities.INTERNAL, true, null, - ReceiverDescriptor.NO_RECEIVER, + ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER, Name.special(""), ERROR_PROPERTY_TYPE, CallableMemberDescriptor.Kind.DECLARATION); @@ -173,7 +173,7 @@ public class ErrorUtils { ErrorSimpleFunctionDescriptorImpl function = new ErrorSimpleFunctionDescriptorImpl(ownerScope); function.initialize( null, - ReceiverDescriptor.NO_RECEIVER, + ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER, Collections.emptyList(), // TODO Collections.emptyList(), // TODO createErrorType(""), diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java index f0796033515..1edaae668ea 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java @@ -504,8 +504,8 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { } @Nullable // No class receivers - private ReceiverDescriptor resolveToReceiver(JetLabelQualifiedInstanceExpression expression, ExpressionTypingContext context, boolean onlyClassReceivers) { - ReceiverDescriptor thisReceiver = null; + private ReceiverParameterDescriptor resolveToReceiver(JetLabelQualifiedInstanceExpression expression, ExpressionTypingContext context, boolean onlyClassReceivers) { + ReceiverParameterDescriptor thisReceiver = null; String labelName = expression.getLabelName(); if (labelName != null) { thisReceiver = context.labelResolver.resolveThisLabel( diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java index 7abfb8f41b2..66b973ae267 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java @@ -16,18 +16,15 @@ package org.jetbrains.jet.lang.types.expressions; -import com.google.common.base.Predicate; import com.google.common.collect.Lists; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.*; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.util.lazy.LazyValueWithDefault; @@ -38,7 +35,6 @@ import java.util.List; import static org.jetbrains.jet.lang.diagnostics.Errors.CANNOT_INFER_PARAMETER_TYPE; import static org.jetbrains.jet.lang.resolve.BindingContext.*; -import static org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor.NO_RECEIVER; /** * @author abreslav @@ -107,8 +103,8 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor { for (ValueParameterDescriptor valueParameter : valueParameters) { parameterTypes.add(valueParameter.getType()); } - ReceiverDescriptor receiverParameter = functionDescriptor.getReceiverParameter(); - JetType receiver = receiverParameter != NO_RECEIVER ? receiverParameter.getType() : null; + ReceiverParameterDescriptor receiverParameter = functionDescriptor.getReceiverParameter(); + JetType receiver = receiverParameter.exists() ? receiverParameter.getType() : null; JetType returnType = TypeUtils.NO_EXPECTED_TYPE; JetScope functionInnerScope = FunctionDescriptorUtil.getFunctionInnerScope(context.scope, functionDescriptor, context.trace); @@ -168,7 +164,7 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor { effectiveReceiverType = context.expressionTypingServices.getTypeResolver().resolveType(context.scope, receiverTypeRef, context.trace, true); } functionDescriptor.initialize(effectiveReceiverType, - NO_RECEIVER, + ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER, Collections.emptyList(), valueParameterDescriptors, /*unsubstitutedReturnType = */ null, diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java index d778f30cab1..2897ce453e2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java @@ -209,41 +209,41 @@ public class ExpressionTypingUtils { * Checks if receiver declaration could be resolved to call expected receiver. */ public static boolean checkIsExtensionCallable ( - @NotNull ReceiverDescriptor expectedReceiver, - @NotNull CallableDescriptor receiverArgument + @NotNull ReceiverDescriptor receiverArgument, + @NotNull CallableDescriptor callableDescriptor ) { - JetType type = expectedReceiver.getType(); + JetType type = receiverArgument.getType(); if (type instanceof NamespaceType) { // This fake class ruins standard algorithms return false; } - if (checkReceiverResolution(expectedReceiver, type, receiverArgument)) return true; + if (checkReceiverResolution(receiverArgument, type, callableDescriptor)) return true; if (type.isNullable()) { JetType notNullableType = TypeUtils.makeNotNullable(type); - if (checkReceiverResolution(expectedReceiver, notNullableType, receiverArgument)) return true; + if (checkReceiverResolution(receiverArgument, notNullableType, callableDescriptor)) return true; } return false; } private static boolean checkReceiverResolution ( - @NotNull ReceiverDescriptor expectedReceiver, + @NotNull ReceiverDescriptor receiverArgument, @NotNull JetType receiverType, @NotNull CallableDescriptor callableDescriptor ) { - ReceiverDescriptor callReceiver = callableDescriptor.getReceiverParameter(); + ReceiverParameterDescriptor receiverParameter = callableDescriptor.getReceiverParameter(); - if (!expectedReceiver.exists() && !callReceiver.exists()) { + if (!receiverArgument.exists() && !receiverParameter.exists()) { // Both receivers do not exist return true; } - if (!(expectedReceiver.exists() && callReceiver.exists())) { + if (!(receiverArgument.exists() && receiverParameter.exists())) { return false; } - Set typeNamesInReceiver = collectUsedTypeNames(callReceiver.getType()); + Set typeNamesInReceiver = collectUsedTypeNames(receiverParameter.getType()); ConstraintSystem constraintSystem = new ConstraintSystemImpl(); for (TypeParameterDescriptor typeParameterDescriptor : callableDescriptor.getTypeParameters()) { @@ -252,7 +252,7 @@ public class ExpressionTypingUtils { } } - constraintSystem.addSubtypeConstraint(callReceiver.getType(), receiverType, ConstraintPosition.RECEIVER_POSITION); + constraintSystem.addSubtypeConstraint(receiverParameter.getType(), receiverType, ConstraintPosition.RECEIVER_POSITION); return constraintSystem.isSuccessful() && ConstraintsUtil.checkBoundsAreSatisfied(constraintSystem); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/LabelResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/LabelResolver.java index 4e5cd11bb40..81230352807 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/LabelResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/LabelResolver.java @@ -22,11 +22,11 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; +import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContextUtils; import org.jetbrains.jet.lang.resolve.name.LabelName; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import java.util.*; @@ -124,8 +124,8 @@ public class LabelResolver { return result; } - public ReceiverDescriptor resolveThisLabel(JetReferenceExpression thisReference, JetSimpleNameExpression targetLabel, - ExpressionTypingContext context, ReceiverDescriptor thisReceiver, LabelName labelName) { + public ReceiverParameterDescriptor resolveThisLabel(JetReferenceExpression thisReference, JetSimpleNameExpression targetLabel, + ExpressionTypingContext context, ReceiverParameterDescriptor thisReceiver, LabelName labelName) { Collection declarationsByLabel = context.scope.getDeclarationsByLabel(labelName); int size = declarationsByLabel.size(); assert targetLabel != null; @@ -133,7 +133,7 @@ public class LabelResolver { DeclarationDescriptor declarationDescriptor = declarationsByLabel.iterator().next(); if (declarationDescriptor instanceof ClassDescriptor) { ClassDescriptor classDescriptor = (ClassDescriptor) declarationDescriptor; - thisReceiver = classDescriptor.getImplicitReceiver(); + thisReceiver = classDescriptor.getThisAsReceiverParameter(); } else if (declarationDescriptor instanceof FunctionDescriptor) { FunctionDescriptor functionDescriptor = (FunctionDescriptor) declarationDescriptor; diff --git a/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java b/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java index ef77450b8b4..53d155c41ab 100644 --- a/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java +++ b/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java @@ -23,7 +23,6 @@ import org.jetbrains.jet.lang.diagnostics.rendering.Renderer; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.ErrorUtils; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeProjection; @@ -344,7 +343,7 @@ public class DescriptorRenderer implements Renderer { builder, skipValVar ? null : descriptor.isVar(), Collections.emptyList(), - ReceiverDescriptor.NO_RECEIVER, + ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER, type); renderName(descriptor, builder); builder.append(" : ").append(escape(typeString)); @@ -355,7 +354,7 @@ public class DescriptorRenderer implements Renderer { @NotNull StringBuilder builder, @Nullable Boolean isVar, @NotNull List typeParameters, - @NotNull ReceiverDescriptor receiver, + @NotNull ReceiverParameterDescriptor receiver, @Nullable JetType outType) { String typeString = lt() + "no type>"; if (outType != null) { @@ -424,7 +423,7 @@ public class DescriptorRenderer implements Renderer { builder.append(" "); } - ReceiverDescriptor receiver = descriptor.getReceiverParameter(); + ReceiverParameterDescriptor receiver = descriptor.getReceiverParameter(); if (receiver.exists()) { builder.append(escape(renderType(receiver.getType()))).append("."); } @@ -446,6 +445,11 @@ public class DescriptorRenderer implements Renderer { return visitFunctionDescriptor(descriptor, data); } + @Override + public Void visitReceiverParameterDescriptor(ReceiverParameterDescriptor descriptor, StringBuilder data) { + throw new UnsupportedOperationException("Don't render receiver parameters"); + } + private void renderWhereSuffix(@NotNull CallableMemberDescriptor callable, @NotNull StringBuilder builder) { boolean first = true; for (TypeParameterDescriptor typeParameter : callable.getTypeParameters()) { diff --git a/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java b/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java index 3e23b5d6d15..70a5c78b8a1 100644 --- a/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java +++ b/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java @@ -437,8 +437,8 @@ public class NamespaceComparator { } } - public void serialize(ExtensionReceiver extensionReceiver) { - serialize(extensionReceiver.getType()); + public void serialize(ReceiverParameterDescriptor receiverParameterDescriptor) { + serialize(receiverParameterDescriptor.getType()); } private void serialize(@NotNull PropertyAccessorDescriptor accessor) { diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java index c4d6ff36c71..e28b6de6fbf 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java @@ -33,13 +33,15 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.plugin.project.WholeProjectAnalyzerFacade; import org.jetbrains.jet.resolve.DescriptorRenderer; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; /** * @author yole @@ -241,7 +243,7 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns } private static void addReceiverParameter(CallableDescriptor descriptor, StringBuilder bodyBuilder) { - ReceiverDescriptor receiverParameter = descriptor.getReceiverParameter(); + ReceiverParameterDescriptor receiverParameter = descriptor.getReceiverParameter(); if (receiverParameter.exists()) { bodyBuilder.append(receiverParameter.getType()).append("."); } diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/FunctionsHighlightingVisitor.java b/idea/src/org/jetbrains/jet/plugin/highlighter/FunctionsHighlightingVisitor.java index 8b99c477254..445e403dd9f 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/FunctionsHighlightingVisitor.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/FunctionsHighlightingVisitor.java @@ -18,10 +18,12 @@ package org.jetbrains.jet.plugin.highlighter; import com.intellij.lang.annotation.AnnotationHolder; import com.intellij.psi.PsiElement; -import org.jetbrains.jet.lang.descriptors.*; +import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; +import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; /** * @author Evgeny Gerashchenko @@ -73,7 +75,7 @@ public class FunctionsHighlightingVisitor extends AfterAnalysisHighlightingVisit if (fun.getContainingDeclaration() instanceof NamespaceDescriptor) { JetPsiChecker.highlightName(holder, callee, JetHighlightingColors.NAMESPACE_FUNCTION_CALL); } - if (fun.getReceiverParameter() != ReceiverDescriptor.NO_RECEIVER) { + if (fun.getReceiverParameter().exists()) { JetPsiChecker.highlightName(holder, callee, JetHighlightingColors.EXTENSION_FUNCTION_CALL); } } diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java b/idea/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java index 90ecbf425cb..fc769050eaf 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java @@ -30,13 +30,12 @@ import org.jetbrains.jet.lang.diagnostics.rendering.Renderer; import org.jetbrains.jet.lang.psi.JetValueArgument; import org.jetbrains.jet.lang.psi.ValueArgument; import org.jetbrains.jet.lang.resolve.DescriptorUtils; +import org.jetbrains.jet.lang.resolve.calls.inference.InferenceErrorData; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallImpl; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedValueArgument; -import org.jetbrains.jet.lang.resolve.calls.inference.InferenceErrorData; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.resolve.DescriptorRenderer; @@ -141,7 +140,7 @@ public class IdeRenderers { Set parametersToHighlight = getParametersToHighlight(call); DescriptorRenderer htmlRenderer = DescriptorRenderer.HTML; - if (funDescriptor.getReceiverParameter() != ReceiverDescriptor.NO_RECEIVER) { + if (funDescriptor.getReceiverParameter().exists()) { stringBuilder.append(htmlRenderer.renderType(funDescriptor.getReceiverParameter().getType())).append("."); } stringBuilder.append(funDescriptor.getName()).append("("); diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/PropertiesHighlightingVisitor.java b/idea/src/org/jetbrains/jet/plugin/highlighter/PropertiesHighlightingVisitor.java index abc52610e59..6a7d1294e13 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/PropertiesHighlightingVisitor.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/PropertiesHighlightingVisitor.java @@ -19,10 +19,15 @@ package org.jetbrains.jet.plugin.highlighter; import com.intellij.lang.annotation.AnnotationHolder; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.psi.*; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; +import org.jetbrains.jet.lang.descriptors.PropertyDescriptor; +import org.jetbrains.jet.lang.descriptors.VariableDescriptor; +import org.jetbrains.jet.lang.psi.JetParameter; +import org.jetbrains.jet.lang.psi.JetProperty; +import org.jetbrains.jet.lang.psi.JetSimpleNameExpression; +import org.jetbrains.jet.lang.psi.JetThisExpression; import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lexer.JetTokens; class PropertiesHighlightingVisitor extends AfterAnalysisHighlightingVisitor { @@ -79,7 +84,7 @@ class PropertiesHighlightingVisitor extends AfterAnalysisHighlightingVisitor { JetPsiChecker.highlightName(holder, elementToHighlight, namespace ? JetHighlightingColors.NAMESPACE_PROPERTY : JetHighlightingColors.INSTANCE_PROPERTY ); - if (descriptor.getReceiverParameter() != ReceiverDescriptor.NO_RECEIVER) { + if (descriptor.getReceiverParameter().exists()) { JetPsiChecker.highlightName(holder, elementToHighlight, JetHighlightingColors.EXTENSION_PROPERTY); } if (withBackingField) { diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/DeclarationDescriptorComparator.java b/idea/src/org/jetbrains/jet/plugin/libraries/DeclarationDescriptorComparator.java index 7a4e80461f5..a0a86315d12 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/DeclarationDescriptorComparator.java +++ b/idea/src/org/jetbrains/jet/plugin/libraries/DeclarationDescriptorComparator.java @@ -17,7 +17,6 @@ package org.jetbrains.jet.plugin.libraries; import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.resolve.DescriptorRenderer; import java.util.Comparator; @@ -36,7 +35,7 @@ class DeclarationDescriptorComparator implements Comparator