You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by jo...@apache.org on 2020/03/30 19:40:25 UTC
[royale-compiler] branch develop updated: JSRoyaleDocEmitter:
public static variables need nocollapse annotation if they are exported,
to avoid copying the value to a new variable instead of referencing the
original
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 fb445f7 JSRoyaleDocEmitter: public static variables need nocollapse annotation if they are exported, to avoid copying the value to a new variable instead of referencing the original
fb445f7 is described below
commit fb445f72e46e595b4f3cb573a4f91a19d8560005
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Mon Mar 30 12:08:33 2020 -0700
JSRoyaleDocEmitter: public static variables need nocollapse annotation if they are exported, to avoid copying the value to a new variable instead of referencing the original
---
.../internal/codegen/js/goog/JSGoogDocEmitterTokens.java | 2 +-
.../internal/codegen/js/royale/JSRoyaleDocEmitter.java | 10 ++++++++++
.../compiler/internal/codegen/js/royale/TestRoyaleClass.java | 2 +-
.../internal/codegen/js/royale/TestRoyaleFieldMembers.java | 6 +++---
.../compiler/internal/codegen/js/royale/TestRoyalePackage.java | 1 +
.../internal/codegen/mxml/royale/TestRoyaleMXMLScript.java | 3 +++
6 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/goog/JSGoogDocEmitterTokens.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/goog/JSGoogDocEmitterTokens.java
index 0a1e334..623f131 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/goog/JSGoogDocEmitterTokens.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/goog/JSGoogDocEmitterTokens.java
@@ -22,7 +22,7 @@ import org.apache.royale.compiler.codegen.IEmitterTokens;
public enum JSGoogDocEmitterTokens implements IEmitterTokens
{
- PARAM("param"), STAR("*"), TYPE("type"), EXPOSE("expose"), EXPORT("export");
+ PARAM("param"), STAR("*"), TYPE("type"), EXPOSE("expose"), EXPORT("export"), NOCOLLAPSE("nocollapse");
private String token;
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 d9b4c0a..2600e6a 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
@@ -37,6 +37,7 @@ import org.apache.royale.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.royale.compiler.internal.codegen.js.JSEmitterTokens;
import org.apache.royale.compiler.internal.codegen.js.JSSessionModel;
import org.apache.royale.compiler.internal.codegen.js.goog.JSGoogDocEmitter;
+import org.apache.royale.compiler.internal.codegen.js.goog.JSGoogDocEmitterTokens;
import org.apache.royale.compiler.internal.codegen.js.jx.BindableEmitter;
import org.apache.royale.compiler.internal.projects.RoyaleJSProject;
import org.apache.royale.compiler.internal.scopes.ASScope;
@@ -595,7 +596,16 @@ public class JSRoyaleDocEmitter extends JSGoogDocEmitter
if (!avoidExport) {
if (ns.equals(IASKeywordConstants.PUBLIC))
+ {
emitPublic(node);
+ if(!node.isConst() && node.hasModifier(ASModifier.STATIC) && !(node instanceof IAccessorNode))
+ {
+ //dynamically getting/setting a public static variable
+ //won't work properly if it is collapsed, even when it
+ //has been exported
+ emitJSDocLine(JSGoogDocEmitterTokens.NOCOLLAPSE);
+ }
+ }
} else {
//we should also remove it from reflection data... provide a check here for that.
((JSRoyaleEmitter)emitter).getModel().suppressedExportNodes.add(node);
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 6b9df2e..8fbad57 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
@@ -632,7 +632,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 * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('org.apache.royale.A', org.apache.royale.A);\n\n\n/**\n * @export\n * @type {number}\n */\norg.apache.royale.A.a = 10;\n\n\n/**\n * @export\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. [...]
+ assertOut("/**\n * @constructor\n */\norg.apache.royale.A = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('org.apache.royale.A', org.apache.royale.A);\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 re [...]
}
@Test
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 f92714a..95aa9ca 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
@@ -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 * @export\n * @nocollapse\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 * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('RoyaleTest_A', RoyaleTest_A);\n\n\n/**\n * @export\n * @type {Object}\n */\nRoyaleTest_A.foo;\n\n\n/**\n * @export\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__initF [...]
+ assertOut("/**\n * @constructor\n */\nRoyaleTest_A = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('RoyaleTest_A', RoyaleTest_A);\n\n\n/**\n * @export\n * @nocollapse\n * @type {Object}\n */\nRoyaleTest_A.foo;\n\n\n/**\n * @export\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$ [...]
}
@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 * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('RoyaleTest_A', RoyaleTest_A);\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 * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('RoyaleTest_A', RoyaleTest_A);\n\n\n/**\n * @export\n * @nocollapse\n * @type {Object}\n */\nRoyaleTest_A.foo = {'foo':'bar'};");
}
@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 b193545..4ca16da 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
@@ -775,6 +775,7 @@ public class TestRoyalePackage extends TestGoogPackage
"\n" +
"/**\n" +
" * @export\n" +
+ " * @nocollapse\n" +
" * @type {string}\n" +
" */\n" +
"foo.bar.baz.A.InternalClass.someString = \"foo\";\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 eb5713b..60343d3 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
@@ -402,6 +402,7 @@ public class TestRoyaleMXMLScript extends RoyaleTestBase
"Object.defineProperties(AppName, /** @lends {AppName} */ {\n" +
"/**\n" +
" * @export\n" +
+ " * @nocollapse\n" +
" * @type {string}\n" +
" */\n" +
"foo: {\n" +
@@ -504,6 +505,7 @@ public class TestRoyaleMXMLScript extends RoyaleTestBase
"\n" +
"/**\n" +
" * @export\n" +
+ " * @nocollapse\n" +
" * @type {string}\n" +
" */\n" +
"AppName.foo = 'foo';\n" +
@@ -603,6 +605,7 @@ public class TestRoyaleMXMLScript extends RoyaleTestBase
"\n" +
"/**\n" +
" * @export\n" +
+ " * @nocollapse\n" +
" * @type {Array}\n" +
" */\n" +
"AppName.foo = ['foo'];\n" +