mirror of
https://gitee.com/easii/mapstruct-plus.git
synced 2025-12-07 01:28:31 +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>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<mapstruct.version>1.5.1.Final</mapstruct.version>
|
<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>
|
<lombok.version>1.18.22</lombok.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
|||||||
@ -38,6 +38,8 @@ import java.util.stream.Collectors;
|
|||||||
import javax.annotation.processing.AbstractProcessor;
|
import javax.annotation.processing.AbstractProcessor;
|
||||||
import javax.annotation.processing.RoundEnvironment;
|
import javax.annotation.processing.RoundEnvironment;
|
||||||
import javax.annotation.processing.SupportedAnnotationTypes;
|
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.Element;
|
||||||
import javax.lang.model.element.ElementKind;
|
import javax.lang.model.element.ElementKind;
|
||||||
import javax.lang.model.element.TypeElement;
|
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,
|
@SupportedAnnotationTypes({AUTO_MAPPER_ANNOTATION, AUTO_MAPPERS_ANNOTATION, AUTO_MAP_MAPPER_ANNOTATION,
|
||||||
MAPPER_CONFIG_ANNOTATION, COMPONENT_MODEL_CONFIG_ANNOTATION})
|
MAPPER_CONFIG_ANNOTATION, COMPONENT_MODEL_CONFIG_ANNOTATION})
|
||||||
|
@SupportedSourceVersion(SourceVersion.RELEASE_17)
|
||||||
public class AutoMapperProcessor extends AbstractProcessor {
|
public class AutoMapperProcessor extends AbstractProcessor {
|
||||||
|
|
||||||
private static final ClassName MAPPING_DEFAULT_TARGET = ClassName.get("io.github.linpeilie", "DefaultMapping");
|
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();
|
element) : mapperConfig.mapperPackage();
|
||||||
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "mapper package " + mapperPackage);
|
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "mapper package " + mapperPackage);
|
||||||
AutoMapperProperties.setMapperPackage(mapperPackage);
|
AutoMapperProperties.setMapperPackage(mapperPackage);
|
||||||
|
AutoMapperProperties.setUnmappedSourcePolicy(mapperConfig.unmappedSourcePolicy());
|
||||||
|
AutoMapperProperties.setUnmappedTargetPolicy(mapperConfig.unmappedTargetPolicy());
|
||||||
|
AutoMapperProperties.setBuildMethod(mapperConfig.builder().buildMethod());
|
||||||
|
AutoMapperProperties.setDisableBuilder(mapperConfig.builder().disableBuilder());
|
||||||
});
|
});
|
||||||
annotations.stream()
|
annotations.stream()
|
||||||
.filter(this::isComponentModelConfigAnnotation)
|
.filter(this::isComponentModelConfigAnnotation)
|
||||||
|
|||||||
@ -1,5 +1,8 @@
|
|||||||
package io.github.linpeilie.processor;
|
package io.github.linpeilie.processor;
|
||||||
|
|
||||||
|
import org.mapstruct.Builder;
|
||||||
|
import org.mapstruct.ReportingPolicy;
|
||||||
|
|
||||||
import static io.github.linpeilie.processor.Constants.*;
|
import static io.github.linpeilie.processor.Constants.*;
|
||||||
|
|
||||||
public class AutoMapperProperties {
|
public class AutoMapperProperties {
|
||||||
@ -8,6 +11,14 @@ public class AutoMapperProperties {
|
|||||||
|
|
||||||
private static String componentModel = DEFAULT_COMPONENT_MODEL;
|
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() {
|
public static String getMapperPackage() {
|
||||||
return mapperPackage;
|
return mapperPackage;
|
||||||
}
|
}
|
||||||
@ -47,4 +58,36 @@ public class AutoMapperProperties {
|
|||||||
public static void setComponentModel(final String componentModel) {
|
public static void setComponentModel(final String componentModel) {
|
||||||
AutoMapperProperties.componentModel = 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",
|
usesCodeBuilder.add("$T.class",
|
||||||
ClassName.get(AutoMapperProperties.getAdapterPackage(), adapterClassName));
|
ClassName.get(AutoMapperProperties.getAdapterPackage(), adapterClassName));
|
||||||
CodeBlock usesCodeBlock = usesCodeBuilder.add("}").build();
|
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",
|
.addMember("componentModel",
|
||||||
CodeBlock.builder().add("$S", AutoMapperProperties.getComponentModel()).build())
|
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();
|
.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.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
import java.lang.annotation.Target;
|
import java.lang.annotation.Target;
|
||||||
|
import org.mapstruct.Builder;
|
||||||
|
import org.mapstruct.ReportingPolicy;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 在一个类或者接口上添加该注释,作为自动生成 Mapper 的配置类。在一个模块中,只能有一个有该注释的类。
|
* 在一个类或者接口上添加该注释,作为自动生成 Mapper 的配置类。在一个模块中,只能有一个有该注释的类。
|
||||||
@ -22,4 +24,22 @@ public @interface MapperConfig {
|
|||||||
*/
|
*/
|
||||||
String mapperPackage() default "";
|
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>
|
</modules>
|
||||||
|
|
||||||
<properties>
|
<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.source>17</maven.compiler.source>
|
||||||
<maven.compiler.target>17</maven.compiler.target>
|
<maven.compiler.target>17</maven.compiler.target>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user