Skip to content

Commit 177e741

Browse files
author
Arne Seime
committed
mapstruct #1655 [protobuf] mapstruct fails to honour ADDER_PREFERRED when target class has 2 collections of same type.
1 parent 42fda11 commit 177e741

File tree

5 files changed

+66
-1
lines changed

5 files changed

+66
-1
lines changed

mapstruct-protobuf3/usage/src/main/java/org/mapstruct/example/mapper/UserMapper.java

+9
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@
2424
import org.mapstruct.MappingConstants;
2525
import org.mapstruct.NullValueCheckStrategy;
2626
import org.mapstruct.ValueMapping;
27+
import org.mapstruct.example.protobuf.Department;
2728
import org.mapstruct.example.protobuf.Permission;
2829
import org.mapstruct.example.protobuf.User;
30+
import org.mapstruct.example.protobuf.UserProtos.DepartmentDTO;
2931
import org.mapstruct.example.protobuf.UserProtos.PermissionDTO;
3032
import org.mapstruct.example.protobuf.UserProtos.UserDTO;
3133
import org.mapstruct.factory.Mappers;
@@ -41,14 +43,21 @@ public interface UserMapper {
4143

4244

4345
@Mapping(source = "permissions", target = "permissionsList")
46+
@Mapping(source = "mainDepartments", target = "mainDepartmentsList")
47+
@Mapping(source = "departments", target = "departmentsList")
4448
UserDTO map(User user);
4549

4650
@Mapping(source = "permissionsList", target = "permissions")
51+
@Mapping(source = "mainDepartmentsList", target = "mainDepartments")
52+
@Mapping(source = "departmentsList", target = "departments")
4753
User map(UserDTO userDTO);
4854

4955
@ValueMapping(source = "UNRECOGNIZED", target = MappingConstants.NULL)
5056
Permission map(PermissionDTO permissionDTO);
5157

5258
PermissionDTO map(Permission perm);
5359

60+
61+
Department map(DepartmentDTO departmentDTO);
62+
DepartmentDTO map(Department department);
5463
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.mapstruct.example.protobuf;
2+
3+
/**
4+
* @author Thomas Kratz
5+
*/
6+
public class Department {
7+
private String name;
8+
9+
public Department() {}
10+
11+
public Department(String name) {
12+
this.name = name;
13+
}
14+
15+
public String getName() {
16+
return name;
17+
}
18+
19+
public void setName(String name) {
20+
this.name = name;
21+
}
22+
}

mapstruct-protobuf3/usage/src/main/java/org/mapstruct/example/protobuf/User.java

+18
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ public class User {
1111
private String id;
1212
private String email;
1313
private List<Permission> permissions = new ArrayList<>();
14+
private List<Department> mainDepartments = new ArrayList<>();
15+
private List<Department> departments = new ArrayList<>();
1416

1517
public String getId() {
1618
return id;
@@ -35,4 +37,20 @@ public List<Permission> getPermissions() {
3537
public void setPermissions(List<Permission> permissions) {
3638
this.permissions = permissions;
3739
}
40+
41+
public List<Department> getDepartments() {
42+
return departments;
43+
}
44+
45+
public void setDepartments(List<Department> departments) {
46+
this.departments = departments;
47+
}
48+
49+
public List<Department> getMainDepartments() {
50+
return mainDepartments;
51+
}
52+
53+
public void setMainDepartments(List<Department> mainDepartments) {
54+
this.mainDepartments = mainDepartments;
55+
}
3856
}

mapstruct-protobuf3/usage/src/main/proto/User.proto

+8-1
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,17 @@ message UserDTO {
88
string id = 1;
99
string email = 2;
1010
repeated PermissionDTO permissions = 3;
11+
repeated DepartmentDTO main_departments = 4;
12+
repeated DepartmentDTO departments = 5;
1113
}
1214

1315
enum PermissionDTO {
1416
NONE = 0;
1517
USER = 1;
1618
ADMIN = 2;
17-
}
19+
}
20+
21+
message DepartmentDTO {
22+
string name = 1;
23+
}
24+

mapstruct-protobuf3/usage/src/test/java/org/mapstruct/example/ProtobufTest.java

+9
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.junit.Assert;
2323
import org.junit.Test;
2424
import org.mapstruct.example.mapper.UserMapper;
25+
import org.mapstruct.example.protobuf.Department;
2526
import org.mapstruct.example.protobuf.Permission;
2627
import org.mapstruct.example.protobuf.User;
2728
import org.mapstruct.example.protobuf.UserProtos.UserDTO;
@@ -39,6 +40,8 @@ public void test() throws InvalidProtocolBufferException {
3940
user.setId("");
4041
user.setEmail("test");
4142
user.getPermissions().add(Permission.ADMIN);
43+
user.getMainDepartments().add(new Department("SALES"));
44+
user.getDepartments().add(new Department("AFTER_MARKET"));
4245

4346
UserDTO dto = UserMapper.INSTANCE.map(user);
4447
UserDTO deserialized = UserDTO.parseFrom(dto.toByteArray());
@@ -47,6 +50,12 @@ public void test() throws InvalidProtocolBufferException {
4750
Assert.assertEquals("", back.getId());
4851
Assert.assertEquals("test", back.getEmail());
4952
Assert.assertTrue(back.getPermissions().contains(Permission.ADMIN));
53+
54+
Assert.assertEquals(1,back.getMainDepartments().size());
55+
Assert.assertEquals("SALES",back.getMainDepartments().get(0).getName());
56+
57+
Assert.assertEquals(1,back.getDepartments().size());
58+
Assert.assertEquals("AFTER_MARKET",back.getDepartments().get(0).getName());
5059
}
5160

5261

0 commit comments

Comments
 (0)