From a95d1c59c3f531fc90b62c60092dd9c16bc93b66 Mon Sep 17 00:00:00 2001 From: Sjaak Derksen Date: Sat, 3 Jul 2021 15:28:10 +0200 Subject: [PATCH] #2505 deepclone generates enum mapping method (#2507) --- .../creation/MappingResolverImpl.java | 4 ++ .../ap/test/bugs/_2505/Issue2505Mapper.java | 51 +++++++++++++++++++ .../ap/test/bugs/_2505/Issue2505Test.java | 36 +++++++++++++ .../test/bugs/_2505/Issue2505MapperImpl.java | 29 +++++++++++ 4 files changed, 120 insertions(+) create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_2505/Issue2505Mapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_2505/Issue2505Test.java create mode 100644 processor/src/test/resources/fixtures/org/mapstruct/ap/test/bugs/_2505/Issue2505MapperImpl.java diff --git a/processor/src/main/java/org/mapstruct/ap/internal/processor/creation/MappingResolverImpl.java b/processor/src/main/java/org/mapstruct/ap/internal/processor/creation/MappingResolverImpl.java index d9bd4d731..b971341fc 100755 --- a/processor/src/main/java/org/mapstruct/ap/internal/processor/creation/MappingResolverImpl.java +++ b/processor/src/main/java/org/mapstruct/ap/internal/processor/creation/MappingResolverImpl.java @@ -383,6 +383,10 @@ public class MappingResolverImpl implements MappingResolver { return true; } + if ( type.isEnumType() ) { + return true; + } + if ( type.isArrayType() ) { return type.isJavaLangType() || type.getComponentType().isPrimitive(); } diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_2505/Issue2505Mapper.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2505/Issue2505Mapper.java new file mode 100644 index 000000000..525eb09fd --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2505/Issue2505Mapper.java @@ -0,0 +1,51 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.bugs._2505; + +import org.mapstruct.Mapper; +import org.mapstruct.control.DeepClone; +import org.mapstruct.factory.Mappers; + +/** + * @author Sjaak Derksen + */ +@Mapper( mappingControl = DeepClone.class ) +public interface Issue2505Mapper { + + Issue2505Mapper INSTANCE = Mappers.getMapper( Issue2505Mapper.class ); + + Customer map(CustomerDTO value); + + enum Status { + ENABLED, DISABLED, + } + + class Customer { + + private Status status; + + public Status getStatus() { + return status; + } + + public void setStatus(Status stat) { + this.status = stat; + } + } + + class CustomerDTO { + + private Status status; + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_2505/Issue2505Test.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2505/Issue2505Test.java new file mode 100644 index 000000000..b3fa6ea3c --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2505/Issue2505Test.java @@ -0,0 +1,36 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.bugs._2505; + +import org.junit.jupiter.api.extension.RegisterExtension; +import org.mapstruct.ap.testutil.IssueKey; +import org.mapstruct.ap.testutil.ProcessorTest; +import org.mapstruct.ap.testutil.WithClasses; +import org.mapstruct.ap.testutil.runner.GeneratedSource; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Sjaak derksen + */ +@IssueKey("2505") +@WithClasses( Issue2505Mapper.class ) +class Issue2505Test { + + @RegisterExtension + final GeneratedSource generatedSource = new GeneratedSource() + .addComparisonToFixtureFor( Issue2505Mapper.class ); + + @ProcessorTest + void shouldNotGenerateEnumMappingMethodForDeepClone() { + Issue2505Mapper.CustomerDTO source = new Issue2505Mapper.CustomerDTO(); + source.setStatus( Issue2505Mapper.Status.DISABLED ); + + Issue2505Mapper.Customer target = Issue2505Mapper.INSTANCE.map( source ); + + assertThat( target.getStatus() ).isEqualTo( Issue2505Mapper.Status.DISABLED ); + } +} diff --git a/processor/src/test/resources/fixtures/org/mapstruct/ap/test/bugs/_2505/Issue2505MapperImpl.java b/processor/src/test/resources/fixtures/org/mapstruct/ap/test/bugs/_2505/Issue2505MapperImpl.java new file mode 100644 index 000000000..87977b093 --- /dev/null +++ b/processor/src/test/resources/fixtures/org/mapstruct/ap/test/bugs/_2505/Issue2505MapperImpl.java @@ -0,0 +1,29 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.bugs._2505; + +import javax.annotation.Generated; + +@Generated( + value = "org.mapstruct.ap.MappingProcessor", + date = "2021-07-03T14:21:53+0200", + comments = "version: , compiler: Eclipse JDT (Batch) 3.20.0.v20191203-2131, environment: Java 1.8.0_181 (Oracle Corporation)" +) +public class Issue2505MapperImpl implements Issue2505Mapper { + + @Override + public Customer map(CustomerDTO value) { + if ( value == null ) { + return null; + } + + Customer customer = new Customer(); + + customer.setStatus( value.getStatus() ); + + return customer; + } +}