mirror of
https://github.com/mapstruct/mapstruct.git
synced 2025-07-12 00:00:08 +08:00
#3667, #3673 MappingReference should custom MappingOption equality instead of the default only target name based one
This commit is contained in:
parent
60cd0a4420
commit
6c8a2e184b
@ -71,7 +71,37 @@ public class MappingReference {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
MappingReference that = (MappingReference) o;
|
MappingReference that = (MappingReference) o;
|
||||||
return mapping.equals( that.mapping );
|
if ( ".".equals( that.mapping.getTargetName() ) ) {
|
||||||
|
// target this will never be equal to any other target this or any other.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Objects.equals( mapping.getTargetName(), that.mapping.getTargetName() ) ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !Objects.equals( mapping.getConstant(), that.mapping.getConstant() ) ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !Objects.equals( mapping.getJavaExpression(), that.mapping.getJavaExpression() ) ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( sourceReference == null ) {
|
||||||
|
return that.sourceReference == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( that.sourceReference == null ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!Objects.equals( sourceReference.getPropertyEntries(), that.sourceReference.getPropertyEntries() ) ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* 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._3667;
|
||||||
|
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface Issue3667Mapper {
|
||||||
|
|
||||||
|
Issue3667Mapper INSTANCE = Mappers.getMapper( Issue3667Mapper.class );
|
||||||
|
|
||||||
|
@Mapping(target = "nested.value", source = "nested.nested1.value")
|
||||||
|
Target mapFirst(Source source);
|
||||||
|
|
||||||
|
@Mapping(target = "nested.value", source = "nested.nested2.value")
|
||||||
|
Target mapSecond(Source source);
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* 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._3667;
|
||||||
|
|
||||||
|
import org.mapstruct.ap.testutil.IssueKey;
|
||||||
|
import org.mapstruct.ap.testutil.ProcessorTest;
|
||||||
|
import org.mapstruct.ap.testutil.WithClasses;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
@IssueKey("3667")
|
||||||
|
@WithClasses({
|
||||||
|
Issue3667Mapper.class,
|
||||||
|
Source.class,
|
||||||
|
Target.class
|
||||||
|
})
|
||||||
|
class Issue3667Test {
|
||||||
|
|
||||||
|
@ProcessorTest
|
||||||
|
void shouldCorrectlyMapNestedProperty() {
|
||||||
|
Source source = new Source(
|
||||||
|
new Source.Nested(
|
||||||
|
new Source.NestedNested( "value1" ),
|
||||||
|
new Source.NestedNested( "value2" )
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
Target target1 = Issue3667Mapper.INSTANCE.mapFirst( source );
|
||||||
|
Target target2 = Issue3667Mapper.INSTANCE.mapSecond( source );
|
||||||
|
|
||||||
|
assertThat( target1 ).isNotNull();
|
||||||
|
assertThat( target1.getNested() ).isNotNull();
|
||||||
|
assertThat( target1.getNested().getValue() ).isEqualTo( "value1" );
|
||||||
|
|
||||||
|
assertThat( target2 ).isNotNull();
|
||||||
|
assertThat( target2.getNested() ).isNotNull();
|
||||||
|
assertThat( target2.getNested().getValue() ).isEqualTo( "value2" );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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._3667;
|
||||||
|
|
||||||
|
public class Source {
|
||||||
|
|
||||||
|
private final Nested nested;
|
||||||
|
|
||||||
|
public Source(Nested nested) {
|
||||||
|
this.nested = nested;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Nested getNested() {
|
||||||
|
return nested;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Nested {
|
||||||
|
|
||||||
|
private final NestedNested nested1;
|
||||||
|
private final NestedNested nested2;
|
||||||
|
|
||||||
|
public Nested(NestedNested nested1, NestedNested nested2) {
|
||||||
|
this.nested1 = nested1;
|
||||||
|
this.nested2 = nested2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NestedNested getNested1() {
|
||||||
|
return nested1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NestedNested getNested2() {
|
||||||
|
return nested2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class NestedNested {
|
||||||
|
|
||||||
|
private final String value;
|
||||||
|
|
||||||
|
public NestedNested(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* 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._3667;
|
||||||
|
|
||||||
|
public class Target {
|
||||||
|
|
||||||
|
private Nested nested;
|
||||||
|
|
||||||
|
public Nested getNested() {
|
||||||
|
return nested;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNested(Nested nested) {
|
||||||
|
this.nested = nested;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Nested {
|
||||||
|
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* 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._3673;
|
||||||
|
|
||||||
|
public class Animal {
|
||||||
|
|
||||||
|
private AnimalDetails details;
|
||||||
|
|
||||||
|
public AnimalDetails getDetails() {
|
||||||
|
return details;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDetails(AnimalDetails details) {
|
||||||
|
this.details = details;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum Type {
|
||||||
|
CAT,
|
||||||
|
DOG
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class AnimalDetails {
|
||||||
|
private Type type;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public Type getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(Type type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* 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._3673;
|
||||||
|
|
||||||
|
public class Cat {
|
||||||
|
|
||||||
|
private final Details details;
|
||||||
|
|
||||||
|
public Cat(Details details) {
|
||||||
|
this.details = details;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Details getDetails() {
|
||||||
|
return details;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* 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._3673;
|
||||||
|
|
||||||
|
public class Details {
|
||||||
|
|
||||||
|
private final String name;
|
||||||
|
|
||||||
|
public Details(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* 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._3673;
|
||||||
|
|
||||||
|
public class Dog {
|
||||||
|
|
||||||
|
private final Details details;
|
||||||
|
|
||||||
|
public Dog(Details details) {
|
||||||
|
this.details = details;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Details getDetails() {
|
||||||
|
return details;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* 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._3673;
|
||||||
|
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface Issue3673ConstantMapper {
|
||||||
|
|
||||||
|
Issue3673ConstantMapper INSTANCE = Mappers.getMapper( Issue3673ConstantMapper.class );
|
||||||
|
|
||||||
|
@Mapping(target = "details.name", source = "details.name")
|
||||||
|
@Mapping(target = "details.type", constant = "DOG")
|
||||||
|
Animal map(Dog dog);
|
||||||
|
|
||||||
|
@Mapping(target = "details.name", source = "details.name")
|
||||||
|
@Mapping(target = "details.type", constant = "CAT")
|
||||||
|
Animal map(Cat cat);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* 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._3673;
|
||||||
|
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface Issue3673ExpressionMapper {
|
||||||
|
|
||||||
|
Issue3673ExpressionMapper INSTANCE = Mappers.getMapper( Issue3673ExpressionMapper.class );
|
||||||
|
|
||||||
|
@Mapping(target = "details.name", source = "details.name")
|
||||||
|
@Mapping(target = "details.type", expression = "java(Animal.Type.DOG)")
|
||||||
|
Animal map(Dog dog);
|
||||||
|
|
||||||
|
@Mapping(target = "details.name", source = "details.name")
|
||||||
|
@Mapping(target = "details.type", expression = "java(Animal.Type.CAT)")
|
||||||
|
Animal map(Cat cat);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
* 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._3673;
|
||||||
|
|
||||||
|
import org.mapstruct.ap.testutil.IssueKey;
|
||||||
|
import org.mapstruct.ap.testutil.ProcessorTest;
|
||||||
|
import org.mapstruct.ap.testutil.WithClasses;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
@IssueKey("3673")
|
||||||
|
@WithClasses({
|
||||||
|
Cat.class,
|
||||||
|
Dog.class,
|
||||||
|
Details.class,
|
||||||
|
Animal.class
|
||||||
|
})
|
||||||
|
class Issue3673Test {
|
||||||
|
|
||||||
|
@ProcessorTest
|
||||||
|
@WithClasses(Issue3673ConstantMapper.class)
|
||||||
|
void shouldCorrectlyMapNestedPropertyConstant() {
|
||||||
|
|
||||||
|
Animal cat = Issue3673ConstantMapper.INSTANCE.map(
|
||||||
|
new Cat( new Details( "cat" ) )
|
||||||
|
);
|
||||||
|
|
||||||
|
Animal dog = Issue3673ConstantMapper.INSTANCE.map(
|
||||||
|
new Dog( new Details( "dog" ) )
|
||||||
|
);
|
||||||
|
|
||||||
|
assertThat( cat ).isNotNull();
|
||||||
|
assertThat( cat.getDetails() ).isNotNull();
|
||||||
|
assertThat( cat.getDetails().getName() ).isEqualTo( "cat" );
|
||||||
|
assertThat( cat.getDetails().getType() ).isEqualTo( Animal.Type.CAT );
|
||||||
|
|
||||||
|
assertThat( dog ).isNotNull();
|
||||||
|
assertThat( dog.getDetails() ).isNotNull();
|
||||||
|
assertThat( dog.getDetails().getName() ).isEqualTo( "dog" );
|
||||||
|
assertThat( dog.getDetails().getType() ).isEqualTo( Animal.Type.DOG );
|
||||||
|
}
|
||||||
|
|
||||||
|
@ProcessorTest
|
||||||
|
@WithClasses(Issue3673ExpressionMapper.class)
|
||||||
|
void shouldCorrectlyMapNestedPropertyExpression() {
|
||||||
|
|
||||||
|
Animal cat = Issue3673ExpressionMapper.INSTANCE.map(
|
||||||
|
new Cat( new Details( "cat" ) )
|
||||||
|
);
|
||||||
|
|
||||||
|
Animal dog = Issue3673ExpressionMapper.INSTANCE.map(
|
||||||
|
new Dog( new Details( "dog" ) )
|
||||||
|
);
|
||||||
|
|
||||||
|
assertThat( cat ).isNotNull();
|
||||||
|
assertThat( cat.getDetails() ).isNotNull();
|
||||||
|
assertThat( cat.getDetails().getName() ).isEqualTo( "cat" );
|
||||||
|
assertThat( cat.getDetails().getType() ).isEqualTo( Animal.Type.CAT );
|
||||||
|
|
||||||
|
assertThat( dog ).isNotNull();
|
||||||
|
assertThat( dog.getDetails() ).isNotNull();
|
||||||
|
assertThat( dog.getDetails().getName() ).isEqualTo( "dog" );
|
||||||
|
assertThat( dog.getDetails().getType() ).isEqualTo( Animal.Type.DOG );
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user