Support qualifier for SubclassMapping annotated methods

Use case

I want to specify which method the subclass mapping should use. For example sometimes i want to use a more complete method that maps all the fields of a subclass and sometimes i want to use a method that just map some fields. This is currently not possible because the qualifiers specified in the BeanMapping annotations is ignored.

These are my mappers:

@Mapper(uses = Dummy1Mapper.class)
public interface DummyMapper {
    @SubclassMapping(source = Dummy1.class, target = Dummy1Dto.class)
    BaseDummyDto toDto(BaseDummy baseDummy);

    @BeanMapping(qualifiedByName = "light")
    @SubclassMapping(source = Dummy1.class, target = Dummy1Dto.class)
    BaseDummyDto toDtoLight(BaseDummy baseDummy);
}

@Mapper
public interface Dummy1Mapper {
    Dummy1Dto toDto(Dummy1 dummy1);

    @Named("light")
    @Mapping(target = "descriptions", ignore = true)
    Dummy1Dto toDtoLight(Dummy1 dummy1);
}

Generated Code

These are the generated mappers, as you can see Dummy1Mapper#toDtoLight is never called:

public class DummyMapperImpl implements DummyMapper {

    private final Dummy1Mapper dummy1Mapper = Mappers.getMapper( Dummy1Mapper.class );

    @Override
    public BaseDummyDto toDto(BaseDummy baseDummy) {
        if ( baseDummy == null ) {
            return null;
        }

        if (baseDummy instanceof Dummy1) {
            return dummy1Mapper.toDto( (Dummy1) baseDummy );
        }
        else {
            BaseDummyDto baseDummyDto = new BaseDummyDto();

            baseDummyDto.setId( baseDummy.getId() );

            return baseDummyDto;
        }
    }

    @Override
    public BaseDummyDto toDtoLight(BaseDummy baseDummy) {
        if ( baseDummy == null ) {
            return null;
        }

        if (baseDummy instanceof Dummy1) {
            return dummy1Mapper.toDto( (Dummy1) baseDummy );
        }
        else {
            BaseDummyDto baseDummyDto = new BaseDummyDto();

            baseDummyDto.setId( baseDummy.getId() );

            return baseDummyDto;
        }
    }
}

public class Dummy1MapperImpl implements Dummy1Mapper {

    @Override
    public Dummy1Dto toDto(Dummy1 dummy1) {
        if ( dummy1 == null ) {
            return null;
        }

        Dummy1Dto dummy1Dto = new Dummy1Dto();

        dummy1Dto.setId( dummy1.getId() );
        List<String> list = dummy1.getDescriptions();
        if ( list != null ) {
            dummy1Dto.setDescriptions( new ArrayList<String>( list ) );
        }

        return dummy1Dto;
    }

    @Override
    public Dummy1Dto toDtoLight(Dummy1 dummy1) {
        if ( dummy1 == null ) {
            return null;
        }

        Dummy1Dto dummy1Dto = new Dummy1Dto();

        dummy1Dto.setId( dummy1.getId() );

        return dummy1Dto;
    }
}

Possible workarounds

The only workaround is to write BaseMapper#toDtoLight by hand.

MapStruct Version

MapStruct 1.5.3