Generating map instead of initializing manually.

This commit is contained in:
Evgeny Gerashchenko
2013-02-11 21:35:18 +04:00
parent 522530ec4a
commit 14f3144533
@@ -22,23 +22,26 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.CallableDescriptor; import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor; import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.lang.types.lang.PrimitiveType;
import java.util.List; import java.util.List;
import static org.jetbrains.jet.codegen.AsmUtil.isPrimitiveNumberClassDescriptor; import static org.jetbrains.jet.codegen.AsmUtil.isPrimitiveNumberClassDescriptor;
public class RangeCodegenUtil { public class RangeCodegenUtil {
private static final ImmutableMap<String, JetType> RANGE_TO_ELEMENT_TYPE = ImmutableMap.<String, JetType>builder() private static final ImmutableMap<FqName, PrimitiveType> RANGE_TO_ELEMENT_TYPE;
.put("ByteRange", KotlinBuiltIns.getInstance().getByteType())
.put("ShortRange", KotlinBuiltIns.getInstance().getShortType()) static {
.put("IntRange", KotlinBuiltIns.getInstance().getIntType()) ImmutableMap.Builder<FqName, PrimitiveType> rangeBuilder = ImmutableMap.builder();
.put("LongRange", KotlinBuiltIns.getInstance().getLongType()) for (PrimitiveType primitiveType : PrimitiveType.values()) {
.put("FloatRange", KotlinBuiltIns.getInstance().getFloatType()) rangeBuilder.put(primitiveType.getRangeClassName(), primitiveType);
.put("DoubleRange", KotlinBuiltIns.getInstance().getDoubleType()) }
.put("CharRange", KotlinBuiltIns.getInstance().getCharType()) RANGE_TO_ELEMENT_TYPE = rangeBuilder.build();
.build(); }
private RangeCodegenUtil() {} private RangeCodegenUtil() {}
@@ -77,14 +80,14 @@ public class RangeCodegenUtil {
} }
@Nullable @Nullable
public static JetType getPrimitiveRangeElementType(JetType rangeType) { private static PrimitiveType getPrimitiveRangeElementType(JetType rangeType) {
ClassifierDescriptor declarationDescriptor = rangeType.getConstructor().getDeclarationDescriptor(); ClassifierDescriptor declarationDescriptor = rangeType.getConstructor().getDeclarationDescriptor();
assert declarationDescriptor != null; assert declarationDescriptor != null;
if (declarationDescriptor != KotlinBuiltIns.getInstance().getBuiltInsScope().getClassifier(declarationDescriptor.getName())) { if (declarationDescriptor != KotlinBuiltIns.getInstance().getBuiltInsScope().getClassifier(declarationDescriptor.getName())) {
// Must be a standard library class // Must be a standard library class
return null; return null;
} }
return RANGE_TO_ELEMENT_TYPE.get(declarationDescriptor.getName().getName()); return RANGE_TO_ELEMENT_TYPE.get(DescriptorUtils.getFQName(declarationDescriptor).toSafe());
} }
public static boolean isOptimizableRangeTo(CallableDescriptor rangeTo) { public static boolean isOptimizableRangeTo(CallableDescriptor rangeTo) {