diff --git a/example/pom.xml b/example/pom.xml
index cb345eea1270339d5ab99e1403c172080682bb3e..385f8d982925627fcb4494961a0671d376b74f9d 100644
--- a/example/pom.xml
+++ b/example/pom.xml
@@ -18,7 +18,7 @@
UTF-8
1.5.1.Final
- 1.3.4
+ 1.3.5
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 2c1ff6b1cc54283d65dc258274439a60fd926cc7..988f9ee8eeac9ad6b66c8e11ebb89f1d48c9721e 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
@@ -2,6 +2,7 @@ package io.github.linpeilie.processor;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.exceptions.ExceptionUtil;
+import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.TypeName;
@@ -653,11 +654,11 @@ public class AutoMapperProcessor extends AbstractProcessor {
private List buildFieldReverseMappingMetadata(final TypeElement ele) {
List list = new ArrayList<>();
- if (!ele.getKind().isClass()) {
+ if (!ele.getKind().isClass() && !ele.getKind().isInterface()) {
return list;
}
for (Element field : ele.getEnclosedElements()) {
- if (field.getKind() != ElementKind.FIELD) {
+ if (field.getKind() != ElementKind.FIELD && field.getKind() != ElementKind.METHOD) {
continue;
}
ReverseAutoMapping reverseAutoMapping = field.getAnnotation(ReverseAutoMapping.class);
@@ -698,6 +699,8 @@ public class AutoMapperProcessor extends AbstractProcessor {
metadata.setDefaultValue(reverseAutoMapping.defaultValue());
metadata.setIgnore(reverseAutoMapping.ignore());
metadata.setExpression(reverseAutoMapping.expression());
+ metadata.setDefaultExpression(reverseAutoMapping.defaultExpression());
+ metadata.setConditionExpression(reverseAutoMapping.conditionExpression());
metadata.setDateFormat(reverseAutoMapping.dateFormat());
metadata.setNumberFormat(reverseAutoMapping.numberFormat());
return metadata;
@@ -715,12 +718,12 @@ public class AutoMapperProcessor extends AbstractProcessor {
private List buildFieldMappingMetadata(final TypeElement autoMapperEle) {
List list = new ArrayList<>();
- if (!autoMapperEle.getKind().isClass()) {
+ if (!autoMapperEle.getKind().isClass() && !autoMapperEle.getKind().isInterface()) {
return list;
}
for (Element ele : autoMapperEle.getEnclosedElements()) {
- if (ele.getKind() != ElementKind.FIELD) {
+ if (ele.getKind() != ElementKind.FIELD && ele.getKind() != ElementKind.METHOD) {
continue;
}
AutoMapping autoMapping = ele.getAnnotation(AutoMapping.class);
@@ -746,20 +749,28 @@ public class AutoMapperProcessor extends AbstractProcessor {
}
AutoMappingMetadata metadata = new AutoMappingMetadata();
+ String elementName = ele.getSimpleName().toString();
+
+ if (ele.getKind() == ElementKind.METHOD) {
+ elementName = ObjectUtil.defaultIfBlank(StrUtil.getGeneralField(elementName), elementName);
+ }
+
if (StrUtil.isNotEmpty(autoMapping.source())) {
metadata.setSource(autoMapping.source());
} else {
- metadata.setSource(ele.getSimpleName().toString());
+ metadata.setSource(elementName);
}
if (StrUtil.isNotEmpty(autoMapping.target())) {
metadata.setTarget(autoMapping.target());
} else {
- metadata.setTarget(ele.getSimpleName().toString());
+ metadata.setTarget(elementName);
}
metadata.setTargetClass(targetClass);
metadata.setDefaultValue(autoMapping.defaultValue());
metadata.setIgnore(autoMapping.ignore());
metadata.setExpression(autoMapping.expression());
+ metadata.setDefaultExpression(autoMapping.defaultExpression());
+ metadata.setConditionExpression(autoMapping.conditionExpression());
metadata.setDateFormat(autoMapping.dateFormat());
metadata.setNumberFormat(autoMapping.numberFormat());
return metadata;
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 db0768e2badb13b84a2b304b266e278d7af2d05c..2051b7430f9839fc651c62345d1f22e1d8ba5929 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
@@ -130,12 +130,18 @@ public class AutoMapperGenerator {
builder.addMember("defaultValue",
CodeBlock.builder().add("$S", autoMappingMetadata.getDefaultValue()).build());
}
- if (StringUtils.isNoneEmpty(autoMappingMetadata.getExpression())) {
+ if (StringUtils.isNotEmpty(autoMappingMetadata.getExpression())) {
builder.addMember("expression",
CodeBlock.builder().add("$S", autoMappingMetadata.getExpression()).build());
} else {
builder.addMember("source", CodeBlock.builder().add("$S", autoMappingMetadata.getSource()).build());
}
+ if (StringUtils.isNotEmpty(autoMappingMetadata.getDefaultExpression())) {
+ builder.addMember("defaultExpression",CodeBlock.builder().add("$S", autoMappingMetadata.getDefaultExpression()).build());
+ }
+ if (StringUtils.isNotEmpty(autoMappingMetadata.getConditionExpression())) {
+ builder.addMember("conditionExpression", CodeBlock.builder().add("$S", autoMappingMetadata.getConditionExpression()).build());
+ }
return builder.build();
}).collect(Collectors.toList());
}
diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoMappingMetadata.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoMappingMetadata.java
index b7e49d0bcae4af1dcab06c511824ed3679456a17..6ce2531922281b19af3f2a0d4bd95d27a3131e39 100644
--- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoMappingMetadata.java
+++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoMappingMetadata.java
@@ -16,6 +16,10 @@ public class AutoMappingMetadata {
private String expression = "";
+ private String defaultExpression = "";
+
+ private String conditionExpression = "";
+
private boolean ignore = false;
private String defaultValue = "";
@@ -83,4 +87,20 @@ public class AutoMappingMetadata {
public void setDefaultValue(final String defaultValue) {
this.defaultValue = defaultValue;
}
+
+ public String getDefaultExpression() {
+ return defaultExpression;
+ }
+
+ public void setDefaultExpression(final String defaultExpression) {
+ this.defaultExpression = defaultExpression;
+ }
+
+ public String getConditionExpression() {
+ return conditionExpression;
+ }
+
+ public void setConditionExpression(final String conditionExpression) {
+ this.conditionExpression = conditionExpression;
+ }
}
diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMapping.java b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMapping.java
index f86435675392d3ce53daeb6ee512cae8a8078565..16d8e5846f326f008955d9c873bf50f00b5f1f3a 100644
--- a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMapping.java
+++ b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMapping.java
@@ -6,7 +6,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-@Target(ElementType.FIELD)
+@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.CLASS)
public @interface AutoMapping {
@@ -28,6 +28,10 @@ public @interface AutoMapping {
String expression() default "";
+ String defaultExpression() default "";
+
+ String conditionExpression() default "";
+
boolean ignore() default false;
/**
diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMapping.java b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMapping.java
index ad0564f5aabf3a9a374b00c8fbe14acaa43091e2..ed5c9a459f7837ab7860b9c819c8770432164a8d 100644
--- a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMapping.java
+++ b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMapping.java
@@ -21,7 +21,7 @@ import java.lang.annotation.Target;
*
* @author linpl
*/
-@Target(ElementType.FIELD)
+@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.CLASS)
public @interface ReverseAutoMapping {
@@ -54,6 +54,10 @@ public @interface ReverseAutoMapping {
String expression() default "";
+ String defaultExpression() default "";
+
+ String conditionExpression() default "";
+
boolean ignore() default false;
/**
diff --git a/pom.xml b/pom.xml
index 9f046f697a2f7946851c0093d8cb7958d303f675..f05ac5fdabde410ae372501ca039ed0e1aa10c2f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,7 +17,7 @@
- 1.3.4
+ 1.3.5
8
8
UTF-8