diff --git a/processor/src/main/java/org/mapstruct/ap/model/NestedPropertyMappingMethod.java b/processor/src/main/java/org/mapstruct/ap/model/NestedPropertyMappingMethod.java index 29f1a5b7b..f627e978d 100644 --- a/processor/src/main/java/org/mapstruct/ap/model/NestedPropertyMappingMethod.java +++ b/processor/src/main/java/org/mapstruct/ap/model/NestedPropertyMappingMethod.java @@ -59,9 +59,14 @@ public class NestedPropertyMappingMethod extends MappingMethod { public NestedPropertyMappingMethod build() { List existingVariableNames = new ArrayList(); + for ( Parameter parameter : method.getSourceParameters() ) { + existingVariableNames.add( parameter.getName() ); + } List safePropertyEntries = new ArrayList(); for ( PropertyEntry propertyEntry : propertyEntries ) { - safePropertyEntries.add( new SafePropertyEntry( propertyEntry, existingVariableNames ) ); + String safeName = Strings.getSaveVariableName( propertyEntry.getName(), existingVariableNames); + safePropertyEntries.add( new SafePropertyEntry( propertyEntry, safeName ) ); + existingVariableNames.add( safeName ); } return new NestedPropertyMappingMethod( method, safePropertyEntries, existingVariableNames ); } @@ -144,16 +149,16 @@ public class NestedPropertyMappingMethod extends MappingMethod { public static class SafePropertyEntry extends PropertyEntry { - private final List existingVariableNames; + private final String safeName; - public SafePropertyEntry( PropertyEntry entry, List existingVariableNames ) { + public SafePropertyEntry( PropertyEntry entry, String safeName ) { super( entry.getName(), entry.getAccessor(), entry.getType() ); - this.existingVariableNames = existingVariableNames; + this.safeName = safeName; } @Override public String getName() { - return Strings.getSaveVariableName( super.getName(), existingVariableNames ); + return safeName; } } diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/Branch.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/Branch.java new file mode 100644 index 000000000..2c30b7b0c --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/Branch.java @@ -0,0 +1,37 @@ +/** + * 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.bugs._373; + +/** + * + * @author Sjaak Derksen + */ +public class Branch { + + private BranchLocation branchLocation; + + public BranchLocation getBranchLocation() { + return branchLocation; + } + + public void setBranchLocation(BranchLocation branchLocation) { + this.branchLocation = branchLocation; + } + +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/BranchLocation.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/BranchLocation.java new file mode 100644 index 000000000..b9e9bbcfd --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/BranchLocation.java @@ -0,0 +1,37 @@ +/** + * 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.bugs._373; + +/** + * + * @author Sjaak Derksen + */ +public class BranchLocation { + + private Country country; + + public Country getCountry() { + return country; + } + + public void setCountry(Country country) { + this.country = country; + } + +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/Country.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/Country.java new file mode 100644 index 000000000..9c86932cb --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/Country.java @@ -0,0 +1,27 @@ +/** + * 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.bugs._373; + +/** + * + * @author Sjaak Derksen + */ +public class Country { + +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/Issue373Mapper.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/Issue373Mapper.java new file mode 100644 index 000000000..abcfea1fc --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/Issue373Mapper.java @@ -0,0 +1,34 @@ +/** + * 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.bugs._373; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +/** + * + * @author Sjaak Derksen + */ +@Mapper +public interface Issue373Mapper { + + @Mapping(target = "countryReference", source = "branchLocation.country") + ResultDto toResultDto(Branch entity); + +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/Issue373Test.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/Issue373Test.java new file mode 100644 index 000000000..0f9e4533e --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/Issue373Test.java @@ -0,0 +1,40 @@ +/** + * 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.bugs._373; + +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; + +/** + * Reproducer for https://github.com/mapstruct/mapstruct/issues/373. + * + * @author Sjaak Derksen + */ +@IssueKey( "373" ) +@RunWith(AnnotationProcessorTestRunner.class) +public class Issue373Test { + + @Test + @WithClasses( { Issue373Mapper.class, Branch.class, BranchLocation.class, Country.class, ResultDto.class } ) + public void shouldForgeCorrectEntityBranchLocationCountry() { + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/ResultDto.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/ResultDto.java new file mode 100644 index 000000000..a0124e909 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_373/ResultDto.java @@ -0,0 +1,37 @@ +/** + * 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.bugs._373; + +/** + * + * @author Sjaak Derksen + */ +public class ResultDto { + + private Country countryReference; + + public Country getCountryReference() { + return countryReference; + } + + public void setCountryReference(Country countryReference) { + this.countryReference = countryReference; + } + +}