All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.checkerframework.common.value.util.NumberUtils Maven / Gradle / Ivy

package org.checkerframework.common.value.util;

import java.util.ArrayList;
import java.util.List;
import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
import org.checkerframework.javacutil.TypesUtils;

public class NumberUtils {

    /** Converts a {@code List} to a {@code List}, where A and B are numeric types. */
    public static List castNumbers(
            TypeMirror type, List numbers) {
        if (numbers == null) {
            return null;
        }
        TypeKind typeKind = unBoxPrimitive(type);
        switch (typeKind) {
            case BYTE:
                List bytes = new ArrayList<>();
                for (Number l : numbers) {
                    bytes.add(l.byteValue());
                }
                return bytes;
            case CHAR:
                List chars = new ArrayList<>();
                for (Number l : numbers) {
                    chars.add(l.intValue());
                }
                return chars;
            case DOUBLE:
                List doubles = new ArrayList<>();
                for (Number l : numbers) {
                    doubles.add(l.doubleValue());
                }
                return doubles;
            case FLOAT:
                List floats = new ArrayList<>();
                for (Number l : numbers) {
                    floats.add(l.floatValue());
                }
                return floats;
            case INT:
                List ints = new ArrayList<>();
                for (Number l : numbers) {
                    ints.add(l.intValue());
                }
                return ints;
            case LONG:
                List longs = new ArrayList<>();
                for (Number l : numbers) {
                    longs.add(l.longValue());
                }
                return longs;
            case SHORT:
                List shorts = new ArrayList<>();
                for (Number l : numbers) {
                    shorts.add(l.shortValue());
                }
                return shorts;
            default:
                throw new UnsupportedOperationException(typeKind.toString());
        }
    }

    public static Range castRange(TypeMirror type, Range range) {
        TypeKind typeKind = unBoxPrimitive(type);
        switch (typeKind) {
            case INT:
                return range.intRange();
            case SHORT:
                return range.shortRange();
            case BYTE:
                return range.byteRange();
            case LONG:
            case CHAR:
            case FLOAT:
            case DOUBLE:
                return range;
            default:
                throw new UnsupportedOperationException(typeKind.toString());
        }
    }

    private static TypeKind unBoxPrimitive(TypeMirror type) {
        if (type.getKind() == TypeKind.DECLARED) {
            String stringType = TypesUtils.getQualifiedName((DeclaredType) type).toString();

            switch (stringType) {
                case "java.lang.Byte":
                    return TypeKind.BYTE;
                case "java.lang.Boolean":
                    return TypeKind.BOOLEAN;
                case "java.lang.Charater":
                    return TypeKind.CHAR;
                case "java.lang.Double":
                    return TypeKind.DOUBLE;
                case "java.lang.Float":
                    return TypeKind.FLOAT;
                case "java.lang.Integer":
                    return TypeKind.INT;
                case "java.lang.Long":
                    return TypeKind.LONG;
                case "java.lang.Short":
                    return TypeKind.SHORT;
            }
        }
        return type.getKind();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy