That’s weird. I believe the default is false (although I think the default should be true).
Try setting -remove-circulars to true. I think that should resolve it. Yes. I’m using BinaryData extensively. > On Jul 19, 2018, at 3:15 PM, Frost, Andrew <[email protected]> wrote: > > Hi > > I'm not using it on my build command line, i.e. it's set as the default > 'true'. > > If I do set it to 'false' then I get what I would expect from the code, i.e. > it ignores the interfaces and just outputs the discovered dependencies - > including the google one: > goog.addDependency('../../../org/apache/royale/utils/BinaryData.js', > ['org.apache.royale.utils.BinaryData'], ['goog.DEBUG', > 'org.apache.royale.utils.Endian']); > > But now I get hundreds of errors from the browser's JS engine e.g. > IStatesObject.js:42 Uncaught TypeError: Cannot read property > 'IEventDispatcher' of undefined > at IStatesObject.js:42 > (anonymous) @ IStatesObject.js:42 > IUIBase.js:58 Uncaught TypeError: Cannot read property 'IEventDispatcher' of > undefined > at IUIBase.js:58 > (anonymous) @ IUIBase.js:58 > IBeadModel.js:38 Uncaught TypeError: Cannot read property 'IEventDispatcher' > of undefined > at IBeadModel.js:38 > (anonymous) @ IBeadModel.js:38 > Event.js:33 Uncaught TypeError: Cannot read property 'Event' of undefined > at Event.js:33 > (anonymous) @ Event.js:33 > base.js:2484 Uncaught TypeError: Cannot read property 'prototype' of undefined > at Object.goog.inherits (base.js:2484) > at UIBase.js:44 > goog.inherits @ base.js:2484 > (anonymous) @ UIBase.js:44 > base.js:2484 Uncaught TypeError: Cannot read property 'prototype' of undefined > at Object.goog.inherits (base.js:2484) > at eventtarget.js:96 > goog.inherits @ base.js:2484 > (anonymous) @ eventtarget.js:96 > base.js:2484 Uncaught TypeError: Cannot read property 'prototype' of undefined > at Object.goog.inherits (base.js:2484) > at HTMLElementWrapper.js:28 > ..... > > > I'm assuming I'm not meant to be editing the html dependency list manually > (there's another one to change, Namespace.js has a dependency on Language.js > due to the use of "is") so unless something here is project-specific that's > changing how it's outputting/parsing the dependencies, I'm not sure what's up. > > If anyone has a project that uses BinaryData, are they able to check what > they see in the generated HTML for that one, to see whether it's just me who > doesn't have the Endian dependency added..? FWIW I've been trying both with > 0.9.2 downloaded via NPM, and the latest develop branch (well perhaps a week > out of date now..) > > thanks > > Andrew > > > -----Original Message----- > From: Harbs [mailto:[email protected]] > Sent: 19 July 2018 12:18 > To: [email protected] > Subject: [EXTERNAL] Re: Query on Royale dependency generation > > Are you using the -remove-circulars compiler option? > >> On Jul 19, 2018, at 1:05 PM, Frost, Andrew <[email protected]> wrote: >> >> Hi guys >> >> I'd been getting an error when running a simple Royale application: >> Uncaught TypeError: Cannot read property 'BIG_ENDIAN' of undefined >> at new org.apache.royale.utils.BinaryData (BinaryData.js:28) >> >> the line in question is from the constructor: >> org.apache.royale.utils.BinaryData = function(bytes) { bytes = typeof >> bytes !== 'undefined' ? bytes : null; this._endian = >> org.apache.royale.utils.Endian.BIG_ENDIAN; >> and "Endian" is undefined. >> >> After a little digging I found this is because the BinaryData object is >> being constructed without the JS engine having knowledge of the "Endian" >> class: something went wrong with the google dependency thing. In my >> generated html page I have a line: >> goog.addDependency('../../../org/apache/royale/utils/BinaryData.js', >> ['org.apache.royale.utils.BinaryData'], >> ['org.apache.royale.utils.IBinaryDataInput', >> 'org.apache.royale.utils.IBinaryDataOutput']); >> and if I change this to: >> goog.addDependency('../../../org/apache/royale/utils/BinaryData.js', >> ['org.apache.royale.utils.BinaryData'], >> ['org.apache.royale.utils.IBinaryDataInput', >> 'org.apache.royale.utils.IBinaryDataOutput', >> 'org.apache.royale.utils.Endian']); >> then it works. >> >> Looking at where this comes from in the compiler: >> compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/Go >> ogleDepsWriter.java function "generateDeps" is creating these lists, >> and if the "removeCirculars" value is true (which it is by default unless >> changed on the command-line) then we add dependencies for the interfaces >> that we implement (gd.fileInfo.impls) and any static dependencies >> (gd.fileInfo.staticDeps) but we don't add the actual dependencies that were >> calculated (gd.deps or gd.fileInfo.deps - both of these contain the Endian >> definition). >> >> So I can fix my project by updating the compiler to do: >> if (gd.fileInfo.deps != null) >> deps.addAll(gd.fileInfo.deps); and then it works: the >> generated line though is: >> goog.addDependency('../../../org/apache/royale/utils/BinaryData.js', >> ['org.apache.royale.utils.BinaryData'], ['goog.DEBUG', >> 'org.apache.royale.utils.Endian', >> 'org.apache.royale.utils.IBinaryDataInput', >> 'org.apache.royale.utils.IBinaryDataOutput']); >> >> >> So my questions: >> >> 1. where is the fault here? Am I right in thinking that there's a >> missing set of dependencies that need to also be added per the above >> snippet, or should the Endian definition be listed as a dependency in the >> gd.fileInfo.staticDeps list (which is null for me) 2. presumably we don't >> want "goog.DEBUG" to end up in the dependency list: is there a sensible way >> of getting rid of this (or should we just manually filter out anything >> starting "goog.")? >> 3. if we should be adding these dependencies separately, is there a >> preference for "gd.deps" vs "gd.fileInfo.deps"? >> >> thanks >> >> Andrew >> >> >
