dooApp/FXForm2

FxForm takes also final static fields

Closed this issue · 3 comments

Example:
@nonvisual
private static final long serialVersionUID = 1L;

Error that i got:

java.lang.NoSuchMethodException:
data.model.User.getSerialVersionUID()
at java.lang.Class.getMethod(Class.java:1665)
at com.sun.javafx.property.adapter.JavaBeanPropertyBuilderHelper.getDescriptor(JavaBeanPropertyBuilderHelper.java:146)
at javafx.beans.property.adapter.JavaBeanLongPropertyBuilder.build(JavaBeanLongPropertyBuilder.java:102)
at com.dooapp.fxform.model.impl.java.JavaBeanLongPropertyElement.buildJavaBeanProperty(JavaBeanLongPropertyElement.java:34)
at com.dooapp.fxform.model.impl.java.AbstractJavaBeanElement.computeValue(AbstractJavaBeanElement.java:47)
at com.dooapp.fxform.model.impl.AbstractSourceElement$2.computeValue(AbstractSourceElement.java:134)
at com.dooapp.fxform.model.impl.AbstractSourceElement$2.computeValue(AbstractSourceElement.java:123)
at javafx.beans.binding.ObjectBinding.get(ObjectBinding.java:152)
at javafx.beans.binding.ObjectExpression.getValue(ObjectExpression.java:47)
at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:193)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:100)
at javafx.beans.binding.ObjectBinding.invalidate(ObjectBinding.java:171)
at com.sun.javafx.binding.BindingHelperObserver.invalidated(BindingHelperObserver.java:71)
at com.sun.javafx.binding.ExpressionHelper$SingleInvalidation.fireValueChangedEvent(ExpressionHelper.java:155)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:100)
at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:123)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:130)
at javafx.beans.property.ObjectPropertyBase.bind(ObjectPropertyBase.java:191)
at com.dooapp.fxform.FXForm.createControllers(FXForm.java:231)
at com.dooapp.fxform.FXForm.access$100(FXForm.java:66)
at com.dooapp.fxform.FXForm$4.changed(FXForm.java:174)
at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:367)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:100)
at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:123)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:130)
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:163)
at com.dooapp.fxform.FXForm.setSource(FXForm.java:326)

Are there any workarounds?

Thanks.

Actually this should be just a warning and not an error (the current implementation of FXForm tries to retrieve information about some fields before applying the filters, including the @nonvisual filter). However, your form should still be working and the serialVersionUID field should not be displayed . Which version of FXForm are you using?

We'll try to improve the implementation to provide more control on field filtering at a lower level in a future version.

In the latest 2.2.6-SNAPSHOT you can customize the list of FieldFilter used by the DefaultElementProvider to provide filters at field level. There is a PrivateFinalStaticFilter implementation that reject private final static fields.
If you use the FXFormBuilder to build your form, this filter will be added by default.

Ok, thanks for fixing issue.
I was using 2.2.5 but same happens in 2.2.4.