FWIW, none of the apps I built to date compiled correctly without 
-remove-circulars.

I’m not sure I completely understand the issue. Will your proposed solution 
make minified apps fatter, or just the debug apps?

Can you point me to where in the ASDoc code the problem is so In can understand 
the problem better?

Harbs

> On Feb 17, 2018, at 7:40 AM, Alex Harui <[email protected]> wrote:
> 
> Hi Folks,
> 
> I've spent the last day or so trying to get ASDoc to run when minified.  I
> created a JSON to ValueObjects utility which helped a lot.  It still isn't
> completely running, but it appears that we need to stop pruning classes
> that are only used in type annotations.  This will make most apps a little
> fatter, but also require all apps to use remove-circulars.
> 
> What do folks think about that?  The compiler used to prune classes from a
> file's goog.requires list that were never instantiated or type-checked in
> that file.  So, for ASDoc, the ASDocClass ValueObject that represents the
> JSON data for the ASDoc is never instantiated by the class that consumes
> it.  The instances are created by JSON.  The ASDocClass is only mentioned
> in JSDoc to declare some variable as being of type ASDoc.  That enabled us
> to remove that class from the requires list since that ASDocClass is never
> referenced by operational code.  Removing that goog.require helped
> eliminate circular goog.require references that the closure compiler
> disallows.  That kicked HTMLElementWrapper out of the app for example.
> But it appears that by removing that goog.require, the compiler didn't
> know that the ASDocClass properties were exported and it renamed some of
> them resulting in problems in js-release.  So by leaving more
> goog.requires in the code we get better support against renaming, but we
> also bring back more circularities and now even HelloWorld would need
> -remove-circulars.
> 
> An alternative that would allow a few more apps to not need
> remove-circulars is to modify a few of our examples and classes to
> eliminate circularities.  HelloWorld only has 3.  But 2 of them are
> IParent/IChild and IStrand/IBead.  It seems "right" to have IParent
> reference IChild and vice versa.  Same for IStrand and IBead.  I'm not
> quite sure what the answer is.  Maybe IParent can reference IChild, but
> IChild does not reference its IParent.  I guess you could make an
> IParentedChild interface with the parent property and concrete children
> implement both IChild and IParentedChild.  That seems wrong and overly
> complicated.
> 
> Yet another option, which is recommended by some folks in the Closure
> Compiler community but doesn't fit well with the ActionScript language is
> to define both IChild and IParent in the same file.  I do not want to
> spend the time modifying the compiler for that.  It might be practical to
> merge the files as part of the Ant and Maven builds.  But again, that will
> take time as well.
> 
> That said, requiring remove-circulars always doesn't seem quite right
> either.
> 
> Thoughts?
> -Alex
> 
> 
> 

Reply via email to