| <html> | 
 |   <head> | 
 |     <meta http-equiv="content-type" content="text/html; charset=UTF-8"> | 
 |     <title>Restrictions on long values with JSNI</title> | 
 |   </head> | 
 |   <body> | 
 |  | 
 |  <p>The Java <code>long</code> type cannot be represented in JavaScript | 
 |  as a numeric type, so GWT emulates it using an opaque data structure. | 
 |  This means that JSNI methods cannot process a <code>long</code> as a | 
 |  numeric type.  The compiler therefore disallows, by default, directly | 
 |  accessing a <code>long</code> from JSNI: JSNI methods cannot have | 
 |  <code>long</code> as a parameter type or a return type, and they | 
 |  cannot access a <code>long</code> using a JSNI reference.  If you | 
 |  find yourself wanting to pass a <code>long</code> into or out of a | 
 |  JSNI method, here are some options: | 
 |  | 
 |   <ol> | 
 |  | 
 |     <li> For numbers that fit into type <code>double</code>, use type | 
 |     <code>double</code> instead of type <code>long</code>. | 
 |  | 
 |     <li> For computations that require the full <code>long</code> | 
 |     semantics, rearrange the code so that the computations happen in | 
 |     Java instead of in JavaScript.  That way they will use the | 
 |     <code>long</code> emulation. | 
 |  | 
 |     <li> For values meant to be passed through unchanged to Java code, | 
 |     wrap the value in a <code>Long</code>.  There are no restrictions | 
 |     on type <code>Long</code> with JSNI methods. | 
 |  | 
 |     <li> If you are sure you know what you are doing, you can add the | 
 |     annotation | 
 |     <code>com.google.gwt.core.client.UnsafeNativeLong</code> to the | 
 |     method.  The compiler will then allow you to pass a | 
 |     <code>long</code> into and out of JavaScript.  It will still be an | 
 |     opaque data type, however, so the only thing you will be able to | 
 |     do with it will be to pass it back to Java. | 
 |  | 
 |   </ol> | 
 |   </body> | 
 | </html> |