Wednesday, July 5, 2017

Type Corruption migrating from GWT 2.6.1 => 2.7.0

We're seeing an issue in GWT 2.7.0 where if a Java Object is passed to a JS method that's wrapped with $entry(), then the type information is stripped off. 

So for example, if a LinkedMap instance is created, and passed through an API wrapped with $entry(), it's typeMarker$ attribute will be changed from a known function to a copy of that function, so that hasTypeMarker() returns false, and thus isJavaScriptObject() returns true - but ti's not a JavaScriptObject, it's a LinkedMap!

function isJavaScriptObject_0_g$(src_0_g$){
  $clinit_Cast_0_g$();
  return !isJavaString_0_g$(src_0_g$) && !hasTypeMarker_0_g$(src_0_g$);
}

function hasTypeMarker_0_g$(o_0_g$){
  $clinit_Util_0_g$();
  return o_0_g$.typeMarker$ === typeMarkerFn_0_g$;
}

This worked as expected in GWT 2.6.1, but obviously not in GWT 2.7.0.  In the release notes for GWT 2.8.0 (RC1) here, I see this item:

"Fix instanceof for primitives & string."

but I'm not exactly sure what that is - it sounds like it may be related.  I took a look at closed issues on Github for GWT, but I wasn't able to isolate any issue corresponding to that, or matching the problem I described.



Anyone know what might be causing the issue above?


--
You received this message because you are subscribed to the Google Groups "GWT Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscribe@googlegroups.com.
To post to this group, send email to google-web-toolkit@googlegroups.com.
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment