diff --git a/example/pom.xml b/example/pom.xml
index b52f425..3f5db1e 100644
--- a/example/pom.xml
+++ b/example/pom.xml
@@ -18,7 +18,7 @@
UTF-8
1.5.1.Final
- 1.1.8
+ 1.1.9
1.18.22
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 b3e8553..07e6564 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
@@ -38,6 +38,8 @@ import java.util.stream.Collectors;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
+import javax.annotation.processing.SupportedSourceVersion;
+import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.TypeElement;
@@ -58,6 +60,7 @@ import static javax.tools.Diagnostic.Kind.ERROR;
@SupportedAnnotationTypes({AUTO_MAPPER_ANNOTATION, AUTO_MAPPERS_ANNOTATION, AUTO_MAP_MAPPER_ANNOTATION,
MAPPER_CONFIG_ANNOTATION, COMPONENT_MODEL_CONFIG_ANNOTATION})
+@SupportedSourceVersion(SourceVersion.RELEASE_17)
public class AutoMapperProcessor extends AbstractProcessor {
private static final ClassName MAPPING_DEFAULT_TARGET = ClassName.get("io.github.linpeilie", "DefaultMapping");
@@ -184,6 +187,10 @@ public class AutoMapperProcessor extends AbstractProcessor {
element) : mapperConfig.mapperPackage();
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "mapper package " + mapperPackage);
AutoMapperProperties.setMapperPackage(mapperPackage);
+ AutoMapperProperties.setUnmappedSourcePolicy(mapperConfig.unmappedSourcePolicy());
+ AutoMapperProperties.setUnmappedTargetPolicy(mapperConfig.unmappedTargetPolicy());
+ AutoMapperProperties.setBuildMethod(mapperConfig.builder().buildMethod());
+ AutoMapperProperties.setDisableBuilder(mapperConfig.builder().disableBuilder());
});
annotations.stream()
.filter(this::isComponentModelConfigAnnotation)
diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProperties.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProperties.java
index 2721cd4..8302a4b 100644
--- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProperties.java
+++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProperties.java
@@ -1,5 +1,8 @@
package io.github.linpeilie.processor;
+import org.mapstruct.Builder;
+import org.mapstruct.ReportingPolicy;
+
import static io.github.linpeilie.processor.Constants.*;
public class AutoMapperProperties {
@@ -8,6 +11,14 @@ public class AutoMapperProperties {
private static String componentModel = DEFAULT_COMPONENT_MODEL;
+ private static ReportingPolicy unmappedSourcePolicy = ReportingPolicy.IGNORE;
+
+ private static ReportingPolicy unmappedTargetPolicy = ReportingPolicy.IGNORE;
+
+ private static String buildMethod = "build";
+
+ private static boolean disableBuilder = true;
+
public static String getMapperPackage() {
return mapperPackage;
}
@@ -47,4 +58,36 @@ public class AutoMapperProperties {
public static void setComponentModel(final String componentModel) {
AutoMapperProperties.componentModel = componentModel;
}
+
+ public static ReportingPolicy getUnmappedSourcePolicy() {
+ return unmappedSourcePolicy;
+ }
+
+ public static void setUnmappedSourcePolicy(final ReportingPolicy unmappedSourcePolicy) {
+ AutoMapperProperties.unmappedSourcePolicy = unmappedSourcePolicy;
+ }
+
+ public static ReportingPolicy getUnmappedTargetPolicy() {
+ return unmappedTargetPolicy;
+ }
+
+ public static void setUnmappedTargetPolicy(final ReportingPolicy unmappedTargetPolicy) {
+ AutoMapperProperties.unmappedTargetPolicy = unmappedTargetPolicy;
+ }
+
+ public static String getBuildMethod() {
+ return buildMethod;
+ }
+
+ public static void setBuildMethod(final String buildMethod) {
+ AutoMapperProperties.buildMethod = buildMethod;
+ }
+
+ public static boolean isDisableBuilder() {
+ return disableBuilder;
+ }
+
+ public static void setDisableBuilder(final boolean disableBuilder) {
+ AutoMapperProperties.disableBuilder = disableBuilder;
+ }
}
diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/MapperConfigGenerator.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/MapperConfigGenerator.java
index ad0ad5b..8b9376b 100644
--- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/MapperConfigGenerator.java
+++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/MapperConfigGenerator.java
@@ -40,11 +40,32 @@ public class MapperConfigGenerator {
usesCodeBuilder.add("$T.class",
ClassName.get(AutoMapperProperties.getAdapterPackage(), adapterClassName));
CodeBlock usesCodeBlock = usesCodeBuilder.add("}").build();
- return AnnotationSpec.builder(ClassName.get("org.mapstruct", "MapperConfig"))
+ final AnnotationSpec.Builder builder = AnnotationSpec.builder(ClassName.get("org.mapstruct", "MapperConfig"))
.addMember("componentModel",
CodeBlock.builder().add("$S", AutoMapperProperties.getComponentModel()).build())
- .addMember("uses", usesCodeBlock)
+ .addMember("uses", usesCodeBlock);
+ // unmappedSourcePolicy
+ if (AutoMapperProperties.getUnmappedSourcePolicy() != null) {
+ CodeBlock unmappedSourcePolicyCodeBlock = CodeBlock.builder().add("$T.$L",
+ ClassName.get("org.mapstruct", "ReportingPolicy"),
+ AutoMapperProperties.getUnmappedSourcePolicy()).build();
+ builder.addMember("unmappedSourcePolicy", unmappedSourcePolicyCodeBlock);
+ }
+
+ // unmappedTargetPolicy
+ if (AutoMapperProperties.getUnmappedTargetPolicy() != null) {
+ CodeBlock unmappedTargetPolicyCodeBlock = CodeBlock.builder().add("$T.$L",
+ ClassName.get("org.mapstruct", "ReportingPolicy"),
+ AutoMapperProperties.getUnmappedTargetPolicy()).build();
+ builder.addMember("unmappedTargetPolicy", unmappedTargetPolicyCodeBlock);
+ }
+ // builder
+ CodeBlock builderCodeBlock = CodeBlock.builder()
+ .add("@$T(buildMethod = $S, disableBuilder = $L)", ClassName.get("org.mapstruct", "Builder"),
+ AutoMapperProperties.getBuildMethod(), AutoMapperProperties.isDisableBuilder())
.build();
+ builder.addMember("builder", builderCodeBlock);
+ return builder.build();
}
}
diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/MapperConfig.java b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/MapperConfig.java
index a1218ef..82e1679 100644
--- a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/MapperConfig.java
+++ b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/MapperConfig.java
@@ -4,6 +4,8 @@ import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import org.mapstruct.Builder;
+import org.mapstruct.ReportingPolicy;
/**
* 在一个类或者接口上添加该注释,作为自动生成 Mapper 的配置类。在一个模块中,只能有一个有该注释的类。
@@ -22,4 +24,22 @@ public @interface MapperConfig {
*/
String mapperPackage() default "";
+ /**
+ * 当来源类中没有对应属性时的策略,默认忽略
+ * @return {@link ReportingPolicy}
+ */
+ ReportingPolicy unmappedSourcePolicy() default ReportingPolicy.IGNORE;
+
+ /**
+ * 当来源类中没有对应属性时的策略,默认忽略
+ * @return {@link ReportingPolicy}
+ */
+ ReportingPolicy unmappedTargetPolicy() default ReportingPolicy.IGNORE;
+
+ /**
+ * 构造者模式配置,由于 mapstruct 和 lombok 和 builder 一起使用时,会丢失父类属性,这里默认改为关闭
+ * @return {@link Builder}
+ */
+ Builder builder() default @Builder(disableBuilder = true);
+
}
diff --git a/pom.xml b/pom.xml
index 5d0898e..b0b96e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,7 +17,7 @@
- 1.1.8
+ 1.1.9
17
17
UTF-8