如何阻止lombok在Eclipse中将注释复制到getters/ssetter



我们在运行Lombok时遇到问题>1.18.18作为Eclipse代理(2022-06或v4.24.0(……它开始将JSR-303 Bean Validation约束复制到生成的setter中。我们很惊讶,因为这是不向后兼容的;注释以前没有注释的函数无疑是一个突破性的变化:/

这会混淆ApacheBVal实现(v2.0.5(,因为通常情况下不会同时注释字段和setter。实际上,我不知道jsr303规范是否允许这样做,但我猜测它是无效的,因为它不遵循DRY原则。

有一个配置密钥lombok.copyableAnnotations来控制行为,但我们似乎无法让Eclipse/Lombok关心它

config.stopBubbling = true
lombok.copyableAnnotations =

而且仍然复制注释:

// output of `javap -v -p -l -constants FileName.class`
public void setUserName(java.lang.String);
descriptor: (Ljava/lang/String;)V
flags: (0x0001) ACC_PUBLIC
RuntimeVisibleParameterAnnotations:
parameter 0:
0: #26()
javax.validation.constraints.NotNull
Code:
stack=2, locals=2, args_size=2
0: aload_0
1: aload_1
2: putfield      #66                 // Field userName:Ljava/lang/String;
5: return
LineNumberTable:
line 43: 0
LocalVariableTable:
Start  Length  Slot  Name   Signature
0       6     0  this   Lcom/xxx/xxx/xxx/xxx/xxx/xxx/LoginPage;
0       6     1 userName   Ljava/lang/String;
RuntimeVisibleTypeAnnotations:
0: #26(): METHOD_FORMAL_PARAMETER, param_index=0
javax.validation.constraints.NotNull
MethodParameters:
Name                           Flags
userName                       final

如有任何帮助,我们将不胜感激!非常感谢。

编辑

原始堆栈:

Caused by: java.lang.ClassCastException: class org.apache.bval.jsr.descriptor.ComposedD$ForProperty cannot be cast to class org.apache.bval.jsr.descriptor.ElementD (org.apache.bval.jsr.descriptor.ComposedD$ForProperty and org.apache.bval.jsr.descriptor.ElementD are in unnamed module of loader java.net.URLClassLoader @1fbc7afb)
at org.apache.bval.jsr.job.ValidateProperty$DescriptorWrapper.<init>(ValidateProperty.java:159)
at org.apache.bval.jsr.job.ValidateProperty$FindDescriptor.handleProperty(ValidateProperty.java:219)
at org.apache.bval.jsr.job.ValidateProperty$WalkGraph.handleProperty(ValidateProperty.java:312)
at org.apache.bval.jsr.util.PathNavigation$PathPosition.handleProperty(PathNavigation.java:324)
at org.apache.bval.jsr.util.PathNavigation.parse(PathNavigation.java:218)
at org.apache.bval.jsr.util.PathNavigation.navigateAndReturn(PathNavigation.java:176)
... 86 more

我们从未找到解决方案。我不认为龙目的默认行为既不安全也不有用;一些注释并不意味着同时用于字段getters/ssetter,因为注释的含义发生了变化。对于龙目,这种行为应该是选择加入,而不是选择退出。

由于我们无法让忽略列表有效地工作,我们(叹气(最终分叉了龙目并移除了这一魔法。我们修改了src/core/lombok/core/handlers/HandlerUtil.java,特别是将NONNULL_ANNOTATIONSBASE_COPYABLE_ANNOTATIONSCOPY_TO_SETTER_ANNOTATIONSCOPY_TO_BUILDER_SINGULAR_SETTER_ANNOTATIONSJACKSON_COPY_TO_BUILDER_ANNOTATIONS都设置为空集合。

这实际上有一个副作用,即修复了一些JSON和XML绑定所困扰的其他一些错误。

最新更新