KaumeiLib.java

/*
 * SPDX-FileCopyrightText: 2025 kaumei.io
 * SPDX-License-Identifier: Apache-2.0
 */
package io.kaumei.jdbc.anno.gen;

import com.palantir.javapoet.CodeBlock;
import io.kaumei.jdbc.anno.model.OptionalFlag;
import io.kaumei.jdbc.impl.JdbcUtils;

import javax.lang.model.type.TypeMirror;
import java.util.Objects;

public final class KaumeiLib {

    private KaumeiLib() {
        // prevent instantiation
    }

    // ------------------------------------------------------------------------

    public static CodeBlock requireNonNull(String javaName) {
        return CodeBlock.of("$T.requireNonNull($L, $S)", Objects.class, javaName, javaName);
    }

    public static CodeBlock requireNonNull(CodeBlock access) {
        return CodeBlock.of("$T.requireNonNull($L, $S)", Objects.class, access, access.toString());
    }

    public static CodeBlock nullCheck(OptionalFlag optionalFlag, TypeMirror type, CodeBlock access) {
        return optionalFlag.isNonNull() && !type.getKind().isPrimitive()
                ? CodeBlock.of("$T.requireNonNull($L, $S)", Objects.class, access, access.toString())
                : CodeBlock.of("$L", access);
    }

    public static CodeBlock throwNullPointerException(CodeBlock message) {
        return CodeBlock.of("throw new $T($S)", NullPointerException.class, message.toString());
    }

    public static CodeBlock marks(CodeBlock count, int maxPlaceholders, String parameterName) {
        return CodeBlock.of("$T.marks($L, $L, $S)", JdbcUtils.class, count, maxPlaceholders, parameterName);
    }

    public static CodeBlock checkPlaceholder(String count, CodeBlock add, int maxPlaceholders) {
        return CodeBlock.of("$T.checkPlaceholder($L, $L, $L)", JdbcUtils.class, count, add, maxPlaceholders);
    }

}