This is an automated email from the ASF dual-hosted git repository. gregdove pushed a commit to branch amf_updates in repository https://gitbox.apache.org/repos/asf/royale-compiler.git
commit a76198f29f612dd062527625249f60797aabf12b Author: greg-dove <[email protected]> AuthorDate: Tue Feb 26 22:27:55 2019 +1300 Reflection support compiler updates: -some minor fomatting improvements in reflection data output -addition of 'isDynamic' for dynamic classes in CLASS_INFO -support for release build (renamed) access to public vars via 'variables' reflection (using an on-demand getter-setter function) -changes to output for js default initializers to fully populate the prototype with default values, and capture initial static fields of classes. Important for reflection (and serialization) of dynamics -additiion of compileFlags which permits awareness of compiletime settings used at runtime, which may be different between libs (e.g. framework) vs. current project. -removal of reflection data from internal classes. These should not need reflection data, because they are 'private' -updates to compiler tests --- .../royale/compiler/clients/JSConfiguration.java | 20 +- .../internal/codegen/js/jx/FieldEmitter.java | 41 +- .../codegen/js/jx/PackageFooterEmitter.java | 384 +++-- .../codegen/js/royale/JSRoyaleEmitterTokens.java | 4 + .../codegen/mxml/royale/MXMLRoyaleEmitter.java | 20 +- .../driver/js/goog/JSGoogConfiguration.java | 25 +- .../codegen/js/royale/TestRoyaleEmitter.java | 280 ++-- .../codegen/js/royale/TestRoyalePackage.java | 1494 +++++++++++--------- .../royale/projects/bad_overrides/Test_result.js | 6 + .../projects/bad_overrides/classes/A_result.js | 6 + .../projects/bad_overrides/classes/B_result.js | 6 + .../projects/bad_overrides/classes/C_result.js | 6 + .../projects/bad_overrides/interfaces/IA_result.js | 6 + .../projects/bad_overrides/interfaces/IB_result.js | 6 + .../projects/bad_overrides/interfaces/IC_result.js | 6 + .../royale/projects/circular/Base_result.js | 6 + .../royale/projects/circular/Super_result.js | 6 + .../royale/projects/circular_proto/A_result.js | 6 + .../royale/projects/circular_proto/B_result.js | 8 +- .../royale/projects/circular_proto/C_result.js | 8 +- .../royale/projects/circular_proto/D_result.js | 8 +- .../royale/projects/circular_proto/E_result.js | 8 +- .../royale/projects/circular_proto/F_result.js | 8 +- .../royale/projects/interfaces/Test_result.js | 8 +- .../royale/projects/interfaces/classes/A_result.js | 6 + .../royale/projects/interfaces/classes/B_result.js | 6 + .../royale/projects/interfaces/classes/C_result.js | 6 + .../projects/interfaces/interfaces/IA_result.js | 6 + .../projects/interfaces/interfaces/IC_result.js | 6 + .../projects/interfaces/interfaces/ID_result.js | 6 + .../projects/interfaces/interfaces/IE_result.js | 6 + .../royale/projects/internal/MainClass_result.js | 29 +- .../royale/projects/internal/OtherClass_result.js | 6 + .../royale/projects/overrides/Test_result.js | 6 + .../royale/projects/overrides/classes/A_result.js | 6 + .../royale/projects/overrides/classes/B_result.js | 6 + .../royale/projects/overrides/classes/C_result.js | 6 + .../projects/overrides/interfaces/IA_result.js | 6 + .../projects/overrides/interfaces/IB_result.js | 6 + .../projects/overrides/interfaces/IC_result.js | 6 + .../DifferentPackageAsConflict_result.js | 6 + .../Event_result.js | 6 + .../mypackage/TestClass_result.js | 6 + .../otherpackage/Event_result.js | 6 + .../Event_result.js | 7 +- .../NoConflictNoWindow_result.js | 6 + .../mypackage/TestClass_result.js | 6 + .../Event_result.js | 6 + .../NoConflictUseWindow_result.js | 6 + .../mypackage/TestClass_result.js | 6 + .../Event_result.js | 6 + .../SamePackageAsConflict_result.js | 6 + .../mypackage/Event_result.js | 6 + .../mypackage/TestClass_result.js | 6 + .../package_conflicts_use_window/Event_result.js | 6 + .../UseWindow_result.js | 6 + .../mypackage/TestClass_result.js | 6 + .../otherpackage/Event_result.js | 6 + .../resources/royale/projects/super/Base_result.js | 6 + .../royale/projects/super/Super_result.js | 6 + .../projects/xml_requires/XMLRequire_result.js | 6 + 61 files changed, 1602 insertions(+), 1020 deletions(-) diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/clients/JSConfiguration.java b/compiler-jx/src/main/java/org/apache/royale/compiler/clients/JSConfiguration.java index b10853c..b560915 100644 --- a/compiler-jx/src/main/java/org/apache/royale/compiler/clients/JSConfiguration.java +++ b/compiler-jx/src/main/java/org/apache/royale/compiler/clients/JSConfiguration.java @@ -49,7 +49,7 @@ import com.google.common.collect.ImmutableList; * configure() method of {@link MXMLJSC}. * <p> * This class inherits all compiler arguments from the MXMLC compiler. - * + * * @author Michael Schmalle */ public class JSConfiguration extends Configuration @@ -153,7 +153,7 @@ public class JSConfiguration extends Configuration * If the definition of a member cannot be resolved, emit dynamic access * instead of normal member access. Ensures that dynamic members aren't * renamed. - * + * * <code>myObject.memberAccess</code> becomes <code>myObject["memberAccess"]</code> */ @Config @@ -222,7 +222,7 @@ public class JSConfiguration extends Configuration * Example: <code>-define=CONFIG::debugging,true</code> * * In <code>royale-config.xml</code>:<br/> - * + * * <pre> * <royale-config> * <compiler> @@ -251,7 +251,7 @@ public class JSConfiguration extends Configuration * <code>"\"foo\""</code> or <code>"\'foo\'"</code>) or single-quoted (<code>"'foo'"</code>). * * String values in configuration files need only be single- or double- quoted:<br/> - * + * * <pre> * <royale-config> * <compiler> @@ -270,18 +270,18 @@ public class JSConfiguration extends Configuration * * Empty strings <i>must</i> be passed as <code>"''"</code> on the command-line, and <code>''</code> or * <code>""</code> in configuration files. - * + * * Finally, if you have existing definitions in a configuration file, and you would like to add to them with the * command-line (let's say most of your build setCompilertings are in the configuration, and that you are adding one * temporarily using the command-line), you use the following syntax: <code>-define+=TEST::temporary,false</code> * (noting the plus sign) - * + * * Note that definitions can be overridden/redefined if you use the append ("+=") syntax (on the commandline or in a * user config file, for instance) with the same namespace and name, and a new value. - * + * * Definitions cannot be removed/undefined. You can undefine ALL existing definitions from (e.g. from * royale-config.xml) if you do not use append syntax ("=" or append="false"). - * + * * IMPORTANT FOR FLASH BUILDER If you are using "Additional commandline arguments" to "-define", don't use the * following syntax though I suggest it above: -define+=CONFIG::foo,"'value'" The trouble is that FB parses the * double quotes incorrectly as <"'value'> -- the trailing double-quote is dropped. The solution is to avoid inner @@ -382,7 +382,7 @@ public class JSConfiguration extends Configuration @Arguments("filename") public void setJsLoadConfig(ConfigurationValue cv, String filename) throws ConfigurationException { - + } ////////////////////////////////////////////////////////////////////////// @@ -400,7 +400,7 @@ public class JSConfiguration extends Configuration * Configures a list of many manifests mapped to a single namespace URI. * <namespace> <uri>library:adobe/flex/something</uri> <manifest>something-manifest.xml</manifest> * <manifest>something-else-manifest.xml</manifest> ... </namespace> - * + * * @param cfgval The configuration value context. * @param args A List of values for the namespace element, with the first item expected to be the uri and the * remaining are manifest paths. diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FieldEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FieldEmitter.java index dfcff18..a1b4803 100644 --- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FieldEmitter.java +++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FieldEmitter.java @@ -145,7 +145,7 @@ public class FieldEmitter extends JSSubEmitter implements } } getModel().inStaticInitializer = false; - if ((ndef.isStatic() && !EmitterUtils.needsStaticInitializer(vnodeString, className)) || + if ((ndef.isStatic() && !EmitterUtils.needsStaticInitializer(vnodeString, className)) || (!ndef.isStatic() && EmitterUtils.isScalar(vnode)) || isPackageOrFileMember) { @@ -164,7 +164,31 @@ public class FieldEmitter extends JSSubEmitter implements { hasComplexStaticInitializers = true; } - } + + if (!isPackageOrFileMember && !ndef.isStatic() && !EmitterUtils.isScalar(vnode) + && getProject() instanceof RoyaleJSProject + && ((RoyaleJSProject) getProject()).config != null + && ((RoyaleJSProject) getProject()).config.getJsDefaultInitializers() + ) + { + //this value will actually be initialized inside the constructor. + //but if default initializers is set, we define it on the prototype with null value first. + //Why?: this needs to be defined on the prototype to support reflection + //otherwise the constructor initializers will create the new property value on 'this' and + //there is no runtime clue to separate what is 'dynamic' and what is 'inherited' + //these clues throughout the prototype chain are important for runtime identification + //of dynamic fields. + //runtime checks will only work accurately using this technique if the entire inheritance chain + //for the reflection target is compiled with default js initializers, because it permits + //inspection of the prototype chain to determine all the sealed members, and isolate them + //from whatever else is defined as 'own' properties on the instance (which can be assumed to be + // 'dynamic' properties). + write(ASEmitterTokens.SPACE); + writeToken(ASEmitterTokens.EQUAL); + write(ASEmitterTokens.SPACE); + write(ASEmitterTokens.NULL); + } + } if (vnode == null && def != null) { String defName = def.getQualifiedName(); @@ -199,12 +223,17 @@ public class FieldEmitter extends JSSubEmitter implements write(ASEmitterTokens.SPACE); writeToken(ASEmitterTokens.EQUAL); write(IASKeywordConstants.FALSE); + + } else if (defName.equals("*")) { + //setting the value to *undefined* is needed to create the field + //on the prototype - this is important for reflection purposes + write(ASEmitterTokens.SPACE); + writeToken(ASEmitterTokens.EQUAL); + write(ASEmitterTokens.UNDEFINED); } - else if (!defName.equals("*")) + else { - //type * is meant to default to undefined, so it - //doesn't need to be initialized, but everything - //else should default to null + //everything else should default to null write(ASEmitterTokens.SPACE); writeToken(ASEmitterTokens.EQUAL); write(IASKeywordConstants.NULL); 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 0048b91..fec56eb 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 @@ -37,12 +37,14 @@ import org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleDocEmitter; import org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitter; import org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitterTokens; import org.apache.royale.compiler.internal.codegen.js.utils.EmitterUtils; +import org.apache.royale.compiler.internal.definitions.ClassDefinition; import org.apache.royale.compiler.internal.driver.js.goog.JSGoogConfiguration; import org.apache.royale.compiler.internal.projects.RoyaleJSProject; import org.apache.royale.compiler.internal.tree.as.SetterNode; import org.apache.royale.compiler.problems.UnknownTypeProblem; import org.apache.royale.compiler.projects.ICompilerProject; import org.apache.royale.compiler.scopes.IASScope; +import org.apache.royale.compiler.scopes.IDefinitionSet; import org.apache.royale.compiler.tree.ASTNodeID; import org.apache.royale.compiler.tree.as.*; import org.apache.royale.compiler.tree.metadata.IMetaTagNode; @@ -74,13 +76,14 @@ public class PackageFooterEmitter extends JSSubEmitter implements JSRoyaleDocEmitter doc = (JSRoyaleDocEmitter) getEmitter() .getDocEmitter(); - boolean isInterface = tnode instanceof IInterfaceNode; - if (!getEmitter().getModel().isExterns) { - /* + 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 - * + * * @type {Object.<string, Array.<Object>>} */ writeNewline(); @@ -123,7 +126,19 @@ public class PackageFooterEmitter extends JSSubEmitter implements write(ASEmitterTokens.SINGLE_QUOTE); if (isInterface) write(JSRoyaleEmitterTokens.ROYALE_CLASS_INFO_INTERFACE_KIND); else write(JSRoyaleEmitterTokens.ROYALE_CLASS_INFO_CLASS_KIND); - writeToken(ASEmitterTokens.SINGLE_QUOTE); + //writeToken(ASEmitterTokens.SINGLE_QUOTE); + + if (isDynamic) { + //only add the 'isDynamic' tag when it is needed + write(ASEmitterTokens.SINGLE_QUOTE); + writeToken(ASEmitterTokens.COMMA); + write(JSRoyaleEmitterTokens.ROYALE_CLASS_INFO_IS_DYNAMIC); + writeToken(ASEmitterTokens.COLON); + write(ASEmitterTokens.TRUE); + } else { + writeToken(ASEmitterTokens.SINGLE_QUOTE); + } + write(ASEmitterTokens.BLOCK_CLOSE); write(ASEmitterTokens.SQUARE_CLOSE); @@ -184,14 +199,20 @@ public class PackageFooterEmitter extends JSSubEmitter implements String typeName = getEmitter().formatQualifiedName(tnode.getQualifiedName()); - emitReflectionData( - typeName, - reflectionKind, - varData, - accessorData, - methodData, - metadata); - + if (!isInternalClass) { + emitReflectionData( + typeName, + reflectionKind, + varData, + accessorData, + methodData, + metadata); + } + + if (!isInterface && !isInternalClass) { + emitReflectionRegisterInitialStaticFields(typeName, (ClassDefinition) tnode.getDefinition()); + } + emitExportProperties(typeName, exportProperties, exportSymbols); } } @@ -249,7 +270,7 @@ public class PackageFooterEmitter extends JSSubEmitter implements methodData = new ArrayList<MethodData>(); /* * Reflection - * + * * @return {Object.<string, Function>} */ IDefinitionNode[] dnodes; @@ -278,14 +299,14 @@ public class PackageFooterEmitter extends JSSubEmitter implements //todo consider outputting consts, none output for now continue; } - if (ns == IASKeywordConstants.PUBLIC || isInterface) + if (isInterface || (ns != null && ns.equals(IASKeywordConstants.PUBLIC ))) { name = varNode.getName(); IMetaTagsNode metaData = varNode.getMetaTags(); //first deal with 'Bindable' upgrades to getters/setters if (!isInterface && bindableVars.containsKey(name) - && bindableVars.get(name).namespace == IASKeywordConstants.PUBLIC) { + && bindableVars.get(name).namespace.equals(IASKeywordConstants.PUBLIC)) { AccessorData bindableAccessor = new AccessorData(); bindableAccessor.name = name; @@ -347,7 +368,7 @@ public class PackageFooterEmitter extends JSSubEmitter implements staticEventDispatcher.isStatic = true; accessorData.add(staticEventDispatcher); } - + HashMap<String, AccessorData> instanceAccessorMap = new HashMap<String, AccessorData>(); HashMap<String, AccessorData> staticAccessorMap = new HashMap<String, AccessorData>(); for (IDefinitionNode dnode : dnodes) @@ -362,7 +383,8 @@ public class PackageFooterEmitter extends JSSubEmitter implements { IFunctionNode fnNode = (IFunctionNode)dnode; String ns = fnNode.getNamespace(); - if (ns == IASKeywordConstants.PUBLIC || isInterface) + + if (isInterface || (ns != null && ns.equals(IASKeywordConstants.PUBLIC))) { String accessorName = fnNode.getName(); AccessorData data = accessorMap.get(accessorName); @@ -426,7 +448,7 @@ public class PackageFooterEmitter extends JSSubEmitter implements { IFunctionNode fnNode = (IFunctionNode)dnode; String ns = fnNode.getNamespace(); - if (ns == IASKeywordConstants.PUBLIC || isInterface) + if (isInterface || (ns != null && ns.equals(IASKeywordConstants.PUBLIC))) { MethodData data = new MethodData(); data.isStatic = isStatic; @@ -519,6 +541,8 @@ public class PackageFooterEmitter extends JSSubEmitter implements } private void emitReflectionDataEnd(String typeName) { + JSGoogConfiguration config = ((RoyaleJSProject)getWalker().getProject()).config; + writeNewline(); // close return object write(ASEmitterTokens.BLOCK_CLOSE); @@ -529,6 +553,28 @@ public class PackageFooterEmitter extends JSSubEmitter implements writeNewline(); write(ASEmitterTokens.BLOCK_CLOSE); writeNewline(ASEmitterTokens.SEMICOLON); + + if (config == null) return; + //add compiletime descriptor flags + //doc emitter-ish: + writeNewline("/**"); + writeNewline(" * @export"); + writeNewline(" * @const"); + writeNewline(" * @type {number}"); + writeNewline(" */"); + + //{typeName}.prototype.ROYALE_REFLECTION_INFO.compileFlags = {int value here}; + write(typeName); + write(ASEmitterTokens.MEMBER_ACCESS); + write(JSEmitterTokens.PROTOTYPE); + write(ASEmitterTokens.MEMBER_ACCESS); + write(JSRoyaleEmitterTokens.ROYALE_REFLECTION_INFO); + write(ASEmitterTokens.MEMBER_ACCESS); + writeToken(JSRoyaleEmitterTokens.ROYALE_REFLECTION_INFO_COMPILE_TIME_FLAGS); + writeToken(ASEmitterTokens.EQUAL); + // + write(String.valueOf(config.getReflectionFlags())); + writeNewline(ASEmitterTokens.SEMICOLON); } public void emitReflectionData( @@ -538,7 +584,6 @@ public class PackageFooterEmitter extends JSSubEmitter implements List<AccessorData> accessorData, List<MethodData> methodData, IMetaTagNode[] metaData - ) { @@ -586,13 +631,48 @@ public class PackageFooterEmitter extends JSSubEmitter implements write(ASEmitterTokens.SINGLE_QUOTE); write(var.type); write(ASEmitterTokens.SINGLE_QUOTE); - // if (var.isStatic) { - // writeIsStatic(); - // } + + //provide a get_set function that works in release build with public vars + writeToken(ASEmitterTokens.COMMA); + write(JSRoyaleEmitterTokens.ROYALE_REFLECTION_INFO_GET_SET); + writeToken(ASEmitterTokens.COLON); + writeToken(ASEmitterTokens.FUNCTION); + boolean valueIsUntyped = var.type.equals("*"); + if (valueIsUntyped) { + //give the function a local name because a self-reference argument will be used to signify that + //it is not being used as a setter (because 'undefined' is a valid possible value to set) + write("f"); + } + write(ASEmitterTokens.PAREN_OPEN); + + if (!var.isStatic) { + //instance type parameter + writeToken("/** " + typeName + " */"); + write("inst"); + writeToken(ASEmitterTokens.COMMA); + } + //any type for value + write("/** * */ v"); + writeToken(ASEmitterTokens.PAREN_CLOSE); + write(ASEmitterTokens.BLOCK_OPEN); + String getterSetter; + String field = var.isStatic ? typeName + "." + var.name : "inst." + var.name; + if (valueIsUntyped) { + //to avoid setting when type is '*' set the 'value' param to the function being called, which + //causes a 'getter only' result + //In the case of no parameter or literal undefined being passed, it will be treated as the value + //of undefined to be assigned to the variable field + getterSetter = "return v !== f ? "+ field + " = v : " + field + ";"; + } else { + getterSetter = "return v !== undefined ? " + field + " = v : " + field + ";"; + } + write(getterSetter); + write(ASEmitterTokens.BLOCK_CLOSE); + IMetaTagNode[] tags = var.metaData; if (tags != null) { - writeToken(ASEmitterTokens.COMMA); - writeMetaData(tags); + //writeToken(ASEmitterTokens.COMMA); + writeMetaData(tags, true, false); } // close object write(ASEmitterTokens.BLOCK_CLOSE); @@ -651,9 +731,6 @@ public class PackageFooterEmitter extends JSSubEmitter implements write(ASEmitterTokens.SINGLE_QUOTE); write(accessor.type); write(ASEmitterTokens.SINGLE_QUOTE); - // if (accessor.isStatic) { - // writeIsStatic(); - // } writeToken(ASEmitterTokens.COMMA); write("access"); writeToken(ASEmitterTokens.COLON); @@ -669,8 +746,8 @@ public class PackageFooterEmitter extends JSSubEmitter implements IMetaTagNode[] tags = accessor.metaData; if (tags != null) { - writeToken(ASEmitterTokens.COMMA); - writeMetaData(tags); + //writeToken(ASEmitterTokens.COMMA); + writeMetaData(tags, true, false); } // close object write(ASEmitterTokens.BLOCK_CLOSE); @@ -728,9 +805,6 @@ public class PackageFooterEmitter extends JSSubEmitter implements write(ASEmitterTokens.SINGLE_QUOTE); write(method.type); write(ASEmitterTokens.SINGLE_QUOTE); - // if (method.isStatic) { - // writeIsStatic(); - // } writeToken(ASEmitterTokens.COMMA); write("declaredBy"); writeToken(ASEmitterTokens.COLON); @@ -747,8 +821,8 @@ public class PackageFooterEmitter extends JSSubEmitter implements IMetaTagNode[] metas = method.metaData; if (metas != null) { - writeToken(ASEmitterTokens.COMMA); - writeMetaData(metas); + //writeToken(ASEmitterTokens.COMMA); + writeMetaData(metas, true, false); } // close object @@ -764,18 +838,15 @@ public class PackageFooterEmitter extends JSSubEmitter implements // close method function write(ASEmitterTokens.BLOCK_CLOSE); } - - - + if (metaData != null && metaData.length > 0) { - write(ASEmitterTokens.COMMA); - writeNewline(); - writeMetaData(metaData); - } + //write(ASEmitterTokens.COMMA); + //writeNewline(); + writeMetaData(metaData, true, true); + } indentPop(); - emitReflectionDataEnd(typeName); } @@ -798,13 +869,7 @@ public class PackageFooterEmitter extends JSSubEmitter implements writeToken(ASEmitterTokens.SQUARE_CLOSE); } */ - - /*private void writeIsStatic() { - writeToken(ASEmitterTokens.COMMA); - write("isStatic"); - writeToken(ASEmitterTokens.COLON); - writeToken(ASEmitterTokens.TRUE); - }*/ + private void writeEmptyContent(Boolean appendComma, Boolean includeNewline) { //return {}; @@ -830,7 +895,6 @@ public class PackageFooterEmitter extends JSSubEmitter implements // return [ array of parameter definitions ] writeToken(ASEmitterTokens.RETURN); writeToken(ASEmitterTokens.SQUARE_OPEN); - write(ASEmitterTokens.SPACE); int len = params.length; for (int i = 0; i < len ; i++) { @@ -872,96 +936,116 @@ public class PackageFooterEmitter extends JSSubEmitter implements // close function write(ASEmitterTokens.BLOCK_CLOSE); } - - private void writeMetaData(IMetaTagNode[] tags) - { - JSGoogConfiguration config = ((RoyaleJSProject)getWalker().getProject()).config; - Set<String> allowedNames = config.getCompilerKeepAs3Metadata(); - - // metadata: function() { - write("metadata"); - writeToken(ASEmitterTokens.COLON); - writeToken(ASEmitterTokens.FUNCTION); - write(ASEmitterTokens.PAREN_OPEN); - writeToken(ASEmitterTokens.PAREN_CLOSE); - writeToken(ASEmitterTokens.BLOCK_OPEN); - // return [ array of metadata tags ] - writeToken(ASEmitterTokens.RETURN); - writeToken(ASEmitterTokens.SQUARE_OPEN); - + + private ArrayList<IMetaTagNode> getAllowedMetadata(IMetaTagNode[] tags) { + JSGoogConfiguration config = ((RoyaleJSProject)getWalker().getProject()).config; + Set<String> allowedNames = config.getCompilerKeepAs3Metadata(); + ArrayList<IMetaTagNode> filteredTags = new ArrayList<IMetaTagNode>(tags.length); for (IMetaTagNode tag : tags) { if (allowedNames.contains(tag.getTagName())) filteredTags.add(tag); - } - - int count = 0; + return filteredTags; + } + + private void writeAllowedMetadata(ArrayList<IMetaTagNode> filteredTags ) { + int count = 0; int len = filteredTags.size(); - for (IMetaTagNode tag : filteredTags) - { - - - count++; - // { name: <tag name> - writeToken(ASEmitterTokens.BLOCK_OPEN); - write("name"); - writeToken(ASEmitterTokens.COLON); - write(ASEmitterTokens.SINGLE_QUOTE); - write(tag.getTagName()); - write(ASEmitterTokens.SINGLE_QUOTE); - IMetaTagAttribute[] args = tag.getAllAttributes(); - if (args.length > 0) - { - writeToken(ASEmitterTokens.COMMA); - - // args: [ - write("args"); - writeToken(ASEmitterTokens.COLON); - writeToken(ASEmitterTokens.SQUARE_OPEN); - - for (int j = 0; j < args.length; j++) - { - if (j > 0) - { - writeToken(ASEmitterTokens.COMMA); - } - // { key: key, value: value } - IMetaTagAttribute arg = args[j]; - writeToken(ASEmitterTokens.BLOCK_OPEN); - write("key"); - writeToken(ASEmitterTokens.COLON); - write(ASEmitterTokens.SINGLE_QUOTE); - String key = arg.getKey(); - write(key == null ? "" : key); - write(ASEmitterTokens.SINGLE_QUOTE); - writeToken(ASEmitterTokens.COMMA); - write("value"); - writeToken(ASEmitterTokens.COLON); - write(ASEmitterTokens.SINGLE_QUOTE); - write(formatJSStringValue(arg.getValue())); - write(ASEmitterTokens.SINGLE_QUOTE); + + // metadata: function() { + write("metadata"); + writeToken(ASEmitterTokens.COLON); + writeToken(ASEmitterTokens.FUNCTION); + write(ASEmitterTokens.PAREN_OPEN); + writeToken(ASEmitterTokens.PAREN_CLOSE); + writeToken(ASEmitterTokens.BLOCK_OPEN); + // return [ array of metadata tags ] + writeToken(ASEmitterTokens.RETURN); + writeToken(ASEmitterTokens.SQUARE_OPEN); + + for (IMetaTagNode tag : filteredTags) + { + count++; + // { name: <tag name> + writeToken(ASEmitterTokens.BLOCK_OPEN); + write("name"); + writeToken(ASEmitterTokens.COLON); + write(ASEmitterTokens.SINGLE_QUOTE); + write(tag.getTagName()); + write(ASEmitterTokens.SINGLE_QUOTE); + IMetaTagAttribute[] args = tag.getAllAttributes(); + if (args.length > 0) + { + writeToken(ASEmitterTokens.COMMA); + + // args: [ + write("args"); + writeToken(ASEmitterTokens.COLON); + writeToken(ASEmitterTokens.SQUARE_OPEN); + + for (int j = 0; j < args.length; j++) + { + if (j > 0) + { + writeToken(ASEmitterTokens.COMMA); + } + // { key: key, value: value } + IMetaTagAttribute arg = args[j]; + writeToken(ASEmitterTokens.BLOCK_OPEN); + write("key"); + writeToken(ASEmitterTokens.COLON); + write(ASEmitterTokens.SINGLE_QUOTE); + String key = arg.getKey(); + write(key == null ? "" : key); + write(ASEmitterTokens.SINGLE_QUOTE); + writeToken(ASEmitterTokens.COMMA); + write("value"); + writeToken(ASEmitterTokens.COLON); + write(ASEmitterTokens.SINGLE_QUOTE); + write(formatJSStringValue(arg.getValue())); + write(ASEmitterTokens.SINGLE_QUOTE); write(ASEmitterTokens.SPACE); - write(ASEmitterTokens.BLOCK_CLOSE); - } - // close array of args + write(ASEmitterTokens.BLOCK_CLOSE); + } + // close array of args write(ASEmitterTokens.SPACE); - write(ASEmitterTokens.SQUARE_CLOSE); - } - // close metadata object + write(ASEmitterTokens.SQUARE_CLOSE); + } + // close metadata object write(ASEmitterTokens.SPACE); - write(ASEmitterTokens.BLOCK_CLOSE); + write(ASEmitterTokens.BLOCK_CLOSE); if (count > 0 && count < len) { writeToken(ASEmitterTokens.COMMA); } - } - // close array of metadatas + } + // close array of metadatas write(ASEmitterTokens.SPACE); - write(ASEmitterTokens.SQUARE_CLOSE); - writeToken(ASEmitterTokens.SEMICOLON); - // close function - write(ASEmitterTokens.BLOCK_CLOSE); + write(ASEmitterTokens.SQUARE_CLOSE); + writeToken(ASEmitterTokens.SEMICOLON); + // close function + write(ASEmitterTokens.BLOCK_CLOSE); + } + + private void writeMetaData(IMetaTagNode[] tags, boolean prefixComma, boolean prefixNewline) + { + ArrayList<IMetaTagNode> filteredTags = getAllowedMetadata(tags); + if (filteredTags.size() == 0) { + //nothing to write + return; + } + if (prefixNewline) { + if (prefixComma) { + write(ASEmitterTokens.COMMA); + } + writeNewline(); + } else { + if (prefixComma) { + writeToken(ASEmitterTokens.COMMA); + } + } + writeAllowedMetadata(filteredTags); } private String formatJSStringValue(String value) { @@ -969,6 +1053,52 @@ public class PackageFooterEmitter extends JSSubEmitter implements value = value.replace("'","\\'"); return value; } + + public void emitReflectionRegisterInitialStaticFields(String typeName, IClassDefinition classDef) { + //this is only output if the default initializers are enabled (otherwise runtime reflection results are not reliable) + //local config check here (instead of call site check) - in case this needs to change in the future: + JSGoogConfiguration config = ((RoyaleJSProject)getWalker().getProject()).config; + if (config == null || !config.getJsDefaultInitializers()) return; + + boolean needsStaticsList = false; + Collection<IDefinitionSet> defs = classDef.getContainedScope().getAllLocalDefinitionSets(); + for (IDefinitionSet set : defs) { + for (int i = 0, l = set.getSize(); i < l; ++i) { + IDefinition d = set.getDefinition(i); + if (d.isStatic()) { + needsStaticsList = true; + break; + } + } + if (needsStaticsList) break; + } + if (needsStaticsList) { + //support for reflection on static classes: supports ability to distinguish between initial fields and dynamic fields + //doc emitter-ish: + writeNewline("/**"); + writeNewline(" * Provide reflection support for distinguishing dynamic fields on class object (static)"); + writeNewline(" * @export"); + writeNewline(" * @const"); + writeNewline(" * @type {Array<string>}"); + writeNewline(" */"); + + //{typeName}.prototype.ROYALE_REFLECTION_INFO.statics = Object.keys({typeName}); + write(typeName); + write(ASEmitterTokens.MEMBER_ACCESS); + write(JSEmitterTokens.PROTOTYPE); + write(ASEmitterTokens.MEMBER_ACCESS); + write(JSRoyaleEmitterTokens.ROYALE_REFLECTION_INFO); + write(ASEmitterTokens.MEMBER_ACCESS); + writeToken(JSRoyaleEmitterTokens.ROYALE_REFLECTION_INFO_INITIAL_STATICS); + writeToken(ASEmitterTokens.EQUAL); + write("Object.keys"); + write(ASEmitterTokens.PAREN_OPEN); + write(typeName); + write(ASEmitterTokens.PAREN_CLOSE); + write(ASEmitterTokens.SEMICOLON); + writeNewline(); + } + } public void emitExportProperties(String typeName, ArrayList<String> exportProperties, ArrayList<String> exportSymbols) { diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitterTokens.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitterTokens.java index 8155c0d..20bc298 100644 --- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitterTokens.java +++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitterTokens.java @@ -28,9 +28,13 @@ public enum JSRoyaleEmitterTokens implements IEmitterTokens { ROYALE_CLASS_INFO("ROYALE_CLASS_INFO"), ROYALE_REFLECTION_INFO("ROYALE_REFLECTION_INFO"), + ROYALE_REFLECTION_INFO_GET_SET("get_set"), + ROYALE_REFLECTION_INFO_INITIAL_STATICS("statics"), + ROYALE_REFLECTION_INFO_COMPILE_TIME_FLAGS("compileFlags"), ROYALE_CLASS_INFO_KIND("kind"), ROYALE_CLASS_INFO_CLASS_KIND("class"), ROYALE_CLASS_INFO_INTERFACE_KIND("interface"), + ROYALE_CLASS_INFO_IS_DYNAMIC("isDynamic"), GOOG_EXPORT_PROPERTY("goog.exportProperty"), GOOG_EXPORT_SYMBOL("goog.exportSymbol"), INDENT(" "), diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java index a1e1d3e..159afe2 100644 --- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java +++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java @@ -1184,16 +1184,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements data.isStatic = false; data.declaredBy = cdef.getQualifiedName(); } - - - for (MXMLEventSpecifier event : events) - { - PackageFooterEmitter.MethodData data = asEmitter.packageFooterEmitter.new MethodData(); - methodData.add(data); - data.name = event.eventHandler; - data.type = ASEmitterTokens.VOID.getToken(); - data.declaredBy = cdef.getQualifiedName(); - } + ArrayList<IMetaTagNode> metadataTagNodes = new ArrayList<IMetaTagNode>(); for (IMXMLMetadataNode metadataTag : metadataNodes) { @@ -1212,6 +1203,11 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements accessorData, methodData, metadataTagNodes.toArray(metaDataTags)); + + asEmitter.packageFooterEmitter.emitReflectionRegisterInitialStaticFields( + formatQualifiedName(cdef.getQualifiedName()), + cdef); + asEmitter.packageFooterEmitter.emitExportProperties( formatQualifiedName(cdef.getQualifiedName()), exportProperties, @@ -1476,14 +1472,14 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements StringBuilder sb = new StringBuilder(); MXMLBindingNode node = (MXMLBindingNode)bi.node; IMXMLBindingAttributeNode destNode = node.getDestinationAttributeNode(); - Stack<IASNode> nodeStack = new Stack<IASNode>(); + Stack<IASNode> nodeStack = new Stack<IASNode>(); nodeStack.push(node); IASNode parentNode = node.getParent(); while (!(parentNode instanceof IMXMLInstanceNode)) { nodeStack.push(parentNode); parentNode = parentNode.getParent(); - } + } boolean isXML = parentNode instanceof IMXMLXMLNode; sb.append("this."); sb.append(((IMXMLInstanceNode)parentNode).getEffectiveID()); diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/js/goog/JSGoogConfiguration.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/js/goog/JSGoogConfiguration.java index 3009d3c..45af81c 100644 --- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/js/goog/JSGoogConfiguration.java +++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/js/goog/JSGoogConfiguration.java @@ -46,7 +46,7 @@ import org.apache.royale.compiler.internal.config.annotations.Mapping; * configure() method of {@link MXMLJSC}. * <p> * This class inherits all compiler arguments from the MXMLC compiler. - * + * * @author Erik de Bruin */ public class JSGoogConfiguration extends JSConfiguration @@ -488,7 +488,28 @@ public class JSGoogConfiguration extends JSConfiguration { this.externsReportFileName = getOutputPath(cv, filename); } - + + /** + * Support for reflection data output to represent selected config options + * that were used when compiling + * @return an integer representation of bit flags representing + */ + public int getReflectionFlags() { + int ret = 0; + final int WITH_DEFAULT_INITIALIZERS = 1; + final int HAS_KEEP_AS3_METADATA = 2; + final int HAS_KEEP_CODE_WITH_METADATA = 4; + final int HAS_EXPORT_PUBLIC_SYMBOLS = 8; + final int EXPORT_PROTECTED_SYMBOLS = 16; + + if (getJsDefaultInitializers()) ret |= WITH_DEFAULT_INITIALIZERS; + if (getCompilerKeepAs3Metadata().size() > 0) ret |= HAS_KEEP_AS3_METADATA; + if (getCompilerKeepCodeWithMetadata().size() > 0) ret |= HAS_KEEP_CODE_WITH_METADATA; + if (getExportPublicSymbols()) ret |= HAS_EXPORT_PUBLIC_SYMBOLS; + if (getExportProtectedSymbols()) ret |= EXPORT_PROTECTED_SYMBOLS; + + return ret; + } } diff --git a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleEmitter.java b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleEmitter.java index 69c529e..6a96320 100644 --- a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleEmitter.java +++ b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleEmitter.java @@ -59,92 +59,98 @@ public class TestRoyaleEmitter extends TestGoogEmitter IFileNode node = compileAS(code); asBlockWalker.visitFile(node); assertOutWithMetadata("/**\n" + - " * com.example.components.MyEventTarget\n" + - " *\n" + - " * @fileoverview\n" + - " *\n" + - " * @suppress {checkTypes|accessControls}\n" + - " */\n" + - "\n" + - "goog.provide('com.example.components.MyEventTarget');\n" + - "\n" + - "goog.require('custom.TestImplementation');\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * @constructor\n" + - " * @extends {custom.TestImplementation}\n" + - " */\n" + - "com.example.components.MyEventTarget = function() {\n" + - " com.example.components.MyEventTarget.base(this, 'constructor');\n" + - " if (foo() != 42) {\n" + - " bar();\n" + - " }\n" + - "};\n" + - "goog.inherits(com.example.components.MyEventTarget, custom.TestImplementation);\n" + - "\n" + - "\n" + - "/**\n" + - " * Prevent renaming of class. Needed for reflection.\n" + - " */\n" + - "goog.exportSymbol('com.example.components.MyEventTarget', com.example.components.MyEventTarget);\n" + - "\n" + - "\n" + - "/**\n" + - " * @private\n" + - " * @type {string}\n" + - " */\n" + - "com.example.components.MyEventTarget.prototype._privateVar = \"do \";\n" + - "\n" + - "\n" + - "/**\n" + - " * @export\n" + - " * @type {number}\n" + - " */\n" + - "com.example.components.MyEventTarget.prototype.publicProperty = 100;\n" + - "\n" + - "\n" + - "/**\n" + - " * @export\n" + - " * @param {string} value\n" + - " * @return {string}\n" + - " */\n" + - "com.example.components.MyEventTarget.prototype.myFunction = function(value) {\n" + - " return \"Don't \" + this._privateVar + value;\n" + - "};\n" + - "\n" + - "\n" + - "/**\n" + - " * Metadata\n" + - " *\n" + - " * @type {Object.<string, Array.<Object>>}\n" + - " */\n" + - "com.example.components.MyEventTarget.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'MyEventTarget', qName: 'com.example.components.MyEventTarget', kind: 'class' }] };\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * Reflection\n" + - " *\n" + - " * @return {Object.<string, Function>}\n" + - " */\n" + - "com.example.components.MyEventTarget.prototype.ROYALE_REFLECTION_INFO = function () {\n" + - " return {\n" + - " variables: function () {\n" + - " return {\n" + - " 'publicProperty': { type: 'Number'}\n" + - " };\n" + - " },\n" + - " accessors: function () {return {};},\n" + - " methods: function () {\n" + - " return {\n" + - " 'MyEventTarget': { type: '', declaredBy: 'com.example.components.MyEventTarget'},\n" + - " 'myFunction': { type: 'String', declaredBy: 'com.example.components.MyEventTarget', parameters: function () { return [ { index: 1, type: 'String', optional: false } ]; }}\n" + - " };\n" + - " }\n" + - " };\n" + - "};\n"); + " * com.example.components.MyEventTarget\n" + + " *\n" + + " * @fileoverview\n" + + " *\n" + + " * @suppress {checkTypes|accessControls}\n" + + " */\n" + + "\n" + + "goog.provide('com.example.components.MyEventTarget');\n" + + "\n" + + "goog.require('custom.TestImplementation');\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * @constructor\n" + + " * @extends {custom.TestImplementation}\n" + + " */\n" + + "com.example.components.MyEventTarget = function() {\n" + + " com.example.components.MyEventTarget.base(this, 'constructor');\n" + + " if (foo() != 42) {\n" + + " bar();\n" + + " }\n" + + "};\n" + + "goog.inherits(com.example.components.MyEventTarget, custom.TestImplementation);\n" + + "\n" + + "\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('com.example.components.MyEventTarget', com.example.components.MyEventTarget);\n" + + "\n" + + "\n" + + "/**\n" + + " * @private\n" + + " * @type {string}\n" + + " */\n" + + "com.example.components.MyEventTarget.prototype._privateVar = \"do \";\n" + + "\n" + + "\n" + + "/**\n" + + " * @export\n" + + " * @type {number}\n" + + " */\n" + + "com.example.components.MyEventTarget.prototype.publicProperty = 100;\n" + + "\n" + + "\n" + + "/**\n" + + " * @export\n" + + " * @param {string} value\n" + + " * @return {string}\n" + + " */\n" + + "com.example.components.MyEventTarget.prototype.myFunction = function(value) {\n" + + " return \"Don't \" + this._privateVar + value;\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Metadata\n" + + " *\n" + + " * @type {Object.<string, Array.<Object>>}\n" + + " */\n" + + "com.example.components.MyEventTarget.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'MyEventTarget', qName: 'com.example.components.MyEventTarget', kind: 'class' }] };\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * Reflection\n" + + " *\n" + + " * @return {Object.<string, Function>}\n" + + " */\n" + + "com.example.components.MyEventTarget.prototype.ROYALE_REFLECTION_INFO = function () {\n" + + " return {\n" + + " variables: function () {\n" + + " return {\n" + + " 'publicProperty': { type: 'Number', get_set: function (/** com.example.components.MyEventTarget */ inst, /** * */ v) {return v !== undefined ? inst.publicProperty = v : inst.publicProperty;}}\n" + + " };\n" + + " },\n" + + " accessors: function () {return {};},\n" + + " methods: function () {\n" + + " return {\n" + + " 'MyEventTarget': { type: '', declaredBy: 'com.example.components.MyEventTarget'},\n" + + " 'myFunction': { type: 'String', declaredBy: 'com.example.components.MyEventTarget', parameters: function () { return [ { index: 1, type: 'String', optional: false } ]; }}\n" + + " };\n" + + " }\n" + + " };\n" + + "};\n" + + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "com.example.components.MyEventTarget.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8;\n"); } @Override @@ -156,49 +162,55 @@ public class TestRoyaleEmitter extends TestGoogEmitter IFileNode node = compileAS(code); asBlockWalker.visitFile(node); assertOutWithMetadata("/**\n" + - " * com.example.components.TestInterface\n" + - " *\n" + - " * @fileoverview\n" + - " *\n" + - " * @suppress {checkTypes|accessControls}\n" + - " */\n" + - "\n" + - "goog.provide('com.example.components.TestInterface');\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * @interface\n" + - " */\ncom.example.components.TestInterface = function() {\n" + - "};\n" + - "\n" + + " * com.example.components.TestInterface\n" + + " *\n" + + " * @fileoverview\n" + + " *\n" + + " * @suppress {checkTypes|accessControls}\n" + + " */\n" + + "\n" + + "goog.provide('com.example.components.TestInterface');\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * @interface\n" + + " */\ncom.example.components.TestInterface = function() {\n" + + "};\n" + + "\n" + "\n" + "/**\n" + " * Prevent renaming of class. Needed for reflection.\n" + " */\n" + "goog.exportSymbol('com.example.components.TestInterface', com.example.components.TestInterface);\n" + - "\n" + - "\n" + - "/**\n" + - " * Metadata\n" + - " *\n" + - " * @type {Object.<string, Array.<Object>>}\n" + - " */\n" + - "com.example.components.TestInterface.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'TestInterface', qName: 'com.example.components.TestInterface', kind: 'interface' }] };\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * Reflection\n" + - " *\n" + - " * @return {Object.<string, Function>}\n" + - " */\n" + - "com.example.components.TestInterface.prototype.ROYALE_REFLECTION_INFO = function () {\n" + - " return {\n" + - " accessors: function () {return {};},\n" + - " methods: function () {return {};}\n" + - " };\n" + - "};\n"); + "\n" + + "\n" + + "/**\n" + + " * Metadata\n" + + " *\n" + + " * @type {Object.<string, Array.<Object>>}\n" + + " */\n" + + "com.example.components.TestInterface.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'TestInterface', qName: 'com.example.components.TestInterface', kind: 'interface' }] };\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * Reflection\n" + + " *\n" + + " * @return {Object.<string, Function>}\n" + + " */\n" + + "com.example.components.TestInterface.prototype.ROYALE_REFLECTION_INFO = function () {\n" + + " return {\n" + + " accessors: function () {return {};},\n" + + " methods: function () {return {};}\n" + + " };\n" + + "};\n" + + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "com.example.components.TestInterface.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8;\n"); } @Override @@ -254,7 +266,13 @@ public class TestRoyaleEmitter extends TestGoogEmitter " accessors: function () {return {};},\n" + " methods: function () {return {};}\n" + " };\n" + - "};\n"); + "};\n" + + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "com.example.components.TestClass.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8;\n"); } @Test @@ -283,9 +301,9 @@ public class TestRoyaleEmitter extends TestGoogEmitter "\n" + "\n" + "/**\n" + - " * <inject_html>\n" + + " * <inject_html>\n" + " * This will be injected.\n" + - " * </inject_html>\n" + + " * </inject_html>\n" + " * @constructor\n" + " */\n" + "com.example.components.TestClass = function() {\n" + @@ -322,7 +340,13 @@ public class TestRoyaleEmitter extends TestGoogEmitter " };\n" + " }\n" + " };\n" + - "};\n"); + "};\n" + + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "com.example.components.TestClass.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8;\n"); } 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 15a4d07..32815fb 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 @@ -61,7 +61,7 @@ public class TestRoyalePackage extends TestGoogPackage // with block disallows implicit blocks from getting { } // (erikdebruin) the constuctor IS the class definition, in 'goog' JS, - // therefor we need to write out implicit constructors + // therefor we need to write out implicit constructors // (if I understand the term correctly) IFileNode node = compileAS("package {public class A{}}"); @@ -105,7 +105,13 @@ public class TestRoyalePackage extends TestGoogPackage " accessors: function () {return {};},\n" + " methods: function () {return {};}\n" + " };\n" + - "};\n"); + "};\n"+ + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "A.prototype.ROYALE_REFLECTION_INFO.compileFlags = 14;\n"); } @Override @@ -153,7 +159,13 @@ public class TestRoyalePackage extends TestGoogPackage " accessors: function () {return {};},\n" + " methods: function () {return {};}\n" + " };\n" + - "};\n"); + "};\n"+ + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO.compileFlags = 14;\n"); } @Override @@ -163,49 +175,63 @@ public class TestRoyalePackage extends TestGoogPackage IFileNode node = compileAS("package foo.bar.baz {public class A{public function A(){}}}"); asBlockWalker.visitFile(node); assertOutWithMetadata("/**\n" + - " * foo.bar.baz.A\n" + - " *\n" + - " * @fileoverview\n" + - " *\n" + - " * @suppress {checkTypes|accessControls}\n" + - " */\n" + - "\n" + - "goog.provide('foo.bar.baz.A');\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * @constructor\n" + - " */\n" + - "foo.bar.baz.A = function() {\n" + - "};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + - "\n" + - "\n" + - "/**\n" + - " * Metadata\n" + - " *\n" + - " * @type {Object.<string, Array.<Object>>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * Reflection\n" + - " *\n" + - " * @return {Object.<string, Function>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + - " return {\n" + + " * foo.bar.baz.A\n" + + " *\n" + + " * @fileoverview\n" + + " *\n" + + " * @suppress {checkTypes|accessControls}\n" + + " */\n" + + "\n" + + "goog.provide('foo.bar.baz.A');\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * @constructor\n" + + " */\n" + + "foo.bar.baz.A = function() {\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + + "\n" + + "\n" + + "/**\n" + + " * Metadata\n" + + " *\n" + + " * @type {Object.<string, Array.<Object>>}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * Reflection\n" + + " *\n" + + " * @return {Object.<string, Function>}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + + " return {\n" + " variables: function () {return {};},\n" + " accessors: function () {return {};},\n" + - " methods: function () {\n" + - " return {\n" + - " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + - " };\n" + - " }\n" + - " };\n" + - "};\n"); + " methods: function () {\n" + + " return {\n" + + " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + + " };\n" + + " }\n" + + " };\n" + + "};\n" + + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO.compileFlags = 14;\n" + + ); } @Override @@ -215,54 +241,66 @@ public class TestRoyalePackage extends TestGoogPackage IFileNode node = compileAS("package foo.bar.baz {public class A{public function A(){if (a){for (var i:Object in obj){doit();}}}}}"); asBlockWalker.visitFile(node); assertOutWithMetadata("/**\n" + - " * foo.bar.baz.A\n" + - " *\n" + - " * @fileoverview\n" + - " *\n" + - " * @suppress {checkTypes|accessControls}\n" + - " */\n" + - "\n" + - "goog.provide('foo.bar.baz.A');\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * @constructor\n" + - " */\n" + - "foo.bar.baz.A = function() {\n" + - " if (a) {\n" + - " for (var /** @type {Object} */ i in obj) {\n" + - " doit();\n" + - " }\n" + - " }\n" + - "};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + - "\n" + - "\n" + - "/**\n" + - " * Metadata\n" + - " *\n" + - " * @type {Object.<string, Array.<Object>>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * Reflection\n" + - " *\n" + - " * @return {Object.<string, Function>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + - " return {\n" + + " * foo.bar.baz.A\n" + + " *\n" + + " * @fileoverview\n" + + " *\n" + + " * @suppress {checkTypes|accessControls}\n" + + " */\n" + + "\n" + + "goog.provide('foo.bar.baz.A');\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * @constructor\n" + + " */\n" + + "foo.bar.baz.A = function() {\n" + + " if (a) {\n" + + " for (var /** @type {Object} */ i in obj) {\n" + + " doit();\n" + + " }\n" + + " }\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + + "\n" + + "\n" + + "/**\n" + + " * Metadata\n" + + " *\n" + + " * @type {Object.<string, Array.<Object>>}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * Reflection\n" + + " *\n" + + " * @return {Object.<string, Function>}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + + " return {\n" + " variables: function () {return {};},\n" + " accessors: function () {return {};},\n" + - " methods: function () {\n" + - " return {\n" + - " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + - " };\n" + - " }\n" + - " };\n" + - "};\n"); + " methods: function () {\n" + + " return {\n" + + " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + + " };\n" + + " }\n" + + " };\n" + + "};\n" + + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO.compileFlags = 14;\n"); } @Test @@ -271,50 +309,62 @@ public class TestRoyalePackage extends TestGoogPackage IFileNode node = compileAS("package foo.bar.baz {[Event(name='add', type='mx.events.FlexEvent')]\npublic class A{public function A(){}}}"); asBlockWalker.visitFile(node); assertOutWithMetadata("/**\n" + - " * foo.bar.baz.A\n" + - " *\n" + - " * @fileoverview\n" + - " *\n" + - " * @suppress {checkTypes|accessControls}\n" + - " */\n" + - "\n" + - "goog.provide('foo.bar.baz.A');\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * @constructor\n" + - " */\n" + - "foo.bar.baz.A = function() {\n" + - "};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + - "\n" + - "\n" + - "/**\n" + - " * Metadata\n" + - " *\n" + - " * @type {Object.<string, Array.<Object>>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * Reflection\n" + - " *\n" + - " * @return {Object.<string, Function>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + - " return {\n" + + " * foo.bar.baz.A\n" + + " *\n" + + " * @fileoverview\n" + + " *\n" + + " * @suppress {checkTypes|accessControls}\n" + + " */\n" + + "\n" + + "goog.provide('foo.bar.baz.A');\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * @constructor\n" + + " */\n" + + "foo.bar.baz.A = function() {\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + + "\n" + + "\n" + + "/**\n" + + " * Metadata\n" + + " *\n" + + " * @type {Object.<string, Array.<Object>>}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * Reflection\n" + + " *\n" + + " * @return {Object.<string, Function>}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + + " return {\n" + " variables: function () {return {};},\n" + " accessors: function () {return {};},\n" + - " methods: function () {\n" + - " return {\n" + - " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + - " };\n" + - " },\n" + - " metadata: function () { return [ { name: 'Event', args: [ { key: 'name', value: 'add' }, { key: 'type', value: 'mx.events.FlexEvent' } ] } ]; }\n" + - " };\n" + - "};\n"); + " methods: function () {\n" + + " return {\n" + + " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + + " };\n" + + " },\n" + + " metadata: function () { return [ { name: 'Event', args: [ { key: 'name', value: 'add' }, { key: 'type', value: 'mx.events.FlexEvent' } ] } ]; }\n" + + " };\n" + + "};\n" + + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO.compileFlags = 14;\n"); } @Test @@ -323,58 +373,71 @@ public class TestRoyalePackage extends TestGoogPackage IFileNode node = compileAS("package foo.bar.baz {[Event(name='add', type='mx.events.FlexEvent')]\npublic class A{public function A(){}\n[Before]\npublic function foo() {}}}"); asBlockWalker.visitFile(node); assertOutWithMetadata("/**\n" + - " * foo.bar.baz.A\n" + - " *\n" + - " * @fileoverview\n" + - " *\n" + - " * @suppress {checkTypes|accessControls}\n" + - " */\n" + - "\n" + - "goog.provide('foo.bar.baz.A');\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * @constructor\n" + - " */\n" + - "foo.bar.baz.A = function() {\n" + - "};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + - "\n" + - "\n" + - "/**\n" + - " * @export\n" + - " */\n" + - "foo.bar.baz.A.prototype.foo = function() {\n};\n" + - "\n" + - "\n" + - "/**\n" + - " * Metadata\n" + - " *\n" + - " * @type {Object.<string, Array.<Object>>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * Reflection\n" + - " *\n" + - " * @return {Object.<string, Function>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + - " return {\n" + + " * foo.bar.baz.A\n" + + " *\n" + + " * @fileoverview\n" + + " *\n" + + " * @suppress {checkTypes|accessControls}\n" + + " */\n" + + "\n" + + "goog.provide('foo.bar.baz.A');\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * @constructor\n" + + " */\n" + + "foo.bar.baz.A = function() {\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + + "\n" + + "\n" + + "/**\n" + + " * @export\n" + + " */\n" + + "foo.bar.baz.A.prototype.foo = function() {\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Metadata\n" + + " *\n" + + " * @type {Object.<string, Array.<Object>>}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * Reflection\n" + + " *\n" + + " * @return {Object.<string, Function>}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + + " return {\n" + " variables: function () {return {};},\n" + " accessors: function () {return {};},\n" + - " methods: function () {\n" + - " return {\n" + - " 'A': { type: '', declaredBy: 'foo.bar.baz.A'},\n" + - " 'foo': { type: '', declaredBy: 'foo.bar.baz.A', metadata: function () { return [ { name: 'Before' } ]; }}\n" + - " };\n" + - " },\n" + - " metadata: function () { return [ { name: 'Event', args: [ { key: 'name', value: 'add' }, { key: 'type', value: 'mx.events.FlexEvent' } ] } ]; }\n" + - " };\n" + - "};\n" + - "goog.exportProperty(foo.bar.baz.A.prototype, 'foo', foo.bar.baz.A.prototype.foo);\n"); + " methods: function () {\n" + + " return {\n" + + " 'A': { type: '', declaredBy: 'foo.bar.baz.A'},\n" + + " 'foo': { type: '', declaredBy: 'foo.bar.baz.A', metadata: function () { return [ { name: 'Before' } ]; }}\n" + + " };\n" + + " },\n" + + " metadata: function () { return [ { name: 'Event', args: [ { key: 'name', value: 'add' }, { key: 'type', value: 'mx.events.FlexEvent' } ] } ]; }\n" + + " };\n" + + "};\n" + + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO.compileFlags = 14;\n" + + "goog.exportProperty(foo.bar.baz.A.prototype, 'foo', foo.bar.baz.A.prototype.foo);\n" ); } @Test @@ -390,86 +453,86 @@ public class TestRoyalePackage extends TestGoogPackage "}"); asBlockWalker.visitFile(node); assertOutWithMetadata("/**\n" + - " * foo.bar.baz.A\n" + - " *\n" + - " * @fileoverview\n" + - " *\n" + - " * @suppress {checkTypes|accessControls}\n" + - " */\n" + - "\n" + - "goog.provide('foo.bar.baz.A');\n" + - "goog.provide('foo.bar.baz.A.InternalClass');\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * @constructor\n" + - " */\n" + - "foo.bar.baz.A = function() {\n" + - " var /** @type {foo.bar.baz.A.InternalClass} */ internalClass = new foo.bar.baz.A.InternalClass();\n" + - "};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + - "\n" + - "\n/" + - "**\n" + - " * Metadata\n" + - " *\n" + - " * @type {Object.<string, Array.<Object>>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * Reflection\n" + - " *\n" + - " * @return {Object.<string, Function>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + - " return {\n" + - " variables: function () {return {};},\n" + - " accessors: function () {return {};},\n" + - " methods: function () {\n" + - " return {\n" + - " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + - " };\n" + - " }\n" + - " };\n" + - "};\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * @constructor\n" + - " */\n" + - "foo.bar.baz.A.InternalClass = function() {\n" + - "};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('foo.bar.baz.A.InternalClass', foo.bar.baz.A.InternalClass);\n" + - "\n" + - "\n" + - "/**\n" + - " * Metadata\n" + - " *\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' }] };\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" + + " * foo.bar.baz.A\n" + + " *\n" + + " * @fileoverview\n" + + " *\n" + + " * @suppress {checkTypes|accessControls}\n" + + " */\n" + + "\n" + + "goog.provide('foo.bar.baz.A');\n" + + "goog.provide('foo.bar.baz.A.InternalClass');\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * @constructor\n" + + " */\n" + + "foo.bar.baz.A = function() {\n" + + " var /** @type {foo.bar.baz.A.InternalClass} */ internalClass = new foo.bar.baz.A.InternalClass();\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + + "\n" + + "\n" + + "/**\n" + + " * Metadata\n" + + " *\n" + + " * @type {Object.<string, Array.<Object>>}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * Reflection\n" + + " *\n" + + " * @return {Object.<string, Function>}\n" + + " */\n" + + "foo.bar.baz.A.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"); + " methods: function () {\n" + + " return {\n" + + " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + + " };\n" + + " }\n" + + " };\n" + + "};\n" + + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO.compileFlags = 14;\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * @constructor\n" + + " */\n" + + "foo.bar.baz.A.InternalClass = function() {\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('foo.bar.baz.A.InternalClass', foo.bar.baz.A.InternalClass);\n" + + "\n" + + "\n" + + "/**\n" + + " * Metadata\n" + + " *\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' }] };" + ); } @Test @@ -500,34 +563,46 @@ public class TestRoyalePackage extends TestGoogPackage " */\n" + "foo.bar.baz.A = function() {\n" + " foo.bar.baz.A.internalFunction();\n" + - "};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + + "};\n" + + "\n" + "\n" + - "\n/" + - "**\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + + "\n" + + "\n" + + "/**\n" + " * Metadata\n" + " *\n" + " * @type {Object.<string, Array.<Object>>}\n" + " */\n" + "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * Reflection\n" + - " *\n" + - " * @return {Object.<string, Function>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + - " return {\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * Reflection\n" + + " *\n" + + " * @return {Object.<string, Function>}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + + " return {\n" + " variables: function () {return {};},\n" + " accessors: function () {return {};},\n" + - " methods: function () {\n" + - " return {\n" + - " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + - " };\n" + - " }\n" + - " };\n" + - "};\n" + + " methods: function () {\n" + + " return {\n" + + " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + + " };\n" + + " }\n" + + " };\n" + + "};\n" + + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO.compileFlags = 14;\n" + "\n" + "\n" + "\n" + @@ -563,178 +638,185 @@ public class TestRoyalePackage extends TestGoogPackage " */\n" + "foo.bar.baz.A = function() {\n" + " foo.bar.baz.A.internalVar = 3;\n" + - "};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + + "\n" + + "\n" + + "/**\n" + + " * Metadata\n" + + " *\n" + + " * @type {Object.<string, Array.<Object>>}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * Reflection\n" + + " *\n" + + " * @return {Object.<string, Function>}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + + " return {\n" + + " variables: function () {return {};},\n" + + " accessors: function () {return {};},\n" + + " methods: function () {\n" + + " return {\n" + + " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + + " };\n" + + " }\n" + + " };\n" + + "};\n" + + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO.compileFlags = 14;\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * @export\n" + + " * @type {number}\n" + + " */\n" + + "foo.bar.baz.A.internalVar = 2" + ); + } + + @Test + public void testPackageQualified_ClassAndInternalClassMethods() + { + IFileNode node = compileAS("package foo.bar.baz {\n" + + "public class A {\n" + + "public function A(){\n" + + "var internalClass:InternalClass = new InternalClass();\n" + + "var myString:String = InternalClass.someString;\n" + + "myString = InternalClass.someStaticFunction();\n" + + "myString = internalClass.someMethod();\n" + + "}}}\n" + + "class InternalClass {\n" + + "public function InternalClass(){\n" + + "}\n" + + "public static var someString:String = \"foo\";\n" + + "public static function someStaticFunction():String { return \"bar\";}\n" + + "public function someMethod():String { return \"baz\";}\n" + + "}"); + asBlockWalker.visitFile(node); + assertOutWithMetadata("/**\n" + + " * foo.bar.baz.A\n" + + " *\n" + + " * @fileoverview\n" + + " *\n" + + " * @suppress {checkTypes|accessControls}\n" + + " */\n" + + "\n" + + "goog.provide('foo.bar.baz.A');\n" + + "goog.provide('foo.bar.baz.A.InternalClass');\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * @constructor\n" + + " */\n" + + "foo.bar.baz.A = function() {\n" + + " var /** @type {foo.bar.baz.A.InternalClass} */ internalClass = new foo.bar.baz.A.InternalClass();\n" + + " var /** @type {string} */ myString = foo.bar.baz.A.InternalClass.someString;\n" + + " myString = foo.bar.baz.A.InternalClass.someStaticFunction();\n" + + " myString = internalClass.someMethod();\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + + "\n" + "\n" + - "\n/" + - "**\n" + + "/**\n" + " * Metadata\n" + " *\n" + " * @type {Object.<string, Array.<Object>>}\n" + " */\n" + - "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * Reflection\n" + - " *\n" + - " * @return {Object.<string, Function>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + - " return {\n" + - " variables: function () {return {};},\n" + - " accessors: function () {return {};},\n" + - " methods: function () {\n" + - " return {\n" + - " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + - " };\n" + - " }\n" + - " };\n" + - "};\n" + + "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * Reflection\n" + + " *\n" + + " * @return {Object.<string, Function>}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + + " return {\n" + + " variables: function () {return {};},\n" + + " accessors: function () {return {};},\n" + + " methods: function () {\n" + + " return {\n" + + " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + + " };\n" + + " }\n" + + " };\n" + + "};\n" + + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO.compileFlags = 14;\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * @constructor\n" + + " */\n" + + "foo.bar.baz.A.InternalClass = function() {\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('foo.bar.baz.A.InternalClass', foo.bar.baz.A.InternalClass);\n" + + "\n" + + "\n" + + "/**\n" + + " * @export\n" + + " * @type {string}\n" + + " */\n" + + "foo.bar.baz.A.InternalClass.someString = \"foo\";\n" + + "\n" + "\n" + + "/**\n" + + " * @export\n" + + " * @return {string}\n" + + " */\n" + + "foo.bar.baz.A.InternalClass.someStaticFunction = function() {\n" + + " return \"bar\";\n" + + "};\n" + "\n" + "\n" + "/**\n" + " * @export\n" + - " * @type {number}\n" + + " * @return {string}\n" + " */\n" + - "foo.bar.baz.A.internalVar = 2"); - } - - @Test - public void testPackageQualified_ClassAndInternalClassMethods() - { - IFileNode node = compileAS("package foo.bar.baz {\n" + - "public class A {\n" + - "public function A(){\n" + - "var internalClass:InternalClass = new InternalClass();\n" + - "var myString:String = InternalClass.someString;\n" + - "myString = InternalClass.someStaticFunction();\n" + - "myString = internalClass.someMethod();\n" + - "}}}\n" + - "class InternalClass {\n" + - "public function InternalClass(){\n" + - "}\n" + - "public static var someString:String = \"foo\";\n" + - "public static function someStaticFunction():String { return \"bar\";}\n" + - "public function someMethod():String { return \"baz\";}\n" + - "}"); - asBlockWalker.visitFile(node); - assertOutWithMetadata("/**\n" + - " * foo.bar.baz.A\n" + - " *\n" + - " * @fileoverview\n" + - " *\n" + - " * @suppress {checkTypes|accessControls}\n" + - " */\n" + - "\n" + - "goog.provide('foo.bar.baz.A');\n" + - "goog.provide('foo.bar.baz.A.InternalClass');\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * @constructor\n" + - " */\n" + - "foo.bar.baz.A = function() {\n" + - " var /** @type {foo.bar.baz.A.InternalClass} */ internalClass = new foo.bar.baz.A.InternalClass();\n" + - " var /** @type {string} */ myString = foo.bar.baz.A.InternalClass.someString;\n" + - " myString = foo.bar.baz.A.InternalClass.someStaticFunction();\n" + - " myString = internalClass.someMethod();\n" + - "};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + - "\n" + - "\n" + - "/**\n" + - " * Metadata\n" + - " *\n" + - " * @type {Object.<string, Array.<Object>>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * Reflection\n" + - " *\n" + - " * @return {Object.<string, Function>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + - " return {\n" + - " variables: function () {return {};},\n" + - " accessors: function () {return {};},\n" + - " methods: function () {\n" + - " return {\n" + - " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + - " };\n" + - " }\n" + - " };\n" + - "};\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * @constructor\n" + - " */\n" + - "foo.bar.baz.A.InternalClass = function() {\n" + - "};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('foo.bar.baz.A.InternalClass', foo.bar.baz.A.InternalClass);\n" + - "\n" + - "\n" + - "/**\n" + - " * @export\n" + - " * @type {string}\n" + - " */\n" + - "foo.bar.baz.A.InternalClass.someString = \"foo\";\n" + - "\n" + - "\n" + - "/**\n" + - " * @export\n" + - " * @return {string}\n" + - " */\n" + - "foo.bar.baz.A.InternalClass.someStaticFunction = function() {\n" + - " return \"bar\";\n" + - "};\n" + - "\n" + - "\n" + - "/**\n" + - " * @export\n" + - " * @return {string}\n" + - " */\n" + - "foo.bar.baz.A.InternalClass.prototype.someMethod = function() {\n" + - " return \"baz\";\n" + - "};\n" + - "\n" + - "\n" + - "/**\n" + - " * Metadata\n" + - " *\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' }] };\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'}\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"); + "foo.bar.baz.A.InternalClass.prototype.someMethod = function() {\n" + + " return \"baz\";\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Metadata\n" + + " *\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' }] };" + ); } @Test @@ -762,130 +844,130 @@ public class TestRoyalePackage extends TestGoogPackage "}"); asBlockWalker.visitFile(node); assertOutWithMetadata("/**\n" + - " * foo.bar.baz.A\n" + - " *\n" + - " * @fileoverview\n" + - " *\n" + - " * @suppress {checkTypes|accessControls}\n" + - " */\n" + - "\n" + - "goog.provide('foo.bar.baz.A');\n" + - "goog.provide('foo.bar.baz.A.InternalClass');\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * @constructor\n" + - " */\n" + - "foo.bar.baz.A = function() {\n" + - " var /** @type {foo.bar.baz.A.InternalClass} */ internalClass = new foo.bar.baz.A.InternalClass();\n" + - " this.myString = internalClass.someString;\n" + - " internalClass.someString = this.myString;\n" + - "};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + - "\n" + - "\n" + - "foo.bar.baz.A.prototype.get__myString = function() {\n" + - " return null;\n" + - "};\n" + - "\n" + - "\n" + - "foo.bar.baz.A.prototype.set__myString = function(value) {\n" + - "};\n" + - "\n" + - "\n" + - "Object.defineProperties(foo.bar.baz.A.prototype, /** @lends {foo.bar.baz.A.prototype} */ {\n" + - "/**\n * @export\n * @type {string} */\n" + - "myString: {\n" + - "get: foo.bar.baz.A.prototype.get__myString,\n" + - "set: foo.bar.baz.A.prototype.set__myString}}\n" + - ");\n" + - "\n" + - "\n" + - "/**\n" + - " * Metadata\n" + - " *\n" + - " * @type {Object.<string, Array.<Object>>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * Reflection\n" + - " *\n" + - " * @return {Object.<string, Function>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + - " return {\n" + - " variables: function () {return {};},\n" + - " accessors: function () {\n" + - " return {\n" + - " 'myString': { type: 'String', access: 'readwrite', declaredBy: 'foo.bar.baz.A'}\n" + - " };\n" + - " },\n" + - " methods: function () {\n" + - " return {\n" + - " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + - " };\n" + - " }\n" + - " };\n" + - "};\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * @constructor\n" + - " */\n" + - "foo.bar.baz.A.InternalClass = function() {\n" + - "};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('foo.bar.baz.A.InternalClass', foo.bar.baz.A.InternalClass);\n" + - "\n" + - "\n" + - "foo.bar.baz.A.InternalClass.prototype.get__someString = function() {\n" + - " return null;\n" + - "};\n" + - "\n" + - "\n" + - "foo.bar.baz.A.InternalClass.prototype.set__someString = function(value) {\n" + - "};\n" + - "\n" + - "\n" + - "Object.defineProperties(foo.bar.baz.A.InternalClass.prototype, /** @lends {foo.bar.baz.A.InternalClass.prototype} */ {\n" + - "/**\n * @export\n * @type {string} */\n" + - "someString: {\n" + - "get: foo.bar.baz.A.InternalClass.prototype.get__someString,\n" + - "set: foo.bar.baz.A.InternalClass.prototype.set__someString}}\n" + - ");\n" + - "\n" + - "\n" + - "/**\n" + - " * Metadata\n" + - " *\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' }] };\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" + + " * foo.bar.baz.A\n" + + " *\n" + + " * @fileoverview\n" + + " *\n" + + " * @suppress {checkTypes|accessControls}\n" + + " */\n" + + "\n" + + "goog.provide('foo.bar.baz.A');\n" + + "goog.provide('foo.bar.baz.A.InternalClass');\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * @constructor\n" + + " */\n" + + "foo.bar.baz.A = function() {\n" + + " var /** @type {foo.bar.baz.A.InternalClass} */ internalClass = new foo.bar.baz.A.InternalClass();\n" + + " this.myString = internalClass.someString;\n" + + " internalClass.someString = this.myString;\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + + "\n" + + "\n" + + "foo.bar.baz.A.prototype.get__myString = function() {\n" + + " return null;\n" + + "};\n" + + "\n" + + "\n" + + "foo.bar.baz.A.prototype.set__myString = function(value) {\n" + + "};\n" + + "\n" + + "\n" + + "Object.defineProperties(foo.bar.baz.A.prototype, /** @lends {foo.bar.baz.A.prototype} */ {\n" + + "/**\n" + + " * @export\n" + + " * @type {string} */\n" + + "myString: {\n" + + "get: foo.bar.baz.A.prototype.get__myString,\n" + + "set: foo.bar.baz.A.prototype.set__myString}}\n" + + ");\n" + + "\n" + + "\n" + + "/**\n" + + " * Metadata\n" + + " *\n" + + " * @type {Object.<string, Array.<Object>>}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * Reflection\n" + + " *\n" + + " * @return {Object.<string, Function>}\n" + + " */\n" + + "foo.bar.baz.A.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"); + " accessors: function () {\n" + + " return {\n" + + " 'myString': { type: 'String', access: 'readwrite', declaredBy: 'foo.bar.baz.A'}\n" + + " };\n" + + " },\n" + + " methods: function () {\n" + + " return {\n" + + " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + + " };\n" + + " }\n" + + " };\n" + + "};\n" + + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO.compileFlags = 14;\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * @constructor\n" + + " */\n" + + "foo.bar.baz.A.InternalClass = function() {\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('foo.bar.baz.A.InternalClass', foo.bar.baz.A.InternalClass);\n" + + "\n" + + "\n" + + "foo.bar.baz.A.InternalClass.prototype.get__someString = function() {\n" + + " return null;\n" + + "};\n" + + "\n" + + "\n" + + "foo.bar.baz.A.InternalClass.prototype.set__someString = function(value) {\n" + + "};\n" + + "\n" + + "\n" + + "Object.defineProperties(foo.bar.baz.A.InternalClass.prototype, /** @lends {foo.bar.baz.A.InternalClass.prototype} */ {\n" + + "/**\n" + + " * @export\n" + + " * @type {string} */\n" + + "someString: {\n" + + "get: foo.bar.baz.A.InternalClass.prototype.get__someString,\n" + + "set: foo.bar.baz.A.InternalClass.prototype.set__someString}}\n" + + ");\n" + + "\n" + + "\n" + + "/**\n" + + " * Metadata\n" + + " *\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' }] };" + ); } @Test @@ -908,134 +990,144 @@ public class TestRoyalePackage extends TestGoogPackage "}"); asBlockWalker.visitFile(node); assertOutWithMetadata("/**\n" + - " * foo.bar.baz.A\n" + - " *\n" + - " * @fileoverview\n" + - " *\n" + - " * @suppress {checkTypes|accessControls}\n" + - " */\n" + - "\n" + - "goog.provide('foo.bar.baz.A');\n" + - "goog.provide('foo.bar.baz.A.ITestInterface');\n" + - "goog.provide('foo.bar.baz.A.InternalClass');\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * @constructor\n" + - " */\n" + - "foo.bar.baz.A = function() {\n" + - " var /** @type {foo.bar.baz.A.ITestInterface} */ internalClass = org.apache.royale.utils.Language.as(new foo.bar.baz.A.InternalClass(), foo.bar.baz.A.ITestInterface);\n" + - " internalClass.test();\n" + - "};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + - "\n" + - "\n" + - "/**\n" + - " * Metadata\n" + - " *\n" + - " * @type {Object.<string, Array.<Object>>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * Reflection\n" + - " *\n" + - " * @return {Object.<string, Function>}\n" + - " */\n" + - "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + - " return {\n" + - " variables: function () {return {};},\n" + - " accessors: function () {return {};},\n" + - " methods: function () {\n" + - " return {\n" + - " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + - " };\n" + - " }\n" + - " };\n" + - "};\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * @interface\n" + - " */\n" + - "foo.bar.baz.A.ITestInterface = function() {\n" + - "};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('foo.bar.baz.A.ITestInterface', foo.bar.baz.A.ITestInterface);\n" + - "foo.bar.baz.A.ITestInterface.prototype.test = function() {\n" + - "};\n" + - "\n" + - "\n" + - "/**\n" + - " * Metadata\n" + - " *\n" + - " * @type {Object.<string, Array.<Object>>}\n" + - " */\n" + - "foo.bar.baz.A.ITestInterface.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'ITestInterface', qName: 'foo.bar.baz.A.ITestInterface', kind: 'interface' }] };\n" + + " * foo.bar.baz.A\n" + + " *\n" + + " * @fileoverview\n" + + " *\n" + + " * @suppress {checkTypes|accessControls}\n" + + " */\n" + "\n" + + "goog.provide('foo.bar.baz.A');\n" + + "goog.provide('foo.bar.baz.A.ITestInterface');\n" + + "goog.provide('foo.bar.baz.A.InternalClass');\n" + "\n" + "\n" + - "/**\n" + - " * Reflection\n" + - " *\n" + - " * @return {Object.<string, Function>}\n" + - " */\n" + - "foo.bar.baz.A.ITestInterface.prototype.ROYALE_REFLECTION_INFO = function () {\n" + - " return {\n" + + "\n" + + "/**\n" + + " * @constructor\n" + + " */\n" + + "foo.bar.baz.A = function() {\n" + + " var /** @type {foo.bar.baz.A.ITestInterface} */ internalClass = org.apache.royale.utils.Language.as(new foo.bar.baz.A.InternalClass(), foo.bar.baz.A.ITestInterface);\n" + + " internalClass.test();\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('foo.bar.baz.A', foo.bar.baz.A);\n" + + "\n" + + "\n" + + "/**\n" + + " * Metadata\n" + + " *\n" + + " * @type {Object.<string, Array.<Object>>}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'A', qName: 'foo.bar.baz.A', kind: 'class' }] };\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * Reflection\n" + + " *\n" + + " * @return {Object.<string, Function>}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO = function () {\n" + + " return {\n" + + " variables: function () {return {};},\n" + " accessors: function () {return {};},\n" + - " methods: function () {\n" + - " return {\n" + - " 'test': { type: 'void', declaredBy: 'foo.bar.baz.A.ITestInterface'}\n" + - " };\n" + - " }\n" + - " };\n" + - "};\n" + - "\n" + - "\n" + - "\n" + - "/**\n" + - " * @constructor\n" + - " * @implements {foo.bar.baz.A.ITestInterface}\n" + - " */\n" + - "foo.bar.baz.A.InternalClass = function() {\n" + - "};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('foo.bar.baz.A.InternalClass', foo.bar.baz.A.InternalClass);\n" + - "\n" + - "\n" + - "/**\n" + - " * @export\n" + - " */\n" + - "foo.bar.baz.A.InternalClass.prototype.test = function() {\n" + - "};\n" + - "\n" + - "\n" + - "/**\n" + - " * Metadata\n" + - " *\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] };\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" - ); + " methods: function () {\n" + + " return {\n" + + " 'A': { type: '', declaredBy: 'foo.bar.baz.A'}\n" + + " };\n" + + " }\n" + + " };\n" + + "};\n" + + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "foo.bar.baz.A.prototype.ROYALE_REFLECTION_INFO.compileFlags = 14;\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * @interface\n" + + " */\n" + + "foo.bar.baz.A.ITestInterface = function() {\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('foo.bar.baz.A.ITestInterface', foo.bar.baz.A.ITestInterface);\n" + + "foo.bar.baz.A.ITestInterface.prototype.test = function() {\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Metadata\n" + + " *\n" + + " * @type {Object.<string, Array.<Object>>}\n" + + " */\n" + + "foo.bar.baz.A.ITestInterface.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'ITestInterface', qName: 'foo.bar.baz.A.ITestInterface', kind: 'interface' }] };\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * Reflection\n" + + " *\n" + + " * @return {Object.<string, Function>}\n" + + " */\n" + + "foo.bar.baz.A.ITestInterface.prototype.ROYALE_REFLECTION_INFO = function () {\n" + + " return {\n" + + " accessors: function () {return {};},\n" + + " methods: function () {\n" + + " return {\n" + + " 'test': { type: 'void', declaredBy: 'foo.bar.baz.A.ITestInterface'}\n" + + " };\n" + + " }\n" + + " };\n" + + "};\n" + + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "foo.bar.baz.A.ITestInterface.prototype.ROYALE_REFLECTION_INFO.compileFlags = 14;\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * @constructor\n" + + " * @implements {foo.bar.baz.A.ITestInterface}\n" + + " */\n" + + "foo.bar.baz.A.InternalClass = function() {\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('foo.bar.baz.A.InternalClass', foo.bar.baz.A.InternalClass);\n" + + "\n" + + "\n" + + "/**\n" + + " * @export\n" + + " */\n" + + "foo.bar.baz.A.InternalClass.prototype.test = function() {\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Metadata\n" + + " *\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] };" + ); } @Test @@ -1075,7 +1167,13 @@ public class TestRoyalePackage extends TestGoogPackage " * @constructor\n" + " */\n" + "foo.bar.A.Internal = function() {\n" + - "};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('foo.bar.A.Internal', foo.bar.A.Internal);\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('foo.bar.A.Internal', foo.bar.A.Internal);\n" + "\n" + "\n" + "/**\n" + @@ -1091,22 +1189,8 @@ 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' }] };\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"); + "foo.bar.A.Internal.prototype.ROYALE_CLASS_INFO = { names: [{ name: 'Internal', qName: 'foo.bar.A.Internal', kind: 'class' }] };" + ); } @Test diff --git a/compiler-jx/src/test/resources/royale/projects/bad_overrides/Test_result.js b/compiler-jx/src/test/resources/royale/projects/bad_overrides/Test_result.js index 23bd2a6..63b5209 100644 --- a/compiler-jx/src/test/resources/royale/projects/bad_overrides/Test_result.js +++ b/compiler-jx/src/test/resources/royale/projects/bad_overrides/Test_result.js @@ -86,3 +86,9 @@ Test.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +Test.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/bad_overrides/classes/A_result.js b/compiler-jx/src/test/resources/royale/projects/bad_overrides/classes/A_result.js index ec11c7e..00a8df0 100644 --- a/compiler-jx/src/test/resources/royale/projects/bad_overrides/classes/A_result.js +++ b/compiler-jx/src/test/resources/royale/projects/bad_overrides/classes/A_result.js @@ -86,3 +86,9 @@ classes.A.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +classes.A.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/bad_overrides/classes/B_result.js b/compiler-jx/src/test/resources/royale/projects/bad_overrides/classes/B_result.js index d4a3f12..a0174ff 100644 --- a/compiler-jx/src/test/resources/royale/projects/bad_overrides/classes/B_result.js +++ b/compiler-jx/src/test/resources/royale/projects/bad_overrides/classes/B_result.js @@ -61,3 +61,9 @@ classes.B.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +classes.B.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/bad_overrides/classes/C_result.js b/compiler-jx/src/test/resources/royale/projects/bad_overrides/classes/C_result.js index 0b1398e..4799d88 100644 --- a/compiler-jx/src/test/resources/royale/projects/bad_overrides/classes/C_result.js +++ b/compiler-jx/src/test/resources/royale/projects/bad_overrides/classes/C_result.js @@ -61,3 +61,9 @@ classes.C.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +classes.C.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/bad_overrides/interfaces/IA_result.js b/compiler-jx/src/test/resources/royale/projects/bad_overrides/interfaces/IA_result.js index 395e896..878ead5 100644 --- a/compiler-jx/src/test/resources/royale/projects/bad_overrides/interfaces/IA_result.js +++ b/compiler-jx/src/test/resources/royale/projects/bad_overrides/interfaces/IA_result.js @@ -68,3 +68,9 @@ interfaces.IA.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +interfaces.IA.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/bad_overrides/interfaces/IB_result.js b/compiler-jx/src/test/resources/royale/projects/bad_overrides/interfaces/IB_result.js index e28bf2e..c70befd 100644 --- a/compiler-jx/src/test/resources/royale/projects/bad_overrides/interfaces/IB_result.js +++ b/compiler-jx/src/test/resources/royale/projects/bad_overrides/interfaces/IB_result.js @@ -56,3 +56,9 @@ interfaces.IB.prototype.ROYALE_REFLECTION_INFO = function () { methods: function () {return {};} }; }; +/** + * @export + * @const + * @type {number} + */ +interfaces.IB.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/bad_overrides/interfaces/IC_result.js b/compiler-jx/src/test/resources/royale/projects/bad_overrides/interfaces/IC_result.js index cf0628d..db98f47 100644 --- a/compiler-jx/src/test/resources/royale/projects/bad_overrides/interfaces/IC_result.js +++ b/compiler-jx/src/test/resources/royale/projects/bad_overrides/interfaces/IC_result.js @@ -56,3 +56,9 @@ interfaces.IC.prototype.ROYALE_REFLECTION_INFO = function () { methods: function () {return {};} }; }; +/** + * @export + * @const + * @type {number} + */ +interfaces.IC.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/circular/Base_result.js b/compiler-jx/src/test/resources/royale/projects/circular/Base_result.js index 1d27a23..3737be0 100644 --- a/compiler-jx/src/test/resources/royale/projects/circular/Base_result.js +++ b/compiler-jx/src/test/resources/royale/projects/circular/Base_result.js @@ -66,3 +66,9 @@ Base.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +Base.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/circular/Super_result.js b/compiler-jx/src/test/resources/royale/projects/circular/Super_result.js index 146ca29..450ca38 100644 --- a/compiler-jx/src/test/resources/royale/projects/circular/Super_result.js +++ b/compiler-jx/src/test/resources/royale/projects/circular/Super_result.js @@ -70,3 +70,9 @@ Super.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +Super.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/circular_proto/A_result.js b/compiler-jx/src/test/resources/royale/projects/circular_proto/A_result.js index b2481e4..007efbf 100644 --- a/compiler-jx/src/test/resources/royale/projects/circular_proto/A_result.js +++ b/compiler-jx/src/test/resources/royale/projects/circular_proto/A_result.js @@ -72,3 +72,9 @@ A.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +A.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/circular_proto/B_result.js b/compiler-jx/src/test/resources/royale/projects/circular_proto/B_result.js index efacd72..8bafb82 100644 --- a/compiler-jx/src/test/resources/royale/projects/circular_proto/B_result.js +++ b/compiler-jx/src/test/resources/royale/projects/circular_proto/B_result.js @@ -71,8 +71,14 @@ B.prototype.ROYALE_REFLECTION_INFO = function () { methods: function () { return { 'B': { type: '', declaredBy: 'B'}, - '|a': { type: 'int', declaredBy: 'B', parameters: function () { return [ { index: 1, type: 'Boolean', optional: false } ]; }} + '|a': { type: 'int', declaredBy: 'B', parameters: function () { return [ { index: 1, type: 'Boolean', optional: false } ]; }} }; } }; }; +/** + * @export + * @const + * @type {number} + */ +B.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/circular_proto/C_result.js b/compiler-jx/src/test/resources/royale/projects/circular_proto/C_result.js index e230054..30562a9 100644 --- a/compiler-jx/src/test/resources/royale/projects/circular_proto/C_result.js +++ b/compiler-jx/src/test/resources/royale/projects/circular_proto/C_result.js @@ -73,8 +73,14 @@ C.prototype.ROYALE_REFLECTION_INFO = function () { methods: function () { return { 'C': { type: '', declaredBy: 'C'}, - '|a': { type: 'int', declaredBy: 'C', parameters: function () { return [ { index: 1, type: 'Boolean', optional: false } ]; }} + '|a': { type: 'int', declaredBy: 'C', parameters: function () { return [ { index: 1, type: 'Boolean', optional: false } ]; }} }; } }; }; +/** + * @export + * @const + * @type {number} + */ +C.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/circular_proto/D_result.js b/compiler-jx/src/test/resources/royale/projects/circular_proto/D_result.js index d3171dc..48d84c0 100644 --- a/compiler-jx/src/test/resources/royale/projects/circular_proto/D_result.js +++ b/compiler-jx/src/test/resources/royale/projects/circular_proto/D_result.js @@ -73,8 +73,14 @@ D.prototype.ROYALE_REFLECTION_INFO = function () { methods: function () { return { 'D': { type: '', declaredBy: 'D'}, - '|a': { type: 'int', declaredBy: 'D', parameters: function () { return [ { index: 1, type: 'Boolean', optional: false } ]; }} + '|a': { type: 'int', declaredBy: 'D', parameters: function () { return [ { index: 1, type: 'Boolean', optional: false } ]; }} }; } }; }; +/** + * @export + * @const + * @type {number} + */ +D.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/circular_proto/E_result.js b/compiler-jx/src/test/resources/royale/projects/circular_proto/E_result.js index 9eb682c..04e154d 100644 --- a/compiler-jx/src/test/resources/royale/projects/circular_proto/E_result.js +++ b/compiler-jx/src/test/resources/royale/projects/circular_proto/E_result.js @@ -69,8 +69,14 @@ E.prototype.ROYALE_REFLECTION_INFO = function () { methods: function () { return { 'E': { type: '', declaredBy: 'E'}, - '|a': { type: 'int', declaredBy: 'E', parameters: function () { return [ { index: 1, type: 'Boolean', optional: false } ]; }} + '|a': { type: 'int', declaredBy: 'E', parameters: function () { return [ { index: 1, type: 'Boolean', optional: false } ]; }} }; } }; }; +/** + * @export + * @const + * @type {number} + */ +E.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/circular_proto/F_result.js b/compiler-jx/src/test/resources/royale/projects/circular_proto/F_result.js index c641222..bb5bf9d 100644 --- a/compiler-jx/src/test/resources/royale/projects/circular_proto/F_result.js +++ b/compiler-jx/src/test/resources/royale/projects/circular_proto/F_result.js @@ -73,8 +73,14 @@ F.prototype.ROYALE_REFLECTION_INFO = function () { methods: function () { return { 'F': { type: '', declaredBy: 'F'}, - '|a': { type: 'int', declaredBy: 'F', parameters: function () { return [ { index: 1, type: 'Boolean', optional: false } ]; }} + '|a': { type: 'int', declaredBy: 'F', parameters: function () { return [ { index: 1, type: 'Boolean', optional: false } ]; }} }; } }; }; +/** + * @export + * @const + * @type {number} + */ +F.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/interfaces/Test_result.js b/compiler-jx/src/test/resources/royale/projects/interfaces/Test_result.js index ffdd7be..1517644 100644 --- a/compiler-jx/src/test/resources/royale/projects/interfaces/Test_result.js +++ b/compiler-jx/src/test/resources/royale/projects/interfaces/Test_result.js @@ -82,8 +82,14 @@ Test.prototype.ROYALE_REFLECTION_INFO = function () { methods: function () { return { 'Test': { type: '', declaredBy: 'Test'}, - 'doSomething': { type: 'interfaces.IC', declaredBy: 'Test', parameters: function () { return [ { index: 1, type: 'interfaces.IC', optional: false } ]; }} + 'doSomething': { type: 'interfaces.IC', declaredBy: 'Test', parameters: function () { return [ { index: 1, type: 'interfaces.IC', optional: false } ]; }} }; } }; }; +/** + * @export + * @const + * @type {number} + */ +Test.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/interfaces/classes/A_result.js b/compiler-jx/src/test/resources/royale/projects/interfaces/classes/A_result.js index 5020237..b843e24 100644 --- a/compiler-jx/src/test/resources/royale/projects/interfaces/classes/A_result.js +++ b/compiler-jx/src/test/resources/royale/projects/interfaces/classes/A_result.js @@ -66,3 +66,9 @@ classes.A.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +classes.A.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/interfaces/classes/B_result.js b/compiler-jx/src/test/resources/royale/projects/interfaces/classes/B_result.js index d4a3f12..a0174ff 100644 --- a/compiler-jx/src/test/resources/royale/projects/interfaces/classes/B_result.js +++ b/compiler-jx/src/test/resources/royale/projects/interfaces/classes/B_result.js @@ -61,3 +61,9 @@ classes.B.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +classes.B.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/interfaces/classes/C_result.js b/compiler-jx/src/test/resources/royale/projects/interfaces/classes/C_result.js index 0b1398e..4799d88 100644 --- a/compiler-jx/src/test/resources/royale/projects/interfaces/classes/C_result.js +++ b/compiler-jx/src/test/resources/royale/projects/interfaces/classes/C_result.js @@ -61,3 +61,9 @@ classes.C.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +classes.C.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/interfaces/interfaces/IA_result.js b/compiler-jx/src/test/resources/royale/projects/interfaces/interfaces/IA_result.js index 6b1a475..604bf16 100644 --- a/compiler-jx/src/test/resources/royale/projects/interfaces/interfaces/IA_result.js +++ b/compiler-jx/src/test/resources/royale/projects/interfaces/interfaces/IA_result.js @@ -59,3 +59,9 @@ interfaces.IA.prototype.ROYALE_REFLECTION_INFO = function () { methods: function () {return {};} }; }; +/** + * @export + * @const + * @type {number} + */ +interfaces.IA.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/interfaces/interfaces/IC_result.js b/compiler-jx/src/test/resources/royale/projects/interfaces/interfaces/IC_result.js index 465c89c..b769f2a 100644 --- a/compiler-jx/src/test/resources/royale/projects/interfaces/interfaces/IC_result.js +++ b/compiler-jx/src/test/resources/royale/projects/interfaces/interfaces/IC_result.js @@ -59,3 +59,9 @@ interfaces.IC.prototype.ROYALE_REFLECTION_INFO = function () { methods: function () {return {};} }; }; +/** + * @export + * @const + * @type {number} + */ +interfaces.IC.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/interfaces/interfaces/ID_result.js b/compiler-jx/src/test/resources/royale/projects/interfaces/interfaces/ID_result.js index b86a0af..2531d35 100644 --- a/compiler-jx/src/test/resources/royale/projects/interfaces/interfaces/ID_result.js +++ b/compiler-jx/src/test/resources/royale/projects/interfaces/interfaces/ID_result.js @@ -56,3 +56,9 @@ interfaces.ID.prototype.ROYALE_REFLECTION_INFO = function () { methods: function () {return {};} }; }; +/** + * @export + * @const + * @type {number} + */ +interfaces.ID.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/interfaces/interfaces/IE_result.js b/compiler-jx/src/test/resources/royale/projects/interfaces/interfaces/IE_result.js index 239c8bd..7aea0a3 100644 --- a/compiler-jx/src/test/resources/royale/projects/interfaces/interfaces/IE_result.js +++ b/compiler-jx/src/test/resources/royale/projects/interfaces/interfaces/IE_result.js @@ -68,3 +68,9 @@ interfaces.IE.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +interfaces.IE.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; 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 826e5f1..9a5c28e 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 @@ -64,6 +64,12 @@ MainClass.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +MainClass.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; @@ -94,26 +100,3 @@ MainClass.InternalClass.prototype.foo; * @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'} - }; - }, - accessors: function () {return {};}, - methods: function () { - return { - 'InternalClass': { type: '', declaredBy: 'MainClass.InternalClass'} - }; - } - }; -}; diff --git a/compiler-jx/src/test/resources/royale/projects/internal/OtherClass_result.js b/compiler-jx/src/test/resources/royale/projects/internal/OtherClass_result.js index 9506443..471b66a 100644 --- a/compiler-jx/src/test/resources/royale/projects/internal/OtherClass_result.js +++ b/compiler-jx/src/test/resources/royale/projects/internal/OtherClass_result.js @@ -61,3 +61,9 @@ OtherClass.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +OtherClass.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/overrides/Test_result.js b/compiler-jx/src/test/resources/royale/projects/overrides/Test_result.js index 5a0e4db..c04f324 100644 --- a/compiler-jx/src/test/resources/royale/projects/overrides/Test_result.js +++ b/compiler-jx/src/test/resources/royale/projects/overrides/Test_result.js @@ -88,3 +88,9 @@ Test.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +Test.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/overrides/classes/A_result.js b/compiler-jx/src/test/resources/royale/projects/overrides/classes/A_result.js index 65ede50..50a3f63 100644 --- a/compiler-jx/src/test/resources/royale/projects/overrides/classes/A_result.js +++ b/compiler-jx/src/test/resources/royale/projects/overrides/classes/A_result.js @@ -86,3 +86,9 @@ classes.A.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +classes.A.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/overrides/classes/B_result.js b/compiler-jx/src/test/resources/royale/projects/overrides/classes/B_result.js index d4a3f12..a0174ff 100644 --- a/compiler-jx/src/test/resources/royale/projects/overrides/classes/B_result.js +++ b/compiler-jx/src/test/resources/royale/projects/overrides/classes/B_result.js @@ -61,3 +61,9 @@ classes.B.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +classes.B.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/overrides/classes/C_result.js b/compiler-jx/src/test/resources/royale/projects/overrides/classes/C_result.js index 0506eac..d7e10b4 100644 --- a/compiler-jx/src/test/resources/royale/projects/overrides/classes/C_result.js +++ b/compiler-jx/src/test/resources/royale/projects/overrides/classes/C_result.js @@ -66,3 +66,9 @@ classes.C.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +classes.C.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/overrides/interfaces/IA_result.js b/compiler-jx/src/test/resources/royale/projects/overrides/interfaces/IA_result.js index 3e06938..8c09540 100644 --- a/compiler-jx/src/test/resources/royale/projects/overrides/interfaces/IA_result.js +++ b/compiler-jx/src/test/resources/royale/projects/overrides/interfaces/IA_result.js @@ -76,3 +76,9 @@ interfaces.IA.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +interfaces.IA.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/overrides/interfaces/IB_result.js b/compiler-jx/src/test/resources/royale/projects/overrides/interfaces/IB_result.js index e28bf2e..c70befd 100644 --- a/compiler-jx/src/test/resources/royale/projects/overrides/interfaces/IB_result.js +++ b/compiler-jx/src/test/resources/royale/projects/overrides/interfaces/IB_result.js @@ -56,3 +56,9 @@ interfaces.IB.prototype.ROYALE_REFLECTION_INFO = function () { methods: function () {return {};} }; }; +/** + * @export + * @const + * @type {number} + */ +interfaces.IB.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/overrides/interfaces/IC_result.js b/compiler-jx/src/test/resources/royale/projects/overrides/interfaces/IC_result.js index 9f0b203..54923f7 100644 --- a/compiler-jx/src/test/resources/royale/projects/overrides/interfaces/IC_result.js +++ b/compiler-jx/src/test/resources/royale/projects/overrides/interfaces/IC_result.js @@ -59,3 +59,9 @@ interfaces.IC.prototype.ROYALE_REFLECTION_INFO = function () { methods: function () {return {};} }; }; +/** + * @export + * @const + * @type {number} + */ +interfaces.IC.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_different_package_as_conflict/DifferentPackageAsConflict_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_different_package_as_conflict/DifferentPackageAsConflict_result.js index 920736a..ff4cae7 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_different_package_as_conflict/DifferentPackageAsConflict_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_different_package_as_conflict/DifferentPackageAsConflict_result.js @@ -71,3 +71,9 @@ DifferentPackageAsConflict.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +DifferentPackageAsConflict.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_different_package_as_conflict/Event_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_different_package_as_conflict/Event_result.js index 7ab655d..6b5f4e8 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_different_package_as_conflict/Event_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_different_package_as_conflict/Event_result.js @@ -62,3 +62,9 @@ Event.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +Event.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_different_package_as_conflict/mypackage/TestClass_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_different_package_as_conflict/mypackage/TestClass_result.js index 6b487b5..1f4075c 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_different_package_as_conflict/mypackage/TestClass_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_different_package_as_conflict/mypackage/TestClass_result.js @@ -73,3 +73,9 @@ mypackage.TestClass.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +mypackage.TestClass.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_different_package_as_conflict/otherpackage/Event_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_different_package_as_conflict/otherpackage/Event_result.js index 9064c05..ccd2439 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_different_package_as_conflict/otherpackage/Event_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_different_package_as_conflict/otherpackage/Event_result.js @@ -62,3 +62,9 @@ otherpackage.Event.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +otherpackage.Event.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_no_window/Event_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_no_window/Event_result.js index 7ab655d..bef8801 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_no_window/Event_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_no_window/Event_result.js @@ -12,7 +12,6 @@ * limitations under the License. */ /** - * Generated by Apache Royale Compiler from Event.as * Event * * @fileoverview @@ -62,3 +61,9 @@ Event.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +Event.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_no_window/NoConflictNoWindow_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_no_window/NoConflictNoWindow_result.js index efbdb42..4a77bb5 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_no_window/NoConflictNoWindow_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_no_window/NoConflictNoWindow_result.js @@ -71,3 +71,9 @@ NoConflictNoWindow.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +NoConflictNoWindow.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_no_window/mypackage/TestClass_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_no_window/mypackage/TestClass_result.js index c644d1f..29803ad 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_no_window/mypackage/TestClass_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_no_window/mypackage/TestClass_result.js @@ -71,3 +71,9 @@ mypackage.TestClass.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +mypackage.TestClass.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_use_window/Event_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_use_window/Event_result.js index 7ab655d..6b5f4e8 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_use_window/Event_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_use_window/Event_result.js @@ -62,3 +62,9 @@ Event.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +Event.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_use_window/NoConflictUseWindow_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_use_window/NoConflictUseWindow_result.js index 9410ca3..366eed0 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_use_window/NoConflictUseWindow_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_use_window/NoConflictUseWindow_result.js @@ -71,3 +71,9 @@ NoConflictUseWindow.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +NoConflictUseWindow.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_use_window/mypackage/TestClass_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_use_window/mypackage/TestClass_result.js index c644d1f..29803ad 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_use_window/mypackage/TestClass_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_no_conflict_use_window/mypackage/TestClass_result.js @@ -71,3 +71,9 @@ mypackage.TestClass.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +mypackage.TestClass.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_same_package_as_conflict/Event_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_same_package_as_conflict/Event_result.js index 7ab655d..6b5f4e8 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_same_package_as_conflict/Event_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_same_package_as_conflict/Event_result.js @@ -62,3 +62,9 @@ Event.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +Event.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_same_package_as_conflict/SamePackageAsConflict_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_same_package_as_conflict/SamePackageAsConflict_result.js index ebf818c..9b15787 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_same_package_as_conflict/SamePackageAsConflict_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_same_package_as_conflict/SamePackageAsConflict_result.js @@ -71,3 +71,9 @@ SamePackageAsConflict.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +SamePackageAsConflict.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_same_package_as_conflict/mypackage/Event_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_same_package_as_conflict/mypackage/Event_result.js index 6bf3477..019ca3d 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_same_package_as_conflict/mypackage/Event_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_same_package_as_conflict/mypackage/Event_result.js @@ -62,3 +62,9 @@ mypackage.Event.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +mypackage.Event.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_same_package_as_conflict/mypackage/TestClass_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_same_package_as_conflict/mypackage/TestClass_result.js index a0a5b4e..88ac267 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_same_package_as_conflict/mypackage/TestClass_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_same_package_as_conflict/mypackage/TestClass_result.js @@ -73,3 +73,9 @@ mypackage.TestClass.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +mypackage.TestClass.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_use_window/Event_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_use_window/Event_result.js index 7ab655d..6b5f4e8 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_use_window/Event_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_use_window/Event_result.js @@ -62,3 +62,9 @@ Event.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +Event.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_use_window/UseWindow_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_use_window/UseWindow_result.js index 2efb878..9899bd9 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_use_window/UseWindow_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_use_window/UseWindow_result.js @@ -71,3 +71,9 @@ UseWindow.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +UseWindow.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_use_window/mypackage/TestClass_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_use_window/mypackage/TestClass_result.js index 812e1b0..49aa8dc 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_use_window/mypackage/TestClass_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_use_window/mypackage/TestClass_result.js @@ -81,3 +81,9 @@ mypackage.TestClass.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +mypackage.TestClass.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/package_conflicts_use_window/otherpackage/Event_result.js b/compiler-jx/src/test/resources/royale/projects/package_conflicts_use_window/otherpackage/Event_result.js index 9064c05..ccd2439 100644 --- a/compiler-jx/src/test/resources/royale/projects/package_conflicts_use_window/otherpackage/Event_result.js +++ b/compiler-jx/src/test/resources/royale/projects/package_conflicts_use_window/otherpackage/Event_result.js @@ -62,3 +62,9 @@ otherpackage.Event.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +otherpackage.Event.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/super/Base_result.js b/compiler-jx/src/test/resources/royale/projects/super/Base_result.js index 6e626be..6276d70 100644 --- a/compiler-jx/src/test/resources/royale/projects/super/Base_result.js +++ b/compiler-jx/src/test/resources/royale/projects/super/Base_result.js @@ -92,3 +92,9 @@ Base.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +Base.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/super/Super_result.js b/compiler-jx/src/test/resources/royale/projects/super/Super_result.js index 4612c43..0521323 100644 --- a/compiler-jx/src/test/resources/royale/projects/super/Super_result.js +++ b/compiler-jx/src/test/resources/royale/projects/super/Super_result.js @@ -94,3 +94,9 @@ Super.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +Super.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8; diff --git a/compiler-jx/src/test/resources/royale/projects/xml_requires/XMLRequire_result.js b/compiler-jx/src/test/resources/royale/projects/xml_requires/XMLRequire_result.js index 914a071..801c3d8 100644 --- a/compiler-jx/src/test/resources/royale/projects/xml_requires/XMLRequire_result.js +++ b/compiler-jx/src/test/resources/royale/projects/xml_requires/XMLRequire_result.js @@ -64,3 +64,9 @@ XMLRequire.prototype.ROYALE_REFLECTION_INFO = function () { } }; }; +/** + * @export + * @const + * @type {number} + */ +XMLRequire.prototype.ROYALE_REFLECTION_INFO.compileFlags = 8;
