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