From 867be6176a5dfeceba14c6c9844efd74285362b0 Mon Sep 17 00:00:00 2001 From: linpeilie Date: Sat, 1 Jul 2023 22:19:12 +0800 Subject: [PATCH 1/3] =?UTF-8?q?AutoMapping=E3=80=81ReverseAutoMapping?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E9=85=8D=E7=BD=AE=E5=9C=A8=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E4=B8=8A=E9=9D=A2=EF=BC=9B=20AutoMapping=E3=80=81ReverseAutoMa?= =?UTF-8?q?pping=E6=94=AF=E6=8C=81defaultExpression=E5=92=8CconditionExpre?= =?UTF-8?q?ssion=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/pom.xml | 2 +- .../processor/AutoMapperProcessor.java | 19 ++++++++++++++---- .../generator/AutoMapperGenerator.java | 8 +++++++- .../metadata/AutoMappingMetadata.java | 20 +++++++++++++++++++ .../linpeilie/annotations/AutoMapping.java | 6 +++++- .../annotations/ReverseAutoMapping.java | 6 +++++- pom.xml | 2 +- 7 files changed, 54 insertions(+), 9 deletions(-) diff --git a/example/pom.xml b/example/pom.xml index cb345ee..2459512 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-SNAPSHOT 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 2c1ff6b..4529d1b 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; @@ -657,7 +658,7 @@ public class AutoMapperProcessor extends AbstractProcessor { 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; @@ -720,7 +723,7 @@ public class AutoMapperProcessor extends AbstractProcessor { } 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 db0768e..2051b74 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 b7e49d0..6ce2531 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 f864356..16d8e58 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 ad0564f..ed5c9a4 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 9f046f6..6aac506 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ - 1.3.4 + 1.3.5-SNAPSHOT 8 8 UTF-8 -- Gitee From f0fa7f6e2cf8e49c1592c6e1ba76a1d63583e730 Mon Sep 17 00:00:00 2001 From: linpeilie Date: Sun, 2 Jul 2023 20:56:56 +0800 Subject: [PATCH 2/3] =?UTF-8?q?AutoMapping=E3=80=81ReverseAutoMapping?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E9=85=8D=E7=BD=AE=E5=9C=A8=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E4=B8=8A=E9=9D=A2=EF=BC=9B=20AutoMapping=E3=80=81ReverseAutoMa?= =?UTF-8?q?pping=E6=94=AF=E6=8C=81defaultExpression=E5=92=8CconditionExpre?= =?UTF-8?q?ssion=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/github/linpeilie/processor/AutoMapperProcessor.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 4529d1b..988f9ee 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 @@ -654,7 +654,7 @@ 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()) { @@ -718,7 +718,7 @@ 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; } -- Gitee From 6bbfa1716a1a98402ecd2d983a61efc442f4a422 Mon Sep 17 00:00:00 2001 From: linpeilie Date: Sun, 2 Jul 2023 21:45:11 +0800 Subject: [PATCH 3/3] release 1.3.5 --- example/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/example/pom.xml b/example/pom.xml index 2459512..385f8d9 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -18,7 +18,7 @@ UTF-8 1.5.1.Final - 1.3.5-SNAPSHOT + 1.3.5 1.18.22 diff --git a/pom.xml b/pom.xml index 6aac506..f05ac5f 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ - 1.3.5-SNAPSHOT + 1.3.5 8 8 UTF-8 -- Gitee