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 b533c38  PackageFooterEmitter: added missing ROYALE_REFLECTION_INFO 
for file-internal classes
b533c38 is described below

commit b533c389d9335ce1a17b2fd1241dc1e5e6016bda
Author: Josh Tynjala <[email protected]>
AuthorDate: Wed May 22 14:04:27 2019 -0700

    PackageFooterEmitter: added missing ROYALE_REFLECTION_INFO for 
file-internal classes
    
    Fixes issue where describeType() could not be used on file-internal classes 
because the reflection info was missing
---
 .../codegen/js/jx/PackageFooterEmitter.java        |  19 ++-
 .../codegen/js/royale/TestRoyalePackage.java       | 156 ++++++++++++++++++++-
 .../royale/projects/internal/MainClass_result.js   |  29 ++++
 3 files changed, 188 insertions(+), 16 deletions(-)

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 fec56eb..7c151ac 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
@@ -80,7 +80,6 @@ public class PackageFooterEmitter extends JSSubEmitter 
implements
            {
                        boolean isInterface = tnode instanceof IInterfaceNode;
                        boolean isDynamic = tnode instanceof IClassNode && 
tnode.hasModifier(ASModifier.DYNAMIC);
-               boolean isInternalClass  = !isInterface && tnode instanceof 
IClassNode && getEmitter().getModel().isInternalClass(tnode.getQualifiedName());
                        /*
                     * Metadata
                     *
@@ -199,17 +198,15 @@ public class PackageFooterEmitter extends JSSubEmitter 
implements
        
                        String typeName = 
getEmitter().formatQualifiedName(tnode.getQualifiedName());
        
-                       if (!isInternalClass) {
-                               emitReflectionData(
-                                               typeName,
-                                               reflectionKind,
-                                               varData,
-                                               accessorData,
-                                               methodData,
-                                               metadata);
-                       }
+                       emitReflectionData(
+                                       typeName,
+                                       reflectionKind,
+                                       varData,
+                                       accessorData,
+                                       methodData,
+                                       metadata);
                        
-                   if (!isInterface && !isInternalClass) {
+                   if (!isInterface) {
                        emitReflectionRegisterInitialStaticFields(typeName, 
(ClassDefinition) tnode.getDefinition());
                        }
                   
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 488954a..2d9166c 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
@@ -531,7 +531,32 @@ public class TestRoyalePackage extends TestGoogPackage
                                " *\n" +
                                " * @type {Object.<string, Array.<Object>>}\n" +
                                " */\n" +
-                               
"foo.bar.baz.A.InternalClass.prototype.ROYALE_CLASS_INFO = { names: [{ name: 
'InternalClass', qName: 'foo.bar.baz.A.InternalClass', kind: 'class' }] };"
+                               
"foo.bar.baz.A.InternalClass.prototype.ROYALE_CLASS_INFO = { names: [{ name: 
'InternalClass', qName: 'foo.bar.baz.A.InternalClass', kind: 'class' }] };\n" +
+                               "\n" +
+                               "\n" +
+                               "\n" +
+                               "/**\n" +
+                               " * Reflection\n" +
+                               " *\n" +
+                               " * @return {Object.<string, Function>}\n" +
+                               " */\n" +
+                               
"foo.bar.baz.A.InternalClass.prototype.ROYALE_REFLECTION_INFO = function () 
{\n" +
+                               "  return {\n" +
+                               "    variables: function () {return {};},\n" +
+                               "    accessors: function () {return {};},\n" +
+                               "    methods: function () {\n" +
+                               "      return {\n" +
+                               "        'InternalClass': { type: '', 
declaredBy: 'foo.bar.baz.A.InternalClass'}\n" +
+                               "      };\n" +
+                               "    }\n" +
+                               "  };\n" +
+                               "};\n" +
+                               "/**\n" +
+                               " * @export\n" +
+                               " * @const\n" +
+                               " * @type {number}\n" +
+                               " */\n" +
+                               
"foo.bar.baz.A.InternalClass.prototype.ROYALE_REFLECTION_INFO.compileFlags = 
15;\n"
                );
     }
 
@@ -815,7 +840,45 @@ public class TestRoyalePackage extends TestGoogPackage
                                " *\n" +
                                " * @type {Object.<string, Array.<Object>>}\n" +
                                " */\n" +
