intrinsics methods are only callables
This commit is contained in:
@@ -1015,7 +1015,10 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
|
|||||||
// descriptor = ((VariableAsFunctionDescriptor) descriptor).getVariableDescriptor();
|
// 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) {
|
if (intrinsic != null) {
|
||||||
final Type expectedType = expressionType(expression);
|
final Type expectedType = expressionType(expression);
|
||||||
return intrinsic.generate(this, v, expectedType, expression, Collections.<JetExpression>emptyList(), receiver, state);
|
return intrinsic.generate(this, v, expectedType, expression, Collections.<JetExpression>emptyList(), receiver, state);
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ import com.intellij.psi.PsiClass;
|
|||||||
import com.intellij.psi.PsiMethod;
|
import com.intellij.psi.PsiMethod;
|
||||||
import com.intellij.psi.search.DelegatingGlobalSearchScope;
|
import com.intellij.psi.search.DelegatingGlobalSearchScope;
|
||||||
import com.intellij.psi.search.ProjectScope;
|
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.*;
|
||||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmPrimitiveType;
|
import org.jetbrains.jet.lang.resolve.java.JvmPrimitiveType;
|
||||||
@@ -72,7 +74,7 @@ public class IntrinsicMethods {
|
|||||||
|
|
||||||
private Project myProject;
|
private Project myProject;
|
||||||
private JetStandardLibrary myStdLib;
|
private JetStandardLibrary myStdLib;
|
||||||
private final Map<DeclarationDescriptor, IntrinsicMethod> myMethods = new HashMap<DeclarationDescriptor, IntrinsicMethod>();
|
private final Map<CallableMemberDescriptor, IntrinsicMethod> myMethods = new HashMap<CallableMemberDescriptor, IntrinsicMethod>();
|
||||||
private final Map<String, IntrinsicMethod> namedMethods = new HashMap<String, IntrinsicMethod>();
|
private final Map<String, IntrinsicMethod> namedMethods = new HashMap<String, IntrinsicMethod>();
|
||||||
private static final IntrinsicMethod ARRAY_ITERATOR = new ArrayIterator();
|
private static final IntrinsicMethod ARRAY_ITERATOR = new ArrayIterator();
|
||||||
|
|
||||||
@@ -223,7 +225,7 @@ public class IntrinsicMethods {
|
|||||||
final JetScope numberScope = getClassMemberScope(className);
|
final JetScope numberScope = getClassMemberScope(className);
|
||||||
Collection<VariableDescriptor> properties = numberScope.getProperties(methodName);
|
Collection<VariableDescriptor> properties = numberScope.getProperties(methodName);
|
||||||
assert properties.size() == 1;
|
assert properties.size() == 1;
|
||||||
final VariableDescriptor property = properties.iterator().next();
|
final PropertyDescriptor property = (PropertyDescriptor) properties.iterator().next();
|
||||||
myMethods.put(property.getOriginal(), implementation);
|
myMethods.put(property.getOriginal(), implementation);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -269,7 +271,8 @@ public class IntrinsicMethods {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IntrinsicMethod getIntrinsic(DeclarationDescriptor descriptor) {
|
@Nullable
|
||||||
|
public IntrinsicMethod getIntrinsic(@NotNull CallableMemberDescriptor descriptor) {
|
||||||
IntrinsicMethod intrinsicMethod = myMethods.get(descriptor.getOriginal());
|
IntrinsicMethod intrinsicMethod = myMethods.get(descriptor.getOriginal());
|
||||||
if (intrinsicMethod == null) {
|
if (intrinsicMethod == null) {
|
||||||
List<AnnotationDescriptor> annotations = descriptor.getAnnotations();
|
List<AnnotationDescriptor> annotations = descriptor.getAnnotations();
|
||||||
|
|||||||
@@ -28,6 +28,10 @@ public interface CallableMemberDescriptor extends CallableDescriptor, MemberDesc
|
|||||||
@Override
|
@Override
|
||||||
Set<? extends CallableMemberDescriptor> getOverriddenDescriptors();
|
Set<? extends CallableMemberDescriptor> getOverriddenDescriptors();
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
CallableMemberDescriptor getOriginal();
|
||||||
|
|
||||||
void addOverriddenDescriptor(@NotNull CallableMemberDescriptor overridden);
|
void addOverriddenDescriptor(@NotNull CallableMemberDescriptor overridden);
|
||||||
|
|
||||||
enum Kind {
|
enum Kind {
|
||||||
|
|||||||
Reference in New Issue
Block a user