0

我正在尝试将检查器框架的 Nullness 检查器添加到我们的项目中,但是我的 MapStruct 转换器有问题。

转换器示例

假设我有一个从 User 到 UserDto 的转换器,如下所示:

@MapperConfig(componentModel = SPRING)
public interface UserToUserDtoConverter 
    extends org.springframework.core.convert.converter.Converter<User, UserDto> {
}

这会生成以下实现:

@Override
public UserDto convert(User source) {
    if ( source == null ) {
        return null;
    }

    UserDtoBuilder<?, ?> userDto = UserDto.builder();
    userDto.id(source.getId());
    
    return userDto.build();
}

问题

现在的问题是 Checker 框架抱怨return null;,因为实现在 convert 方法上方没有 @Nullable 。

另一个问题是当转换器使用此处自动装配的其他转换器时,这会导致initialization.field.uninitialized 错误。

我尝试过的事情

现在我知道我可以简单地使用 -AskipDefs 完全忽略转换器,但是我仍然希望它检查将 @Nullable 值从 User 分配给 UserDto 中的 @NonNull 值不会有问题(反之亦然,这可能会在项目中留下一个漏洞)。

我想到的另一个解决方案是在转换器接口中为这些错误代码添加 @SuppressWarning 注释,但是如果我没有弄错mapstruct-issues , mapstruct 无法将任何注释传播到实现。

存根文件在这里也无济于事。

这里有某种处理生成代码的解决方案吗?

4

0 回答 0