|  | <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> |