-                               
"foo.bar.baz.A.InternalClass.prototype.ROYALE_CLASS_INFO = { names: [{ name: 
'InternalClass', qName: 'foo.bar.baz.A.InternalClass', kind: 'class' }] };"
+                               
"foo.bar.baz.A.InternalClass.prototype.ROYALE_CLASS_INFO = { names: [{ name: 
'InternalClass', qName: 'foo.bar.baz.A.InternalClass', kind: 'class' }] };\n" +
+                               "\n" +
+                               "\n" +
+                               "\n" +
+                               "/**\n" +
+                               " * Reflection\n" +
+                               " *\n" +
+                               " * @return {Object.<string, Function>}\n" +
+                               " */\n" +
+                               
"foo.bar.baz.A.InternalClass.prototype.ROYALE_REFLECTION_INFO = function () 
{\n" +
+                               "  return {\n" +
+                               "    variables: function () {\n" +
+                               "      return {\n" +
+                               "        '|someString': { type: 'String', 
get_set: function (/** * */ v) {return v !== undefined ? 
foo.bar.baz.A.InternalClass.someString = v : 
foo.bar.baz.A.InternalClass.someString;}}\n" +
+                               "      };\n" +
+                               "    },\n" +
+                               "    accessors: function () {return {};},\n" +
+                               "    methods: function () {\n" +
+                               "      return {\n" +
+                               "        'InternalClass': { type: '', 
declaredBy: 'foo.bar.baz.A.InternalClass'},\n" +
+                               "        '|someStaticFunction': { type: 
'String', declaredBy: 'foo.bar.baz.A.InternalClass'},\n" +
+                               "        'someMethod': { type: 'String', 
declaredBy: 'foo.bar.baz.A.InternalClass'}\n" +
+                               "      };\n" +
+                               "    }\n" +
+                               "  };\n" +
+                               "};\n" +
+                               "/**\n" +
+                               " * @export\n" +
+                               " * @const\n" +
+                               " * @type {number}\n" +
+                               " */\n" +
+                               
"foo.bar.baz.A.InternalClass.prototype.ROYALE_REFLECTION_INFO.compileFlags = 
15;\n" +
+                               "/**\n" +
+                               " * Provide reflection support for 
distinguishing dynamic fields on class object (static)\n" +
+                               " * @export\n" +
+                               " * @const\n" +
+                               " * @type {Array<string>}\n" +
+                               " */\n" +
+                               
"foo.bar.baz.A.InternalClass.prototype.ROYALE_REFLECTION_INFO.statics = 
Object.keys(foo.bar.baz.A.InternalClass);\n"
                );
     }
 
@@ -966,7 +1029,36 @@ public class TestRoyalePackage extends TestGoogPackage
                                " *\n" +
                                " * @type {Object.<string, Array.<Object>>}\n" +
                                " */\n" +
-                               
"foo.bar.baz.A.InternalClass.prototype.ROYALE_CLASS_INFO = { names: [{ name: 
'InternalClass', qName: 'foo.bar.baz.A.InternalClass', kind: 'class' }] };"
+                               
"foo.bar.baz.A.InternalClass.prototype.ROYALE_CLASS_INFO = { names: [{ name: 
'InternalClass', qName: 'foo.bar.baz.A.InternalClass', kind: 'class' }] };\n" +
+                               "\n" +
+                               "\n" +
+                               "\n" +
+                               "/**\n" +
+                               " * Reflection\n" +
+                               " *\n" +
+                               " * @return {Object.<string, Function>}\n" +
+                               " */\n" +
+                               
"foo.bar.baz.A.InternalClass.prototype.ROYALE_REFLECTION_INFO = function () 
{\n" +
+                               "  return {\n" +
+                               "    variables: function () {return {};},\n" +
+                               "    accessors: function () {\n" +
+                               "      return {\n" +
+                               "        'someString': { type: 'String', 
access: 'readwrite', declaredBy: 'foo.bar.baz.A.InternalClass'}\n" +
+                               "      };\n" +
+                               "    },\n" +
+                               "    methods: function () {\n" +
+                               "      return {\n" +
+                               "        'InternalClass': { type: '', 
declaredBy: 'foo.bar.baz.A.InternalClass'}\n" +
+                               "      };\n" +
+                               "    }\n" +
+                               "  };\n" +
+                               "};\n" +
+                               "/**\n" +
+                               " * @export\n" +
+                               " * @const\n" +
+                               " * @type {number}\n" +
+                               " */\n" +
+                               
"foo.bar.baz.A.InternalClass.prototype.ROYALE_REFLECTION_INFO.compileFlags = 
15;\n"
                );
     }
 
@@ -1126,7 +1218,33 @@ public class TestRoyalePackage extends TestGoogPackage
                                " *\n" +
                                " * @type {Object.<string, Array.<Object>>}\n" +
                                " */\n" +
