From 01b72c92abdcb7b9121cd23b172e4ca3dd3485ba Mon Sep 17 00:00:00 2001 From: linpeilie Date: Wed, 12 Jun 2024 16:59:14 +0800 Subject: [PATCH] =?UTF-8?q?AutoMapper=20=E5=A2=9E=E5=8A=A0=20useEnums=20?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=EF=BC=8C=E6=94=AF=E6=8C=81=E6=89=8B=E5=8A=A8?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E8=BD=AC=E6=8D=A2=E6=97=B6=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E7=9A=84=E6=9E=9A=E4=B8=BE=EF=BC=8C=E8=A7=A3=E5=86=B3=E8=B7=A8?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E6=9E=9A=E4=B8=BE=E6=97=A0=E6=B3=95=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E8=BD=AC=E6=8D=A2=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../processor/AbstractAdapterMapperGenerator.java | 1 - .../linpeilie/processor/AutoMapperProcessor.java | 13 +++++++++++-- .../metadata/AbstractMapperMetadata.java | 4 ++-- .../processor/metadata/AdapterMethodMetadata.java | 1 - .../metadata/AutoEnumMapperMetadata.java | 4 ++-- .../processor/metadata/AutoMapperMetadata.java | 12 +++++++++++- .../linpeilie/processor}/utils/MapperUtils.java | 15 ++++++++++++++- .../github/linpeilie/annotations/AutoMapper.java | 5 +++++ 8 files changed, 45 insertions(+), 10 deletions(-) rename {mapstruct-plus/src/main/java/io/github/linpeilie => mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor}/utils/MapperUtils.java (57%) diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AbstractAdapterMapperGenerator.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AbstractAdapterMapperGenerator.java index 64989db..c3e9e4a 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AbstractAdapterMapperGenerator.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AbstractAdapterMapperGenerator.java @@ -12,7 +12,6 @@ import io.github.linpeilie.processor.metadata.AbstractAdapterMethodMetadata; import io.github.linpeilie.processor.metadata.AdapterMapMethodMetadata; import io.github.linpeilie.processor.metadata.AdapterMethodMetadata; import io.github.linpeilie.utils.ClassUtil; -import io.github.linpeilie.utils.MapperUtils; import java.io.IOException; import java.io.Writer; import java.util.ArrayList; 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 5a4031e..a21f605 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 @@ -29,6 +29,7 @@ import io.github.linpeilie.processor.metadata.AutoMapMapperMetadata; import io.github.linpeilie.processor.metadata.AutoMapperMetadata; import io.github.linpeilie.processor.metadata.AutoMappingMetadata; import io.github.linpeilie.processor.utils.ExceptionUtils; +import io.github.linpeilie.processor.utils.MapperUtils; import io.github.linpeilie.processor.utils.ObjectUtils; import io.github.linpeilie.utils.CollectionUtils; import io.github.linpeilie.utils.StrUtil; @@ -756,7 +757,15 @@ public class AutoMapperProcessor extends AbstractProcessor { AutoMapperMetadata metadata = initAutoMapperMetadata(source, target, autoMapperGem.cycleAvoiding().get()); - metadata.setUsesClassNameList(transToClassNameList(autoMapperGem.uses().get())); + List usesClassNameList = transToClassNameList(autoMapperGem.uses().get()); + List useEnumClassNameList = transToClassNameList(autoMapperGem.useEnums().get()).stream() + .map(enumClass -> ClassName.get(MapperUtils.getMapperPackage(enumClass.packageName()), + MapperUtils.getEnumMapperClassName(enumClass.simpleName()))) + .collect(Collectors.toList()); + + usesClassNameList.addAll(useEnumClassNameList); + + metadata.setUsesClassNameList(usesClassNameList); metadata.setImportsClassNameList(transToClassNameList(autoMapperGem.imports().get())); metadata.setFieldMappingList(autoMappingMetadataList); metadata.setFieldReverseMappingList(reverseMappingMetadataList); @@ -966,7 +975,7 @@ public class AutoMapperProcessor extends AbstractProcessor { private List transToClassNameList(List typeMirrors) { if (typeMirrors == null) { - return Collections.emptyList(); + return new ArrayList<>(); } return typeMirrors.stream() .map(this::transToClassName) diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AbstractMapperMetadata.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AbstractMapperMetadata.java index 1ef5515..b36a605 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AbstractMapperMetadata.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AbstractMapperMetadata.java @@ -2,6 +2,7 @@ package io.github.linpeilie.processor.metadata; import com.squareup.javapoet.ClassName; import io.github.linpeilie.processor.AutoMapperProperties; +import io.github.linpeilie.processor.utils.MapperUtils; import io.github.linpeilie.utils.StrUtil; public abstract class AbstractMapperMetadata { @@ -9,8 +10,7 @@ public abstract class AbstractMapperMetadata { protected ClassName sourceClassName; public String mapperPackage() { - return StrUtil.isNotEmpty(AutoMapperProperties.getMapperPackage()) - ? AutoMapperProperties.getMapperPackage() : sourceClassName.packageName(); + return MapperUtils.getMapperPackage(sourceClassName.packageName()); } public abstract String mapperName(); diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AdapterMethodMetadata.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AdapterMethodMetadata.java index 8cad3f1..6788406 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AdapterMethodMetadata.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AdapterMethodMetadata.java @@ -2,7 +2,6 @@ package io.github.linpeilie.processor.metadata; import com.squareup.javapoet.ClassName; import io.github.linpeilie.utils.ClassUtil; -import io.github.linpeilie.utils.MapperUtils; public class AdapterMethodMetadata extends AbstractAdapterMethodMetadata { diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoEnumMapperMetadata.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoEnumMapperMetadata.java index e602650..55e8df4 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoEnumMapperMetadata.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoEnumMapperMetadata.java @@ -1,7 +1,7 @@ package io.github.linpeilie.processor.metadata; -import com.squareup.javapoet.ClassName; import com.squareup.javapoet.TypeName; +import io.github.linpeilie.processor.utils.MapperUtils; public class AutoEnumMapperMetadata extends AbstractMapperMetadata { @@ -27,7 +27,7 @@ public class AutoEnumMapperMetadata extends AbstractMapperMetadata { @Override public String mapperName() { - return sourceClassName.simpleName() + "Mapper"; + return MapperUtils.getEnumMapperClassName(sourceClassName.simpleName()); } public String toEnumMethodName() { 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 56c669f..34c6532 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 @@ -1,7 +1,7 @@ package io.github.linpeilie.processor.metadata; import com.squareup.javapoet.ClassName; -import io.github.linpeilie.utils.MapperUtils; +import io.github.linpeilie.processor.utils.MapperUtils; import io.github.linpeilie.utils.StrUtil; import java.util.List; import org.mapstruct.NullValueMappingStrategy; @@ -23,6 +23,8 @@ public class AutoMapperMetadata extends AbstractMapperMetadata { private List usesClassNameList; + private List useEnumClassNameList; + private List importsClassNameList; private List fieldMappingList; @@ -107,6 +109,14 @@ public class AutoMapperMetadata extends AbstractMapperMetadata { return this; } + public List getUseEnumClassNameList() { + return useEnumClassNameList; + } + + public void setUseEnumClassNameList(List useEnumClassNameList) { + this.useEnumClassNameList = useEnumClassNameList; + } + public List getImportsClassNameList() { return importsClassNameList; } diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/utils/MapperUtils.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/MapperUtils.java similarity index 57% rename from mapstruct-plus/src/main/java/io/github/linpeilie/utils/MapperUtils.java rename to mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/MapperUtils.java index d0d4be2..eaa9e4a 100644 --- a/mapstruct-plus/src/main/java/io/github/linpeilie/utils/MapperUtils.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/MapperUtils.java @@ -1,4 +1,7 @@ -package io.github.linpeilie.utils; +package io.github.linpeilie.processor.utils; + +import io.github.linpeilie.processor.AutoMapperProperties; +import io.github.linpeilie.utils.StrUtil; public class MapperUtils { @@ -11,4 +14,14 @@ public class MapperUtils { return mapperClassName.substring(0, 1).toUpperCase() + mapperClassName.substring(1) + "Mapper"; } + public static String getEnumMapperClassName(String sourceSimpleName) { + return sourceSimpleName + "Mapper"; + } + + public static String getMapperPackage(String sourcePackage) { + return StrUtil.isNotEmpty(AutoMapperProperties.getMapperPackage()) + ? AutoMapperProperties.getMapperPackage() : sourcePackage; + + } + } 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 bafe7cc..6f0dec8 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 @@ -29,6 +29,11 @@ public @interface AutoMapper { Class[] uses() default {}; + /** + * 转换需要依赖的枚举,依赖的枚举,需要被 AutoEnumMapper 所注解 + */ + Class[] useEnums() default {}; + Class[] imports() default {}; /**