-
-
Notifications
You must be signed in to change notification settings - Fork 1k
Closed
Labels
Milestone
Description
Expected behavior
Working on #3120 i realized that @SubclassMapping wasn't been inherited.
So in a mapper like this i was expecting that TestMapper#mapAnother will inherit all the annotations and basically behave the same way as TestMapper#map:
@Mapper
public interface TestMapper {
TestMapper INSTANCE = Mappers.getMapper( TestMapper.class );
@SubclassMapping(source = CarDto.class, target = Car.class)
@SubclassMapping(source = BikeDto.class, target = Bike.class)
@Mapping(source = "maker", target = "vehicleManufacturingCompany")
Vehicle map(VehicleDto vehicle);
@InheritConfiguration
Vehicle mapAnother(VehicleDto vehicleDto);
}
Actual behavior
But mapstruct generate this, correctly inheriting the mapping annotation but leaving out the subclass related stuff:
public class TestMapperImpl implements TestMapper {
@Override
public Vehicle map(VehicleDto vehicle) {
if ( vehicle == null ) {
return null;
}
if (vehicle instanceof CarDto ) {
return carDtoToCar( (CarDto) vehicle );
}
else if (vehicle instanceof BikeDto ) {
return bikeDtoToBike( (BikeDto) vehicle );
}
else {
Vehicle vehicle1 = new Vehicle();
vehicle1.setVehicleManufacturingCompany( vehicle.getMaker() );
vehicle1.setName( vehicle.getName() );
return vehicle1;
}
}
@Override
public Vehicle mapAnother(VehicleDto vehicleDto) {
if ( vehicleDto == null ) {
return null;
}
Vehicle vehicle = new Vehicle();
vehicle.setVehicleManufacturingCompany( vehicleDto.getMaker() );
vehicle.setName( vehicleDto.getName() );
return vehicle;
}
protected Car carDtoToCar(CarDto carDto) {
if ( carDto == null ) {
return null;
}
Car car = new Car();
car.setVehicleManufacturingCompany( carDto.getMaker() );
car.setName( carDto.getName() );
car.setManual( carDto.isManual() );
return car;
}
protected Bike bikeDtoToBike(BikeDto bikeDto) {
if ( bikeDto == null ) {
return null;
}
Bike bike = new Bike();
bike.setVehicleManufacturingCompany( bikeDto.getMaker() );
bike.setName( bikeDto.getName() );
bike.setNumberOfGears( bikeDto.getNumberOfGears() );
return bike;
}
}
Steps to reproduce the problem
What the expected behavior says.
MapStruct Version
MapStruct 1.5.3