diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index fa20bdd5df7..96adcf7ee22 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1015,7 +1015,10 @@ public class ExpressionCodegen extends JetVisitor { // descriptor = ((VariableAsFunctionDescriptor) descriptor).getVariableDescriptor(); //} - final IntrinsicMethod intrinsic = state.getInjector().getIntrinsics().getIntrinsic(descriptor); + IntrinsicMethod intrinsic = null; + if (descriptor instanceof CallableMemberDescriptor) { + intrinsic = state.getInjector().getIntrinsics().getIntrinsic((CallableMemberDescriptor) descriptor); + } if (intrinsic != null) { final Type expectedType = expressionType(expression); return intrinsic.generate(this, v, expectedType, expression, Collections.emptyList(), receiver, state); 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 15e027bc166..b7671b2446b 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java @@ -24,6 +24,8 @@ import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; import com.intellij.psi.search.DelegatingGlobalSearchScope; import com.intellij.psi.search.ProjectScope; +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.resolve.java.JvmPrimitiveType; @@ -72,7 +74,7 @@ public class IntrinsicMethods { private Project myProject; private JetStandardLibrary myStdLib; - private final Map myMethods = new HashMap(); + private final Map myMethods = new HashMap(); private final Map namedMethods = new HashMap(); private static final IntrinsicMethod ARRAY_ITERATOR = new ArrayIterator(); @@ -223,7 +225,7 @@ public class IntrinsicMethods { final JetScope numberScope = getClassMemberScope(className); Collection properties = numberScope.getProperties(methodName); assert properties.size() == 1; - final VariableDescriptor property = properties.iterator().next(); + final PropertyDescriptor property = (PropertyDescriptor) properties.iterator().next(); myMethods.put(property.getOriginal(), implementation); } @@ -269,7 +271,8 @@ public class IntrinsicMethods { return null; } - public IntrinsicMethod getIntrinsic(DeclarationDescriptor descriptor) { + @Nullable + public IntrinsicMethod getIntrinsic(@NotNull CallableMemberDescriptor descriptor) { IntrinsicMethod intrinsicMethod = myMethods.get(descriptor.getOriginal()); if (intrinsicMethod == null) { List annotations = descriptor.getAnnotations(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/CallableMemberDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/CallableMemberDescriptor.java index bb803fef39a..1d8fa438216 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/CallableMemberDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/CallableMemberDescriptor.java @@ -28,6 +28,10 @@ public interface CallableMemberDescriptor extends CallableDescriptor, MemberDesc @Override Set getOverriddenDescriptors(); + @NotNull + @Override + CallableMemberDescriptor getOriginal(); + void addOverriddenDescriptor(@NotNull CallableMemberDescriptor overridden); enum Kind {