ConverterObjectSimple.java
/*
* SPDX-FileCopyrightText: 2025 kaumei.io
* SPDX-License-Identifier: Apache-2.0
*/
package io.kaumei.jdbc.anno.java2jdbc;
import com.palantir.javapoet.CodeBlock;
import io.kaumei.jdbc.anno.gen.KaumeiLib;
import io.kaumei.jdbc.anno.gen.TargetMethod;
import io.kaumei.jdbc.anno.model.OptionalFlag;
import io.kaumei.jdbc.anno.store.SearchKey;
import io.kaumei.jdbc.anno.store.SourceDV;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Name;
import javax.lang.model.type.TypeMirror;
final class ConverterObjectSimple extends Java2JdbcConverter {
record Placeholder(TypeMirror type, SourceDV source, ExecutableElement method,
SearchKey other) implements Java2JdbcConverter.Placeholder {
@Override
public SearchKey otherPlaceholder() {
return other;
}
@Override
public Java2JdbcConverter resolve(Java2JdbcConverter converter) {
return new ConverterObjectSimple(this, converter);
}
}
// ------------------------------------------------------------------------
private final Name methodName;
private final Java2JdbcConverter converter;
private ConverterObjectSimple(Placeholder placeholder, Java2JdbcConverter converter) {
super(placeholder.type, placeholder.source);
this.methodName = placeholder.method.getSimpleName();
this.converter = converter;
}
@Override
public void setParameter(TargetMethod builder, CodeBlock paramAccess, CodeBlock columnIndex, OptionalFlag optional) {
builder.addComment("ConverterObjectSimple", "type", this.type(), "optional", optional);
var localName = builder.tempVarName(paramAccess);
if (optional.isNonNull()) {
builder.beginControlFlow("if ($L == null)", paramAccess);
builder.addStatement(KaumeiLib.throwNullPointerException(paramAccess));
builder.endControlFlow();
builder.addStatement("var $L = $L.$N()", localName, paramAccess, methodName);
converter.setParameter(builder, localName, columnIndex, optional);
} else if (converter.type().getKind().isPrimitive()) {
builder.beginControlFlow("if ($L == null)", paramAccess);
builder.addStatement(builder.setNull(converter.type(), columnIndex));
builder.nextControlFlow("else");
builder.addStatement("var $L = $L.$N()", localName, paramAccess, methodName);
converter.setParameter(builder, localName, columnIndex, OptionalFlag.NON_NULL);
builder.endControlFlow();
} else {
builder.addStatement("var $L = $L == null ? null : $L.$N()", localName, paramAccess, paramAccess, methodName);
converter.setParameter(builder, localName, columnIndex, optional);
}
}
}