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/GoogleDepsWriter.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
> 
> 

Reply via email to