gson-compile/gson-compile-processor/src/main/java/io/gitlab/jfronny/gson/compile/processor/adapter/PrimitiveAdapter.java

40 lines
1.4 KiB
Java

package io.gitlab.jfronny.gson.compile.processor.adapter;
public class PrimitiveAdapter extends Adapter {
@Override
public boolean applies() {
return unboxedType.getKind().isPrimitive();
}
@Override
public void generateWrite(Runnable writeGet) {
if (type.equals(unboxedType)) {
code.add("writer.value(");
writeGet.run();
code.addStatement(");\n");
} else {
code.add("$T $L = ", type, argName);
writeGet.run();
code.add(";\n");
code.beginControlFlow("if ($L == null)", argName)
.addStatement("writer.nullValue()")
.endControlFlow("else writer.value($L)", argName);
}
}
@Override
public void generateRead() {
code.add(switch (unboxedType.getKind()) {
case BOOLEAN -> "reader.nextBoolean()";
case BYTE -> "(byte) reader.nextInt()";
case SHORT -> "(short) reader.nextInt()";
case INT -> "reader.nextInt()";
case LONG -> "reader.nextLong()";
case CHAR -> "(char) reader.nextInt()";
case FLOAT -> "(float) reader.nextDouble()";
case DOUBLE -> "reader.nextDouble()";
default -> throw new IllegalArgumentException("Unsupported primitive: " + unboxedType.getKind());
});
}
}