Hi Josh,

Is that change necessary? As part of the work I did previously on
reflection I actually removed reflection data from private internal classes
as an optimization, because I did not expect there would not be a need to
reflect into file 'private' classes.
I don't think this is possible in avm? (Might be wrong, but I have
certainly never knowingly done it)



On Thu, May 23, 2019 at 9:04 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 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