Troubleshooting

Compilation error cannot be resolved to a type in FFI class

A compilation error can be raised when the classpath contains unexpected classes, for example:

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
        ArrayComparisonFailure cannot be resolved to a type
        ArrayComparisonFailure cannot be resolved to a type

        at java.lang.Throwable.fillInStackTrace(Throwable.java:82)
        at java.lang.Throwable.<init>(Throwable.java:37)
        at java.lang.Error.<init>(Error.java:18)
        at com.microej.js.JsFfi.ffi_toString_0(JsFfi.java:54)
        at com.microej.js.JsCode$1$1.invoke(JsCode.java:50)

As described in the FFI section, in order to call Java methods from JavaScript code, all the methods with the given names are searched in the classpath. Since the classpath can contain test dependencies which are not available at compile time, the generated FFI can contain classes from these dependencies and therefore fail to compile. The following classes are excluded by default:

  • ej.junit.*

  • org.junit.*

  • junit.*

  • org.hamcrest.*

  • java.lang.String

  • java.lang.Number

This list can be changed by setting the system property js.ffi.excludes.classes to a comma-separated list of FQN patterns. For example:

js.ffi.excludes.classes=ej.junit.*,org.junit.*,junit.*,org.hamcrest.*,java.lang.String,java.lang.Number,com.mycompany.test.*

Warning

Defining this property overwrites the default value, so do not forget to keep the default excluded classes (unless you know what you are doing).