It's more like, 50% of the time.
Here's what's going on:
It's currently illegal to call foo.blah() in JSNI if the variable foo is either a JSO type or interface that is implemented by some JSO type.
The error you're seeing is JsniReferenceResolver enforcing this requirement, the weird part is that it should enforce it all the time but it's only enforcing it 50% of the time.
The reason this is occurring is that depending on the order that JDT processes types we may or may not yet have collected the knowledge to know that the java.util.List interface is used on a JSO before JsniReferenceResolver performns its check.
We need to move the correctness check to some later stage, late enough that "is JSO" checks will always be accurate.
In the 50% of compiles that are succeeding for you right now you're actually vulnerable to runtime errors because it's outputting code that attempts to call the "size()" function on the prototype of the "list" parameter (and that will fail if the instance that is passed in happens to be a JsArrayListWrapper).