From 13668a59c3ec77d779be079f41341c09b91a4416 Mon Sep 17 00:00:00 2001 From: linpeilie Date: Fri, 16 Jun 2023 21:58:39 +0800 Subject: [PATCH] @AutoMapper add imports field --- .../main/java/io/github/linpeilie/model/Car.java | 3 ++- .../linpeilie/processor/AutoMapperProcessor.java | 3 +++ .../processor/generator/AutoMapperGenerator.java | 16 +++++++++++++++- .../processor/metadata/AutoMapperMetadata.java | 10 ++++++++++ .../github/linpeilie/annotations/AutoMapper.java | 2 ++ 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/model/Car.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/model/Car.java index 43ba101..8e37150 100644 --- a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/model/Car.java +++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/model/Car.java @@ -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 { diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProcessor.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProcessor.java index 239026e..2d146df 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProcessor.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProcessor.java @@ -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 uses = transToClassNameList(autoMapper::uses); + final List importsClassNameList = transToClassNameList(autoMapper::imports); List 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()); diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/AutoMapperGenerator.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/AutoMapperGenerator.java index 7bf3eff..94783f7 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/AutoMapperGenerator.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/AutoMapperGenerator.java @@ -102,6 +102,9 @@ public class AutoMapperGenerator { List usesClassNameList = Optional.ofNullable(metadata.getUsesClassNameList()).orElse(new ArrayList<>()); + List 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(); } diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoMapperMetadata.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoMapperMetadata.java index c10c0bb..6f4d58b 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoMapperMetadata.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoMapperMetadata.java @@ -11,6 +11,8 @@ public class AutoMapperMetadata extends AbstractMapperMetadata { private List usesClassNameList; + private List importsClassNameList; + private List fieldMappingList; private List fieldReverseMappingList; @@ -47,6 +49,14 @@ public class AutoMapperMetadata extends AbstractMapperMetadata { return this; } + public List getImportsClassNameList() { + return importsClassNameList; + } + + public void setImportsClassNameList(final List importsClassNameList) { + this.importsClassNameList = importsClassNameList; + } + public List getFieldMappingList() { return fieldMappingList; } diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMapper.java b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMapper.java index 550afde..d216afd 100644 --- a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMapper.java +++ b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMapper.java @@ -16,6 +16,8 @@ public @interface AutoMapper { Class[] uses() default {}; + Class[] imports() default {}; + /** * 是否生成转换的接口,当只想生成反向接口时,可以指定当前属性为 {@code false} *