Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import javax.lang.model.type.TypeMirror;
import javax.lang.model.type.TypeVariable;
import javax.lang.model.util.SimpleTypeVisitor14;
import org.javahelpers.simple.builders.core.enums.AccessModifier;
import org.javahelpers.simple.builders.processor.model.annotation.AnnotationDto;
import org.javahelpers.simple.builders.processor.model.method.MethodParameterDto;
import org.javahelpers.simple.builders.processor.model.type.GenericParameterDto;
Expand Down Expand Up @@ -80,6 +81,23 @@ public static Modifier mapRelevantModifier(Set<Modifier> modifier) {
return DEFAULT;
}

/**
* Maps an AccessModifier enum value to a javax.lang.model.element.Modifier.
*
* @param accessModifier the access modifier to map
* @return the corresponding Modifier, or null for package-private
*/
public static Modifier mapAccessModifier(AccessModifier accessModifier) {
if (accessModifier == null) {
return null;
}
return switch (accessModifier) {
case PUBLIC, DEFAULT -> Modifier.PUBLIC;
case PRIVATE -> Modifier.PRIVATE;
case PACKAGE_PRIVATE -> null; // Package-private has no explicit modifier
};
}

/**
* Mapping a Java-Class to a TypeName. This method does not expact sealed or annonymous classes.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.javahelpers.simple.builders.core.util.TrackedValue;
import org.javahelpers.simple.builders.processor.analysis.JavaLangMapper;
import org.javahelpers.simple.builders.processor.exceptions.BuilderException;
import org.javahelpers.simple.builders.processor.model.annotation.AnnotationDto;
import org.javahelpers.simple.builders.processor.model.annotation.InterfaceName;
Expand Down Expand Up @@ -79,7 +80,7 @@ public JavaCodeGenerator(ProcessingEnvironment processingEnv, ProcessingLogger l
}

/**
* Generating source code file for builder using Javapoet.
* Generates a builder class from the given builder definition.
*
* @param builderDef dto of all information to create the builder
* @throws BuilderException if there is an error in source code generation
Expand Down Expand Up @@ -120,7 +121,8 @@ private void addClassMetadata(TypeSpec.Builder classBuilder, BuilderDefinitionDt
}

// Set builder class access level
Modifier builderAccessModifier = map2Modifier(builderDef.getConfiguration().getBuilderAccess());
Modifier builderAccessModifier =
JavaLangMapper.mapAccessModifier(builderDef.getConfiguration().getBuilderAccess());
if (builderAccessModifier != null) {
classBuilder.addModifiers(builderAccessModifier);
}
Expand Down Expand Up @@ -402,7 +404,8 @@ private void generateConstructors(
TypeSpec.Builder classBuilder, BuilderDefinitionDto builderDef) {
// Get access modifiers from configuration
Modifier constructorAccessModifier =
map2Modifier(builderDef.getConfiguration().getBuilderConstructorAccess());
JavaLangMapper.mapAccessModifier(
builderDef.getConfiguration().getBuilderConstructorAccess());
ClassName dtoBaseClass = map2ClassName(builderDef.getBuildingTargetTypeName());

// Generate empty constructor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.javahelpers.simple.builders.core.enums.AccessModifier;
import org.javahelpers.simple.builders.processor.classgen.javapoet.exceptions.JavapoetMapperException;
import org.javahelpers.simple.builders.processor.model.annotation.AnnotationDto;
import org.javahelpers.simple.builders.processor.model.annotation.InterfaceName;
Expand Down Expand Up @@ -243,20 +242,6 @@ public static List<AnnotationSpec> map2AnnotationSpecs(List<AnnotationDto> annot
return annotations.stream().map(JavapoetMapper::map2AnnotationSpec).toList();
}

/**
* Maps an AccessModifier enum value to a javax.lang.model.element.Modifier.
*
* @param accessModifier the access modifier to map
* @return the corresponding Modifier
*/
public static javax.lang.model.element.Modifier map2Modifier(AccessModifier accessModifier) {
return switch (accessModifier) {
case PUBLIC, DEFAULT -> javax.lang.model.element.Modifier.PUBLIC;
case PRIVATE -> javax.lang.model.element.Modifier.PRIVATE;
case PACKAGE_PRIVATE -> null; // Package-private has no explicit modifier
};
}

/**
* Maps an InterfaceName to a JavaPoet TypeName.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@

package org.javahelpers.simple.builders.processor.generators.builder;

import com.palantir.javapoet.ClassName;
import com.palantir.javapoet.CodeBlock;
import org.javahelpers.simple.builders.processor.generators.BuilderEnhancer;
import org.javahelpers.simple.builders.processor.model.core.BuilderDefinitionDto;
import org.javahelpers.simple.builders.processor.model.type.TypeName;
Expand Down Expand Up @@ -87,31 +85,28 @@ public boolean appliesTo(

@Override
public void enhanceBuilder(BuilderDefinitionDto builderDto, ProcessingContext context) {
ClassName dtoClass =
ClassName.get(
builderDto.getBuildingTargetTypeName().getPackageName(),
builderDto.getBuildingTargetTypeName().getClassName());

CodeBlock javadoc = createClassJavadoc(dtoClass);
builderDto.setClassJavadoc(javadoc.toString());
TypeName targetType = builderDto.getBuildingTargetTypeName();
String javadoc = createClassJavadoc(targetType);
builderDto.setClassJavadoc(javadoc);
}

/**
* Creates comprehensive JavaDoc for the builder class.
*
* @param dtoClass the target DTO class
* @return CodeBlock containing the JavaDoc content
* @param targetType the target DTO type
* @return String containing the JavaDoc content
*/
private CodeBlock createClassJavadoc(ClassName dtoClass) {
return CodeBlock.of(
private String createClassJavadoc(TypeName targetType) {
String qualifiedClassName = targetType.getFullQualifiedName();
return String.format(
"""
Builder for {@code $1T}.
Builder for {@code %s}.
<p>
This builder provides a fluent API for creating instances of $1T with
This builder provides a fluent API for creating instances of %s with
method chaining and validation. Use the static {@code create()} method
to obtain a new builder instance, configure the desired properties using
the setter methods, and then call {@code build()} to create the final DTO.
""",
dtoClass);
qualifiedClassName, qualifiedClassName);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
import javax.lang.model.element.Modifier;
import org.apache.commons.lang3.StringUtils;
import org.javahelpers.simple.builders.processor.analysis.JavaLangMapper;
import org.javahelpers.simple.builders.processor.classgen.javapoet.JavapoetMapper;
import org.javahelpers.simple.builders.processor.model.core.FieldDto;
import org.javahelpers.simple.builders.processor.model.method.MethodDto;
import org.javahelpers.simple.builders.processor.model.method.MethodParameterDto;
Expand Down Expand Up @@ -96,7 +95,7 @@ public static String generateBuilderMethodName(String fieldName, ProcessingConte
* @return the Modifier for method access, or null for package-private
*/
public static Modifier getMethodAccessModifier(ProcessingContext context) {
return JavapoetMapper.map2Modifier(context.getConfiguration().getMethodAccess());
return JavaLangMapper.mapAccessModifier(context.getConfiguration().getMethodAccess());
}

/**
Expand Down
Loading