Please let me know if this compiler change breaks anything in your apps. I'll get any issues fixed ASAP.
-- Josh Tynjala Bowler Hat LLC <https://bowlerhat.dev> On Wed, Sep 2, 2020 at 9:54 AM <[email protected]> wrote: > This is an automated email from the ASF dual-hosted git repository. > > joshtynjala pushed a commit to branch develop > in repository https://gitbox.apache.org/repos/asf/royale-compiler.git > > > The following commit(s) were added to refs/heads/develop by this push: > new 3b7cf0d compiler-jx: dynamically export variables in release > builds instead of using export annotations > 3b7cf0d is described below > > commit 3b7cf0d3b2282a32dcaf19314760e56566be4174 > Author: Josh Tynjala <[email protected]> > AuthorDate: Wed Sep 2 09:54:00 2020 -0700 > > compiler-jx: dynamically export variables in release builds instead of > using export annotations > > This is a continuation of previous work that dynamically exported > types and methods. Still need to do getters/setters. > --- > .../javascript/jscomp/GenerateRoyaleExports.java | 126 > +++++++++++++++++++++ > .../javascript/jscomp/RoyaleClosurePassConfig.java | 32 ++---- > .../codegen/js/royale/JSRoyaleDocEmitter.java | 22 +--- > .../apache/royale/compiler/utils/ClosureUtils.java | 7 +- > .../codegen/js/royale/TestRoyaleClass.java | 21 ++-- > .../codegen/js/royale/TestRoyaleEmitter.java | 93 ++++++++------- > .../codegen/js/royale/TestRoyaleFieldMembers.java | 34 +++--- > .../codegen/js/royale/TestRoyalePackage.java | 2 - > .../mxml/royale/TestRoyaleMXMLApplication.java | 2 - > .../codegen/mxml/royale/TestRoyaleMXMLScript.java | 7 -- > .../royale/projects/internal/MainClass_result.js | 1 - > 11 files changed, 216 insertions(+), 131 deletions(-) > > diff --git > a/compiler-jx/src/main/java/com/google/javascript/jscomp/GenerateRoyaleExports.java > b/compiler-jx/src/main/java/com/google/javascript/jscomp/GenerateRoyaleExports.java > new file mode 100644 > index 0000000..16997ac > --- /dev/null > +++ > b/compiler-jx/src/main/java/com/google/javascript/jscomp/GenerateRoyaleExports.java > @@ -0,0 +1,126 @@ > +/* > + * > + * Licensed to the Apache Software Foundation (ASF) under one or more > + * contributor license agreements. See the NOTICE file distributed with > + * this work for additional information regarding copyright ownership. > + * The ASF licenses this file to You under the Apache License, Version > 2.0 > + * (the "License"); you may not use this file except in compliance with > + * the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, software > + * distributed under the License is distributed on an "AS IS" BASIS, > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > implied. > + * See the License for the specific language governing permissions and > + * limitations under the License. > + * > + */ > +package com.google.javascript.jscomp; > + > +import java.util.Set; > + > +import > com.google.javascript.jscomp.NodeTraversal.AbstractPostOrderCallback; > +import com.google.javascript.rhino.IR; > +import com.google.javascript.rhino.JSDocInfo; > +import com.google.javascript.rhino.Node; > +import com.google.javascript.rhino.Token; > + > +public class GenerateRoyaleExports extends AbstractPostOrderCallback { > + > + private final AbstractCompiler compiler; > + private Set<String> extraSymbolNamesToExport; > + > + public GenerateRoyaleExports(AbstractCompiler compiler) { > + this.compiler = compiler; > + } > + > + public void process(Node externs, Node root, Set<String> > extraSymbolNamesToExport) { > + this.extraSymbolNamesToExport = extraSymbolNamesToExport; > + NodeTraversal.traverse(compiler, root, this); > + } > + > + @Override > + public void visit(NodeTraversal t, Node n, Node parent) { > + if(n.getToken() != Token.ASSIGN) { > + return; > + } > + JSDocInfo docInfo = n.getJSDocInfo(); > + if(docInfo == null) { > + return; > + } > + Node firstChild = n.getFirstChild(); > + if (!firstChild.isQualifiedName()) { > + return; > + } > + String qualifiedName = firstChild.getQualifiedName(); > + if(!extraSymbolNamesToExport.contains(qualifiedName)) { > + //System.err.println("~~~ NO MATCH! " + > qualifiedName); > + return; > + } > + > + Node parentNode = n.getParent(); > + > + if(parentNode == null) { > + return; > + } > + > + Node gpNode = parentNode.getParent(); > + > + if(gpNode == null || !gpNode.isScript()) { > + return; > + } > + //System.err.println("*** MATCH! " + qualifiedName); > + > + addExportSymbolCall(qualifiedName, n); > + } > + > + private void addExportSymbolCall(String export, Node context) { > + Node call = > + IR.call( > + NodeUtil.newQName( > + compiler, > compiler.getCodingConvention().getExportSymbolFunction(), > + context, export), > + IR.string(export), > + NodeUtil.newQName( > + compiler, export, > + context, export)); > + > + Node expression = > IR.exprResult(call).useSourceInfoIfMissingFromForTree(context); > + annotate(expression); > + > + addStatement(context, expression); > + } > + > + private void addStatement(Node context, Node stmt) { > + CodingConvention convention = compiler.getCodingConvention(); > + > + Node n = context; > + Node exprRoot = n; > + while (!NodeUtil.isStatementBlock(exprRoot.getParent())) { > + exprRoot = exprRoot.getParent(); > + } > + > + // It's important that any class-building calls (goog.inherits) > + // come right after the class definition, so move the export > after that. > + while (true) { > + Node next = exprRoot.getNext(); > + if (next != null > + && NodeUtil.isExprCall(next) > + && > convention.getClassesDefinedByCall(next.getFirstChild()) != null) { > + exprRoot = next; > + } else { > + break; > + } > + } > + > + Node block = exprRoot.getParent(); > + block.addChildAfter(stmt, exprRoot); > + compiler.reportChangeToEnclosingScope(stmt); > + } > + > + private void annotate(Node node) { > + NodeTraversal.traverse( > + compiler, node, new PrepareAst.PrepareAnnotations()); > + } > +} > \ No newline at end of file > diff --git > a/compiler-jx/src/main/java/com/google/javascript/jscomp/RoyaleClosurePassConfig.java > b/compiler-jx/src/main/java/com/google/javascript/jscomp/RoyaleClosurePassConfig.java > index 92f3cc8..c332a81 100644 > --- > a/compiler-jx/src/main/java/com/google/javascript/jscomp/RoyaleClosurePassConfig.java > +++ > b/compiler-jx/src/main/java/com/google/javascript/jscomp/RoyaleClosurePassConfig.java > @@ -344,6 +344,10 @@ public final class RoyaleClosurePassConfig extends > PassConfig { > checks.add(angularPass); > } > > + if (extraSymbolNamesToExport != null) { > + checks.add(generateRoyaleExports); > + } > + > if (!options.generateExportsAfterTypeChecking && > options.generateExports) { > checks.add(generateExports); > } > @@ -362,10 +366,6 @@ public final class RoyaleClosurePassConfig extends > PassConfig { > checks.add(polymerPass); > } > > - if (extraSymbolNamesToExport != null) { > - checks.add(extraSymbolsPass); > - } > - > if (options.checkSuspiciousCode > || options.enables(DiagnosticGroups.GLOBAL_THIS) > || options.enables(DiagnosticGroups.DEBUGGER_STATEMENT_PRESENT)) { > @@ -1268,31 +1268,15 @@ public final class RoyaleClosurePassConfig extends > PassConfig { > } > }; > > - private final PassFactory extraSymbolsPass = > - new PassFactory("extra-symbols-to-export", true) { > + private final PassFactory generateRoyaleExports = > + new PassFactory("generate-royale-exports", true) { > @Override > protected CompilerPass create(final AbstractCompiler compiler) { > + final GenerateRoyaleExports pass = new > GenerateRoyaleExports(compiler); > return new CompilerPass() { > @Override > public void process(Node externs, Node root) { > - Node scriptNode = compiler.getScriptNode(sourceFileName); > - for(String nameToExport : extraSymbolNamesToExport) > - { > - Node exportCallTarget = NodeUtil.newQName(compiler, > - > compiler.getCodingConvention().getExportSymbolFunction(), scriptNode, > nameToExport); > - Node call = IR.call(exportCallTarget); > - if (exportCallTarget.isName()) { > - call.putBooleanProp(Node.FREE_CALL, true); > - } > - call.addChildToBack(IR.string(nameToExport)); > - call.addChildToBack(NodeUtil.newQName(compiler, > - nameToExport, scriptNode, nameToExport)); > - > - Node expression = IR.exprResult(call); > - > - scriptNode.addChildToBack(expression); > - compiler.reportChangeToEnclosingScope(expression); > - } > + pass.process(externs, root, extraSymbolNamesToExport); > } > }; > } > diff --git > a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleDocEmitter.java > b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleDocEmitter.java > index 6e403d3..05d27c2 100644 > --- > a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleDocEmitter.java > +++ > b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleDocEmitter.java > @@ -594,23 +594,11 @@ public class JSRoyaleDocEmitter extends > JSGoogDocEmitter > public void emitFieldDoc(IVariableNode node, IDefinition def, > ICompilerProject project) > { > RoyaleJSProject fjp = (RoyaleJSProject)project; > - boolean suppressExports = false; > - if (emitter instanceof JSRoyaleEmitter) { > - suppressExports = ((JSRoyaleEmitter) > emitter).getModel().suppressExports; > - } > - if (fjp.config != null) > - { > - emitExports = !suppressExports && > fjp.config.getExportPublicSymbols(); > - exportProtected = !suppressExports && > fjp.config.getExportProtectedSymbols(); > - exportInternal = !suppressExports && > fjp.config.getExportInternalSymbols(); > - } > - else > - { > - emitExports = !suppressExports; > - exportProtected = false; > - exportInternal = false; > - } > - emitExports = emitExports && > !node.getVariableClassification().equals(VariableClassification.PACKAGE_MEMBER); > + > + //exporting fields is handled dynamically in ClosureUtils > + emitExports = false; > + exportProtected = false; > + exportInternal = false; > > begin(); > > diff --git > a/compiler-jx/src/main/java/org/apache/royale/compiler/utils/ClosureUtils.java > b/compiler-jx/src/main/java/org/apache/royale/compiler/utils/ClosureUtils.java > index 17676c7..a7ccbd8 100644 > --- > a/compiler-jx/src/main/java/org/apache/royale/compiler/utils/ClosureUtils.java > +++ > b/compiler-jx/src/main/java/org/apache/royale/compiler/utils/ClosureUtils.java > @@ -195,8 +195,11 @@ public class ClosureUtils > { > continue; > } > - if (localDef instanceof IFunctionDefinition > - && !(localDef instanceof > IAccessorDefinition)) > + boolean isMethod = localDef instanceof > IFunctionDefinition > + && !(localDef instanceof > IAccessorDefinition); > + boolean isVar = localDef instanceof > IVariableDefinition > + && !(localDef instanceof > IAccessorDefinition); > + if (isMethod || isVar) > { > INamespaceReference nsRef = > localDef.getNamespaceReference(); > boolean isCustomNS = > !nsRef.isLanguageNamespace(); > diff --git > a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleClass.java > b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleClass.java > index 88f7032..e3a6d4e 100644 > --- > a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleClass.java > +++ > b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleClass.java > @@ -126,7 +126,7 @@ public class TestRoyaleClass extends TestGoogClass > { > IClassNode node = getClassNode("public class B {public function > B(arg1:String) {this.arg1 = arg1}; public var arg1:String;}"); > asBlockWalker.visitClass(node); > - String expected = "/**\n * @constructor\n * @param {string} > arg1\n */\norg.apache.royale.B = function(arg1) {\n this.arg1 = > arg1;\n};\n\n\n/**\n * @export\n * @type {string}\n > */\norg.apache.royale.B.prototype.arg1 = null;"; > + String expected = "/**\n * @constructor\n * @param {string} > arg1\n */\norg.apache.royale.B = function(arg1) {\n this.arg1 = > arg1;\n};\n\n\n/**\n * @type {string}\n > */\norg.apache.royale.B.prototype.arg1 = null;"; > assertOut(expected); > } > > @@ -135,7 +135,7 @@ public class TestRoyaleClass extends TestGoogClass > { > IClassNode node = getClassNode("public class B {public function > B() {}; public var event:Event = new Event(); public function foo():String > {return event.type;};}"); > asBlockWalker.visitClass(node); > - String expected = "/**\n * @constructor\n */\norg.apache.royale.B > = function() {\n\nthis.event = new Event();\n};\n\n\n/**\n * @export\n * > @type {Event}\n */\norg.apache.royale.B.prototype.event = null;\n\n\n/**\n > * @return {string}\n */\norg.apache.royale.B.prototype.foo = function() > {\n return this.event.type;\n};"; > + String expected = "/**\n * @constructor\n */\norg.apache.royale.B > = function() {\n\nthis.event = new Event();\n};\n\n\n/**\n * @type > {Event}\n */\norg.apache.royale.B.prototype.event = null;\n\n\n/**\n * > @return {string}\n */\norg.apache.royale.B.prototype.foo = function() {\n > return this.event.type;\n};"; > assertOut(expected); > } > > @@ -390,7 +390,7 @@ public class TestRoyaleClass extends TestGoogClass > IClassNode node = getClassNode("public class A {public var > a:Object;protected var b:String; " > + "private var c:int; internal var d:uint; var > e:Number}"); > asBlockWalker.visitClass(node); > - assertOut("/**\n * @constructor\n */\norg.apache.royale.A = > function() {\n};\n\n\n/**\n * @export\n * @type {Object}\n > */\norg.apache.royale.A.prototype.a = null;\n\n\n/**\n * @protected\n * > @type {string}\n */\norg.apache.royale.A.prototype.b = null;\n\n\n/**\n * > @private\n * @type {number}\n */\norg.apache.royale.A.prototype.c = > 0;\n\n\n/**\n * @package\n * @type {number}\n > */\norg.apache.royale.A.prototype.d = 0;\n\n\n/**\n * @package\n * @type > {number}\n */\norg.apache.royale [...] > + assertOut("/**\n * @constructor\n */\norg.apache.royale.A = > function() {\n};\n\n\n/**\n * @type {Object}\n > */\norg.apache.royale.A.prototype.a = null;\n\n\n/**\n * @protected\n * > @type {string}\n */\norg.apache.royale.A.prototype.b = null;\n\n\n/**\n * > @private\n * @type {number}\n */\norg.apache.royale.A.prototype.c = > 0;\n\n\n/**\n * @package\n * @type {number}\n > */\norg.apache.royale.A.prototype.d = 0;\n\n\n/**\n * @package\n * @type > {number}\n */\norg.apache.royale.A.prototype [...] > } > > @Test > @@ -403,7 +403,6 @@ public class TestRoyaleClass extends TestGoogClass > " */\norg.apache.royale.A = function() {\n" + > "};\n\n\n" + > "/**\n" + > - " * @export\n" + > " * @type {Object}\n" + > " */\n" + > "org.apache.royale.A.prototype.a_ = null;\n\n\n" > + > @@ -493,7 +492,6 @@ public class TestRoyaleClass extends TestGoogClass > "this.a_ = {foo:1};\n" + > "};\n\n\n" + > "/**\n" + > - " * @export\n" + > " * @type {Object}\n" + > " */\n" + > "org.apache.royale.A.prototype.a_ = null;\n\n\n" > + > @@ -582,7 +580,6 @@ public class TestRoyaleClass extends TestGoogClass > " */\norg.apache.royale.A = function() {\n" + > "};\n\n\n" + > "/**\n" + > - " * @export\n" + > " * @type {Object}\n" + > " */\n" + > "org.apache.royale.A.prototype.a_ = null;\n\n\n" > + > @@ -632,7 +629,7 @@ public class TestRoyaleClass extends TestGoogClass > IClassNode node = getClassNode("public class A {public static var > a:int = 10;public static var b:String = initStatic(); " > + "private static function initStatic():String { return > \"foo\"; }}"); > asBlockWalker.visitClass(node); > - assertOut("/**\n * @constructor\n */\norg.apache.royale.A = > function() {\n};\n\n\n/**\n * @export\n * @nocollapse\n * @type {number}\n > */\norg.apache.royale.A.a = 10;\n\n\n/**\n * @export\n * @nocollapse\n * > @type {string}\n */\norg.apache.royale.A.b;\n\n\n/**\n * @private\n * > @return {string}\n */\norg.apache.royale.A.initStatic = function() {\n > return \"foo\";\n};\n\norg.apache.royale.A.b = > org.apache.royale.A.initStatic();\n\n"); > + assertOut("/**\n * @constructor\n */\norg.apache.royale.A = > function() {\n};\n\n\n/**\n * @nocollapse\n * @type {number}\n > */\norg.apache.royale.A.a = 10;\n\n\n/**\n * @nocollapse\n * @type > {string}\n */\norg.apache.royale.A.b;\n\n\n/**\n * @private\n * @return > {string}\n */\norg.apache.royale.A.initStatic = function() {\n return > \"foo\";\n};\n\norg.apache.royale.A.b = > org.apache.royale.A.initStatic();\n\n"); > } > > @Test > @@ -653,7 +650,7 @@ public class TestRoyaleClass extends TestGoogClass > + "private static const C:Number = 42;" > + "custom_namespace static const C:String = 'me' + > 'you';}"); > asBlockWalker.visitClass(node); > - assertOut("/**\n * @constructor\n */\norg.apache.royale.A = > function() {\n};\n\n\n/**\n * @export\n * @nocollapse\n * @const\n * @type > {number}\n */\norg.apache.royale.A.A = 42;\n\n\n/**\n * @protected\n * > @nocollapse\n * @const\n * @type {number}\n */\norg.apache.royale.A.B = > 42;\n\n\n/**\n * @private\n * @const\n * @type {number}\n > */\norg.apache.royale.A.C = 42;\n\n\n/**\n * @const\n * @type {string}\n > */\norg.apache.royale.A.http_$$ns_apache_org$2017$custom$namespace__C = 'me > [...] > + assertOut("/**\n * @constructor\n */\norg.apache.royale.A = > function() {\n};\n\n\n/**\n * @nocollapse\n * @const\n * @type {number}\n > */\norg.apache.royale.A.A = 42;\n\n\n/**\n * @protected\n * @nocollapse\n * > @const\n * @type {number}\n */\norg.apache.royale.A.B = 42;\n\n\n/**\n * > @private\n * @const\n * @type {number}\n */\norg.apache.royale.A.C = > 42;\n\n\n/**\n * @const\n * @type {string}\n > */\norg.apache.royale.A.http_$$ns_apache_org$2017$custom$namespace__C = > 'me' + 'you';"); > } > > @Override > @@ -730,7 +727,7 @@ public class TestRoyaleClass extends TestGoogClass > + "public function foo2():String{function > bar2(param1:String):String {return param1 + baz1;}; return bar2('foo');}" > + "}"); > asBlockWalker.visitClass(node); > - assertOut("/**\n * @constructor\n */\norg.apache.royale.B = > function() {\n};\n\n\n/**\n * @export\n * @type {string}\n > */\norg.apache.royale.B.prototype.baz1 = null;\n\n\n/**\n * @return > {string}\n */\norg.apache.royale.B.prototype.foo1 = function() {\n var > self = this;\n function bar1() {\n return self.baz1;\n };\n return > bar1();\n};\n\n\n/**\n * @return {string}\n > */\norg.apache.royale.B.prototype.foo2 = function() {\n var self = > this;\n function bar2(param1) {\n re [...] > + assertOut("/**\n * @constructor\n */\norg.apache.royale.B = > function() {\n};\n\n\n/**\n * @type {string}\n > */\norg.apache.royale.B.prototype.baz1 = null;\n\n\n/**\n * @return > {string}\n */\norg.apache.royale.B.prototype.foo1 = function() {\n var > self = this;\n function bar1() {\n return self.baz1;\n };\n return > bar1();\n};\n\n\n/**\n * @return {string}\n > */\norg.apache.royale.B.prototype.foo2 = function() {\n var self = > this;\n function bar2(param1) {\n return param1 [...] > } > > @Test > @@ -837,7 +834,7 @@ public class TestRoyaleClass extends TestGoogClass > { > IClassNode node = getClassNode("public class A {public function > A(arg1:String, arg2:int) {arg2 = arg2 + 2;} public var foo:Array = [];}"); > asBlockWalker.visitClass(node); > - assertOut("/**\n * @constructor\n * @param {string} arg1\n * > @param {number} arg2\n */\norg.apache.royale.A = function(arg1, arg2) {\n > \n this.foo = [];\n arg2 = (arg2 + 2) >> 0;\n};\n\n\n/**\n * @export\n * > @type {Array}\n */\norg.apache.royale.A.prototype.foo = null;"); > + assertOut("/**\n * @constructor\n * @param {string} arg1\n * > @param {number} arg2\n */\norg.apache.royale.A = function(arg1, arg2) {\n > \n this.foo = [];\n arg2 = (arg2 + 2) >> 0;\n};\n\n\n/**\n * @type > {Array}\n */\norg.apache.royale.A.prototype.foo = null;"); > } > > @Test > @@ -853,7 +850,7 @@ public class TestRoyaleClass extends TestGoogClass > { > IClassNode node = getClassNode("public class A extends > TestImplementation {public function A(arg1:String, arg2:int) {arg2 = arg2 + > 2;} public var foo:Array = [];}"); > asBlockWalker.visitClass(node); > - assertOut("/**\n * @constructor\n * @extends > {custom.TestImplementation}\n * @param {string} arg1\n * @param {number} > arg2\n */\norg.apache.royale.A = function(arg1, arg2) {\n > org.apache.royale.A.base(this, 'constructor');\n \n this.foo = [];\n > arg2 = (arg2 + 2) >> 0;\n};\ngoog.inherits(org.apache.royale.A, > custom.TestImplementation);\n\n\n/**\n * @export\n * @type {Array}\n > */\norg.apache.royale.A.prototype.foo = null;"); > + assertOut("/**\n * @constructor\n * @extends > {custom.TestImplementation}\n * @param {string} arg1\n * @param {number} > arg2\n */\norg.apache.royale.A = function(arg1, arg2) {\n > org.apache.royale.A.base(this, 'constructor');\n \n this.foo = [];\n > arg2 = (arg2 + 2) >> 0;\n};\ngoog.inherits(org.apache.royale.A, > custom.TestImplementation);\n\n\n/**\n * @type {Array}\n > */\norg.apache.royale.A.prototype.foo = null;"); > } > > @Test > @@ -861,7 +858,7 @@ public class TestRoyaleClass extends TestGoogClass > { > IClassNode node = getClassNode("public class A {public static > const NAME:String = 'Dummy'; public function A(arg1:String = NAME) {_name = > arg1;} private var _name:String;}"); > asBlockWalker.visitClass(node); > - assertOut("/**\n * @constructor\n * @param {string=} arg1\n > */\norg.apache.royale.A = function(arg1) {\n arg1 = typeof arg1 !== > 'undefined' ? arg1 : org.apache.royale.A.NAME;\n this._name = > arg1;\n};\n\n\n/**\n * @export\n * @nocollapse\n * @const\n * @type > {string}\n */\norg.apache.royale.A.NAME = 'Dummy';\n\n\n/**\n * > @private\n * @type {string}\n */\norg.apache.royale.A.prototype._name = > null;"); > + assertOut("/**\n * @constructor\n * @param {string=} arg1\n > */\norg.apache.royale.A = function(arg1) {\n arg1 = typeof arg1 !== > 'undefined' ? arg1 : org.apache.royale.A.NAME;\n this._name = > arg1;\n};\n\n\n/**\n * @nocollapse\n * @const\n * @type {string}\n */\ > norg.apache.royale.A.NAME = 'Dummy';\n\n\n/**\n * @private\n * @type > {string}\n */\norg.apache.royale.A.prototype._name = null;"); > } > > protected IBackend createBackend() > diff --git > a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleEmitter.java > b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleEmitter.java > index 67dc6e1..a45f7d0 100644 > --- > a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleEmitter.java > +++ > b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleEmitter.java > @@ -59,53 +59,52 @@ public class TestRoyaleEmitter extends TestGoogEmitter > IFileNode node = compileAS(code); > asBlockWalker.visitFile(node); > assertOutWithMetadata("/**\n" + > - " * > com.example.components.MyEventTarget\n" + > - " *\n" + > - " * @fileoverview\n" + > - " *\n" + > - " * @suppress > {checkTypes|accessControls}\n" + > - " */\n" + > - "\n" + > - > "goog.provide('com.example.components.MyEventTarget');\n" + > - "\n" + > - > "goog.require('custom.TestImplementation');\n" + > - "\n" + > - "\n" + > - "\n" + > - "/**\n" + > - " * @constructor\n" + > - " * @extends > {custom.TestImplementation}\n" + > - " */\n" + > - > "com.example.components.MyEventTarget = function() {\n" + > - " > com.example.components.MyEventTarget.base(this, 'constructor');\n" + > - " if (foo() != 42) {\n" + > - " bar();\n" + > - " }\n" + > - "};\n" + > - > "goog.inherits(com.example.components.MyEventTarget, > custom.TestImplementation);\n" + > - "\n" + > - "\n" + > - "/**\n" + > - " * @private\n" + > - " * @type {string}\n" + > - " */\n" + > - > "com.example.components.MyEventTarget.prototype._privateVar = \"do \";\n" + > - "\n" + > - "\n" + > - "/**\n" + > - " * @export\n" + > - " * @type {number}\n" + > - " */\n" + > - > "com.example.components.MyEventTarget.prototype.publicProperty = 100;\n" + > - "\n" + > - "\n" + > - "/**\n" + > - " * @param {string} value\n" + > - " * @return {string}\n" + > - " */\n" + > - > "com.example.components.MyEventTarget.prototype.myFunction = > function(value) {\n" + > - " return \"Don't \" + this._privateVar + > value;\n" + > - "};\n" + > + " * > com.example.components.MyEventTarget\n" + > + " *\n" + > + " * @fileoverview\n" + > + " *\n" + > + " * @suppress > {checkTypes|accessControls}\n" + > + " */\n" + > + "\n" + > + > "goog.provide('com.example.components.MyEventTarget');\n" + > + "\n" + > + > "goog.require('custom.TestImplementation');\n" + > + "\n" + > + "\n" + > + "\n" + > + "/**\n" + > + " * @constructor\n" + > + " * @extends > {custom.TestImplementation}\n" + > + " */\n" + > + "com.example.components.MyEventTarget = > function() {\n" + > + " > com.example.components.MyEventTarget.base(this, 'constructor');\n" + > + " if (foo() != 42) {\n" + > + " bar();\n" + > + " }\n" + > + "};\n" + > + > "goog.inherits(com.example.components.MyEventTarget, > custom.TestImplementation);\n" + > + "\n" + > + "\n" + > + "/**\n" + > + " * @private\n" + > + " * @type {string}\n" + > + " */\n" + > + > "com.example.components.MyEventTarget.prototype._privateVar = \"do \";\n" + > + "\n" + > + "\n" + > + "/**\n" + > + " * @type {number}\n" + > + " */\n" + > + > "com.example.components.MyEventTarget.prototype.publicProperty = 100;\n" + > + "\n" + > + "\n" + > + "/**\n" + > + " * @param {string} value\n" + > + " * @return {string}\n" + > + " */\n" + > + > "com.example.components.MyEventTarget.prototype.myFunction = > function(value) {\n" + > + " return \"Don't \" + this._privateVar + > value;\n" + > + "};\n" + > "\n" + > "\n" + > "/**\n" + > diff --git > a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleFieldMembers.java > b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleFieldMembers.java > index c715e9d..fb4b64d 100644 > --- > a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleFieldMembers.java > +++ > b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleFieldMembers.java > @@ -52,7 +52,7 @@ public class TestRoyaleFieldMembers extends > TestGoogFieldMembers > { > IVariableNode node = getField("public var foo:String = null;"); > asBlockWalker.visitVariable(node); > - assertOut("/**\n * @export\n * @type {string}\n > */\nRoyaleTest_A.prototype.foo = null"); > + assertOut("/**\n * @type {string}\n > */\nRoyaleTest_A.prototype.foo = null"); > } > > @Override > @@ -61,7 +61,7 @@ public class TestRoyaleFieldMembers extends > TestGoogFieldMembers > { > IVariableNode node = getField("public var foo:int;"); > asBlockWalker.visitVariable(node); > - assertOut("/**\n * @export\n * @type {number}\n > */\nRoyaleTest_A.prototype.foo = 0"); > + assertOut("/**\n * @type {number}\n > */\nRoyaleTest_A.prototype.foo = 0"); > } > > @Override > @@ -70,7 +70,7 @@ public class TestRoyaleFieldMembers extends > TestGoogFieldMembers > { > IVariableNode node = getField("public var foo:int = 420;"); > asBlockWalker.visitVariable(node); > - assertOut("/**\n * @export\n * @type {number}\n > */\nRoyaleTest_A.prototype.foo = 420"); > + assertOut("/**\n * @type {number}\n > */\nRoyaleTest_A.prototype.foo = 420"); > } > > @Test > @@ -78,7 +78,7 @@ public class TestRoyaleFieldMembers extends > TestGoogFieldMembers > { > IVariableNode node = getField("public var foo:int = -420;"); > asBlockWalker.visitVariable(node); > - assertOut("/**\n * @export\n * @type {number}\n > */\nRoyaleTest_A.prototype.foo = -420"); > + assertOut("/**\n * @type {number}\n > */\nRoyaleTest_A.prototype.foo = -420"); > } > > @Test > @@ -86,7 +86,7 @@ public class TestRoyaleFieldMembers extends > TestGoogFieldMembers > { > IVariableNode node = getField("public var foo:int = -123.4;"); > asBlockWalker.visitVariable(node); > - assertOut("/**\n * @export\n * @type {number}\n > */\nRoyaleTest_A.prototype.foo = -123"); > + assertOut("/**\n * @type {number}\n > */\nRoyaleTest_A.prototype.foo = -123"); > } > > @Test > @@ -94,7 +94,7 @@ public class TestRoyaleFieldMembers extends > TestGoogFieldMembers > { > IVariableNode node = getField("public var foo:uint = 123.4;"); > asBlockWalker.visitVariable(node); > - assertOut("/**\n * @export\n * @type {number}\n > */\nRoyaleTest_A.prototype.foo = 123"); > + assertOut("/**\n * @type {number}\n > */\nRoyaleTest_A.prototype.foo = 123"); > } > > @Test > @@ -102,7 +102,7 @@ public class TestRoyaleFieldMembers extends > TestGoogFieldMembers > { > IVariableNode node = getField("public var foo:uint = -123;"); > asBlockWalker.visitVariable(node); > - assertOut("/**\n * @export\n * @type {number}\n > */\nRoyaleTest_A.prototype.foo = 4294967173"); > + assertOut("/**\n * @type {number}\n > */\nRoyaleTest_A.prototype.foo = 4294967173"); > } > > @Test > @@ -175,7 +175,7 @@ public class TestRoyaleFieldMembers extends > TestGoogFieldMembers > { > IVariableNode node = getField("public static var foo:int;"); > asBlockWalker.visitVariable(node); > - assertOut("/**\n * @export\n * @type {number}\n > */\nRoyaleTest_A.foo = 0"); > + assertOut("/**\n * @type {number}\n */\nRoyaleTest_A.foo = 0"); > } > > @Test > @@ -210,7 +210,7 @@ public class TestRoyaleFieldMembers extends > TestGoogFieldMembers > IClassNode node = (IClassNode) getNode("import > custom.custom_namespace;use namespace custom_namespace;public static var > foo:Object = initFoo(); custom_namespace static function initFoo():Object { > return null; }", > IClassNode.class, WRAP_LEVEL_CLASS); > asBlockWalker.visitClass(node); > - assertOut("/**\n * @constructor\n */\nRoyaleTest_A = function() > {\n};\n\n\n/**\n * @export\n * @type {Object}\n > */\nRoyaleTest_A.foo;\n\n\n/**\n * @return {Object}\n > */\nRoyaleTest_A.http_$$ns_apache_org$2017$custom$namespace__initFoo = > function() {\n return null;\n};\n\nRoyaleTest_A.foo = > RoyaleTest_A.http_$$ns_apache_org$2017$custom$namespace__initFoo();\n\n"); > + assertOut("/**\n * @constructor\n */\nRoyaleTest_A = function() > {\n};\n\n\n/**\n * @type {Object}\n */\nRoyaleTest_A.foo;\n\n\n/**\n * > @return {Object}\n > */\nRoyaleTest_A.http_$$ns_apache_org$2017$custom$namespace__initFoo = > function() {\n return null;\n};\n\nRoyaleTest_A.foo = > RoyaleTest_A.http_$$ns_apache_org$2017$custom$namespace__initFoo();\n\n"); > } > > @Test > @@ -219,7 +219,7 @@ public class TestRoyaleFieldMembers extends > TestGoogFieldMembers > IClassNode node = (IClassNode) getNode("static public var > foo:Object = { 'foo': 'bar' }", > IClassNode.class, WRAP_LEVEL_CLASS); > asBlockWalker.visitClass(node); > - assertOut("/**\n * @constructor\n */\nRoyaleTest_A = function() > {\n};\n\n\n/**\n * @export\n * @type {Object}\n */\nRoyaleTest_A.foo = > {'foo':'bar'};"); > + assertOut("/**\n * @constructor\n */\nRoyaleTest_A = function() > {\n};\n\n\n/**\n * @type {Object}\n */\nRoyaleTest_A.foo = {'foo':'bar'};"); > } > > @Test > @@ -259,7 +259,7 @@ public class TestRoyaleFieldMembers extends > TestGoogFieldMembers > { > IVariableNode node = getField("public static const foo;"); > asBlockWalker.visitVariable(node); > - assertOut("/**\n * @export\n * @const\n * @type {*}\n > */\nRoyaleTest_A.foo"); > + assertOut("/**\n * @const\n * @type {*}\n */\nRoyaleTest_A.foo"); > } > > @Test > @@ -267,7 +267,7 @@ public class TestRoyaleFieldMembers extends > TestGoogFieldMembers > { > IVariableNode node = getField("public const foo;"); > asBlockWalker.visitVariable(node); > - assertOut("/**\n * @export\n * @const\n * @type {*}\n > */\nRoyaleTest_A.prototype.foo"); > + assertOut("/**\n * @const\n * @type {*}\n > */\nRoyaleTest_A.prototype.foo"); > } > > @Override > @@ -276,7 +276,7 @@ public class TestRoyaleFieldMembers extends > TestGoogFieldMembers > { > IVariableNode node = getField("public static const foo:int;"); > asBlockWalker.visitVariable(node); > - assertOut("/**\n * @export\n * @const\n * @type {number}\n > */\nRoyaleTest_A.foo = 0"); > + assertOut("/**\n * @const\n * @type {number}\n > */\nRoyaleTest_A.foo = 0"); > } > > @Test > @@ -284,7 +284,7 @@ public class TestRoyaleFieldMembers extends > TestGoogFieldMembers > { > IVariableNode node = getField("public const foo:int;"); > asBlockWalker.visitVariable(node); > - assertOut("/**\n * @export\n * @const\n * @type {number}\n > */\nRoyaleTest_A.prototype.foo = 0"); > + assertOut("/**\n * @const\n * @type {number}\n > */\nRoyaleTest_A.prototype.foo = 0"); > } > > @Override > @@ -293,7 +293,7 @@ public class TestRoyaleFieldMembers extends > TestGoogFieldMembers > { > IVariableNode node = getField("public static const foo:int = > 420;"); > asBlockWalker.visitVariable(node); > - assertOut("/**\n * @export\n * @const\n * @type {number}\n > */\nRoyaleTest_A.foo = 420"); > + assertOut("/**\n * @const\n * @type {number}\n > */\nRoyaleTest_A.foo = 420"); > } > > @Test > @@ -301,7 +301,7 @@ public class TestRoyaleFieldMembers extends > TestGoogFieldMembers > { > IVariableNode node = getField("public static const foo:Number = > parseFloat('1E2');"); > asBlockWalker.visitVariable(node); > - assertOut("/**\n * @export\n * @const\n * @type {number}\n > */\nRoyaleTest_A.foo = parseFloat('1E2')"); > + assertOut("/**\n * @const\n * @type {number}\n > */\nRoyaleTest_A.foo = parseFloat('1E2')"); > } > > @Test > @@ -309,7 +309,7 @@ public class TestRoyaleFieldMembers extends > TestGoogFieldMembers > { > IVariableNode node = getField("public const foo:int = 420;"); > asBlockWalker.visitVariable(node); > - assertOut("/**\n * @export\n * @const\n * @type {number}\n > */\nRoyaleTest_A.prototype.foo = 420"); > + assertOut("/**\n * @const\n * @type {number}\n > */\nRoyaleTest_A.prototype.foo = 420"); > } > > @Test > diff --git > a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyalePackage.java > b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyalePackage.java > index 7d61fc4..cbced0a 100644 > --- > a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyalePackage.java > +++ > b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyalePackage.java > @@ -713,7 +713,6 @@ public class TestRoyalePackage extends TestGoogPackage > "\n" + > "\n" + > "/**\n" + > - " * @export\n" + > " * @nocollapse\n" + > " * @type {string}\n" + > " */\n" + > @@ -1146,7 +1145,6 @@ public class TestRoyalePackage extends > TestGoogPackage > "\n" + > "\n" + > "/**\n" + > - " * @export\n" + > " * @nocollapse\n" + > " * @const\n" + > " * @type {number}\n" + > diff --git > a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/mxml/royale/TestRoyaleMXMLApplication.java > b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/mxml/royale/TestRoyaleMXMLApplication.java > index e435712..b5511f3 100644 > --- > a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/mxml/royale/TestRoyaleMXMLApplication.java > +++ > b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/mxml/royale/TestRoyaleMXMLApplication.java > @@ -900,7 +900,6 @@ public class TestRoyaleMXMLApplication extends > RoyaleTestBase > "\n" + > "\n" + > "/**\n" + > - " * @export\n" + > " * @type {binding.ComplexValueObject}\n" + > " */\n" + > "AppName.prototype.firstOne = null;\n" + > @@ -1077,7 +1076,6 @@ public class TestRoyaleMXMLApplication extends > RoyaleTestBase > "\n" + > "\n" + > "/**\n" + > - " * @export\n" + > " * @type {XML}\n" + > " */\n" + > "AppName.prototype.xml = null;\n" + > diff --git > a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/mxml/royale/TestRoyaleMXMLScript.java > b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/mxml/royale/TestRoyaleMXMLScript.java > index e42f4a1..cfd5acf 100644 > --- > a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/mxml/royale/TestRoyaleMXMLScript.java > +++ > b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/mxml/royale/TestRoyaleMXMLScript.java > @@ -274,7 +274,6 @@ public class TestRoyaleMXMLScript extends > RoyaleTestBase > "\n" + > "\n" + > "/**\n" + > - " * @export\n" + > " * @type {Array}\n" + > " */\n" + > "AppName.prototype.foo;\n" + > @@ -378,14 +377,12 @@ public class TestRoyaleMXMLScript extends > RoyaleTestBase > " Object.defineProperty(AppName, 'foo', { > value: value, writable: true });\n" + > "};\n" + > "/**\n" + > - " * @export\n" + > " * @type {string}\n" + > " */\n" + > "AppName.foo;\n" + > "\n" + > "Object.defineProperties(AppName, /** > @lends {AppName} */ {\n" + > "/**\n" + > - " * @export\n" + > " * @type {string}\n" + > " */\n" + > "foo: {\n" + > @@ -482,7 +479,6 @@ public class TestRoyaleMXMLScript extends > RoyaleTestBase > "\n" + > "\n" + > "/**\n" + > - " * @export\n" + > " * @type {string}\n" + > " */\n" + > "AppName.foo = 'foo';\n" + > @@ -576,7 +572,6 @@ public class TestRoyaleMXMLScript extends > RoyaleTestBase > "\n" + > "\n" + > "/**\n" + > - " * @export\n" + > " * @type {Array}\n" + > " */\n" + > "AppName.foo = ['foo'];\n" + > @@ -677,7 +672,6 @@ public class TestRoyaleMXMLScript extends > RoyaleTestBase > " return value;\n" + > "};\n" + > "/**\n" + > - " * @export\n" + > " * @const\n" + > " * @type {string}\n" + > " */\n" + > @@ -685,7 +679,6 @@ public class TestRoyaleMXMLScript extends > RoyaleTestBase > "\n" + > "Object.defineProperties(AppName, /** > @lends {AppName} */ {\n" + > "/**\n" + > - " * @export\n" + > " * @const\n" + > " * @type {string}\n" + > " */\n" + > diff --git > a/compiler-jx/src/test/resources/royale/projects/internal/MainClass_result.js > b/compiler-jx/src/test/resources/royale/projects/internal/MainClass_result.js > index 266e02b..52e26f7 100644 > --- > a/compiler-jx/src/test/resources/royale/projects/internal/MainClass_result.js > +++ > b/compiler-jx/src/test/resources/royale/projects/internal/MainClass_result.js > @@ -73,7 +73,6 @@ MainClass.InternalClass = function() { > > > /** > - * @export > * @type {OtherClass} > */ > MainClass.InternalClass.prototype.foo = null; > >
