JSRoyaleDocEmitter: consolidated at-nocollapse annotation and added it to static methods too when -prevent-rename compiler args are present
Eventually, this should be generated for release builds only, but better to make it work in the easy way first to help with converting at-export to release builds only
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 37d38f8..959f3aa 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
@@ -147,7 +147,7 @@
emitExports = !suppressExports;
exportProtected = false;
}
- emitExports = emitExports && !node.getFunctionClassification().equals(FunctionClassification.PACKAGE_MEMBER);
+ emitExports = emitExports && !node.hasModifier(ASModifier.STATIC) && !node.getFunctionClassification().equals(FunctionClassification.PACKAGE_MEMBER);
coercionList = null;
ignoreList = null;
@@ -286,6 +286,7 @@
else
begin();
emitMethodAccess(node);
+ emitMethodNoCollapse(node, fjp);
hasDoc = true;
}
}
@@ -303,6 +304,7 @@
else
begin();
emitMethodAccess(node);
+ emitMethodNoCollapse(node, fjp);
hasDoc = true;
}
@@ -332,6 +334,7 @@
else
begin();
emitMethodAccess(node);
+ emitMethodNoCollapse(node, fjp);
hasDoc = true;
}
@@ -354,6 +357,7 @@
else
begin();
emitMethodAccess(node);
+ emitMethodNoCollapse(node, fjp);
hasDoc = true;
}
@@ -542,13 +546,47 @@
{
emitProtected(node);
}
- else /*if (ns != null && ns == IASKeywordConstants.PUBLIC)*/
+ else // public or custom namespace
{
- if(!node.hasModifier(ASModifier.STATIC))
- emitPublic(node);
+ emitPublic(node);
}
}
+ protected void emitMethodNoCollapse(IFunctionNode node, RoyaleJSProject fjp)
+ {
+ String ns = node.getNamespace();
+ if (ns == IASKeywordConstants.PROTECTED)
+ {
+ boolean preventRenameProtected = fjp.config != null && fjp.config.getPreventRenameProtectedSymbols();
+ if (preventRenameProtected)
+ {
+ emitNoCollapse(node);
+ }
+ }
+ else if(ns != IASKeywordConstants.PRIVATE) // public or custom namespace
+ {
+ boolean preventRenamePublic = fjp.config != null && fjp.config.getPreventRenamePublicSymbols();
+ if (preventRenamePublic)
+ {
+ emitNoCollapse(node);
+ }
+ }
+ }
+
+ protected void emitNoCollapse(IDefinitionNode node)
+ {
+ if (!node.hasModifier(ASModifier.STATIC)
+ || node instanceof IAccessorNode
+ || IASKeywordConstants.PRIVATE.equals(node.getNamespace()))
+ {
+ return;
+ }
+ //dynamically getting/setting a static field won't
+ //work properly if it is collapsed in a release build,
+ //even when it has been exported
+ emitJSDocLine(JSGoogDocEmitterTokens.NOCOLLAPSE);
+ }
+
@Override
public void emitFieldDoc(IVariableNode node, IDefinition def, ICompilerProject project)
{
@@ -580,12 +618,9 @@
{
emitProtected(node);
boolean preventRename = fjp.config != null && fjp.config.getPreventRenameProtectedSymbols();
- if(preventRename && node.hasModifier(ASModifier.STATIC) && !(node instanceof IAccessorNode))
+ if (preventRename)
{
- //dynamically getting/setting a static variable won't
- //work properly if it is collapsed in a release build,
- //even when it has been exported
- emitJSDocLine(JSGoogDocEmitterTokens.NOCOLLAPSE);
+ emitNoCollapse(node);
}
}
else
@@ -631,12 +666,9 @@
{
emitPublic(node);
boolean preventRename = fjp.config != null && fjp.config.getPreventRenamePublicSymbols();
- if(preventRename && node.hasModifier(ASModifier.STATIC) && !(node instanceof IAccessorNode))
+ if(preventRename)
{
- //dynamically getting/setting a static variable won't
- //work properly if it is collapsed in a release build,
- //even when it has been exported
- emitJSDocLine(JSGoogDocEmitterTokens.NOCOLLAPSE);
+ emitNoCollapse(node);
}
}
} else {
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 c1fdcac..39f85dd 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
@@ -701,7 +701,7 @@
+ "public static function foo7(value:Object):void{}"
+ "custom_namespace static function foo7(value:Object):void{}" + "}");
asBlockWalker.visitClass(node);
- assertOut("/**\n * @constructor\n */\norg.apache.royale.A = function() {\n};\n\n\n/**\n * @export\n * @return {Object}\n */\norg.apache.royale.A.prototype.foo1 = function() {\n return null;\n};\n\n\n/**\n * @export\n * @return {Object}\n */\norg.apache.royale.A.prototype.foo1a = function() {\n return null;\n};\n\n\n/**\n * @export\n * @override\n */\norg.apache.royale.A.prototype.foo1b = function() {\n return org.apache.royale.A.superClass_.foo1b.apply(this);\n};\n\n\n/**\n * @protected\n * @param {Object} value\n */\norg.apache.royale.A.prototype.foo2 = function(value) {\n};\n\n\n/**\n * @private\n * @param {Object} value\n */\norg.apache.royale.A.prototype.foo3 = function(value) {\n};\n\n\n/**\n * @export\n * @param {Object} value\n */\norg.apache.royale.A.prototype.foo5 = function(value) {\n};\n\n\n/**\n * @export\n * @param {Object} value\n */\norg.apache.royale.A.prototype.http_$$ns_apache_org$2017$custom$namespace__foo6 = function(value) {\n};\n\n\n/**\n * @param {Object} value\n */\norg.apache.royale.A.foo7 = function(value) {\n};\n\n\n/**\n * @param {Object} value\n */\norg.apache.royale.A.http_$$ns_apache_org$2017$custom$namespace__foo7 = function(value) {\n};");
+ assertOut("/**\n * @constructor\n */\norg.apache.royale.A = function() {\n};\n\n\n/**\n * @export\n * @return {Object}\n */\norg.apache.royale.A.prototype.foo1 = function() {\n return null;\n};\n\n\n/**\n * @export\n * @return {Object}\n */\norg.apache.royale.A.prototype.foo1a = function() {\n return null;\n};\n\n\n/**\n * @export\n * @override\n */\norg.apache.royale.A.prototype.foo1b = function() {\n return org.apache.royale.A.superClass_.foo1b.apply(this);\n};\n\n\n/**\n * @protected\n * @param {Object} value\n */\norg.apache.royale.A.prototype.foo2 = function(value) {\n};\n\n\n/**\n * @private\n * @param {Object} value\n */\norg.apache.royale.A.prototype.foo3 = function(value) {\n};\n\n\n/**\n * @export\n * @param {Object} value\n */\norg.apache.royale.A.prototype.foo5 = function(value) {\n};\n\n\n/**\n * @export\n * @param {Object} value\n */\norg.apache.royale.A.prototype.http_$$ns_apache_org$2017$custom$namespace__foo6 = function(value) {\n};\n\n\n/**\n * @nocollapse\n * @param {Object} value\n */\norg.apache.royale.A.foo7 = function(value) {\n};\n\n\n/**\n * @nocollapse\n * @param {Object} value\n */\norg.apache.royale.A.http_$$ns_apache_org$2017$custom$namespace__foo7 = function(value) {\n};");
}
@Test
diff --git a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java
index 2c4e651..8d35553 100644
--- a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java
+++ b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java
@@ -1133,7 +1133,7 @@
"public class B {public static function b(ff:Function) { function c(f:Function):void {}; c(ff); }}",
IFunctionNode.class, WRAP_LEVEL_PACKAGE);
asBlockWalker.visitFunction(node);
- assertOut("/**\n * @param {Function} ff\n */\nB.b = function(ff) {\n function c(f) {\n };\n c(ff);\n}");
+ assertOut("/**\n * @nocollapse\n * @param {Function} ff\n */\nB.b = function(ff) {\n function c(f) {\n };\n c(ff);\n}");
}
@Test
@@ -1153,7 +1153,7 @@
"public class B {static public function b() { function c(f:Function):void {}; c(b); }}",
IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
asBlockWalker.visitFunction(node);
- assertOut("/**\n */\nfoo.bar.B.b = function() {\n function c(f) {\n };\n c(foo.bar.B.b);\n}");
+ assertOut("/**\n * @nocollapse\n */\nfoo.bar.B.b = function() {\n function c(f) {\n };\n c(foo.bar.B.b);\n}");
}
@Test
@@ -1223,7 +1223,7 @@
"public class B {static public function b() { function c(f:Function):void {}; var f:Function = b; c(f); }}",
IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
asBlockWalker.visitFunction(node);
- assertOut("/**\n */\nfoo.bar.B.b = function() {\n function c(f) {\n };\n var /** @type {Function} */ f = foo.bar.B.b;\n c(f);\n}");
+ assertOut("/**\n * @nocollapse\n */\nfoo.bar.B.b = function() {\n function c(f) {\n };\n var /** @type {Function} */ f = foo.bar.B.b;\n c(f);\n}");
}
@Test
@@ -1233,7 +1233,7 @@
"public class B {static public function b() { function c(f:Function):void {}; var f:Function = foo.bar.B.b; c(f); }}",
IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
asBlockWalker.visitFunction(node);
- assertOut("/**\n */\nfoo.bar.B.b = function() {\n function c(f) {\n };\n var /** @type {Function} */ f = foo.bar.B.b;\n c(f);\n}");
+ assertOut("/**\n * @nocollapse\n */\nfoo.bar.B.b = function() {\n function c(f) {\n };\n var /** @type {Function} */ f = foo.bar.B.b;\n c(f);\n}");
}
@Test
@@ -1253,7 +1253,7 @@
"public class B {static public function b() { function c(f:Function):void {}; var f:Function = null; f = b; c(f); }}",
IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
asBlockWalker.visitFunction(node);
- assertOut("/**\n */\nfoo.bar.B.b = function() {\n function c(f) {\n };\n var /** @type {Function} */ f = null;\n f = foo.bar.B.b;\n c(f);\n}");
+ assertOut("/**\n * @nocollapse\n */\nfoo.bar.B.b = function() {\n function c(f) {\n };\n var /** @type {Function} */ f = null;\n f = foo.bar.B.b;\n c(f);\n}");
}
@Test
@@ -1273,7 +1273,7 @@
"public class B {static public function b() { function c(f:Function):void {}; var f:Array = [b]; c(f); }}",
IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
asBlockWalker.visitFunction(node);
- assertOut("/**\n */\nfoo.bar.B.b = function() {\n function c(f) {\n };\n var /** @type {Array} */ f = [foo.bar.B.b];\n c(f);\n}");
+ assertOut("/**\n * @nocollapse\n */\nfoo.bar.B.b = function() {\n function c(f) {\n };\n var /** @type {Array} */ f = [foo.bar.B.b];\n c(f);\n}");
}
@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 dfb6c30..0ca2e6a 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
@@ -722,6 +722,7 @@
"\n" +
"\n" +
"/**\n" +
+ " * @nocollapse\n" +
" * @return {string}\n" +
" */\n" +
"foo.bar.baz.A.InternalClass.someStaticFunction = function() {\n" +