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

Reply via email to