in java/fury-core/src/main/java/org/apache/fury/codegen/Expression.java [395:459]
public ExprCode doGenCode(CodegenContext ctx) {
Class<?> javaType = getRawType(type);
if (isPrimitive(javaType)) {
javaType = boxedType(javaType);
}
if (value == null) {
LiteralValue defaultLiteral = new LiteralValue(javaType, defaultValue(javaType));
return new ExprCode(null, TrueLiteral, defaultLiteral);
} else {
if (javaType == String.class) {
return new ExprCode(FalseLiteral, new LiteralValue("\"" + value + "\""));
} else if (javaType == Boolean.class || javaType == Integer.class) {
return new ExprCode(null, FalseLiteral, new LiteralValue(javaType, value.toString()));
} else if (javaType == Float.class) {
Float f = (Float) value;
if (f.isNaN()) {
return new ExprCode(FalseLiteral, new LiteralValue(javaType, "Float.NaN"));
} else if (f.equals(Float.POSITIVE_INFINITY)) {
return new ExprCode(
FalseLiteral, new LiteralValue(javaType, "Float.POSITIVE_INFINITY"));
} else if (f.equals(Float.NEGATIVE_INFINITY)) {
return new ExprCode(
FalseLiteral, new LiteralValue(javaType, "Float.NEGATIVE_INFINITY"));
} else {
return new ExprCode(FalseLiteral, new LiteralValue(javaType, String.format("%fF", f)));
}
} else if (javaType == Double.class) {
Double d = (Double) value;
if (d.isNaN()) {
return new ExprCode(FalseLiteral, new LiteralValue(javaType, "Double.NaN"));
} else if (d.equals(Double.POSITIVE_INFINITY)) {
return new ExprCode(
FalseLiteral, new LiteralValue(javaType, "Double.POSITIVE_INFINITY"));
} else if (d.equals(Double.NEGATIVE_INFINITY)) {
return new ExprCode(
FalseLiteral, new LiteralValue(javaType, "Double.NEGATIVE_INFINITY"));
} else {
return new ExprCode(FalseLiteral, new LiteralValue(javaType, String.format("%fD", d)));
}
} else if (javaType == Byte.class) {
return new ExprCode(
FalseLiteral, Code.exprValue(javaType, String.format("(%s)%s", "byte", value)));
} else if (javaType == Short.class) {
return new ExprCode(
FalseLiteral, Code.exprValue(javaType, String.format("(%s)%s", "short", value)));
} else if (javaType == Long.class) {
return new ExprCode(
FalseLiteral,
new LiteralValue(javaType, String.format("%dL", ((Number) (value)).longValue())));
} else if (isPrimitive(javaType)) {
return new ExprCode(FalseLiteral, new LiteralValue(javaType, String.valueOf(value)));
} else if (javaType == Class.class) {
String v;
Class<?> valueClass = (Class<?>) value;
if (valueClass.isArray()) {
v = String.format("%s.class", TypeUtils.getArrayClass((Class<?>) value));
} else {
v = String.format("%s.class", ((Class<?>) (value)).getName());
}
return new ExprCode(FalseLiteral, new LiteralValue(javaType, v));
} else {
throw new UnsupportedOperationException("Unsupported type " + javaType);
}
}
}