@AutoMapper add imports field

This commit is contained in:
linpeilie 2023-06-16 21:58:39 +08:00
parent eb4b8cd5b8
commit 13668a59c3
5 changed files with 32 additions and 2 deletions

View File

@ -2,9 +2,10 @@ package io.github.linpeilie.model;
import io.github.linpeilie.annotations.AutoMapper;
import io.github.linpeilie.annotations.AutoMapping;
import java.time.LocalDateTime;
import lombok.Data;
@AutoMapper(target = CarDto.class)
@AutoMapper(target = CarDto.class, imports = LocalDateTime.class)
@Data
public class Car {

View File

@ -420,6 +420,7 @@ public class AutoMapperProcessor extends AbstractProcessor {
autoMapperMetadata.getTargetClassName(), autoMapperMetadata.getSourceClassName());
reverseMapperMetadata.setConvertGenerate(autoMapperMetadata.isReverseConvertGenerate());
reverseMapperMetadata.setUsesClassNameList(autoMapperMetadata.getUsesClassNameList());
reverseMapperMetadata.setImportsClassNameList(autoMapperMetadata.getImportsClassNameList());
reverseMapperMetadata.setMapstructConfigClass(
ClassName.get(AutoMapperProperties.getConfigPackage(), AutoMapperProperties.getConfigClassName()));
if (CollectionUtil.isNotEmpty(autoMapperMetadata.getFieldReverseMappingList())) {
@ -518,6 +519,7 @@ public class AutoMapperProcessor extends AbstractProcessor {
return null;
}
List<ClassName> uses = transToClassNameList(autoMapper::uses);
final List<ClassName> importsClassNameList = transToClassNameList(autoMapper::imports);
List<AutoMappingMetadata> autoMappingMetadataList = buildFieldMappingMetadata((TypeElement) ele);
autoMappingMetadataList.removeIf(mappingMetadata -> !isTargetFieldMapping(target, mappingMetadata));
@ -527,6 +529,7 @@ public class AutoMapperProcessor extends AbstractProcessor {
AutoMapperMetadata metadata = initAutoMapperMetadata(source, target);
metadata.setUsesClassNameList(uses);
metadata.setImportsClassNameList(importsClassNameList);
metadata.setFieldMappingList(autoMappingMetadataList);
metadata.setFieldReverseMappingList(reverseMappingMetadataList);
metadata.setConvertGenerate(autoMapper.convertGenerate());

View File

@ -102,6 +102,9 @@ public class AutoMapperGenerator {
List<ClassName> usesClassNameList =
Optional.ofNullable(metadata.getUsesClassNameList()).orElse(new ArrayList<>());
List<ClassName> importsClassNameList =
Optional.ofNullable(metadata.getImportsClassNameList()).orElse(new ArrayList<>());
// config
CodeBlock configCodeBlock = CodeBlock.builder()
.add("$T.class", metadata.getMapstructConfigClass())
@ -117,10 +120,21 @@ public class AutoMapperGenerator {
}
CodeBlock usesCodeBlock = usesCodeBuilder.add("}").build();
// imports
final CodeBlock.Builder importsCodeBuilder = CodeBlock.builder().add("{");
for (int i = 0; i < importsClassNameList.size(); i++) {
importsCodeBuilder.add("$T.class", importsClassNameList.get(i));
if (i != importsClassNameList.size() - 1) {
importsCodeBuilder.add(",");
}
}
final CodeBlock importsCodeBlock = importsCodeBuilder.add("}").build();
AnnotationSpec.Builder builder =
AnnotationSpec.builder(ClassName.get(MAPSTRUCT_MAPPER_PACKAGE, MAPSTRUCT_MAPPER_CLASS_NAME))
.addMember("config", configCodeBlock)
.addMember("uses", usesCodeBlock);
.addMember("uses", usesCodeBlock)
.addMember("imports", importsCodeBlock);
return builder.build();
}

View File

@ -11,6 +11,8 @@ public class AutoMapperMetadata extends AbstractMapperMetadata {
private List<ClassName> usesClassNameList;
private List<ClassName> importsClassNameList;
private List<AutoMappingMetadata> fieldMappingList;
private List<AutoMappingMetadata> fieldReverseMappingList;
@ -47,6 +49,14 @@ public class AutoMapperMetadata extends AbstractMapperMetadata {
return this;
}
public List<ClassName> getImportsClassNameList() {
return importsClassNameList;
}
public void setImportsClassNameList(final List<ClassName> importsClassNameList) {
this.importsClassNameList = importsClassNameList;
}
public List<AutoMappingMetadata> getFieldMappingList() {
return fieldMappingList;
}

View File

@ -16,6 +16,8 @@ public @interface AutoMapper {
Class<?>[] uses() default {};
Class<?>[] imports() default {};
/**
* 是否生成转换的接口当只想生成反向接口时可以指定当前属性为 {@code false}
*