From ecc13a8f32e1cd8bad172db518a6c3057d6a2f9f Mon Sep 17 00:00:00 2001 From: Gunnar Morling Date: Tue, 25 Nov 2014 22:27:56 +0100 Subject: [PATCH] #353 Making use of non-void setters --- .../org/mapstruct/ap/util/Executables.java | 10 ++-- .../ap/test/nonvoidsetter/Actor.java | 46 ++++++++++++++++++ .../ap/test/nonvoidsetter/ActorDto.java | 43 +++++++++++++++++ .../ap/test/nonvoidsetter/ActorMapper.java | 30 ++++++++++++ .../nonvoidsetter/NonVoidSettersTest.java | 47 +++++++++++++++++++ 5 files changed, 170 insertions(+), 6 deletions(-) create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nonvoidsetter/Actor.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nonvoidsetter/ActorDto.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nonvoidsetter/ActorMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nonvoidsetter/NonVoidSettersTest.java diff --git a/processor/src/main/java/org/mapstruct/ap/util/Executables.java b/processor/src/main/java/org/mapstruct/ap/util/Executables.java index 2263aa8ec..d6a383a41 100644 --- a/processor/src/main/java/org/mapstruct/ap/util/Executables.java +++ b/processor/src/main/java/org/mapstruct/ap/util/Executables.java @@ -72,12 +72,10 @@ public class Executables { public static boolean isSetterMethod(ExecutableElement method) { String name = method.getSimpleName().toString(); - if ( isPublic( method ) && name.startsWith( "set" ) && name.length() > 3 && method.getParameters() - .size() == 1 && method.getReturnType().getKind() == TypeKind.VOID ) { - return true; - } - - return false; + return isPublic( method ) && + name.startsWith( "set" ) && + name.length() > 3 && + method.getParameters().size() == 1; } public static boolean isAdderMethod(ExecutableElement method) { diff --git a/processor/src/test/java/org/mapstruct/ap/test/nonvoidsetter/Actor.java b/processor/src/test/java/org/mapstruct/ap/test/nonvoidsetter/Actor.java new file mode 100644 index 000000000..011663e15 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/nonvoidsetter/Actor.java @@ -0,0 +1,46 @@ +/** + * Copyright 2012-2014 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.nonvoidsetter; + +public class Actor { + + private int oscars; + private String name; + + public Actor(int oscars, String name) { + this.oscars = oscars; + this.name = name; + } + + public int getOscars() { + return oscars; + } + + public void setOscars(int oscars) { + this.oscars = oscars; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/nonvoidsetter/ActorDto.java b/processor/src/test/java/org/mapstruct/ap/test/nonvoidsetter/ActorDto.java new file mode 100644 index 000000000..07865581a --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/nonvoidsetter/ActorDto.java @@ -0,0 +1,43 @@ +/** + * Copyright 2012-2014 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.nonvoidsetter; + +public class ActorDto { + + private int oscars; + private String name; + + public int getOscars() { + return oscars; + } + + public ActorDto setOscars(int oscars) { + this.oscars = oscars; + return this; + } + + public String getName() { + return name; + } + + public ActorDto setName(String name) { + this.name = name; + return this; + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/nonvoidsetter/ActorMapper.java b/processor/src/test/java/org/mapstruct/ap/test/nonvoidsetter/ActorMapper.java new file mode 100644 index 000000000..b47c78da5 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/nonvoidsetter/ActorMapper.java @@ -0,0 +1,30 @@ +/** + * Copyright 2012-2014 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.nonvoidsetter; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface ActorMapper { + + ActorMapper INSTANCE = Mappers.getMapper( ActorMapper.class ); + + ActorDto actorToActorDto(Actor actor); +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/nonvoidsetter/NonVoidSettersTest.java b/processor/src/test/java/org/mapstruct/ap/test/nonvoidsetter/NonVoidSettersTest.java new file mode 100644 index 000000000..bbd7c0771 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/nonvoidsetter/NonVoidSettersTest.java @@ -0,0 +1,47 @@ +/** + * Copyright 2012-2014 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.nonvoidsetter; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mapstruct.ap.testutil.IssueKey; +import org.mapstruct.ap.testutil.WithClasses; +import org.mapstruct.ap.testutil.runner.AnnotationProcessorTestRunner; + +import static org.fest.assertions.Assertions.assertThat; + +/** + * Test for using non-void setters (fluent style) in the target. + * + * @author Gunnar Morling + */ +@WithClasses({ Actor.class, ActorDto.class, ActorMapper.class }) +@RunWith(AnnotationProcessorTestRunner.class) +public class NonVoidSettersTest { + + @Test + @IssueKey("353") + public void shouldMapAttributeWithoutSetterInSourceType() { + ActorDto target = ActorMapper.INSTANCE.actorToActorDto( new Actor( 3, "Hickory Black" ) ); + + assertThat( target ).isNotNull(); + assertThat( target.getName() ).isEqualTo( "Hickory Black" ); + assertThat( target.getOscars() ).isEqualTo( 3 ); + } +}