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 2023/06/08 22:08:54 UTC
[royale-compiler] branch develop updated: PackageFooterEmitter: fix null exception from getReturnTypeNode() on getter function node
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 bb927160e PackageFooterEmitter: fix null exception from getReturnTypeNode() on getter function node
bb927160e is described below
commit bb927160e17d033ebb227ea1cd23cf3ae2c7b2f7
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Thu Jun 8 15:08:33 2023 -0700
PackageFooterEmitter: fix null exception from getReturnTypeNode() on getter function node
Uses same approach for getters as regular functions to first check that the return type string isn't empty or void
Also, passes to formatQualifiedName() for consistency
---
.../codegen/js/jx/PackageFooterEmitter.java | 6 +++-
.../internal/codegen/as/TestAccessorMembers.java | 24 +++++++++++++
.../codegen/js/goog/TestGoogAccessorMembers.java | 30 +++++++++++++++++
.../js/royale/TestRoyaleAccessorMembers.java | 39 ++++++++++++++++++++++
4 files changed, 98 insertions(+), 1 deletion(-)
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/PackageFooterEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
index 64edb1331..6d1f5ca78 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
@@ -426,7 +426,11 @@ public class PackageFooterEmitter extends JSSubEmitter implements
data.customNS = altNS;
if (!accessorData.contains(data)) accessorData.add(data);
if (dnode.getNodeID() == ASTNodeID.GetterID) {
- data.type = fnNode.getReturnTypeNode().resolveType(getProject()).getQualifiedName();
+ String qualifiedTypeName = fnNode.getReturnType();
+ if (!(qualifiedTypeName.equals("") || qualifiedTypeName.equals("void"))) {
+ qualifiedTypeName = fnNode.getReturnTypeNode().resolveType(getProject()).getQualifiedName();
+ }
+ data.type = fjs.formatQualifiedName(qualifiedTypeName, true);
if (data.access == null) {
data.access = "readonly";
} else data.access = "readwrite";
diff --git a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/as/TestAccessorMembers.java b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/as/TestAccessorMembers.java
index 81749fc6e..a243f4515 100644
--- a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/as/TestAccessorMembers.java
+++ b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/as/TestAccessorMembers.java
@@ -67,6 +67,22 @@ public class TestAccessorMembers extends ASTestBase
assertOut("public static function get foo():int {\n\treturn -1;\n}");
}
+ @Test
+ public void testGetAccessor_withoutReturnType()
+ {
+ IAccessorNode node = getAccessor("function get foo(){return -1;}");
+ asBlockWalker.visitFunction(node);
+ assertOut("function get foo() {\n\treturn -1;\n}");
+ }
+
+ @Test
+ public void testGetAccessor_withNamespace_withoutReturnType()
+ {
+ IAccessorNode node = getAccessor("public function get foo(){return -1;}");
+ asBlockWalker.visitFunction(node);
+ assertOut("public function get foo() {\n\treturn -1;\n}");
+ }
+
@Test
public void testSetAccessor()
{
@@ -98,4 +114,12 @@ public class TestAccessorMembers extends ASTestBase
asBlockWalker.visitFunction(node);
assertOut("public static function set foo(value:int):void {\n}");
}
+
+ @Test
+ public void testSetAccessor_withoutParameterType()
+ {
+ IAccessorNode node = getAccessor("function set foo(value):void{}");
+ asBlockWalker.visitFunction(node);
+ assertOut("function set foo(value:*):void {\n}");
+ }
}
diff --git a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/goog/TestGoogAccessorMembers.java b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/goog/TestGoogAccessorMembers.java
index 69ae550d0..00b1fb135 100644
--- a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/goog/TestGoogAccessorMembers.java
+++ b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/goog/TestGoogAccessorMembers.java
@@ -85,6 +85,26 @@ public class TestGoogAccessorMembers extends TestAccessorMembers
assertOut("Object.defineProperty(\n\tRoyaleTest_A, \n\t'foo', \n\t{get:function() {\n\t\treturn -1;\n\t}, configurable:true}\n)");
}
+ @Override
+ @Test
+ public void testGetAccessor_withoutReturnType()
+ {
+ IGetterNode node = (IGetterNode) getAccessor("function get foo(){}");
+ asBlockWalker.visitGetter(node);
+ assertOut("Object.defineProperty(\n\tRoyaleTest_A.prototype, \n\t'foo', "
+ + "\n\t{get:function() {\n\t}, configurable:true}\n)");
+ }
+
+ @Override
+ @Test
+ public void testGetAccessor_withNamespace_withoutReturnType()
+ {
+ IGetterNode node = (IGetterNode) getAccessor("public function get foo(){}");
+ asBlockWalker.visitGetter(node);
+ assertOut("Object.defineProperty(\n\tRoyaleTest_A.prototype, \n\t'foo', "
+ + "\n\t{get:function() {\n\t}, configurable:true}\n)");
+ }
+
@Override
@Test
public void testSetAccessor()
@@ -133,6 +153,16 @@ public class TestGoogAccessorMembers extends TestAccessorMembers
assertOut("Object.defineProperty(\n\tRoyaleTest_A, \n\t'foo', \n\t{set:function(value) {\n\t}, configurable:true}\n)");
}
+ @Override
+ @Test
+ public void testSetAccessor_withoutParameterType()
+ {
+ ISetterNode node = (ISetterNode) getAccessor("function set foo(value):void{}");
+ asBlockWalker.visitSetter(node);
+ assertOut("Object.defineProperty(\n\tRoyaleTest_A.prototype, \n\t'foo', \n\t{set:function(value)"
+ + " {\n\t}, configurable:true}\n)");
+ }
+
@Override
protected IBackend createBackend()
{
diff --git a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleAccessorMembers.java b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleAccessorMembers.java
index 6aaac7394..1910d01d0 100644
--- a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleAccessorMembers.java
+++ b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleAccessorMembers.java
@@ -104,6 +104,32 @@ public class TestRoyaleAccessorMembers extends TestGoogAccessorMembers
"RoyaleTest_A.get__foo = function() {\n return -1;\n};\n\n\n" +
"Object.defineProperties(RoyaleTest_A, /** @lends {RoyaleTest_A} */ {\n/**\n * @type {number}\n */\nfoo: {\nget: RoyaleTest_A.get__foo}}\n);");
}
+
+ @Override
+ @Test
+ public void testGetAccessor_withoutReturnType()
+ {
+ IClassNode node = (IClassNode) getNode("function get foo(){}",
+ IClassNode.class, WRAP_LEVEL_CLASS);
+ asBlockWalker.visitClass(node);
+ assertOut("/**\n * @constructor\n */\nRoyaleTest_A = function() {\n};\n\n\n" +
+ "/**\n * @nocollapse\n * @type {*}\n */\nRoyaleTest_A.prototype.foo;\n\n\n" +
+ "RoyaleTest_A.prototype.get__foo = function() {\n};\n\n\n" +
+ "Object.defineProperties(RoyaleTest_A.prototype, /** @lends {RoyaleTest_A.prototype} */ {\n/**\n * @type {*}\n */\nfoo: {\nget: RoyaleTest_A.prototype.get__foo}}\n);");
+ }
+
+ @Override
+ @Test
+ public void testGetAccessor_withNamespace_withoutReturnType()
+ {
+ IClassNode node = (IClassNode) getNode("public function get foo(){return -1;}",
+ IClassNode.class, WRAP_LEVEL_CLASS);
+ asBlockWalker.visitClass(node);
+ assertOut("/**\n * @constructor\n */\nRoyaleTest_A = function() {\n};\n\n\n" +
+ "/**\n * @nocollapse\n * @export\n * @type {*}\n */\nRoyaleTest_A.prototype.foo;\n\n\n" +
+ "RoyaleTest_A.prototype.get__foo = function() {\n return -1;\n};\n\n\n" +
+ "Object.defineProperties(RoyaleTest_A.prototype, /** @lends {RoyaleTest_A.prototype} */ {\n/**\n * @type {*}\n */\nfoo: {\nget: RoyaleTest_A.prototype.get__foo}}\n);");
+ }
@Override
@Test
@@ -201,6 +227,19 @@ public class TestRoyaleAccessorMembers extends TestGoogAccessorMembers
"B.prototype.set__foo = function(value) {\n var /** @type {number} */ z = (function($value){B.superClass_.set__foo.apply(this, [$value]);return $value;}).apply(this, [value]);\n};\n\n\n" +
"Object.defineProperties(B.prototype, /** @lends {B.prototype} */ {\n/**\n * @type {number}\n */\nfoo: {\nget: A.prototype.get__foo,\nset: B.prototype.set__foo}}\n);");
}
+
+ @Override
+ @Test
+ public void testSetAccessor_withoutParameterType()
+ {
+ IClassNode node = (IClassNode) getNode("function set foo(value):void{}",
+ IClassNode.class, WRAP_LEVEL_CLASS);
+ asBlockWalker.visitClass(node);
+ assertOut("/**\n * @constructor\n */\nRoyaleTest_A = function() {\n};\n\n\n" +
+ "/**\n * @nocollapse\n * @type {*}\n */\nRoyaleTest_A.prototype.foo;\n\n\n" +
+ "RoyaleTest_A.prototype.set__foo = function(value) {\n};\n\n\n" +
+ "Object.defineProperties(RoyaleTest_A.prototype, /** @lends {RoyaleTest_A.prototype} */ {\n/**\n * @type {*}\n */\nfoo: {\nset: RoyaleTest_A.prototype.set__foo}}\n);");
+ }
@Override
protected IBackend createBackend()