Open niloc132 opened 5 years ago
goog.global is the replacement.
self
unfortunately doesn't work in node.js environments. We added goog.global to GWT earlier so we could update the code generation. (https://github.com/gwtproject/gwt/blob/4825d47eee7505346de372a159db55b18b006a2a).
the link seems to be broken.
I would love to see a java constant added for this name such as JsType.GLOBAL
with a little comment to indicate what it does. Although then we have both JsType.GLOBAL
and JsType.GLOBAL
. Maybe we should use the unfortunate naming convention adopted by TC39 ala JsType.GLOBAL_THIS
. See https://github.com/tc39/proposal-global and https://github.com/tc39/proposal-global/blob/master/NAMING.md
ModelHelper.createGlobalJavaType always assumes that
window
is the correct name to use:However, this is only correct in a case like DomGlobal, which only makes sense in a normal window context. For classes like Global, this should instead be something like
self
, so that it works both in windows and in workers (as well as other non-browser JS contexts).My proposal would be to change this to invoke
nameAttribute("self")
, since that seems as though it should be valid in window and worker contexts alike (see [1], [2]), but perhaps there is a better, more flexible solution?[1] https://developer.mozilla.org/en-US/docs/Web/API/Window/self [2] https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope/self
In the mean time, objects in Global can't be used. Workarounds for others who find this:
Symbol
, make your own jstype to represent it, with a static function instead of a constructor to create itJSON
, make your ownJSONType
with static methods instead of instance methods@JsProperty
-annotated fields.In all of these cases, JsPackage.GLOBAL should be used as the namespace to avoid needing to reference window.