-                               
"foo.bar.baz.A.InternalClass.prototype.ROYALE_CLASS_INFO = { names: [{ name: 
'InternalClass', qName: 'foo.bar.baz.A.InternalClass', kind: 'class' }], 
interfaces: [foo.bar.baz.A.ITestInterface] };"
+                               
"foo.bar.baz.A.InternalClass.prototype.ROYALE_CLASS_INFO = { names: [{ name: 
'InternalClass', qName: 'foo.bar.baz.A.InternalClass', kind: 'class' }], 
interfaces: [foo.bar.baz.A.ITestInterface] };\n" +
+                               "\n" +
+                               "\n" +
+                               "\n" +
+                               "/**\n" +
+                               " * Reflection\n" +
+                               " *\n" +
+                               " * @return {Object.<string, Function>}\n" +
+                               " */\n" +
+                               
"foo.bar.baz.A.InternalClass.prototype.ROYALE_REFLECTION_INFO = function () 
{\n" +
+                               "  return {\n" +
+                               "    variables: function () {return {};},\n" +
+                               "    accessors: function () {return {};},\n" +
+                               "    methods: function () {\n" +
+                               "      return {\n" +
+                               "        'InternalClass': { type: '', 
declaredBy: 'foo.bar.baz.A.InternalClass'},\n" +
+                               "        'test': { type: 'void', declaredBy: 
'foo.bar.baz.A.InternalClass'}\n" +
+                               "      };\n" +
+                               "    }\n" +
+                               "  };\n" +
+                               "};\n" +
+                               "/**\n" +
+                               " * @export\n" +
+                               " * @const\n" +
+                               " * @type {number}\n" +
+                               " */\n" +
+                               
"foo.bar.baz.A.InternalClass.prototype.ROYALE_REFLECTION_INFO.compileFlags = 
15;\n"
                );
     }
 
@@ -1189,7 +1307,35 @@ public class TestRoyalePackage extends TestGoogPackage
                                " *\n" +
                                " * @type {Object.<string, Array.<Object>>}\n" +
                                " */\n" +
-                               "foo.bar.A.Internal.prototype.ROYALE_CLASS_INFO 
= { names: [{ name: 'Internal', qName: 'foo.bar.A.Internal', kind: 'class' }] 
};"
+                               "foo.bar.A.Internal.prototype.ROYALE_CLASS_INFO 
= { names: [{ name: 'Internal', qName: 'foo.bar.A.Internal', kind: 'class' }] 
};\n" +
+                               "\n" +
+                               "\n" +
+                               "\n" +
+                               "/**\n" +
+                               " * Reflection\n" +
+                               " *\n" +
+                               " * @return {Object.<string, Function>}\n" +
+                               " */\n" +
+                               
"foo.bar.A.Internal.prototype.ROYALE_REFLECTION_INFO = function () {\n" +
+                               "  return {\n" +
+                               "    variables: function () {return {};},\n" +
+                               "    accessors: function () {return {};},\n" +
+                               "    methods: function () {return {};}\n" +
+                               "  };\n" +
+                               "};\n" +
+                               "/**\n" +
+                               " * @export\n" +
+                               " * @const\n" +
+                               " * @type {number}\n" +
+                               " */\n" +
+                               
"foo.bar.A.Internal.prototype.ROYALE_REFLECTION_INFO.compileFlags = 15;\n" +
+                               "/**\n" +
+                               " * Provide reflection support for 
distinguishing dynamic fields on class object (static)\n" +
+                               " * @export\n" +
+                               " * @const\n" +
+                               " * @type {Array<string>}\n" +
+                               " */\n" +
+                               
"foo.bar.A.Internal.prototype.ROYALE_REFLECTION_INFO.statics = 
Object.keys(foo.bar.A.Internal);\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 f2bff9f..d403d5f 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
@@ -100,3 +100,32 @@ MainClass.InternalClass.prototype.foo = null;
  * @type {Object.<string, Array.<Object>>}
  */
 MainClass.InternalClass.prototype.ROYALE_CLASS_INFO = { names: [{ name: 
'InternalClass', qName: 'MainClass.InternalClass', kind: 'class' }] };
+
+
+
+/**
+ * Reflection
+ *
+ * @return {Object.<string, Function>}
+ */
+MainClass.InternalClass.prototype.ROYALE_REFLECTION_INFO = function () {
+  return {
+    variables: function () {
+      return {
+        'foo': { type: 'OtherClass', get_set: function (/** 
MainClass.InternalClass */ inst, /** * */ v) {return v !== undefined ? inst.foo 
= v : inst.foo;}}
+      };
+    },
+    accessors: function () {return {};},
+    methods: function () {
+      return {
+        'InternalClass': { type: '', declaredBy: 'MainClass.InternalClass'}
+      };
+    }
+  };
+};
+/**
+ * @export
+ * @const
+ * @type {number}
+ */
+MainClass.InternalClass.prototype.ROYALE_REFLECTION_INFO.compileFlags = 9;
\ No newline at end of file

Reply via email to