diff --git a/compiler/backend/src/org/jetbrains/jet/cli/jvm/compiler/TipsManager.java b/compiler/backend/src/org/jetbrains/jet/cli/jvm/compiler/TipsManager.java index 040ebb25a22..55121e6c222 100644 --- a/compiler/backend/src/org/jetbrains/jet/cli/jvm/compiler/TipsManager.java +++ b/compiler/backend/src/org/jetbrains/jet/cli/jvm/compiler/TipsManager.java @@ -159,7 +159,7 @@ public final class TipsManager { Collections2.filter(JetScopeUtils.getAllExtensions(scope), new Predicate() { @Override public boolean apply(CallableDescriptor callableDescriptor) { - if (!callableDescriptor.getReceiverParameter().exists()) { + if (callableDescriptor.getReceiverParameter() == null) { return false; } for (ReceiverParameterDescriptor receiverDescriptor : result) { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java b/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java index 007ced2ddc4..64d083d00b3 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java @@ -18,6 +18,7 @@ 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.DescriptorUtils; import org.jetbrains.jet.lang.resolve.name.Name; import java.util.Collections; @@ -35,13 +36,13 @@ public class AccessorForFunctionDescriptor extends SimpleFunctionDescriptorImpl FunctionDescriptor fd = (FunctionDescriptor) descriptor; - initialize(fd.getReceiverParameter().exists() ? fd.getReceiverParameter().getType() : null, - descriptor instanceof ConstructorDescriptor ? NO_RECEIVER_PARAMETER : fd.getExpectedThisObject(), - Collections.emptyList(), - fd.getValueParameters(), - fd.getReturnType(), - Modality.FINAL, - Visibilities.INTERNAL, + initialize(DescriptorUtils.getReceiverParameterType(fd.getReceiverParameter()), + descriptor instanceof ConstructorDescriptor ? NO_RECEIVER_PARAMETER : fd.getExpectedThisObject(), + Collections.emptyList(), + fd.getValueParameters(), + fd.getReturnType(), + Modality.FINAL, + Visibilities.INTERNAL, /*isInline = */ false); } } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForPropertyDescriptor.java b/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForPropertyDescriptor.java index c8a0bdcc106..c15469ac61e 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForPropertyDescriptor.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForPropertyDescriptor.java @@ -18,6 +18,7 @@ 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.DescriptorUtils; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.JetType; @@ -32,7 +33,7 @@ public class AccessorForPropertyDescriptor extends PropertyDescriptor { pd.isVar(), Name.identifier(pd.getName() + "$b$" + index), Kind.DECLARATION); - JetType receiverType = pd.getReceiverParameter().exists() ? pd.getReceiverParameter().getType() : null; + JetType receiverType = DescriptorUtils.getReceiverParameterType(pd.getReceiverParameter()); setType(pd.getType(), Collections.emptyList(), pd.getExpectedThisObject(), receiverType); initialize(new Getter(this), new Setter(this)); } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java index 304cc89d787..a0a826e11fd 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java @@ -175,7 +175,7 @@ public class ClosureCodegen extends GenerationStateAware { final ReceiverParameterDescriptor receiver = funDescriptor.getReceiverParameter(); int count = 1; - if (receiver.exists()) { + if (receiver != null) { StackValue.local(count, OBJECT_TYPE).put(OBJECT_TYPE, iv); StackValue.onStack(OBJECT_TYPE) .upcast(typeMapper.mapType(receiver.getType()), iv); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java index d9f4cf886d2..fa23b4898f6 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java @@ -69,12 +69,13 @@ public class CodegenUtil { public static SimpleFunctionDescriptor createInvoke(FunctionDescriptor fd) { int arity = fd.getValueParameters().size(); SimpleFunctionDescriptorImpl invokeDescriptor = new SimpleFunctionDescriptorImpl( - fd.getExpectedThisObject().exists() ? KotlinBuiltIns.getInstance().getExtensionFunction(arity) : KotlinBuiltIns.getInstance().getFunction(arity), + fd.getExpectedThisObject() != null + ? KotlinBuiltIns.getInstance().getExtensionFunction(arity) : KotlinBuiltIns.getInstance().getFunction(arity), Collections.emptyList(), Name.identifier("invoke"), CallableMemberDescriptor.Kind.DECLARATION); - invokeDescriptor.initialize(fd.getReceiverParameter().exists() ? fd.getReceiverParameter().getType() : null, + invokeDescriptor.initialize(DescriptorUtils.getReceiverParameterType(fd.getReceiverParameter()), fd.getExpectedThisObject(), Collections.emptyList(), fd.getValueParameters(), @@ -121,7 +122,7 @@ public class CodegenUtil { @NotNull public static JvmClassName getInternalClassName(FunctionDescriptor descriptor) { final int paramCount = descriptor.getValueParameters().size(); - if (descriptor.getReceiverParameter().exists()) { + if (descriptor.getReceiverParameter() != null) { return JvmClassName.byInternalName("jet/ExtensionFunction" + paramCount); } else { @@ -136,7 +137,7 @@ public class CodegenUtil { signatureWriter.writeFormalTypeParametersStart(); signatureWriter.writeFormalTypeParametersEnd(); - boolean isExtensionFunction = fd.getReceiverParameter().exists(); + boolean isExtensionFunction = fd.getReceiverParameter() != null; int paramCount = fd.getValueParameters().size(); if (isExtensionFunction) { paramCount++; diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index e2fc40283c8..a652b640920 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1379,7 +1379,7 @@ public class ExpressionCodegen extends JetVisitor implem final StackValue.Property iValue = intermediateValueForProperty(propertyDescriptor, directToField, isSuper ? (JetSuperExpression) r : null); if (!directToField && resolvedCall != null && !isSuper) { - receiver.put(propertyDescriptor.getReceiverParameter().exists() || isStatic + receiver.put(propertyDescriptor.getReceiverParameter() != null || isStatic ? receiver.type : iValue.methodOwner.getAsmType(), v); } @@ -1566,7 +1566,7 @@ public class ExpressionCodegen extends JetVisitor implem getter = null; } - if (getter == null && propertyDescriptor.getReceiverParameter().exists()) { + if (getter == null && propertyDescriptor.getReceiverParameter() != null) { throw new IllegalStateException(); } } @@ -1586,7 +1586,7 @@ public class ExpressionCodegen extends JetVisitor implem setter = null; } - if (setter == null && propertyDescriptor.isVar() && propertyDescriptor.getReceiverParameter().exists()) { + if (setter == null && propertyDescriptor.isVar() && propertyDescriptor.getReceiverParameter() != null) { throw new IllegalStateException(); } } @@ -3018,7 +3018,7 @@ public class ExpressionCodegen extends JetVisitor implem gen(array, asmType(((ClassDescriptor) getterDescriptor.getContainingDeclaration()).getDefaultType())); } - if (getterDescriptor.getReceiverParameter().exists()) { + if (getterDescriptor.getReceiverParameter() != null) { index++; } asmType = accessor.getSignature().getAsmMethod().getReturnType(); @@ -3033,7 +3033,7 @@ public class ExpressionCodegen extends JetVisitor implem gen(array, arrayType); } - if (setterDescriptor.getReceiverParameter().exists()) { + if (setterDescriptor.getReceiverParameter() != null) { index++; } asmType = argumentTypes[argumentTypes.length - 1]; diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java index c90bf1e0b76..1870deee473 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java @@ -147,7 +147,7 @@ public class FunctionCodegen extends GenerationStateAware { Type thisType; ReceiverParameterDescriptor expectedThisObject = functionDescriptor.getExpectedThisObject(); - if (expectedThisObject.exists()) { + if (expectedThisObject != null) { thisType = typeMapper.mapType(expectedThisObject.getType()); } else if (fun instanceof JetFunctionLiteralExpression || isLocalFun(bindingContext, functionDescriptor)) { @@ -188,7 +188,7 @@ public class FunctionCodegen extends GenerationStateAware { add++; } - if (functionDescriptor.getReceiverParameter().exists()) { + if (functionDescriptor.getReceiverParameter() != null) { add++; } @@ -258,8 +258,9 @@ public class FunctionCodegen extends GenerationStateAware { mv.visitLocalVariable("this", thisType.getDescriptor(), null, methodBegin, methodEnd, k++); } - if (functionDescriptor.getReceiverParameter().exists()) { - Type type = typeMapper.mapType(functionDescriptor.getReceiverParameter().getType()); + ReceiverParameterDescriptor receiverParameter = functionDescriptor.getReceiverParameter(); + if (receiverParameter != null) { + Type type = typeMapper.mapType(receiverParameter.getType()); mv.visitLocalVariable(JvmAbi.RECEIVER_PARAMETER, type.getDescriptor(), null, methodBegin, methodEnd, k); k += type.getSize(); } @@ -430,7 +431,7 @@ public class FunctionCodegen extends GenerationStateAware { final List kotlinParameterTypes = jvmSignature.getKotlinParameterTypes(); assert kotlinParameterTypes != null; - if (receiverParameter.exists()) { + if (receiverParameter != null) { JetValueParameterAnnotationWriter av = JetValueParameterAnnotationWriter.visitParameterAnnotation(mv, start++); av.writeName(JvmAbi.RECEIVER_PARAMETER); av.writeReceiver(); @@ -546,7 +547,7 @@ public class FunctionCodegen extends GenerationStateAware { } ReceiverParameterDescriptor receiverParameter = functionDescriptor.getReceiverParameter(); - boolean hasReceiver = receiverParameter.exists(); + boolean hasReceiver = receiverParameter != null; boolean isStatic = isStatic(kind); if (kind == OwnerKind.TRAIT_IMPL) { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java index 34fe75e25af..64d3b5a11af 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java @@ -64,7 +64,7 @@ class CodegenAnnotatingVisitor extends JetVisitorVoid { ((ClassDescriptorImpl)classDescriptor).initialize( false, Collections.emptyList(), - Collections.singleton((funDescriptor.getReceiverParameter().exists() + Collections.singleton((funDescriptor.getReceiverParameter() != null ? KotlinBuiltIns.getInstance().getExtensionFunction(arity) : KotlinBuiltIns.getInstance().getFunction(arity)).getDefaultType()), JetScope.EMPTY, Collections.emptySet(), null); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java index c4503c262e1..4449c406ea6 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java @@ -183,7 +183,7 @@ public class CodegenBinding { ? ((PropertyAccessorDescriptor) enclosingReceiver).getCorrespondingProperty() : enclosingReceiver; - if (!enclosingReceiver.getReceiverParameter().exists()) { + if (enclosingReceiver.getReceiverParameter() == null) { enclosingReceiver = null; } } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/context/CodegenContext.java b/compiler/backend/src/org/jetbrains/jet/codegen/context/CodegenContext.java index 7730bff61fa..faf80a9ed38 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/context/CodegenContext.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/context/CodegenContext.java @@ -110,7 +110,7 @@ public abstract class CodegenContext { public final CallableDescriptor getCallableDescriptorWithReceiver() { if (contextDescriptor instanceof CallableDescriptor) { final CallableDescriptor callableDescriptor = (CallableDescriptor) getContextDescriptor(); - return callableDescriptor.getReceiverParameter().exists() ? callableDescriptor : null; + return callableDescriptor.getReceiverParameter() != null ? callableDescriptor : null; } return null; } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/context/LocalLookup.java b/compiler/backend/src/org/jetbrains/jet/codegen/context/LocalLookup.java index 0afdbd0e476..bcef4eda60e 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/context/LocalLookup.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/context/LocalLookup.java @@ -131,7 +131,7 @@ public interface LocalLookup { @Override public StackValue outerValue(EnclosedValueDescriptor d, ExpressionCodegen expressionCodegen) { CallableDescriptor descriptor = (FunctionDescriptor) d.getDescriptor(); - return StackValue.local(descriptor.getExpectedThisObject().exists() ? 1 : 0, d.getType()); + return StackValue.local(descriptor.getExpectedThisObject() != null ? 1 : 0, d.getType()); } }; diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java b/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java index d3b8a5a7d4f..4d269630a41 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java @@ -219,7 +219,7 @@ public class IntrinsicMethods { if (descriptor instanceof SimpleFunctionDescriptor) { SimpleFunctionDescriptor functionDescriptor = (SimpleFunctionDescriptor) descriptor; - if (!functionDescriptor.getReceiverParameter().exists()) { + if (functionDescriptor.getReceiverParameter() == null) { FqNameUnsafe ownerFqName = DescriptorUtils.getFQName(descriptor.getContainingDeclaration()); if (ownerFqName.equalsTo("jet.String")) { return new PsiMethodCall(functionDescriptor); 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 4ceae095f99..23b871d0a69 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java @@ -460,8 +460,9 @@ public class JetTypeMapper extends BindingTraceAware { Type receiverParameterType; - if (functionDescriptor.getReceiverParameter().exists()) { - receiverParameterType = mapType(functionDescriptor.getOriginal().getReceiverParameter().getType()); + ReceiverParameterDescriptor receiverParameter = functionDescriptor.getOriginal().getReceiverParameter(); + if (receiverParameter != null) { + receiverParameterType = mapType(receiverParameter.getType()); } else { receiverParameterType = null; @@ -499,8 +500,7 @@ public class JetTypeMapper extends BindingTraceAware { writeFormalTypeParameters(f.getTypeParameters(), signatureVisitor); - final ReceiverParameterDescriptor receiverTypeRef = f.getReceiverParameter(); - final JetType receiverType = !receiverTypeRef.exists() ? null : receiverTypeRef.getType(); + final JetType receiverType = DescriptorUtils.getReceiverParameterType(f.getReceiverParameter()); final List parameters = f.getValueParameters(); signatureVisitor.writeParametersStart(); @@ -547,7 +547,7 @@ public class JetTypeMapper extends BindingTraceAware { } private void writeThisForAccessorIfNeeded(FunctionDescriptor f, BothSignatureWriter signatureVisitor) { - if (isAccessor(f) && f.getExpectedThisObject().exists()) { + if (isAccessor(f) && f.getExpectedThisObject() != null) { signatureVisitor.writeParameterType(JvmMethodParameterKind.THIS); mapType(((ClassifierDescriptor) f.getContainingDeclaration()).getDefaultType(), signatureVisitor, JetTypeMapperMode.VALUE); signatureVisitor.writeParameterTypeEnd(); @@ -637,8 +637,8 @@ public class JetTypeMapper extends BindingTraceAware { return signatureWriter.makeJvmMethodSignature(name.getName()); } - private void writeReceiverIfNeeded(ReceiverParameterDescriptor receiver, BothSignatureWriter signatureWriter) { - if (receiver.exists()) { + private void writeReceiverIfNeeded(@Nullable ReceiverParameterDescriptor receiver, BothSignatureWriter signatureWriter) { + if (receiver != null) { signatureWriter.writeParameterType(JvmMethodParameterKind.RECEIVER); mapType(receiver.getType(), signatureWriter, JetTypeMapperMode.VALUE); signatureWriter.writeParameterTypeEnd(); @@ -895,8 +895,9 @@ public class JetTypeMapper extends BindingTraceAware { JvmMethodSignature descriptor = erasedInvokeSignature(fd); JvmClassName owner = getInternalClassName(fd); Type receiverParameterType; - if (fd.getReceiverParameter().exists()) { - receiverParameterType = mapType(fd.getOriginal().getReceiverParameter().getType()); + ReceiverParameterDescriptor receiverParameter = fd.getOriginal().getReceiverParameter(); + if (receiverParameter != null) { + receiverParameterType = mapType(receiverParameter.getType()); } else { receiverParameterType = null; diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaCompileTimeConstResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaCompileTimeConstResolver.java index aadba70808c..2a7c0769475 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaCompileTimeConstResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaCompileTimeConstResolver.java @@ -19,10 +19,7 @@ package org.jetbrains.jet.lang.resolve.java.resolver; import com.google.common.collect.Lists; import com.intellij.psi.*; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.descriptors.ClassDescriptor; -import org.jetbrains.jet.lang.descriptors.PropertyDescriptor; -import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; -import org.jetbrains.jet.lang.descriptors.VariableDescriptor; +import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.constants.*; import org.jetbrains.jet.lang.resolve.constants.StringValue; @@ -155,7 +152,7 @@ public final class JavaCompileTimeConstResolver { Name identifier = Name.identifier(((PsiEnumConstant) resolveElement).getName()); Collection properties = scope.getProperties(identifier); for (VariableDescriptor variableDescriptor : properties) { - if (!variableDescriptor.getReceiverParameter().exists()) { + if (variableDescriptor.getReceiverParameter() == null) { return new EnumValue((PropertyDescriptor) variableDescriptor); } } 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 3814aaa6b0c..667442e19b7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/CallableDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/CallableDescriptor.java @@ -28,10 +28,10 @@ import java.util.Set; * @author abreslav */ public interface CallableDescriptor extends DeclarationDescriptorWithVisibility, DeclarationDescriptorNonRoot { - @NotNull + @Nullable ReceiverParameterDescriptor getReceiverParameter(); - @NotNull + @Nullable ReceiverParameterDescriptor getExpectedThisObject(); @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 1004013aa2a..43179e3080b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ConstructorDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ConstructorDescriptorImpl.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.lang.descriptors; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.name.Name; @@ -56,7 +57,7 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements return this; } - @NotNull + @Nullable 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/FunctionDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java index 971badc6269..167ad7f1024 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java @@ -72,7 +72,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo protected FunctionDescriptorImpl initialize( @Nullable JetType receiverParameterType, - @NotNull ReceiverParameterDescriptor expectedThisObject, + @Nullable ReceiverParameterDescriptor expectedThisObject, @NotNull List typeParameters, @NotNull List unsubstitutedValueParameters, @Nullable JetType unsubstitutedReturnType, @@ -117,13 +117,13 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo this.unsubstitutedReturnType = unsubstitutedReturnType; } - @NotNull + @Nullable @Override public ReceiverParameterDescriptor getReceiverParameter() { return receiverParameter; } - @NotNull + @Nullable @Override public ReceiverParameterDescriptor getExpectedThisObject() { return expectedThisObject; @@ -196,16 +196,19 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo TypeSubstitutor substitutor = DescriptorSubstitutor.substituteTypeParameters(getTypeParameters(), originalSubstitutor, substitutedDescriptor, substitutedTypeParameters); JetType substitutedReceiverParameterType = null; - if (receiverParameter.exists()) { + if (receiverParameter != null) { substitutedReceiverParameterType = substitutor.substitute(getReceiverParameter().getType(), Variance.IN_VARIANCE); if (substitutedReceiverParameterType == null) { return null; } } - ReceiverParameterDescriptor substitutedExpectedThis = expectedThisObject.substitute(substitutor); - if (substitutedExpectedThis == null) { - return null; + ReceiverParameterDescriptor substitutedExpectedThis = null; + if (expectedThisObject != null) { + 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 06c0fc2df85..cf2ef82c0be 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 { 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"); ReceiverParameterDescriptor receiver = descriptor.getReceiverParameter(); - if (receiver.exists()) { + if (receiver != null) { parameterScope.setImplicitReceiver(receiver); } for (TypeParameterDescriptor typeParameter : descriptor.getTypeParameters()) { @@ -119,8 +119,13 @@ public class FunctionDescriptorUtil { return parameterScope; } - public static void initializeFromFunctionType(@NotNull FunctionDescriptorImpl functionDescriptor, @NotNull JetType functionType, @NotNull ReceiverParameterDescriptor expectedThisObject, - @NotNull Modality modality, @NotNull Visibility visibility) { + public static void initializeFromFunctionType( + @NotNull FunctionDescriptorImpl functionDescriptor, + @NotNull JetType functionType, + @Nullable ReceiverParameterDescriptor expectedThisObject, + @NotNull Modality modality, + @NotNull Visibility visibility + ) { assert KotlinBuiltIns.getInstance().isFunctionType(functionType); functionDescriptor.initialize(KotlinBuiltIns.getInstance().getReceiverType(functionType), diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/NoReceiverParameter.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/NoReceiverParameter.java deleted file mode 100644 index b122ec1a345..00000000000 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/NoReceiverParameter.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright 2010-2012 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.lang.descriptors; - -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.ReceiverValue; -import org.jetbrains.jet.lang.types.JetType; -import org.jetbrains.jet.lang.types.TypeSubstitutor; - -import java.util.Collections; -import java.util.List; - -/*package*/ class NoReceiverParameter implements ReceiverParameterDescriptor { - /*package*/ static final ReceiverParameterDescriptor INSTANCE = new NoReceiverParameter(); - - private NoReceiverParameter() {} - - @NotNull - @Override - public JetType getType() { - throw new UnsupportedOperationException("NO_RECEIVER_PARAMETER.getType()"); - } - - @NotNull - @Override - public ReceiverValue getValue() { - return ReceiverValue.NO_RECEIVER; - } - - @NotNull - @Override - public DeclarationDescriptor getOriginal() { - return this; - } - - @NotNull - @Override - public DeclarationDescriptor getContainingDeclaration() { - throw new UnsupportedOperationException("NO_RECEIVER_PARAMETER.getContainingDeclaration()"); - } - - @Nullable - @Override - public ReceiverParameterDescriptor substitute(TypeSubstitutor substitutor) { - return this; - } - - @Override - public R accept(DeclarationDescriptorVisitor visitor, D data) { - return visitor.visitReceiverParameterDescriptor(this, data); - } - - @Override - public void acceptVoid(DeclarationDescriptorVisitor visitor) { - visitor.visitReceiverParameterDescriptor(this, null); - } - - @Override - public boolean exists() { - return false; - } - - @Override - public String toString() { - return "NO_RECEIVER_PARAMETER"; - } - - @Override - public List getAnnotations() { - return Collections.emptyList(); - } - - @NotNull - @Override - public Name getName() { - throw new UnsupportedOperationException("NO_RECEIVER_PARAMETER.getName()"); - } -} 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 d0d1be5e632..ccc24ff4d74 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptor.java @@ -18,6 +18,7 @@ package org.jetbrains.jet.lang.descriptors; import com.google.common.collect.Sets; 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.types.TypeSubstitutor; @@ -106,13 +107,13 @@ public abstract class PropertyAccessorDescriptor extends DeclarationDescriptorNo return correspondingProperty; } - @NotNull + @Nullable @Override public ReceiverParameterDescriptor getReceiverParameter() { return getCorrespondingProperty().getReceiverParameter(); } - @NotNull + @Nullable @Override 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 ddee4b7816c..fb43264c36e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java @@ -89,7 +89,7 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab @NotNull Visibility visibility, boolean isVar, @Nullable JetType receiverType, - @NotNull ReceiverParameterDescriptor expectedThisObject, + @Nullable ReceiverParameterDescriptor expectedThisObject, @NotNull Name name, @NotNull JetType outType, @NotNull Kind kind @@ -101,7 +101,7 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab public void setType( @NotNull JetType outType, @NotNull List typeParameters, - @NotNull ReceiverParameterDescriptor expectedThisObject, + @Nullable ReceiverParameterDescriptor expectedThisObject, @Nullable JetType receiverType ) { ReceiverParameterDescriptor receiverParameter = DescriptorResolver.resolveReceiverParameterFor(this, receiverType); @@ -111,8 +111,8 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab public void setType( @NotNull JetType outType, @NotNull List typeParameters, - @NotNull ReceiverParameterDescriptor expectedThisObject, - @NotNull ReceiverParameterDescriptor receiverParameter + @Nullable ReceiverParameterDescriptor expectedThisObject, + @Nullable ReceiverParameterDescriptor receiverParameter ) { setOutType(outType); @@ -138,12 +138,12 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab } @Override - @NotNull + @Nullable public ReceiverParameterDescriptor getReceiverParameter() { return receiverParameter; } - @NotNull + @Nullable @Override public ReceiverParameterDescriptor getExpectedThisObject() { return expectedThisObject; @@ -216,10 +216,19 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab return null; // TODO : tell the user that the property was projected out } - ReceiverParameterDescriptor substitutedExpectedThisObject = getExpectedThisObject().substitute(substitutor); + + ReceiverParameterDescriptor substitutedExpectedThisObject; + ReceiverParameterDescriptor expectedThisObject = getExpectedThisObject(); + if (expectedThisObject != null) { + substitutedExpectedThisObject = expectedThisObject.substitute(substitutor); + if (substitutedExpectedThisObject == null) return null; + } + else { + substitutedExpectedThisObject = null; + } JetType substitutedReceiverType; - if (receiverParameter.exists()) { + if (receiverParameter != null) { substitutedReceiverType = substitutor.substitute(receiverParameter.getType(), Variance.IN_VARIANCE); if (substitutedReceiverType == null) return null; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ReceiverParameterDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ReceiverParameterDescriptor.java index 9a153466c64..8d18280fa74 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ReceiverParameterDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ReceiverParameterDescriptor.java @@ -27,8 +27,9 @@ import org.jetbrains.jet.lang.types.TypeSubstitutor; */ public interface ReceiverParameterDescriptor extends DeclarationDescriptor { - // NOTE: Instead of comparing to NO_RECEIVER_PARAMETER, call exists() - ReceiverParameterDescriptor NO_RECEIVER_PARAMETER = NoReceiverParameter.INSTANCE; + // This field exists for better readability of the client code + @Nullable + ReceiverParameterDescriptor NO_RECEIVER_PARAMETER = null; @NotNull JetType getType(); @@ -40,8 +41,6 @@ public interface ReceiverParameterDescriptor extends DeclarationDescriptor { @NotNull DeclarationDescriptor getContainingDeclaration(); - boolean exists(); - @Nullable @Override ReceiverParameterDescriptor substitute(TypeSubstitutor substitutor); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ReceiverParameterDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ReceiverParameterDescriptorImpl.java index 4a9eb2194bc..ccf3834538c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ReceiverParameterDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ReceiverParameterDescriptorImpl.java @@ -52,9 +52,4 @@ public class ReceiverParameterDescriptorImpl extends AbstractReceiverParameterDe public DeclarationDescriptor getContainingDeclaration() { return containingDeclaration; } - - @Override - public boolean exists() { - return true; - } } 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 1917714395e..acc0f1ed7fd 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/SimpleFunctionDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/SimpleFunctionDescriptorImpl.java @@ -51,7 +51,7 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme public SimpleFunctionDescriptorImpl initialize( @Nullable JetType receiverParameterType, - @NotNull ReceiverParameterDescriptor expectedThisObject, + @Nullable 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 6e622d401ec..ce205d08ca6 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorImpl.java @@ -86,13 +86,11 @@ public abstract class VariableDescriptorImpl extends DeclarationDescriptorNonRoo return Collections.emptyList(); } - @NotNull @Override public ReceiverParameterDescriptor getReceiverParameter() { return ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER; } - @NotNull @Override public ReceiverParameterDescriptor getExpectedThisObject() { return ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/Renderers.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/Renderers.java index 19e7855a0bd..fa74a7680ed 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/Renderers.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/Renderers.java @@ -26,23 +26,23 @@ import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.JetClass; import org.jetbrains.jet.lang.psi.JetClassOrObject; import org.jetbrains.jet.lang.resolve.DescriptorUtils; -import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; import org.jetbrains.jet.lang.resolve.calls.inference.ConstraintPosition; import org.jetbrains.jet.lang.resolve.calls.inference.ConstraintsUtil; import org.jetbrains.jet.lang.resolve.calls.inference.InferenceErrorData; +import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeSubstitutor; import org.jetbrains.jet.lang.types.Variance; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; import org.jetbrains.jet.resolve.DescriptorRenderer; -import static org.jetbrains.jet.lang.diagnostics.rendering.TabledDescriptorRenderer.*; -import static org.jetbrains.jet.lang.resolve.calls.inference.InferenceErrorData.ExtendedInferenceErrorData; - import java.util.Collection; import java.util.Iterator; import java.util.List; +import static org.jetbrains.jet.lang.diagnostics.rendering.TabledDescriptorRenderer.*; +import static org.jetbrains.jet.lang.resolve.calls.inference.InferenceErrorData.ExtendedInferenceErrorData; + /** * @author svtk */ @@ -193,7 +193,7 @@ public class Renderers { .text("None of the following substitutions"); for (CallableDescriptor substitutedDescriptor : substitutedDescriptors) { - JetType receiverType = substitutedDescriptor.getReceiverParameter().exists() ? substitutedDescriptor.getReceiverParameter().getType() : null; + JetType receiverType = DescriptorUtils.getReceiverParameterType(substitutedDescriptor.getReceiverParameter()); final Collection errorPositions = Sets.newHashSet(); List parameterTypes = Lists.newArrayList(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java index 887242da058..2f96db9c40a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java @@ -300,7 +300,7 @@ public class DeclarationResolver { public boolean apply(@Nullable DeclarationDescriptor descriptor) { if (descriptor instanceof PropertyDescriptor) { PropertyDescriptor propertyDescriptor = (PropertyDescriptor)descriptor; - return !propertyDescriptor.getReceiverParameter().exists(); + return propertyDescriptor.getReceiverParameter() == null; } return true; } 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 7a75bbfff52..51757348e28 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -840,7 +840,7 @@ public class DescriptorResolver { public JetScope getPropertyDeclarationInnerScope( @NotNull JetScope outerScope, @NotNull List typeParameters, - @NotNull ReceiverParameterDescriptor receiver, BindingTrace trace + @Nullable ReceiverParameterDescriptor receiver, BindingTrace trace ) { WritableScopeImpl result = new WritableScopeImpl( outerScope, outerScope.getContainingDeclaration(), new TraceBasedRedeclarationHandler(trace), @@ -848,7 +848,7 @@ public class DescriptorResolver { for (TypeParameterDescriptor typeParameterDescriptor : typeParameters) { result.addTypeParameterDescriptor(typeParameterDescriptor); } - if (receiver.exists()) { + if (receiver != null) { result.setImplicitReceiver(receiver); } result.changeLockLevel(WritableScope.LockLevel.READING); @@ -1314,11 +1314,6 @@ public class DescriptorResolver { return classDescriptor; } - @Override - public boolean exists() { - return true; - } - @Override public String toString() { return "class " + classDescriptor.getName() + "::this"; 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 74a324f83ae..9a048b25895 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java @@ -27,6 +27,7 @@ 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.receivers.ReceiverValue; import org.jetbrains.jet.lang.types.DescriptorSubstitutor; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeUtils; @@ -54,13 +55,13 @@ public class DescriptorUtils { return substitutedFunction; } - + public static Modality convertModality(Modality modality, boolean makeNonAbstract) { if (makeNonAbstract && modality == Modality.ABSTRACT) return Modality.OPEN; return modality; } - @NotNull + @Nullable public static ReceiverParameterDescriptor getExpectedThisObjectIfNeeded(@NotNull DeclarationDescriptor containingDeclaration) { if (containingDeclaration instanceof ClassDescriptor) { ClassDescriptor classDescriptor = (ClassDescriptor) containingDeclaration; @@ -144,8 +145,8 @@ public class DescriptorUtils { @Nullable public static D getParentOfType(@Nullable DeclarationDescriptor descriptor, @NotNull Class aClass) { return getParentOfType(descriptor, aClass, true); - } - + } + @Nullable public static D getParentOfType(@Nullable DeclarationDescriptor descriptor, @NotNull Class aClass, boolean strict) { if (descriptor == null) return null; @@ -161,7 +162,7 @@ public class DescriptorUtils { } return null; } - + public static boolean isAncestor(@Nullable DeclarationDescriptor ancestor, @NotNull DeclarationDescriptor declarationDescriptor, boolean strict) { if (ancestor == null) return false; DeclarationDescriptor descriptor = strict ? declarationDescriptor.getContainingDeclaration() : declarationDescriptor; @@ -175,7 +176,7 @@ public class DescriptorUtils { @Nullable public static VariableDescriptor filterNonExtensionProperty(Collection variables) { for (VariableDescriptor variable : variables) { - if (!variable.getReceiverParameter().exists()) { + if (variable.getReceiverParameter() == null) { return variable; } } @@ -344,7 +345,7 @@ public class DescriptorUtils { assert classKind == ClassKind.CLASS || classKind == ClassKind.TRAIT || classKind == ClassKind.ANNOTATION_CLASS; return Visibilities.PUBLIC; } - + public static List getSortedValueArguments(AnnotationDescriptor descriptor) { List resultList = Lists.newArrayList(); for (Map.Entry> entry : descriptor.getAllValueArguments().entrySet()) { @@ -368,4 +369,21 @@ public class DescriptorUtils { assert constructors.size() == 1 : "Data class must have only one constructor: " + constructors; return constructors.iterator().next(); } + + @Nullable + public static JetType getReceiverParameterType(@Nullable ReceiverParameterDescriptor receiverParameterDescriptor) { + if (receiverParameterDescriptor == null) { + return null; + } + return receiverParameterDescriptor.getType(); + } + + @NotNull + public static ReceiverValue safeGetValue(@Nullable ReceiverParameterDescriptor receiverParameterDescriptor) { + if (receiverParameterDescriptor == null) { + return ReceiverValue.NO_RECEIVER; + } + return receiverParameterDescriptor.getValue(); + } + } 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 e661fba401f..d4342055f02 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java @@ -113,7 +113,7 @@ public class OverridingUtil { private static List compiledValueParameters(CallableDescriptor callableDescriptor) { ReceiverParameterDescriptor receiverParameter = callableDescriptor.getReceiverParameter(); ArrayList parameters = new ArrayList(); - if (receiverParameter.exists()) { + if (receiverParameter != null) { parameters.add(receiverParameter.getType()); } for (ValueParameterDescriptor valueParameterDescriptor : callableDescriptor.getValueParameters()) { @@ -123,7 +123,7 @@ public class OverridingUtil { } private static int compiledValueParameterCount(CallableDescriptor callableDescriptor) { - if (callableDescriptor.getReceiverParameter().exists()) { + if (callableDescriptor.getReceiverParameter() != null) { return 1 + callableDescriptor.getValueParameters().size(); } else { 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 bbb04d771fe..601f03a98bb 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 @@ -578,7 +578,7 @@ public class CallResolver { boolean found = false; for (ResolutionCandidate resolvedCall : candidates) { FunctionDescriptor functionDescriptor = resolvedCall.getDescriptor(); - if (functionDescriptor.getReceiverParameter().exists()) continue; + if (functionDescriptor.getReceiverParameter() != null) continue; if (!functionDescriptor.getTypeParameters().isEmpty()) continue; if (!checkValueParameters(functionDescriptor, parameterTypes)) continue; result.add(resolvedCall); @@ -593,7 +593,7 @@ public class CallResolver { for (ResolutionCandidate candidate : candidates) { FunctionDescriptor functionDescriptor = candidate.getDescriptor(); ReceiverParameterDescriptor functionReceiver = functionDescriptor.getReceiverParameter(); - if (!functionReceiver.exists()) continue; + if (functionReceiver == null) continue; if (!functionDescriptor.getTypeParameters().isEmpty()) continue; if (!typeChecker.isSubtypeOf(receiver.getType(), functionReceiver.getType())) continue; if (!checkValueParameters(functionDescriptor, parameterTypes))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 160e05bd4f4..5bf98cac152 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 @@ -316,7 +316,7 @@ public class CandidateResolver { // Error is already reported if something is missing ReceiverValue receiverArgument = candidateCall.getReceiverArgument(); ReceiverParameterDescriptor receiverParameter = candidateWithFreshVariables.getReceiverParameter(); - if (receiverArgument.exists() && receiverParameter.exists()) { + if (receiverArgument.exists() && receiverParameter != null) { constraintsSystem.addSubtypeConstraint(receiverParameter.getType(), receiverArgument.getType(), ConstraintPosition.RECEIVER_POSITION); } @@ -473,7 +473,7 @@ public class CandidateResolver { BindingContext bindingContext = context.candidateCall.getTrace().getBindingContext(); ResolutionStatus result = SUCCESS; - if (receiverParameter.exists() && receiverArgument.exists()) { + if (receiverParameter != null && receiverArgument.exists()) { boolean safeAccess = isExplicitReceiver && !implicitInvokeCheck && candidateCall.isSafeCall(); JetType receiverArgumentType = receiverArgument.getType(); AutoCastServiceImpl autoCastService = new AutoCastServiceImpl(context.dataFlowInfo, bindingContext); 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 a96a89e1ad6..be5b9589733 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 @@ -214,11 +214,11 @@ import static org.jetbrains.jet.lang.resolve.calls.ValueArgumentsToParametersMap ReceiverParameterDescriptor receiverParameter = candidate.getReceiverParameter(); ReceiverValue receiverArgument = candidateCall.getReceiverArgument(); - if (receiverParameter.exists() &&!receiverArgument.exists()) { + if (receiverParameter != null &&!receiverArgument.exists()) { tracing.missingReceiver(traceForCall, receiverParameter); status = ERROR; } - if (!receiverParameter.exists() && receiverArgument.exists()) { + if (receiverParameter == null && receiverArgument.exists()) { tracing.noReceiverAllowed(traceForCall); if (call.getCalleeExpression() instanceof JetSimpleNameExpression) { status = STRONG_ERROR; @@ -228,7 +228,7 @@ import static org.jetbrains.jet.lang.resolve.calls.ValueArgumentsToParametersMap } } - assert (candidateCall.getThisObject().exists() == candidateCall.getResultingDescriptor().getExpectedThisObject().exists()) : "Shouldn't happen because of TaskPrioritizer: " + candidateCall.getCandidateDescriptor(); + assert (candidateCall.getThisObject().exists() == (candidateCall.getResultingDescriptor().getExpectedThisObject() != null)) : "Shouldn't happen because of TaskPrioritizer: " + candidateCall.getCandidateDescriptor(); return status; } 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 9c8a109f0a0..ddab4c796da 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 @@ -95,7 +95,7 @@ public class OverloadingConflictResolver { ReceiverParameterDescriptor receiverOfF = f.getReceiverParameter(); ReceiverParameterDescriptor receiverOfG = g.getReceiverParameter(); - if (f.getReceiverParameter().exists() && g.getReceiverParameter().exists()) { + if (receiverOfF != null && receiverOfG != null) { if (!typeMoreSpecific(receiverOfF.getType(), receiverOfG.getType())) return false; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/CallableDescriptorCollectors.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/CallableDescriptorCollectors.java index 56c18ab3589..5eaa84e7929 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/CallableDescriptorCollectors.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/CallableDescriptorCollectors.java @@ -41,7 +41,7 @@ public class CallableDescriptorCollectors { Set functions = Sets.newLinkedHashSet(scope.getFunctions(name)); for (Iterator iterator = functions.iterator(); iterator.hasNext(); ) { FunctionDescriptor functionDescriptor = iterator.next(); - if (functionDescriptor.getReceiverParameter().exists()) { + if (functionDescriptor.getReceiverParameter() != null) { iterator.remove(); } } 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 fdf96d776e8..18bdb4762c3 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 @@ -204,7 +204,7 @@ public abstract class TaskPrioritizer { } if (receiverParameters.size() == 1 && !receiverParameters.iterator().next().exists()) { for (D descriptor : descriptors) { - if (descriptor.getExpectedThisObject().exists() && !descriptor.getReceiverParameter().exists()) { + if (descriptor.getExpectedThisObject() != null && descriptor.getReceiverParameter() == null) { DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration(); if (descriptor instanceof ConstructorDescriptor) { assert containingDeclaration != null; @@ -224,7 +224,7 @@ public abstract class TaskPrioritizer { private static boolean setImpliedThis(@NotNull JetScope scope, ResolutionCandidate candidate) { ReceiverParameterDescriptor expectedThisObject = candidate.getDescriptor().getExpectedThisObject(); - if (!expectedThisObject.exists()) return true; + if (expectedThisObject == null) return true; List receivers = scope.getImplicitReceiversHierarchy(); for (ReceiverParameterDescriptor receiver : receivers) { if (JetTypeChecker.INSTANCE.isSubtypeOf(receiver.getType(), expectedThisObject.getType())) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyMemberScope.java index 96da0b4fa4a..eba9365281d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyMemberScope.java @@ -264,13 +264,13 @@ public abstract class AbstractLazyMemberScope getImplicitReceiversHierarchy() { ReceiverParameterDescriptor receiver = getImplicitReceiver(); - if (receiver.exists()) { + if (receiver != null) { return Collections.singletonList(receiver); } return Collections.emptyList(); } - @NotNull + @Nullable protected abstract ReceiverParameterDescriptor getImplicitReceiver(); // Do not change this, override in concrete subclasses: diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyPackageMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyPackageMemberScope.java index d1e512f5fc0..43453b8eb05 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyPackageMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyPackageMemberScope.java @@ -75,7 +75,6 @@ public class LazyPackageMemberScope extends AbstractLazyMemberScope computeImplicitReceiversHierarchy() { List implicitReceiverHierarchy = Lists.newArrayList(); - if (implicitReceiver != null && implicitReceiver.exists()) { + if (implicitReceiver != null) { implicitReceiverHierarchy.add(implicitReceiver); } implicitReceiverHierarchy.addAll(super.computeImplicitReceiversHierarchy()); 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 62a606b2066..0d1b313db07 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 @@ -548,7 +548,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { else if (!receivers.isEmpty()) { result = receivers.get(0); } - if (result.exists()) { + if (result != NO_RECEIVER_PARAMETER) { context.trace.record(REFERENCE_TARGET, expression.getInstanceReference(), result.getContainingDeclaration()); } return LabelResolver.LabeledReceiverResolutionResult.labelResolutionSuccess(result); 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 66b973ae267..0581c8f1ac1 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 @@ -104,7 +104,7 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor { parameterTypes.add(valueParameter.getType()); } ReceiverParameterDescriptor receiverParameter = functionDescriptor.getReceiverParameter(); - JetType receiver = receiverParameter.exists() ? receiverParameter.getType() : null; + JetType receiver = DescriptorUtils.getReceiverParameterType(receiverParameter); JetType returnType = TypeUtils.NO_EXPECTED_TYPE; JetScope functionInnerScope = FunctionDescriptorUtil.getFunctionInnerScope(context.scope, functionDescriptor, context.trace); 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 59cb80d8f94..ddfa5f369b3 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 @@ -234,12 +234,12 @@ public class ExpressionTypingUtils { ) { ReceiverParameterDescriptor receiverParameter = callableDescriptor.getReceiverParameter(); - if (!receiverArgument.exists() && !receiverParameter.exists()) { + if (!receiverArgument.exists() && receiverParameter == null) { // Both receivers do not exist return true; } - if (!(receiverArgument.exists() && receiverParameter.exists())) { + if (!(receiverArgument.exists() && receiverParameter != null)) { return false; } 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 3e9412bf690..8b290f24eee 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 @@ -156,7 +156,7 @@ public class LabelResolver { DeclarationDescriptor declarationDescriptor = context.trace.getBindingContext().get(BindingContext.DECLARATION_TO_DESCRIPTOR, element); if (declarationDescriptor instanceof FunctionDescriptor) { ReceiverParameterDescriptor thisReceiver = ((FunctionDescriptor) declarationDescriptor).getReceiverParameter(); - if (thisReceiver.exists()) { + if (thisReceiver != null) { context.trace.record(LABEL_TARGET, targetLabel, element); context.trace.record(REFERENCE_TARGET, thisReference, declarationDescriptor); } @@ -177,8 +177,8 @@ public class LabelResolver { } public static final class LabeledReceiverResolutionResult { - public static LabeledReceiverResolutionResult labelResolutionSuccess(@NotNull ReceiverParameterDescriptor receiverParameterDescriptor) { - if (!receiverParameterDescriptor.exists()) { + public static LabeledReceiverResolutionResult labelResolutionSuccess(@Nullable ReceiverParameterDescriptor receiverParameterDescriptor) { + if (receiverParameterDescriptor == null) { return new LabeledReceiverResolutionResult(Code.NO_THIS, null); } return new LabeledReceiverResolutionResult(Code.SUCCESS, receiverParameterDescriptor); diff --git a/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java b/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java index 53d155c41ab..ce13d5ff629 100644 --- a/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java +++ b/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java @@ -354,7 +354,7 @@ public class DescriptorRenderer implements Renderer { @NotNull StringBuilder builder, @Nullable Boolean isVar, @NotNull List typeParameters, - @NotNull ReceiverParameterDescriptor receiver, + @Nullable ReceiverParameterDescriptor receiver, @Nullable JetType outType) { String typeString = lt() + "no type>"; if (outType != null) { @@ -366,7 +366,7 @@ public class DescriptorRenderer implements Renderer { renderTypeParameters(typeParameters, builder); - if (receiver.exists()) { + if (receiver != null) { builder.append(escape(renderType(receiver.getType()))).append("."); } @@ -424,7 +424,7 @@ public class DescriptorRenderer implements Renderer { } ReceiverParameterDescriptor receiver = descriptor.getReceiverParameter(); - if (receiver.exists()) { + if (receiver != null) { builder.append(escape(renderType(receiver.getType()))).append("."); } diff --git a/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java b/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java index 70a5c78b8a1..cf36a57f71d 100644 --- a/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java +++ b/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java @@ -31,7 +31,6 @@ import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; 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.ExtensionReceiver; import org.jetbrains.jet.lang.types.ErrorUtils; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeProjection; @@ -431,7 +430,7 @@ public class NamespaceComparator { } private void serializeReceiver(CallableDescriptor fun) { - if (fun.getReceiverParameter().exists()) { + if (fun.getReceiverParameter() != null) { new TypeSerializer(sb).serialize(fun.getReceiverParameter()); sb.append("."); } @@ -492,8 +491,9 @@ public class NamespaceComparator { sb.append("> "); } sb.append("!"); - if (prop.getReceiverParameter().exists()) { - new TypeSerializer(sb).serialize(prop.getReceiverParameter().getType()); + ReceiverParameterDescriptor receiverParameter = prop.getReceiverParameter(); + if (receiverParameter != null) { + new TypeSerializer(sb).serialize(receiverParameter.getType()); sb.append("."); } sb.append(prop.getName()); diff --git a/idea/src/org/jetbrains/jet/plugin/JetDescriptorIconProvider.java b/idea/src/org/jetbrains/jet/plugin/JetDescriptorIconProvider.java index e4b64c3610f..622853d1a15 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetDescriptorIconProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/JetDescriptorIconProvider.java @@ -77,7 +77,7 @@ public final class JetDescriptorIconProvider { } if (descriptor instanceof FunctionDescriptor) { FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor; - if (functionDescriptor.getReceiverParameter().exists()) { + if (functionDescriptor.getReceiverParameter() != null) { return JetIcons.EXTENSION_FUNCTION; } diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java index e28b6de6fbf..f3d4722f676 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java @@ -244,7 +244,7 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns private static void addReceiverParameter(CallableDescriptor descriptor, StringBuilder bodyBuilder) { ReceiverParameterDescriptor receiverParameter = descriptor.getReceiverParameter(); - if (receiverParameter.exists()) { + if (receiverParameter != null) { bodyBuilder.append(receiverParameter.getType()).append("."); } } diff --git a/idea/src/org/jetbrains/jet/plugin/completion/DescriptorLookupConverter.java b/idea/src/org/jetbrains/jet/plugin/completion/DescriptorLookupConverter.java index 85498f97c28..3f9f1830456 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/DescriptorLookupConverter.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/DescriptorLookupConverter.java @@ -71,7 +71,7 @@ public final class DescriptorLookupConverter { typeText = DescriptorRenderer.TEXT.renderType(returnType); presentableText += DescriptorRenderer.TEXT.renderFunctionParameters(functionDescriptor); - boolean extensionFunction = functionDescriptor.getReceiverParameter().exists(); + boolean extensionFunction = functionDescriptor.getReceiverParameter() != null; DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration(); if (containingDeclaration != null && extensionFunction) { tailText += " for " + DescriptorRenderer.TEXT.renderType(functionDescriptor.getReceiverParameter().getType()); diff --git a/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetFunctionInsertHandler.java b/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetFunctionInsertHandler.java index 1a885186da6..97eb03afbea 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetFunctionInsertHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetFunctionInsertHandler.java @@ -184,7 +184,7 @@ public class JetFunctionInsertHandler implements InsertHandler { final SimpleFunctionDescriptor functionDescriptor = (SimpleFunctionDescriptor) descriptor; // Don't insert import for qualified expression if don't try to insert extension function if (PsiTreeUtil.getParentOfType(element, JetQualifiedExpression.class) != null && - !functionDescriptor.getReceiverParameter().exists()) { + functionDescriptor.getReceiverParameter() == null) { return; } diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/FunctionsHighlightingVisitor.java b/idea/src/org/jetbrains/jet/plugin/highlighter/FunctionsHighlightingVisitor.java index 445e403dd9f..061241657af 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/FunctionsHighlightingVisitor.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/FunctionsHighlightingVisitor.java @@ -18,10 +18,7 @@ package org.jetbrains.jet.plugin.highlighter; import com.intellij.lang.annotation.AnnotationHolder; import com.intellij.psi.PsiElement; -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.descriptors.*; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; @@ -75,7 +72,7 @@ public class FunctionsHighlightingVisitor extends AfterAnalysisHighlightingVisit if (fun.getContainingDeclaration() instanceof NamespaceDescriptor) { JetPsiChecker.highlightName(holder, callee, JetHighlightingColors.NAMESPACE_FUNCTION_CALL); } - if (fun.getReceiverParameter().exists()) { + if (fun.getReceiverParameter() != null) { 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 fc769050eaf..c2fd57b3547 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java @@ -22,6 +22,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.CallableDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.diagnostics.Diagnostic; import org.jetbrains.jet.lang.diagnostics.DiagnosticWithParameters1; @@ -140,8 +141,9 @@ public class IdeRenderers { Set parametersToHighlight = getParametersToHighlight(call); DescriptorRenderer htmlRenderer = DescriptorRenderer.HTML; - if (funDescriptor.getReceiverParameter().exists()) { - stringBuilder.append(htmlRenderer.renderType(funDescriptor.getReceiverParameter().getType())).append("."); + ReceiverParameterDescriptor receiverParameter = funDescriptor.getReceiverParameter(); + if (receiverParameter != null) { + stringBuilder.append(htmlRenderer.renderType(receiverParameter.getType())).append("."); } stringBuilder.append(funDescriptor.getName()).append("("); boolean first = true; diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/PropertiesHighlightingVisitor.java b/idea/src/org/jetbrains/jet/plugin/highlighter/PropertiesHighlightingVisitor.java index 6a7d1294e13..94c8adf49b1 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/PropertiesHighlightingVisitor.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/PropertiesHighlightingVisitor.java @@ -19,10 +19,7 @@ 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.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.descriptors.*; import org.jetbrains.jet.lang.psi.JetParameter; import org.jetbrains.jet.lang.psi.JetProperty; import org.jetbrains.jet.lang.psi.JetSimpleNameExpression; @@ -84,7 +81,7 @@ class PropertiesHighlightingVisitor extends AfterAnalysisHighlightingVisitor { JetPsiChecker.highlightName(holder, elementToHighlight, namespace ? JetHighlightingColors.NAMESPACE_PROPERTY : JetHighlightingColors.INSTANCE_PROPERTY ); - if (descriptor.getReceiverParameter().exists()) { + if (descriptor.getReceiverParameter() != null) { 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 a0a86315d12..62e5f1279b1 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/DeclarationDescriptorComparator.java +++ b/idea/src/org/jetbrains/jet/plugin/libraries/DeclarationDescriptorComparator.java @@ -35,7 +35,7 @@ class DeclarationDescriptorComparator implements Comparator