mirror of
https://gitee.com/easii/mapstruct-plus.git
synced 2025-12-06 17:18:43 +08:00
1.1.9
- 解决编译警告问题 - 增加unmappedSourcePolicy、unmappedTargetPolicy配置,并且设置unmappedTargetPolicy默认为ignore - 增加Builder配置,并设置disableBuilder默认为true
This commit is contained in:
parent
4b2587426f
commit
4190985284
@ -18,7 +18,7 @@
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<mapstruct.version>1.5.1.Final</mapstruct.version>
|
||||
<mapstruct-plus.version>1.1.8</mapstruct-plus.version>
|
||||
<mapstruct-plus.version>1.1.9</mapstruct-plus.version>
|
||||
<lombok.version>1.18.22</lombok.version>
|
||||
</properties>
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
}
|
||||
|
||||
2
pom.xml
2
pom.xml
@ -17,7 +17,7 @@
|
||||
</modules>
|
||||
|
||||
<properties>
|
||||
<mapstruct-plus.version>1.1.8</mapstruct-plus.version>
|
||||
<mapstruct-plus.version>1.1.9</mapstruct-plus.version>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user