Make IntegerValueTypeConstant implements CompileTimeValue<Number>. getValue() method for it is now deprecated - getValue(expectedType) should be used
This commit is contained in:
+45
-11
@@ -17,29 +17,63 @@
|
||||
package org.jetbrains.jet.lang.resolve.constants;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationArgumentVisitor;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.Annotations;
|
||||
import org.jetbrains.jet.lang.types.ErrorUtils;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
import org.jetbrains.jet.lang.types.JetTypeImpl;
|
||||
import org.jetbrains.jet.lang.types.TypeProjection;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.jet.lang.types.*;
|
||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.Annotations;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
public class IntegerValueTypeConstant extends CompileTimeConstant<IntegerValueTypeConstructor> {
|
||||
public class IntegerValueTypeConstant extends CompileTimeConstant<Number> {
|
||||
|
||||
public IntegerValueTypeConstant(long value) {
|
||||
super(new IntegerValueTypeConstructor(value));
|
||||
private final IntegerValueTypeConstructor typeConstructor;
|
||||
|
||||
public IntegerValueTypeConstant(@NotNull Number value) {
|
||||
super(value);
|
||||
this.typeConstructor = new IntegerValueTypeConstructor(value.longValue());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public JetType getType(@NotNull KotlinBuiltIns kotlinBuiltIns) {
|
||||
return new JetTypeImpl(
|
||||
Annotations.EMPTY, getValue(),
|
||||
Annotations.EMPTY, typeConstructor,
|
||||
false, Collections.<TypeProjection>emptyList(),
|
||||
ErrorUtils.createErrorScope("Scope for number value type (" + getValue().toString() + ")", true));
|
||||
ErrorUtils.createErrorScope("Scope for number value type (" + typeConstructor.toString() + ")", true));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
@Deprecated
|
||||
public Number getValue() {
|
||||
throw new UnsupportedOperationException("Use IntegerValueTypeConstant.getValue(expectedType) instead");
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JetType getType(@NotNull JetType expectedType) {
|
||||
return TypeUtils.getPrimitiveNumberType(typeConstructor, expectedType);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Number getValue(@NotNull JetType expectedType) {
|
||||
Number numberValue = typeConstructor.getValue();
|
||||
KotlinBuiltIns builtIns = KotlinBuiltIns.getInstance();
|
||||
|
||||
JetType valueType = getType(expectedType);
|
||||
if (valueType.equals(builtIns.getIntType())) {
|
||||
return numberValue.intValue();
|
||||
}
|
||||
else if (valueType.equals(builtIns.getByteType())) {
|
||||
return numberValue.byteValue();
|
||||
}
|
||||
else if (valueType.equals(builtIns.getShortType())) {
|
||||
return numberValue.shortValue();
|
||||
}
|
||||
else {
|
||||
return numberValue.longValue();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -49,6 +83,6 @@ public class IntegerValueTypeConstant extends CompileTimeConstant<IntegerValueTy
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return value.toString();
|
||||
return typeConstructor.toString();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user