40 lines
1.4 KiB
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());
|
|
});
|
|
}
|
|
}
|