Fix broken isEnumClassObject methods

Out of three methods, two were incorrect
This commit is contained in:
Alexander Udalov
2013-03-14 18:19:43 +04:00
parent c3a2f16624
commit 68844131b0
8 changed files with 49 additions and 48 deletions
@@ -19,7 +19,9 @@ package org.jetbrains.jet.codegen.intrinsics;
import com.google.common.collect.ImmutableList;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.resolve.java.JvmPrimitiveType;
import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -35,7 +37,7 @@ import java.util.List;
import java.util.Map;
import static org.jetbrains.asm4.Opcodes.*;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getClassObjectName;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*;
public class IntrinsicMethods {
private static final IntrinsicMethod UNARY_MINUS = new UnaryMinus();
@@ -229,10 +231,11 @@ public class IntrinsicMethods {
SimpleFunctionDescriptor functionDescriptor = (SimpleFunctionDescriptor) descriptor;
if (isEnumClassObject(functionDescriptor.getContainingDeclaration())) {
if ("values".equals(functionDescriptor.getName().getName())) {
if (isEnumValuesMethod(functionDescriptor)) {
return ENUM_VALUES;
}
if ("valueOf".equals(functionDescriptor.getName().getName())) {
if (isEnumValueOfMethod(functionDescriptor)) {
return ENUM_VALUE_OF;
}
}
@@ -254,20 +257,4 @@ public class IntrinsicMethods {
}
return intrinsicMethod;
}
private static boolean isEnumClassObject(DeclarationDescriptor declaration) {
if (declaration instanceof ClassDescriptor) {
ClassDescriptor descriptor = (ClassDescriptor) declaration;
if (descriptor.getContainingDeclaration() instanceof ClassDescriptor) {
ClassDescriptor containingDeclaration = (ClassDescriptor) descriptor.getContainingDeclaration();
//noinspection ConstantConditions
if (containingDeclaration != null &&
containingDeclaration.getClassObjectDescriptor() != null &&
containingDeclaration.getClassObjectDescriptor().equals(descriptor)) {
return true;
}
}
}
return false;
}
}