← back to dordor12__hbase-orm

Function bodies 231 total

All specs Real LLM only Function bodies
process method · java · L39-L69 (31 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/HBaseOrmProcessor.java
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
        for (Element element : roundEnv.getElementsAnnotatedWith(Table.class)) {
            if (element.getKind() != ElementKind.CLASS) {
                messager.printMessage(Diagnostic.Kind.ERROR,
                        "@Table can only be applied to classes", element);
                continue;
            }

            TypeElement typeElement = (TypeElement) element;

            // Validate
            ValidatorPass validator = new ValidatorPass(messager, elements, types);
            if (!validator.validate(typeElement)) {
                continue; // Errors already reported
            }

            // Build IR
            EntityModel model = buildEntityModel(typeElement, validator);
            if (model == null) continue;

            // Generate mapper
            MapperGenerator generator = new MapperGenerator();
            try {
                generator.generate(model).writ
buildEntityModel method · java · L71-L117 (47 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/HBaseOrmProcessor.java
    private EntityModel buildEntityModel(TypeElement typeElement, ValidatorPass validator) {
        Table tableAnn = typeElement.getAnnotation(Table.class);

        // Package and class names
        String qualifiedName = typeElement.getQualifiedName().toString();
        String packageName = elements.getPackageOf(typeElement).getQualifiedName().toString();
        String className = typeElement.getSimpleName().toString();

        // Families
        Map<String, Integer> familiesAndVersions = new LinkedHashMap<>();
        for (ColumnFamily cf : tableAnn.families()) {
            familiesAndVersions.put(cf.name(), cf.versions());
        }

        // Row key codec flags
        Map<String, String> rowKeyCodecFlags = new LinkedHashMap<>();
        for (CodecFlag flag : tableAnn.rowKeyCodecFlags()) {
            rowKeyCodecFlags.put(flag.name(), flag.value());
        }

        // Collect all fields
        List<VariableElement> allFields = validator.collectFields(typeElement);

  
buildRowKeyModel method · java · L119-L159 (41 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/HBaseOrmProcessor.java
    private RowKeyModel buildRowKeyModel(List<VariableElement> allFields, TypeElement typeElement) {
        VariableElement simpleRowKey = null;
        List<RowKeyModel.Component> components = new ArrayList<>();

        for (VariableElement field : allFields) {
            RowKey rk = field.getAnnotation(RowKey.class);
            RowKeyComponent rkc = field.getAnnotation(RowKeyComponent.class);

            if (rk != null) {
                simpleRowKey = field;
            }
            if (rkc != null) {
                String fieldName = field.getSimpleName().toString();
                components.add(new RowKeyModel.Component(
                        rkc.order(),
                        fieldName,
                        field.asType(),
                        rkc.delimiter(),
                        getterName(field),
                        setterName(field)
                ));
            }
        }

        if (simpleRowKey != null) {
            String fieldName = simpleR
buildColumnFieldModel method · java · L161-L180 (20 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/HBaseOrmProcessor.java
    private FieldModel buildColumnFieldModel(VariableElement field, Column col) {
        String fieldName = field.getSimpleName().toString();
        Map<String, String> flags = new LinkedHashMap<>();
        for (CodecFlag f : col.codecFlags()) {
            flags.put(f.name(), f.value());
        }

        return new FieldModel(
                fieldName,
                col.family(),
                col.qualifier(),
                field.asType(),
                field.asType(), // valueType same as fieldType for single-version
                false,
                flags,
                getterName(field),
                setterName(field),
                !field.getModifiers().contains(Modifier.PUBLIC)
        );
    }
buildMultiVersionFieldModel method · java · L182-L204 (23 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/HBaseOrmProcessor.java
    private FieldModel buildMultiVersionFieldModel(VariableElement field, MultiVersion mv) {
        String fieldName = field.getSimpleName().toString();
        Map<String, String> flags = new LinkedHashMap<>();
        for (CodecFlag f : mv.codecFlags()) {
            flags.put(f.name(), f.value());
        }

        // Extract the value type T from NavigableMap<Long, T>
        TypeMirror valueType = extractMultiVersionValueType(field.asType());

        return new FieldModel(
                fieldName,
                mv.family(),
                mv.qualifier(),
                field.asType(),
                valueType,
                true,
                flags,
                getterName(field),
                setterName(field),
                !field.getModifiers().contains(Modifier.PUBLIC)
        );
    }
extractMultiVersionValueType method · java · L206-L216 (11 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/HBaseOrmProcessor.java
    private TypeMirror extractMultiVersionValueType(TypeMirror type) {
        if (type.getKind() == TypeKind.DECLARED) {
            DeclaredType dt = (DeclaredType) type;
            List<? extends TypeMirror> typeArgs = dt.getTypeArguments();
            if (typeArgs.size() == 2) {
                return typeArgs.get(1); // The T in NavigableMap<Long, T>
            }
        }
        // Fallback
        return elements.getTypeElement("java.lang.Object").asType();
    }
getterName method · java · L218-L237 (20 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/HBaseOrmProcessor.java
    private String getterName(VariableElement field) {
        String name = field.getSimpleName().toString();
        String capitalized = Character.toUpperCase(name.charAt(0)) + name.substring(1);

        // Check if it's a boolean for "is" prefix
        TypeMirror fieldType = field.asType();
        if (fieldType.toString().equals("java.lang.Boolean")) {
            // Check if isXxx method exists on the enclosing type
            TypeElement enclosing = (TypeElement) field.getEnclosingElement();
            for (Element member : elements.getAllMembers(enclosing)) {
                if (member.getKind() == ElementKind.METHOD
                        && member.getSimpleName().toString().equals("is" + capitalized)
                        && ((ExecutableElement) member).getParameters().isEmpty()) {
                    return "is" + capitalized;
                }
            }
        }

        return "get" + capitalized;
    }
Repobility · code-quality intelligence · https://repobility.com
setterName method · java · L239-L242 (4 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/HBaseOrmProcessor.java
    private String setterName(VariableElement field) {
        String name = field.getSimpleName().toString();
        return "set" + Character.toUpperCase(name.charAt(0)) + name.substring(1);
    }
generate method · java · L23-L68 (46 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    public JavaFile generate(EntityModel model) {
        TypeName rowKeyType = resolveRowKeyType(model);
        TypeName entityType = ClassName.bestGuess(model.qualifiedName());

        TypeSpec.Builder classBuilder = TypeSpec.classBuilder(model.mapperClassName())
                .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
                .addSuperinterface(ParameterizedTypeName.get(
                        ClassName.get(HBaseMapper.class), rowKeyType, entityType))
                .addAnnotation(AnnotationSpec.builder(
                        ClassName.get("javax.annotation.processing", "Generated"))
                        .addMember("value", "$S", "io.github.dordor12.hbase.orm.processor.HBaseOrmProcessor")
                        .build());

        // Add codec field
        classBuilder.addField(FieldSpec.builder(ClassName.get(Codec.class), "codec",
                Modifier.PRIVATE, Modifier.FINAL).build());

        // Add static constant fields for family/qualifier bytes
  
addStaticConstants method · java · L72-L100 (29 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private void addStaticConstants(TypeSpec.Builder classBuilder, EntityModel model) {
        // Table name constant
        classBuilder.addField(FieldSpec.builder(String.class, "TABLE_NAME",
                        Modifier.PRIVATE, Modifier.STATIC, Modifier.FINAL)
                .initializer("$S", model.fullTableName())
                .build());

        // Family byte constants
        Set<String> families = new LinkedHashSet<>();
        for (FieldModel field : model.fields()) {
            families.add(field.family());
        }
        for (String family : families) {
            classBuilder.addField(FieldSpec.builder(byte[].class,
                            "FAMILY_" + family.toUpperCase(),
                            Modifier.PRIVATE, Modifier.STATIC, Modifier.FINAL)
                    .initializer("$T.toBytes($S)", Bytes.class, family)
                    .build());
        }

        // Qualifier byte constants for each field
        for (FieldModel field : model.fiel
generateWriteAsPut method · java · L104-L146 (43 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private MethodSpec generateWriteAsPut(EntityModel model, TypeName entityType) {
        MethodSpec.Builder method = MethodSpec.methodBuilder("writeAsPut")
                .addAnnotation(Override.class)
                .addModifiers(Modifier.PUBLIC)
                .returns(ClassName.get(Put.class))
                .addParameter(entityType, "entity");

        method.addStatement("byte[] rowKey = composeRowKey(entity)");
        method.addStatement("$T put = new $T(rowKey)", Put.class, Put.class);

        for (FieldModel field : model.fields()) {
            String familyConst = "FAMILY_" + field.family().toUpperCase();
            String qualConst = "QUAL_" + field.fieldName().toUpperCase();
            String getter = "entity." + field.getterName() + "()";

            if (field.multiVersioned()) {
                // Multi-version: iterate NavigableMap<Long, T>
                method.beginControlFlow("if ($L != null)", getter);
                method.beginControlFlow("for ($T.Ent
generateReadFromResult method · java · L150-L206 (57 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private MethodSpec generateReadFromResult(EntityModel model, TypeName entityType, TypeName rowKeyType) {
        MethodSpec.Builder method = MethodSpec.methodBuilder("readFromResult")
                .addAnnotation(Override.class)
                .addModifiers(Modifier.PUBLIC)
                .returns(entityType)
                .addParameter(ClassName.get(Result.class), "result");

        method.addStatement("$T entity = new $T()", entityType, entityType);

        // Parse row key
        method.addStatement("parseRowKey(result.getRow(), entity)");

        // Read each field
        for (FieldModel field : model.fields()) {
            String familyConst = "FAMILY_" + field.family().toUpperCase();
            String qualConst = "QUAL_" + field.fieldName().toUpperCase();
            String setter = "entity." + field.setterName();

            if (field.multiVersioned()) {
                // Multi-version: get all cells for this column
                method.addStatement("$T<$T> 
generateWriteAsResult method · java · L210-L226 (17 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private MethodSpec generateWriteAsResult(EntityModel model, TypeName entityType) {
        MethodSpec.Builder method = MethodSpec.methodBuilder("writeAsResult")
                .addAnnotation(Override.class)
                .addModifiers(Modifier.PUBLIC)
                .returns(ClassName.get(Result.class))
                .addParameter(entityType, "entity");

        method.addStatement("$T put = writeAsPut(entity)", Put.class);
        method.addStatement("$T<$T> cells = new $T<>()", List.class, Cell.class, ArrayList.class);
        method.beginControlFlow("for ($T<$T> familyCells : put.getFamilyCellMap().values())",
                List.class, Cell.class);
        method.addStatement("cells.addAll(familyCells)");
        method.endControlFlow();
        method.addStatement("return $T.create(cells)", Result.class);

        return method.build();
    }
generateReadFromPut method · java · L230-L282 (53 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private MethodSpec generateReadFromPut(EntityModel model, TypeName entityType, TypeName rowKeyType) {
        MethodSpec.Builder method = MethodSpec.methodBuilder("readFromPut")
                .addAnnotation(Override.class)
                .addModifiers(Modifier.PUBLIC)
                .returns(entityType)
                .addParameter(ClassName.get(Put.class), "put");

        method.addStatement("$T entity = new $T()", entityType, entityType);
        method.addStatement("parseRowKey(put.getRow(), entity)");

        for (FieldModel field : model.fields()) {
            String familyConst = "FAMILY_" + field.family().toUpperCase();
            String qualConst = "QUAL_" + field.fieldName().toUpperCase();
            String setter = "entity." + field.setterName();

            method.addStatement("$T<$T> cells_$L = put.get($L, $L)",
                    List.class, Cell.class, field.fieldName(), familyConst, qualConst);

            if (field.multiVersioned()) {
                me
generateComposeRowKey method · java · L286-L315 (30 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private MethodSpec generateComposeRowKey(EntityModel model, TypeName entityType) {
        MethodSpec.Builder method = MethodSpec.methodBuilder("composeRowKey")
                .addAnnotation(Override.class)
                .addModifiers(Modifier.PUBLIC)
                .returns(byte[].class)
                .addParameter(entityType, "entity");

        RowKeyModel rkm = model.rowKeyModel();

        if (rkm instanceof RowKeyModel.Simple simple) {
            // Simple row key: serialize the field directly
            method.addStatement("return codec.serialize(entity.$L(), $L)",
                    simple.getterName(), codecFlagsExprForRowKey(model));
        } else if (rkm instanceof RowKeyModel.Composite composite) {
            // Composite: join components with delimiters
            method.addStatement("$T sb = new $T()", StringBuilder.class, StringBuilder.class);
            List<RowKeyModel.Component> components = composite.components();
            for (int i = 0; i < comp
If a scraper extracted this row, it came from Repobility (https://repobility.com)
generateParseRowKey method · java · L319-L355 (37 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private MethodSpec generateParseRowKey(EntityModel model, TypeName entityType) {
        MethodSpec.Builder method = MethodSpec.methodBuilder("parseRowKey")
                .addAnnotation(Override.class)
                .addModifiers(Modifier.PUBLIC)
                .returns(void.class)
                .addParameter(byte[].class, "rowKeyBytes")
                .addParameter(entityType, "entity");

        RowKeyModel rkm = model.rowKeyModel();

        if (rkm instanceof RowKeyModel.Simple simple) {
            TypeMirror type = simple.fieldType();
            method.addStatement("entity.$L(($T) codec.deserialize(rowKeyBytes, $L, $L))",
                    simple.setterName(),
                    TypeName.get(type),
                    typeClassExpr(type),
                    codecFlagsExprForRowKey(model));
        } else if (rkm instanceof RowKeyModel.Composite composite) {
            List<RowKeyModel.Component> components = composite.components();
            // Find the delimi
generateGetRowKey method · java · L359-L385 (27 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private MethodSpec generateGetRowKey(EntityModel model, TypeName entityType, TypeName rowKeyType) {
        MethodSpec.Builder method = MethodSpec.methodBuilder("getRowKey")
                .addAnnotation(Override.class)
                .addModifiers(Modifier.PUBLIC)
                .returns(rowKeyType)
                .addParameter(entityType, "entity");

        RowKeyModel rkm = model.rowKeyModel();

        if (rkm instanceof RowKeyModel.Simple simple) {
            method.addStatement("return entity.$L()", simple.getterName());
        } else if (rkm instanceof RowKeyModel.Composite composite) {
            // Composite keys always return String
            List<RowKeyModel.Component> components = composite.components();
            method.addStatement("$T sb = new $T()", StringBuilder.class, StringBuilder.class);
            for (int i = 0; i < components.size(); i++) {
                RowKeyModel.Component comp = components.get(i);
                if (i > 0) {
              
generateGetTableName method · java · L389-L396 (8 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private MethodSpec generateGetTableName(EntityModel model) {
        return MethodSpec.methodBuilder("getTableName")
                .addAnnotation(Override.class)
                .addModifiers(Modifier.PUBLIC)
                .returns(String.class)
                .addStatement("return TABLE_NAME")
                .build();
    }
generateGetColumnFamiliesAndVersions method · java · L400-L414 (15 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private MethodSpec generateGetColumnFamiliesAndVersions(EntityModel model) {
        MethodSpec.Builder method = MethodSpec.methodBuilder("getColumnFamiliesAndVersions")
                .addAnnotation(Override.class)
                .addModifiers(Modifier.PUBLIC)
                .returns(ParameterizedTypeName.get(Map.class, String.class, Integer.class));

        method.addStatement("$T<$T, $T> map = new $T<>()",
                Map.class, String.class, Integer.class, LinkedHashMap.class);
        for (Map.Entry<String, Integer> entry : model.familiesAndVersions().entrySet()) {
            method.addStatement("map.put($S, $L)", entry.getKey(), entry.getValue());
        }
        method.addStatement("return map");

        return method.build();
    }
generateGetColumn method · java · L418-L444 (27 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private MethodSpec generateGetColumn(EntityModel model) {
        MethodSpec.Builder method = MethodSpec.methodBuilder("getColumn")
                .addAnnotation(Override.class)
                .addModifiers(Modifier.PUBLIC)
                .returns(byte[][].class)
                .addParameter(String.class, "fieldName");

        boolean first = true;
        for (FieldModel field : model.fields()) {
            String familyConst = "FAMILY_" + field.family().toUpperCase();
            String qualConst = "QUAL_" + field.fieldName().toUpperCase();

            if (first) {
                method.beginControlFlow("if ($S.equals(fieldName))", field.fieldName());
                first = false;
            } else {
                method.nextControlFlow("else if ($S.equals(fieldName))", field.fieldName());
            }
            method.addStatement("return new byte[][] { $L, $L }", familyConst, qualConst);
        }
        if (!first) {
            method.endControlFlow();
       
addCodecFlagHelpers method · java · L448-L494 (47 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private void addCodecFlagHelpers(TypeSpec.Builder classBuilder, EntityModel model) {
        // Generate static codec flag maps for fields that have flags
        Set<String> generated = new HashSet<>();
        for (FieldModel field : model.fields()) {
            if (!field.codecFlags().isEmpty()) {
                String constName = "FLAGS_" + field.fieldName().toUpperCase();
                if (generated.add(constName)) {
                    CodeBlock.Builder init = CodeBlock.builder()
                            .add("$T.of(", Map.class);
                    int i = 0;
                    for (Map.Entry<String, String> entry : field.codecFlags().entrySet()) {
                        if (i > 0) init.add(", ");
                        init.add("$S, $S", entry.getKey(), entry.getValue());
                        i++;
                    }
                    init.add(")");

                    classBuilder.addField(FieldSpec.builder(
                                    Parameteri
resolveRowKeyType method · java · L498-L505 (8 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private TypeName resolveRowKeyType(EntityModel model) {
        RowKeyModel rkm = model.rowKeyModel();
        if (rkm instanceof RowKeyModel.Simple simple) {
            return TypeName.get(simple.fieldType());
        }
        // Composite keys always use String
        return ClassName.get(String.class);
    }
codecFlagsExpr method · java · L507-L512 (6 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private CodeBlock codecFlagsExpr(FieldModel field) {
        if (field.codecFlags().isEmpty()) {
            return CodeBlock.of("$T.of()", Map.class);
        }
        return CodeBlock.of("FLAGS_$L", field.fieldName().toUpperCase());
    }
Powered by Repobility — scan your code at https://repobility.com
codecFlagsExprForRowKey method · java · L514-L519 (6 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private CodeBlock codecFlagsExprForRowKey(EntityModel model) {
        if (model.rowKeyCodecFlags().isEmpty()) {
            return CodeBlock.of("$T.of()", Map.class);
        }
        return CodeBlock.of("ROW_KEY_FLAGS");
    }
typeClassExpr method · java · L521-L533 (13 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private CodeBlock typeClassExpr(TypeMirror type) {
        if (type.getKind() == TypeKind.DECLARED) {
            DeclaredType dt = (DeclaredType) type;
            String qualifiedName = dt.asElement().toString();

            // For generic types, we need the raw type + type info
            if (!dt.getTypeArguments().isEmpty()) {
                return CodeBlock.of("$T.class", ClassName.bestGuess(qualifiedName));
            }
            return CodeBlock.of("$T.class", ClassName.bestGuess(qualifiedName));
        }
        return CodeBlock.of("$T.class", Object.class);
    }
getMultiVersionValueType method · java · L535-L538 (4 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private TypeMirror getMultiVersionValueType(FieldModel field) {
        // For NavigableMap<Long, T>, return T
        return field.valueType();
    }
generateParseExpression method · java · L540-L553 (14 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private String generateParseExpression(TypeMirror type, String expr) {
        if (type.getKind() == TypeKind.DECLARED) {
            String name = type.toString();
            if (name.equals("java.lang.String")) return expr;
            if (name.equals("java.lang.Integer")) return "Integer.parseInt(" + expr + ")";
            if (name.equals("java.lang.Long")) return "Long.parseLong(" + expr + ")";
            if (name.equals("java.lang.Short")) return "Short.parseShort(" + expr + ")";
            if (name.equals("java.lang.Float")) return "Float.parseFloat(" + expr + ")";
            if (name.equals("java.lang.Double")) return "Double.parseDouble(" + expr + ")";
            if (name.equals("java.lang.Boolean")) return "Boolean.parseBoolean(" + expr + ")";
            if (name.equals("java.math.BigDecimal")) return "new java.math.BigDecimal(" + expr + ")";
        }
        return expr;
    }
escapeRegex method · java · L555-L558 (4 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/MapperGenerator.java
    private String escapeRegex(String delimiter) {
        // Escape regex special chars
        return delimiter.replaceAll("([\\\\^$.|?*+()\\[\\]{}])", "\\\\$1");
    }
Simple class · java · L14-L19 (6 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/RowKeyModel.java
    record Simple(
            String fieldName,
            TypeMirror fieldType,
            String getterName,
            String setterName
    ) implements RowKeyModel {}
Composite class · java · L25-L27 (3 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/RowKeyModel.java
    record Composite(
            List<Component> components
    ) implements RowKeyModel {}
Component class · java · L29-L36 (8 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/RowKeyModel.java
    record Component(
            int order,
            String fieldName,
            TypeMirror fieldType,
            String delimiter,
            String getterName,
            String setterName
    ) {}
Repobility — the code-quality scanner for AI-generated software · https://repobility.com
Component function · java · L29-L36 (8 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/RowKeyModel.java
    record Component(
            int order,
            String fieldName,
            TypeMirror fieldType,
            String delimiter,
            String getterName,
            String setterName
    ) {}
ValidatorPass class · java · L19-L339 (321 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/ValidatorPass.java
public class ValidatorPass {

    private final Messager messager;
    private final Elements elements;
    private final Types types;

    public ValidatorPass(Messager messager, Elements elements, Types types) {
        this.messager = messager;
        this.elements = elements;
        this.types = types;
    }

    /**
     * Validate the entity and return true if valid.
     */
    public boolean validate(TypeElement typeElement) {
        boolean valid = true;

        // Must have public no-arg constructor
        if (!hasPublicNoArgConstructor(typeElement)) {
            error(typeElement, "@Table class '%s' must have a public no-arg constructor",
                    typeElement.getSimpleName());
            valid = false;
        }

        // Collect @Table annotation
        Table tableAnn = typeElement.getAnnotation(Table.class);
        if (tableAnn == null) {
            error(typeElement, "Class '%s' is missing @Table annotation", typeElement.getSimpleName());
          
ValidatorPass method · java · L25-L29 (5 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/ValidatorPass.java
    public ValidatorPass(Messager messager, Elements elements, Types types) {
        this.messager = messager;
        this.elements = elements;
        this.types = types;
    }
validate method · java · L34-L125 (92 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/ValidatorPass.java
    public boolean validate(TypeElement typeElement) {
        boolean valid = true;

        // Must have public no-arg constructor
        if (!hasPublicNoArgConstructor(typeElement)) {
            error(typeElement, "@Table class '%s' must have a public no-arg constructor",
                    typeElement.getSimpleName());
            valid = false;
        }

        // Collect @Table annotation
        Table tableAnn = typeElement.getAnnotation(Table.class);
        if (tableAnn == null) {
            error(typeElement, "Class '%s' is missing @Table annotation", typeElement.getSimpleName());
            return false;
        }

        // Validate table name
        if (tableAnn.name().isBlank()) {
            error(typeElement, "@Table name cannot be empty on '%s'", typeElement.getSimpleName());
            valid = false;
        }

        // Collect family names
        Set<String> familyNames = new HashSet<>();
        for (ColumnFamily cf : tableAnn.families()) {
            
validateColumnField method · java · L127-L160 (34 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/ValidatorPass.java
    private boolean validateColumnField(VariableElement field, Column col,
                                         Set<String> familyNames, Set<String> columnKeys) {
        boolean valid = true;

        // Check primitive type
        if (field.asType().getKind().isPrimitive()) {
            error(field, "Field '%s' must not be a primitive type. Use wrapper types instead.",
                    field.getSimpleName());
            valid = false;
        }

        // Check family exists
        if (!familyNames.contains(col.family())) {
            error(field, "Column family '%s' on field '%s' is not declared in @Table families",
                    col.family(), field.getSimpleName());
            valid = false;
        }

        // Check duplicate family:qualifier
        String key = col.family() + ":" + col.qualifier();
        if (!columnKeys.add(key)) {
            error(field, "Duplicate column mapping '%s' on field '%s'",
                    key, field.getSimpleName());
    
validateMultiVersionField method · java · L162-L195 (34 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/ValidatorPass.java
    private boolean validateMultiVersionField(VariableElement field, MultiVersion mv,
                                               Set<String> familyNames, Set<String> columnKeys) {
        boolean valid = true;

        // Check family exists
        if (!familyNames.contains(mv.family())) {
            error(field, "Column family '%s' on field '%s' is not declared in @Table families",
                    mv.family(), field.getSimpleName());
            valid = false;
        }

        // Check duplicate family:qualifier
        String key = mv.family() + ":" + mv.qualifier();
        if (!columnKeys.add(key)) {
            error(field, "Duplicate column mapping '%s' on field '%s'",
                    key, field.getSimpleName());
            valid = false;
        }

        // Must be NavigableMap<Long, T>
        if (!isNavigableMapLongValue(field.asType())) {
            error(field, "@MultiVersion field '%s' must be of type NavigableMap<Long, T>",
                    field.get
validateRowKeyComponents method · java · L197-L227 (31 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/ValidatorPass.java
    private boolean validateRowKeyComponents(TypeElement typeElement, List<VariableElement> allFields) {
        boolean valid = true;
        Map<Integer, VariableElement> orderMap = new TreeMap<>();

        for (VariableElement field : allFields) {
            RowKeyComponent rkc = field.getAnnotation(RowKeyComponent.class);
            if (rkc != null) {
                if (orderMap.containsKey(rkc.order())) {
                    error(field, "Duplicate @RowKeyComponent order %d on '%s'",
                            rkc.order(), field.getSimpleName());
                    valid = false;
                } else {
                    orderMap.put(rkc.order(), field);
                }
            }
        }

        // Check contiguous ordering starting from 0
        int expected = 0;
        for (int order : orderMap.keySet()) {
            if (order != expected) {
                error(typeElement, "@RowKeyComponent orders must be contiguous starting from 0, " +
                  
isNavigableMapLongValue method · java · L229-L249 (21 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/ValidatorPass.java
    private boolean isNavigableMapLongValue(TypeMirror type) {
        if (type.getKind() != TypeKind.DECLARED) return false;
        DeclaredType dt = (DeclaredType) type;
        Element element = dt.asElement();
        String name = ((TypeElement) element).getQualifiedName().toString();

        if (!name.equals("java.util.NavigableMap") && !name.equals("java.util.TreeMap")) {
            // Check if it's a subtype of NavigableMap
            TypeMirror navMapType = elements.getTypeElement("java.util.NavigableMap").asType();
            if (!types.isAssignable(types.erasure(type), types.erasure(navMapType))) {
                return false;
            }
        }

        List<? extends TypeMirror> typeArgs = dt.getTypeArguments();
        if (typeArgs.size() != 2) return false;

        TypeMirror keyType = typeArgs.get(0);
        TypeElement longElement = elements.getTypeElement("java.lang.Long");
        return types.isSameType(keyType, longElement.asType());
    }
Repobility · code-quality intelligence · https://repobility.com
checkAccessors method · java · L251-L289 (39 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/ValidatorPass.java
    private boolean checkAccessors(VariableElement field, TypeElement enclosing) {
        String fieldName = field.getSimpleName().toString();
        String capitalized = Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1);
        String getterName = "get" + capitalized;
        String setterName = "set" + capitalized;

        // Check for boolean getter variant
        String boolGetterName = "is" + capitalized;

        boolean hasGetter = false;
        boolean hasSetter = false;

        for (Element member : elements.getAllMembers(enclosing)) {
            if (member.getKind() != ElementKind.METHOD) continue;
            ExecutableElement method = (ExecutableElement) member;
            String methodName = method.getSimpleName().toString();

            if ((methodName.equals(getterName) || methodName.equals(boolGetterName))
                    && method.getParameters().isEmpty()) {
                hasGetter = true;
            }
            if (methodName.equa
hasPublicNoArgConstructor method · java · L291-L302 (12 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/ValidatorPass.java
    private boolean hasPublicNoArgConstructor(TypeElement typeElement) {
        for (Element enclosed : typeElement.getEnclosedElements()) {
            if (enclosed.getKind() == ElementKind.CONSTRUCTOR) {
                ExecutableElement ctor = (ExecutableElement) enclosed;
                if (ctor.getParameters().isEmpty()
                        && ctor.getModifiers().contains(Modifier.PUBLIC)) {
                    return true;
                }
            }
        }
        return false;
    }
collectFields method · java · L307-L311 (5 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/ValidatorPass.java
    List<VariableElement> collectFields(TypeElement typeElement) {
        List<VariableElement> fields = new ArrayList<>();
        collectFieldsRecursive(typeElement, fields);
        return fields;
    }
collectFieldsRecursive method · java · L313-L334 (22 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/ValidatorPass.java
    private void collectFieldsRecursive(TypeElement typeElement, List<VariableElement> fields) {
        // Walk up the hierarchy for @MappedSuperclass
        TypeMirror superclass = typeElement.getSuperclass();
        if (superclass.getKind() == TypeKind.DECLARED) {
            TypeElement superElement = (TypeElement) ((DeclaredType) superclass).asElement();
            if (superElement.getAnnotation(MappedSuperclass.class) != null) {
                collectFieldsRecursive(superElement, fields);
            }
        }

        // Add fields from this class
        for (Element enclosed : typeElement.getEnclosedElements()) {
            if (enclosed.getKind() == ElementKind.FIELD) {
                VariableElement field = (VariableElement) enclosed;
                Set<Modifier> mods = field.getModifiers();
                if (mods.contains(Modifier.STATIC) || mods.contains(Modifier.TRANSIENT)) {
                    continue;
                }
                fields.add(field);
    
error method · java · L336-L338 (3 LOC)
hbase-orm-processor/src/main/java/io/github/dordor12/hbase/orm/processor/ValidatorPass.java
    private void error(Element element, String format, Object... args) {
        messager.printMessage(Diagnostic.Kind.ERROR, String.format(format, args), element);
    }
CodecBenchmark class · java · L21-L165 (145 LOC)
hbase-orm-test/src/jmh/java/io/github/dordor12/hbase/orm/bench/CodecBenchmark.java
public class CodecBenchmark {

    private BestSuitCodec codec;
    private Map<String, String> noFlags;
    private Map<String, String> stringFlags;

    // Pre-serialized bytes for deserialization benchmarks
    private byte[] stringBytes;
    private byte[] intBytes;
    private byte[] longBytes;
    private byte[] floatBytes;
    private byte[] doubleBytes;
    private byte[] shortBytes;
    private byte[] bigDecimalBytes;
    private byte[] booleanBytes;
    private byte[] localDateTimeBytes;
    private byte[] stringFlagBytes;

    @Setup
    public void setup() {
        codec = new BestSuitCodec();
        noFlags = Collections.emptyMap();
        stringFlags = Map.of(BestSuitCodec.SERIALIZE_AS_STRING, "true");

        stringBytes = codec.serialize("hello world", noFlags);
        intBytes = codec.serialize(42, noFlags);
        longBytes = codec.serialize(123456789L, noFlags);
        floatBytes = codec.serialize(3.14f, noFlags);
        doubleBytes = codec.serialize(2.718281
setup method · java · L40-L55 (16 LOC)
hbase-orm-test/src/jmh/java/io/github/dordor12/hbase/orm/bench/CodecBenchmark.java
    public void setup() {
        codec = new BestSuitCodec();
        noFlags = Collections.emptyMap();
        stringFlags = Map.of(BestSuitCodec.SERIALIZE_AS_STRING, "true");

        stringBytes = codec.serialize("hello world", noFlags);
        intBytes = codec.serialize(42, noFlags);
        longBytes = codec.serialize(123456789L, noFlags);
        floatBytes = codec.serialize(3.14f, noFlags);
        doubleBytes = codec.serialize(2.718281828, noFlags);
        shortBytes = codec.serialize((short) 100, noFlags);
        bigDecimalBytes = codec.serialize(new BigDecimal("12345.6789"), noFlags);
        booleanBytes = codec.serialize(true, noFlags);
        localDateTimeBytes = codec.serialize(LocalDateTime.of(2024, 6, 15, 9, 30), noFlags);
        stringFlagBytes = codec.serialize(42, stringFlags);
    }
serializeString method · java · L60-L62 (3 LOC)
hbase-orm-test/src/jmh/java/io/github/dordor12/hbase/orm/bench/CodecBenchmark.java
    public byte[] serializeString() {
        return codec.serialize("hello world", noFlags);
    }
If a scraper extracted this row, it came from Repobility (https://repobility.com)
serializeInteger method · java · L65-L67 (3 LOC)
hbase-orm-test/src/jmh/java/io/github/dordor12/hbase/orm/bench/CodecBenchmark.java
    public byte[] serializeInteger() {
        return codec.serialize(42, noFlags);
    }
serializeLong method · java · L70-L72 (3 LOC)
hbase-orm-test/src/jmh/java/io/github/dordor12/hbase/orm/bench/CodecBenchmark.java
    public byte[] serializeLong() {
        return codec.serialize(123456789L, noFlags);
    }
serializeFloat method · java · L75-L77 (3 LOC)
hbase-orm-test/src/jmh/java/io/github/dordor12/hbase/orm/bench/CodecBenchmark.java
    public byte[] serializeFloat() {
        return codec.serialize(3.14f, noFlags);
    }
‹ prevpage 3 / 5next ›