我正在尝试将检查器框架的 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 无法将任何注释传播到实现。
存根文件在这里也无济于事。
这里有某种处理生成代码的解决方案吗?