From 6291631af7ebb97777ef1c1b3188540b76f4eeb7 Mon Sep 17 00:00:00 2001 From: sjaakd Date: Sun, 18 Mar 2018 13:12:14 +0100 Subject: [PATCH] #782 Adding negative test for @MappingTarget with immutable classes --- .../processor/MethodRetrievalProcessor.java | 5 ++++ .../mapstruct/ap/internal/util/Message.java | 1 + .../abstractBuilder/AbstractBuilderTest.java | 1 - .../AbstractImmutableProduct.java | 2 +- .../AbstractProductBuilder.java | 2 +- .../abstractBuilder/ImmutableProduct.java | 1 - .../test/builder/abstractBuilder/Product.java | 25 ------------------- .../simple/BuilderInfoTargetTest.java | 17 +++++++++++++ ...java => ErroneousSimpleBuilderMapper.java} | 5 ++-- 9 files changed, 28 insertions(+), 31 deletions(-) delete mode 100644 processor/src/test/java/org/mapstruct/ap/test/builder/abstractBuilder/Product.java rename processor/src/test/java/org/mapstruct/ap/test/builder/mappingTarget/simple/{InvalidSimpleBuilderMapper.java => ErroneousSimpleBuilderMapper.java} (83%) diff --git a/processor/src/main/java/org/mapstruct/ap/internal/processor/MethodRetrievalProcessor.java b/processor/src/main/java/org/mapstruct/ap/internal/processor/MethodRetrievalProcessor.java index 19e3d538f..6dfed43c5 100644 --- a/processor/src/main/java/org/mapstruct/ap/internal/processor/MethodRetrievalProcessor.java +++ b/processor/src/main/java/org/mapstruct/ap/internal/processor/MethodRetrievalProcessor.java @@ -403,6 +403,11 @@ public class MethodRetrievalProcessor implements ModelElementProcessor { +public abstract class AbstractProductBuilder { protected String name; diff --git a/processor/src/test/java/org/mapstruct/ap/test/builder/abstractBuilder/ImmutableProduct.java b/processor/src/test/java/org/mapstruct/ap/test/builder/abstractBuilder/ImmutableProduct.java index 9745673ec..77aeed710 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/builder/abstractBuilder/ImmutableProduct.java +++ b/processor/src/test/java/org/mapstruct/ap/test/builder/abstractBuilder/ImmutableProduct.java @@ -31,7 +31,6 @@ public class ImmutableProduct extends AbstractImmutableProduct { return new ImmutableProductBuilder(); } - @Override public Integer getPrice() { return price; } diff --git a/processor/src/test/java/org/mapstruct/ap/test/builder/abstractBuilder/Product.java b/processor/src/test/java/org/mapstruct/ap/test/builder/abstractBuilder/Product.java deleted file mode 100644 index b8b819740..000000000 --- a/processor/src/test/java/org/mapstruct/ap/test/builder/abstractBuilder/Product.java +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright 2012-2017 Gunnar Morling (http://www.gunnarmorling.de/) - * and/or other contributors as indicated by the @authors tag. See the - * copyright.txt file in the distribution for a full listing of all - * contributors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.mapstruct.ap.test.builder.abstractBuilder; - -public interface Product { - String getName(); - - Integer getPrice(); -} diff --git a/processor/src/test/java/org/mapstruct/ap/test/builder/mappingTarget/simple/BuilderInfoTargetTest.java b/processor/src/test/java/org/mapstruct/ap/test/builder/mappingTarget/simple/BuilderInfoTargetTest.java index 83976f1a4..fa8c7d9c8 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/builder/mappingTarget/simple/BuilderInfoTargetTest.java +++ b/processor/src/test/java/org/mapstruct/ap/test/builder/mappingTarget/simple/BuilderInfoTargetTest.java @@ -26,6 +26,9 @@ import org.mapstruct.ap.testutil.runner.AnnotationProcessorTestRunner; import org.mapstruct.ap.testutil.runner.GeneratedSource; import static org.assertj.core.api.Assertions.assertThat; +import org.mapstruct.ap.testutil.compilation.annotation.CompilationResult; +import org.mapstruct.ap.testutil.compilation.annotation.Diagnostic; +import org.mapstruct.ap.testutil.compilation.annotation.ExpectedCompilationOutcome; @WithClasses({ SimpleMutableSource.class, @@ -50,4 +53,18 @@ public class BuilderInfoTargetTest { assertThat( targetObject.getAge() ).isEqualTo( 3 ); assertThat( targetObject.getName() ).isEqualTo( "Bob" ); } + + @WithClasses(ErroneousSimpleBuilderMapper.class) + @Test + @ExpectedCompilationOutcome(value = CompilationResult.FAILED, + diagnostics = { + @Diagnostic(type = ErroneousSimpleBuilderMapper.class, + kind = javax.tools.Diagnostic.Kind.ERROR, + line = 26, + messageRegExp = "^Can't generate mapping method when @MappingTarget is supposed to be immutable " + + "\\(has a builder\\)\\.$") + }) + public void shouldFailCannotModifyImmutable() { + + } } diff --git a/processor/src/test/java/org/mapstruct/ap/test/builder/mappingTarget/simple/InvalidSimpleBuilderMapper.java b/processor/src/test/java/org/mapstruct/ap/test/builder/mappingTarget/simple/ErroneousSimpleBuilderMapper.java similarity index 83% rename from processor/src/test/java/org/mapstruct/ap/test/builder/mappingTarget/simple/InvalidSimpleBuilderMapper.java rename to processor/src/test/java/org/mapstruct/ap/test/builder/mappingTarget/simple/ErroneousSimpleBuilderMapper.java index 519fb64de..9776c0ecf 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/builder/mappingTarget/simple/InvalidSimpleBuilderMapper.java +++ b/processor/src/test/java/org/mapstruct/ap/test/builder/mappingTarget/simple/ErroneousSimpleBuilderMapper.java @@ -19,8 +19,9 @@ package org.mapstruct.ap.test.builder.mappingTarget.simple; import org.mapstruct.Mapper; +import org.mapstruct.MappingTarget; @Mapper -public interface InvalidSimpleBuilderMapper { - SimpleImmutableTarget toImmutable(SimpleMutableSource source); +public interface ErroneousSimpleBuilderMapper { + void toImmutable(SimpleMutableSource source, @MappingTarget SimpleImmutableTarget target); }