You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by gr...@apache.org on 2018/11/02 06:56:58 UTC
[royale-compiler] branch develop updated: Fix for localId issues
with javascript -addresses some binding issues -addresses some minimization
issues in release build with references from within script blocks
This is an automated email from the ASF dual-hosted git repository.
gregdove pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git
The following commit(s) were added to refs/heads/develop by this push:
new 651406a Fix for localId issues with javascript -addresses some binding issues -addresses some minimization issues in release build with references from within script blocks
651406a is described below
commit 651406adee928ad3fa1ec31df63809ab72c5c2a6
Author: greg-dove <gr...@gmail.com>
AuthorDate: Fri Nov 2 19:56:38 2018 +1300
Fix for localId issues with javascript
-addresses some binding issues
-addresses some minimization issues in release build with references from within script blocks
---
.../mxml/royale/MXMLDescriptorSpecifier.java | 28 +-
.../codegen/mxml/royale/MXMLRoyaleEmitter.java | 341 +++++++++++----------
2 files changed, 190 insertions(+), 179 deletions(-)
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLDescriptorSpecifier.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLDescriptorSpecifier.java
index 870b0b6..900d118 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLDescriptorSpecifier.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLDescriptorSpecifier.java
@@ -38,7 +38,7 @@ public class MXMLDescriptorSpecifier extends MXMLNodeSpecifier
public MXMLDescriptorSpecifier()
{
super();
-
+
eventSpecifiers = new ArrayList<MXMLEventSpecifier>();
propertySpecifiers = new ArrayList<MXMLDescriptorSpecifier>();
@@ -88,6 +88,12 @@ public class MXMLDescriptorSpecifier extends MXMLNodeSpecifier
public String id;
//---------------------------------
+ // hasLocalId
+ //---------------------------------
+
+ public boolean hasLocalId;
+
+ //---------------------------------
// effectiveId
//---------------------------------
@@ -102,9 +108,9 @@ public class MXMLDescriptorSpecifier extends MXMLNodeSpecifier
//---------------------------------
// isProperty
//---------------------------------
-
+
public boolean isProperty;
-
+
//---------------------------------
// parent
//---------------------------------
@@ -131,7 +137,7 @@ public class MXMLDescriptorSpecifier extends MXMLNodeSpecifier
count++;
}
write(count + "");
-
+
for (MXMLEventSpecifier me : eventSpecifiers)
{
writeDelimiter(writeNewline);
@@ -193,7 +199,7 @@ public class MXMLDescriptorSpecifier extends MXMLNodeSpecifier
ASEmitterTokens.SINGLE_QUOTE.getToken()
+ ((id != null) ? id : effectiveId) + ASEmitterTokens.SINGLE_QUOTE.getToken(),
writeNewline);
-
+
writeDelimiter(writeNewline);
}
else
@@ -201,7 +207,7 @@ public class MXMLDescriptorSpecifier extends MXMLNodeSpecifier
write(propertySpecifiers.size() + "");
writeDelimiter(writeNewline);
}
-
+
output(writeNewline);
}
@@ -239,7 +245,7 @@ public class MXMLDescriptorSpecifier extends MXMLNodeSpecifier
write(count + "");
writeNewline(ASEmitterTokens.COMMA);
}
-
+
MXMLDescriptorSpecifier model = null; // model goes first
MXMLDescriptorSpecifier beads = null; // beads go last
@@ -278,17 +284,17 @@ public class MXMLDescriptorSpecifier extends MXMLNodeSpecifier
//outputEffectSpecifier(writeNewline);
outputEventSpecifier(writeNewline);
-
+
if (!isTopNode)
{
writeDelimiter(writeNewline);
-
+
if (childrenSpecifier == null)
write(ASEmitterTokens.NULL);
else
outputChildren(childrenSpecifier, writeNewline);
}
-
+
boolean isLastChild = parent != null
&& parent.propertySpecifiers.indexOf(this) == parent.propertySpecifiers
.size() - 1;
@@ -299,7 +305,7 @@ public class MXMLDescriptorSpecifier extends MXMLNodeSpecifier
return sb.toString();
}
-
+
private void outputChildren(MXMLDescriptorSpecifier children, boolean writeNewline)
{
write(ASEmitterTokens.SQUARE_OPEN.getToken());
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 0eef72f..2d1baf3 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
@@ -122,7 +122,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
private ArrayList<IMXMLMetadataNode> metadataNodes = new ArrayList<IMXMLMetadataNode>();
// separately track all fx:Declarations that are primitive types (fx:String, fx:Array)
private ArrayList<IMXMLInstanceNode> primitiveDeclarationNodes = new ArrayList<IMXMLInstanceNode>();
-
+
private int eventCounter;
private int idCounter;
private int bindingCounter;
@@ -131,20 +131,20 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
private boolean inStatesOverride;
private boolean makingSimpleArray;
private boolean inStaticInitializer;
-
+
private StringBuilder subDocuments = new StringBuilder();
private ArrayList<String> subDocumentNames = new ArrayList<String>();
private String interfaceList;
private boolean emitExports = true;
-
+
/**
- * This keeps track of the entries in our temporary array of
+ * This keeps track of the entries in our temporary array of
* DeferredInstanceFromFunction objects that we CG to help with
* State override CG.
- *
+ *
* Keys are Instance nodes,
* values are the array index where the deferred instance is:
- *
+ *
* deferred instance = local3[ nodeToIndexMap.get(an instance) ]
*/
protected Map<IMXMLNode, Integer> nodeToIndexMap;
@@ -157,7 +157,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
{
return sourceMapMappings;
}
-
+
public MXMLRoyaleEmitter(FilterWriter out)
{
super(out);
@@ -234,7 +234,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
RoyaleJSProject royaleProject = null;
if (project instanceof RoyaleJSProject)
royaleProject = (RoyaleJSProject) project;
-
+
stillSearching = false;
for (String usedName :usedNames) {
if (!foundRequires.contains(usedName)) {
@@ -308,7 +308,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
if (isExternal(mixin))
continue;
if (!firstOne)
- mixinInject += ", ";
+ mixinInject += ", ";
mixinInject += mixin;
firstOne = false;
StringBuilder appendString = new StringBuilder();
@@ -337,7 +337,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
if (isExternal(className))
continue;
if (!firstOne)
- aliasInject += ", ";
+ aliasInject += ", ";
aliasInject += "\"" + className + "\": ";
String alias = aliases.get(className);
aliasInject += "\"" + alias + "\"";
@@ -368,14 +368,14 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
for (String locale : localeNames)
{
if (!firstOne)
- localeInject += ", ";
+ localeInject += ", ";
localeInject += "\"" + locale + "\"";
firstOne = false;
}
localeInject += "]";
infoInject += localeInject;
sep = ",\n";
-
+
}
List<String> bundles = royaleProject.compiledResourceBundleNames;
if (bundles.size() > 0)
@@ -385,14 +385,14 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
for (String bundle : bundles)
{
if (!firstOne)
- bundleInject += ", ";
+ bundleInject += ", ";
bundleInject += "\"" + bundle + "\"";
firstOne = false;
}
bundleInject += "]";
infoInject += bundleInject;
sep = ",\n";
-
+
}
List<String> bundleClasses = royaleProject.compiledResourceBundleClasses;
if (bundles.size() > 0)
@@ -449,7 +449,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
addLineToMappings(finalLines.size());
newLineIndex++;
}
-
+
String cssInject = "\n\n" + thisDef + ".prototype.cssData = [";
JSCSSCompilationSession cssSession = (JSCSSCompilationSession) royaleProject.getCSSCompilationSession();
String s = cssSession.getEncodedCSS();
@@ -607,7 +607,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
}
}
}
-
+
@Override
protected String getIndent(int numIndent)
{
@@ -635,14 +635,14 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
moveUp(false, false);
inMXMLContent = false;
}
-
+
@Override
public void emitDocument(IMXMLDocumentNode node)
{
RoyaleJSProject fjp = (RoyaleJSProject) getMXMLWalker().getProject();
if (fjp.config != null)
emitExports = fjp.config.getExportPublicSymbols();
-
+
descriptorTree = new ArrayList<MXMLDescriptorSpecifier>();
propertiesTree = new MXMLDescriptorSpecifier();
@@ -658,7 +658,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
eventCounter = 0;
idCounter = 0;
bindingCounter = 0;
-
+
// visit MXML
IClassDefinition cdef = node.getClassDefinition();
classDefinition = cdef;
@@ -686,11 +686,11 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
emitComplexInitializers(node);
emitPropertyDecls();
-
+
emitClassDeclEnd(cname, node.getBaseClassName());
emitDeclarationVariables();
-
+
// emitMetaData(cdef);
write(subDocuments.toString());
@@ -713,7 +713,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
emitSourceMapDirective(node);
}
-
+
public void emitDeclarationVariables()
{
for (IMXMLInstanceNode node : primitiveDeclarationNodes)
@@ -731,7 +731,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
write(ASEmitterTokens.MEMBER_ACCESS);
write(id);
writeNewline(ASEmitterTokens.SEMICOLON);
-
+
}
}
@@ -747,7 +747,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
int oldEventCounter;
int oldIdCounter;
boolean oldInMXMLContent;
-
+
oldDescriptorTree = descriptorTree;
descriptorTree = new ArrayList<MXMLDescriptorSpecifier>();
oldPropertiesTree = propertiesTree;
@@ -780,7 +780,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
.getASEmitter();
((JSRoyaleEmitter) asEmitter).getModel().pushClass(cdef);
-
+
IASNode classNode = node.getContainedClassDefinitionNode();
String cname = cdef.getQualifiedName();
String baseClassName = cdef.getBaseClassAsDisplayString();
@@ -798,9 +798,9 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
emitClassDeclStart(cname, baseClassName, false);
emitComplexInitializers(classNode);
-
+
emitPropertyDecls();
-
+
emitClassDeclEnd(cname, baseClassName);
emitMetaData(cdef);
@@ -884,7 +884,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
write(JSGoogEmitterTokens.GOOG_CONSTRUCTOR);
write(ASEmitterTokens.SINGLE_QUOTE);
write(ASEmitterTokens.PAREN_CLOSE);
- writeNewline(ASEmitterTokens.SEMICOLON);
+ writeNewline(ASEmitterTokens.SEMICOLON);
}
//--------------------------------------------------------------------------
@@ -903,9 +903,9 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
{
MXMLDescriptorSpecifier root = currentStateOverrides;
root.isTopNode = true;
-
+
collectExportedNames(root);
-
+
writeNewline("/**");
if (emitExports)
writeNewline(" * @export");
@@ -919,7 +919,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
indentPop();
writeNewline(ASEmitterTokens.SEMICOLON);
}
-
+
writeNewline();
writeNewline("/**");
writeNewline(" * @private");
@@ -937,13 +937,13 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
writeNewline("this.generateMXMLAttributes");
write(ASEmitterTokens.PAREN_OPEN);
write(ASEmitterTokens.SQUARE_OPEN);
-
+
MXMLDescriptorSpecifier root = propertiesTree;
root.isTopNode = true;
writeNewline(root.output(true));
-
+
collectExportedNames(root);
-
+
write(ASEmitterTokens.SQUARE_CLOSE);
write(ASEmitterTokens.PAREN_CLOSE);
writeNewline(ASEmitterTokens.SEMICOLON);
@@ -960,7 +960,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
write(formatQualifiedName(baseClassName));
write(ASEmitterTokens.PAREN_CLOSE);
writeNewline(ASEmitterTokens.SEMICOLON);
-
+
writeNewline();
writeNewline();
writeNewline("/**");
@@ -986,7 +986,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
protected void emitMetaData(IClassDefinition cdef)
{
String cname = cdef.getQualifiedName();
-
+
writeNewline("/**");
writeNewline(" * Metadata");
writeNewline(" *");
@@ -1011,13 +1011,13 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
write("]");
}
write(" };");
-
+
emitReflectionData(cdef);
writeNewline();
writeNewline();
-
+
}
-
+
private void emitReflectionData(IClassDefinition cdef)
{
JSRoyaleEmitter asEmitter = (JSRoyaleEmitter)((IMXMLBlockWalker) getMXMLWalker()).getASEmitter();
@@ -1115,7 +1115,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
data.type = instance.name;
data.access = "readwrite";
data.declaredBy = cdef.getQualifiedName();
- }
+ }
}
ArrayList<PackageFooterEmitter.MethodData> methodData = new ArrayList<PackageFooterEmitter.MethodData>();
List<IFunctionNode> methods = asEmitter.getModel().getMethods();
@@ -1310,10 +1310,10 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
writeNewline(" */");
writeNewline(formatQualifiedName(cname)
+ ".prototype._bindings = [");
-
+
Set<BindingInfo> bindingInfo = bindingDataBase.getBindingInfo();
writeNewline(bindingInfo.size() + ","); // number of bindings
-
+
for (BindingInfo bi : bindingInfo)
{
String s;
@@ -1370,7 +1370,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
String part = parts[i];
write(", " + ASEmitterTokens.DOUBLE_QUOTE.getToken() + part + ASEmitterTokens.DOUBLE_QUOTE.getToken());
}
- writeNewline(ASEmitterTokens.SQUARE_CLOSE.getToken() + ASEmitterTokens.COMMA.getToken());
+ writeNewline(ASEmitterTokens.SQUARE_CLOSE.getToken() + ASEmitterTokens.COMMA.getToken());
}
else
{
@@ -1387,9 +1387,9 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
}
}
else
- writeNewline(ASEmitterTokens.DOUBLE_QUOTE.getToken() + s +
+ writeNewline(ASEmitterTokens.DOUBLE_QUOTE.getToken() + s +
ASEmitterTokens.DOUBLE_QUOTE.getToken() + ASEmitterTokens.COMMA.getToken());
-
+
IExpressionNode destNode = bi.getExpressionNodeForDestination();
if (destNode != null)
{
@@ -1399,16 +1399,16 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
}
else
writeNewline(ASEmitterTokens.NULL.getToken() + ASEmitterTokens.COMMA.getToken());
-
+
s = bi.getDestinationString();
if (s == null)
{
- writeNewline(ASEmitterTokens.NULL.getToken() + ASEmitterTokens.COMMA.getToken());
+ writeNewline(ASEmitterTokens.NULL.getToken() + ASEmitterTokens.COMMA.getToken());
}
else if (s.contains("."))
{
String[] parts = s.split("\\.");
- write(ASEmitterTokens.SQUARE_OPEN.getToken() + ASEmitterTokens.DOUBLE_QUOTE.getToken() +
+ write(ASEmitterTokens.SQUARE_OPEN.getToken() + ASEmitterTokens.DOUBLE_QUOTE.getToken() +
parts[0] + ASEmitterTokens.DOUBLE_QUOTE.getToken());
int n = parts.length;
for (int i = 1; i < n; i++)
@@ -1443,7 +1443,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
.getASEmitter();
String body = asEmitter.stringifyNode(destNode);
-
+
StringBuilder sb = new StringBuilder();
sb.append("function (value) { ");
int lastGet = body.lastIndexOf("get_");
@@ -1478,8 +1478,8 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
writeNewline("0" + ASEmitterTokens.COMMA.getToken());
FunctionWatcherInfo functionWatcherInfo = (FunctionWatcherInfo)watcherInfoBase;
-
- writeNewline(ASEmitterTokens.DOUBLE_QUOTE.getToken() + functionWatcherInfo.getFunctionName() +
+
+ writeNewline(ASEmitterTokens.DOUBLE_QUOTE.getToken() + functionWatcherInfo.getFunctionName() +
ASEmitterTokens.DOUBLE_QUOTE.getToken());
IExpressionNode params[] = functionWatcherInfo.params;
StringBuilder sb = new StringBuilder();
@@ -1490,7 +1490,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
if (firstone)
firstone = false;
sb.append(ASEmitterTokens.COMMA.getToken());
- sb.append(asEmitter.stringifyNode(param));
+ sb.append(asEmitter.stringifyNode(param));
}
sb.append("]; },");
outputEventNames(functionWatcherInfo.getEventNames());
@@ -1498,13 +1498,13 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
}
else if ((type == WatcherType.STATIC_PROPERTY) || (type == WatcherType.PROPERTY))
{
- writeNewline((type == WatcherType.STATIC_PROPERTY ? "1" : "2") +
+ writeNewline((type == WatcherType.STATIC_PROPERTY ? "1" : "2") +
ASEmitterTokens.COMMA.getToken());
PropertyWatcherInfo propertyWatcherInfo = (PropertyWatcherInfo)watcherInfoBase;
-
+
boolean makeStaticWatcher = (watcherInfoBase.getType() == WatcherType.STATIC_PROPERTY);
-
+
// round up the getter function for the watcher, or null if we don't need one
MethodInfo propertyGetterFunction = null;
if (watcherInfoBase.isRoot && !makeStaticWatcher)
@@ -1539,7 +1539,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
ASEmitterTokens.DOUBLE_QUOTE.getToken() + ASEmitterTokens.COMMA.getToken());
outputBindings(xmlWatcherInfo.getBindings());
}
- else assert false;
+ else assert false;
// then recurse into children
Set<Entry<Object, WatcherInfoBase>> children = watcherInfoBase.getChildren();
@@ -1558,11 +1558,11 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
write("null" );
}
}
-
+
private String getSourceStringFromMemberAccessExpressionNode(MemberAccessExpressionNode node)
{
String s = "";
-
+
IExpressionNode left = node.getLeftOperandNode();
if (left instanceof FunctionCallNode) // probably a cast
{
@@ -1579,7 +1579,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
else
System.out.println("expected binding member access left node" + node.toString());
s += ".";
-
+
IExpressionNode right = node.getRightOperandNode();
if (right instanceof FunctionCallNode) // probably a cast
{
@@ -1595,15 +1595,15 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
s += getSourceStringFromIdentifierNode((IdentifierNode)right);
else
System.out.println("expected binding member access right node" + node.toString());
-
+
return s;
}
-
+
private String getSourceStringFromIdentifierNode(IdentifierNode node)
{
return node.getName();
}
-
+
private String getSourceStringFromGetter(List<IExpressionNode> nodes)
{
String s = "";
@@ -1618,7 +1618,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
}
return s;
}
-
+
private void outputEventNames(List<String> events)
{
if (events.size() > 1)
@@ -1629,7 +1629,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
for (int i = 1; i < n; i++)
{
String event = events.get(i);
- write(ASEmitterTokens.COMMA.getToken() + ASEmitterTokens.DOUBLE_QUOTE.getToken() +
+ write(ASEmitterTokens.COMMA.getToken() + ASEmitterTokens.DOUBLE_QUOTE.getToken() +
event + ASEmitterTokens.DOUBLE_QUOTE.getToken());
}
writeNewline(ASEmitterTokens.SQUARE_CLOSE.getToken() + ASEmitterTokens.COMMA.getToken());
@@ -1640,7 +1640,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
else
writeNewline("null" + ASEmitterTokens.COMMA.getToken());
}
-
+
private void outputBindings(List<BindingInfo> bindings)
{
if (bindings.size() > 1)
@@ -1658,10 +1658,10 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
writeNewline(bindings.get(0).getIndex() + ASEmitterTokens.COMMA.getToken());
else
writeNewline("null" + ASEmitterTokens.COMMA.getToken());
-
+
}
- //--------------------------------------------------------------------------
+ //--------------------------------------------------------------------------
protected void emitScripts()
{
@@ -1713,7 +1713,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
}
}
- //--------------------------------------------------------------------------
+ //--------------------------------------------------------------------------
protected void emitEvents(String cname)
{
@@ -1731,7 +1731,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
.getASEmitter();
-
+
IMXMLEventSpecifierNode node = event.node;
int len = node.getChildCount();
for (int i = 0; i < len; i++)
@@ -1754,9 +1754,9 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
}
}
- //--------------------------------------------------------------------------
+ //--------------------------------------------------------------------------
private boolean skippedDefineProps;
-
+
protected void emitPropertyGetterSetters(String cname)
{
int n = 0;
@@ -1773,9 +1773,9 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
skippedDefineProps = true;
return;
}
-
+
String formattedCName = formatQualifiedName(cname);
-
+
write("Object.defineProperties(");
write(formattedCName);
writeNewline(".prototype, /** @lends {" + formattedCName + ".prototype} */ {");
@@ -1783,26 +1783,30 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
int i = 0;
for (MXMLDescriptorSpecifier instance : instances)
{
- if (instance.id != null)
+ String instanceId = instance.id;
+ if (instanceId == null && instance.hasLocalId ){
+ instanceId = instance.effectiveId;
+ }
+ if (instanceId != null)
{
indentPush();
writeNewline("/** @export */");
- writeNewline(instance.id + ": {");
+ writeNewline(instanceId + ": {");
writeNewline("/** @this {" + formattedCName + "} */");
indentPush();
writeNewline("get: function() {");
indentPop();
- writeNewline("return this." + instance.id + "_;");
+ writeNewline("return this." + instanceId + "_;");
writeNewline("},");
writeNewline("/** @this {" + formattedCName + "} */");
indentPush();
writeNewline("set: function(value) {");
indentPush();
- writeNewline("if (value != this." + instance.id + "_) {");
- writeNewline("this." + instance.id + "_ = value;");
+ writeNewline("if (value != this." + instanceId + "_) {");
+ writeNewline("this." + instanceId + "_ = value;");
write("this.dispatchEvent(org.apache.royale.events.ValueChangeEvent.createUpdateEvent(this, '");
indentPop();
- writeNewline(instance.id + "', null, value));");
+ writeNewline(instanceId + "', null, value));");
indentPop();
writeNewline("}");
indentPop();
@@ -1821,7 +1825,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
writeNewline("});");
}
- //--------------------------------------------------------------------------
+ //--------------------------------------------------------------------------
protected void emitMXMLDescriptorFuncs(String cname)
{
@@ -1831,12 +1835,12 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
RoyaleJSProject project = (RoyaleJSProject) getMXMLWalker().getProject();
project.needLanguage = true;
MXMLDescriptorSpecifier root = descriptorTree.get(0);
- if (root.propertySpecifiers.size() == 0 && skippedDefineProps)
+ if (root.propertySpecifiers.size() == 0 && skippedDefineProps)
return; // all declarations were primitives
root.isTopNode = false;
-
+
collectExportedNames(root);
-
+
indentPush();
writeNewline("'MXMLDescriptor': {");
writeNewline("/** @this {" + formatQualifiedName(cname) + "} */");
@@ -1853,9 +1857,9 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
indentPop();
indentPop();
writeNewline("var data = [");
-
+
writeNewline(root.output(true));
-
+
indentPush();
writeNewline("];");
indentPush();
@@ -1879,7 +1883,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
writeNewline("}");
writeNewline("});");
}
-
+
}
private void collectExportedNames(MXMLDescriptorSpecifier descriptor)
@@ -1898,7 +1902,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
royaleProject.addExportedName(/*name + "." + */propName);
if (prop.propertySpecifiers.size() > 0)
{
- collectExportedNames(prop.propertySpecifiers.get(0));
+ collectExportedNames(prop.propertySpecifiers.get(0));
}
}
if (descriptor.childrenSpecifier != null)
@@ -1910,17 +1914,17 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
}
}
}
-
- //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
private HashMap<IMXMLEventSpecifierNode, String> eventHandlerNameMap = new HashMap<IMXMLEventSpecifierNode, String>();
-
+
@Override
public void emitEventSpecifier(IMXMLEventSpecifierNode node)
{
if (isStateDependent(node) && !inStatesOverride)
return;
-
+
IDefinition cdef = node.getDefinition();
MXMLDescriptorSpecifier currentDescriptor = getCurrentDescriptor("i");
@@ -1951,7 +1955,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
{
if (isStateDependent(node) && !inStatesOverride)
return;
-
+
ASTNodeID nodeID = node.getNodeID();
if ((nodeID == ASTNodeID.MXMLXMLID || nodeID == ASTNodeID.MXMLXMLListID) &&
node.getParent().getNodeID() == ASTNodeID.MXMLDeclarationsID)
@@ -1959,7 +1963,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
primitiveDeclarationNodes.add(node);
return;
}
-
+
IClassDefinition cdef = node
.getClassReference((ICompilerProject) getMXMLWalker()
.getProject());
@@ -1978,6 +1982,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
MXMLDescriptorSpecifier currentInstance = new MXMLDescriptorSpecifier();
currentInstance.isProperty = false;
currentInstance.id = id;
+ currentInstance.hasLocalId = node.getLocalID() != null;
currentInstance.effectiveId = effectiveId;
currentInstance.name = formatQualifiedName(cdef.getQualifiedName());
currentInstance.parent = currentPropertySpecifier;
@@ -2069,7 +2074,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
}
}
}
-
+
moveUp(false, false);
}
@@ -2093,7 +2098,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
Name propertyOverride = project.getPropertyOverrideClassName();
emitPropertyOrStyleOverride(propertyOverride, propertyNode);
}
-
+
/**
* Generates instructions in the current context
* to create an instance of mx.states.SetStyle
@@ -2106,7 +2111,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
Name styleOverride = project.getStyleOverrideClassName();
emitPropertyOrStyleOverride(styleOverride, styleNode);
}
-
+
void emitPropertyOrStyleOverride(Name overrideName, IMXMLPropertySpecifierNode propertyOrStyleNode)
{
MXMLDescriptorSpecifier currentInstance = getCurrentDescriptor("ps");
@@ -2114,18 +2119,18 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
String id = parentNode instanceof IMXMLInstanceNode ?
((IMXMLInstanceNode)parentNode).getEffectiveID() :
null;
-
- String name = propertyOrStyleNode.getName();
-
+
+ String name = propertyOrStyleNode.getName();
+
boolean valueIsDataBound = isDataBindingNode(propertyOrStyleNode.getChild(0));
IMXMLInstanceNode propertyOrStyleValueNode = propertyOrStyleNode.getInstanceNode();
-
+
MXMLDescriptorSpecifier setProp = new MXMLDescriptorSpecifier();
setProp.isProperty = false;
setProp.name = formatQualifiedName(nameToString(overrideName));
setProp.parent = currentInstance;
currentInstance.propertySpecifiers.add(setProp);
-
+
if (id != null)
{
// Set its 'target' property to the id of the object
@@ -2137,7 +2142,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
target.value = ASEmitterTokens.SINGLE_QUOTE.getToken() + id + ASEmitterTokens.SINGLE_QUOTE.getToken();
setProp.propertySpecifiers.add(target);
}
-
+
// Set its 'name' property to the name of the property or style.
MXMLDescriptorSpecifier pname = new MXMLDescriptorSpecifier();
pname.isProperty = true;
@@ -2176,7 +2181,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
}
}
}
-
+
/**
* Generates instructions in the current context
* to create an instance of mx.states.SetEventHandler
@@ -2186,18 +2191,18 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
void emitEventOverride(IMXMLEventSpecifierNode eventNode)
{
inStatesOverride = true;
-
+
MXMLDescriptorSpecifier currentInstance = getCurrentDescriptor("ps");
RoyaleProject project = (RoyaleProject) getMXMLWalker().getProject();
Name eventOverride = project.getEventOverrideClassName();
-
+
IASNode parentNode = eventNode.getParent();
String id = parentNode instanceof IMXMLInstanceNode ?
((IMXMLInstanceNode)parentNode).getEffectiveID() :
"";
-
+
String name = MXMLEventSpecifier.getJSEventName(eventNode.getName());
-
+
String eventHandler = eventHandlerNameMap.get(eventNode);
if (eventHandler == null)
{
@@ -2226,27 +2231,27 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
pname.parent = setEvent;
pname.value = ASEmitterTokens.SINGLE_QUOTE.getToken() + name + ASEmitterTokens.SINGLE_QUOTE.getToken();
setEvent.propertySpecifiers.add(pname);
-
+
// Set its 'handlerFunction' property to the autogenerated event handler.
MXMLDescriptorSpecifier handler = new MXMLDescriptorSpecifier();
handler.isProperty = true;
handler.name = "handlerFunction";
handler.parent = setEvent;
- handler.value = JSRoyaleEmitterTokens.CLOSURE_FUNCTION_NAME.getToken() + ASEmitterTokens.PAREN_OPEN.getToken() +
+ handler.value = JSRoyaleEmitterTokens.CLOSURE_FUNCTION_NAME.getToken() + ASEmitterTokens.PAREN_OPEN.getToken() +
ASEmitterTokens.THIS.getToken() + ASEmitterTokens.MEMBER_ACCESS.getToken() + eventHandler +
ASEmitterTokens.COMMA.getToken() + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.THIS.getToken() +
ASEmitterTokens.COMMA.getToken() + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.SINGLE_QUOTE.getToken() +
eventHandler + ASEmitterTokens.SINGLE_QUOTE.getToken() +
ASEmitterTokens.PAREN_CLOSE.getToken();
setEvent.propertySpecifiers.add(handler);
-
+
inStatesOverride = false;
}
public void emitInstanceOverride(IMXMLInstanceNode instanceNode)
{
inStatesOverride = true;
-
+
MXMLDescriptorSpecifier currentInstance = getCurrentDescriptor("ps");
RoyaleProject project = (RoyaleProject) getMXMLWalker().getProject();
Name instanceOverrideName = project.getInstanceOverrideClassName();
@@ -2288,14 +2293,14 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
itemsDescIndex.parent = addItems;
itemsDescIndex.value = Integer.toString(index);
addItems.propertySpecifiers.add(itemsDescIndex);
-
+
//-----------------------------------------------------------------------------
// Second property set: maybe set destination and propertyName
-
+
// get the property specifier node for the property the instanceNode represents
- IMXMLPropertySpecifierNode propertySpecifier = (IMXMLPropertySpecifierNode)
+ IMXMLPropertySpecifierNode propertySpecifier = (IMXMLPropertySpecifierNode)
instanceNode.getAncestorOfType( IMXMLPropertySpecifierNode.class);
-
+
if (propertySpecifier == null)
{
assert false; // I think this indicates an invalid tree...
@@ -2305,7 +2310,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
// Check the parent - if it's an instance then we want to use these
// nodes to get our property values from. If not, then it's the root
// and we don't need to specify destination
-
+
IASNode parent = propertySpecifier.getParent();
if (parent instanceof IMXMLInstanceNode)
{
@@ -2313,7 +2318,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
String parentId = parentInstance.getEffectiveID();
assert parentId != null;
String propName = propertySpecifier.getName();
-
+
MXMLDescriptorSpecifier dest = new MXMLDescriptorSpecifier();
dest.isProperty = true;
dest.name = "destination";
@@ -2328,13 +2333,13 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
prop.value = ASEmitterTokens.SINGLE_QUOTE.getToken() + propName + ASEmitterTokens.SINGLE_QUOTE.getToken();
addItems.propertySpecifiers.add(prop);
}
- }
-
+ }
+
//---------------------------------------------------------------
// Third property set: position and relativeTo
String positionPropertyValue = null;
String relativeToPropertyValue = null;
-
+
// look to see if we have any sibling nodes that are not state dependent
// that come BEFORE us
IASNode instanceParent = instanceNode.getParent();
@@ -2343,7 +2348,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
{
IASNode sib = instanceParent.getChild(i);
assert sib instanceof IMXMLInstanceNode; // surely our siblings are also instances?
-
+
// stop looking for previous nodes when we find ourself
if (sib == instanceNode)
break;
@@ -2353,7 +2358,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
prevStatelessSibling = sib;
}
}
-
+
if (prevStatelessSibling == null) {
positionPropertyValue = "first"; // TODO: these should be named constants
}
@@ -2361,14 +2366,14 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
positionPropertyValue = "after";
relativeToPropertyValue = ((IMXMLInstanceNode)prevStatelessSibling).getEffectiveID();
}
-
+
MXMLDescriptorSpecifier pos = new MXMLDescriptorSpecifier();
pos.isProperty = true;
pos.name = "position";
pos.parent = addItems;
pos.value = ASEmitterTokens.SINGLE_QUOTE.getToken() + positionPropertyValue + ASEmitterTokens.SINGLE_QUOTE.getToken();
addItems.propertySpecifiers.add(pos);
-
+
if (relativeToPropertyValue != null)
{
MXMLDescriptorSpecifier rel = new MXMLDescriptorSpecifier();
@@ -2378,7 +2383,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
rel.value = ASEmitterTokens.SINGLE_QUOTE.getToken() + relativeToPropertyValue + ASEmitterTokens.SINGLE_QUOTE.getToken();
addItems.propertySpecifiers.add(rel);
}
-
+
inStatesOverride = false;
}
@@ -2406,7 +2411,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
return true;
return false;
}
-
+
/**
* Determines whether the geven node is an instance node, as is state dependent
*/
@@ -2420,7 +2425,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
}
return false;
}
-
+
/**
* Is a give node a "databinding node"?
*/
@@ -2428,11 +2433,11 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
{
return node instanceof IMXMLDataBindingNode;
}
-
+
protected static boolean isDataboundProp(IMXMLPropertySpecifierNode propertyNode)
{
boolean ret = propertyNode.getChildCount() > 0 && isDataBindingNode(propertyNode.getInstanceNode());
-
+
// Sanity check that we based our conclusion about databinding on the correct node.
// (code assumes only one child if databinding)
int n = propertyNode.getChildCount();
@@ -2441,7 +2446,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
boolean db = isDataBindingNode(propertyNode.getChild(i));
assert db == ret;
}
-
+
return ret;
}
@@ -2450,10 +2455,10 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
{
if (isDataboundProp(node))
return;
-
+
if (isStateDependent(node))
return;
-
+
IDefinition cdef = node.getDefinition();
IASNode cnode = node.getChild(0);
@@ -2470,7 +2475,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
if (currentPropertySpecifier.name.equals("mxmlContent"))
{
inMXMLContent = true;
- ArrayList<MXMLDescriptorSpecifier> specList =
+ ArrayList<MXMLDescriptorSpecifier> specList =
(currentInstance == null) ? descriptorTree : currentInstance.propertySpecifiers;
for (MXMLDescriptorSpecifier ds : specList)
{
@@ -2482,7 +2487,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
}
}
}
-
+
if (currentInstance != null)
{
// we end up here for children of tags
@@ -2512,7 +2517,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
getMXMLWalker().walk(cnode); // Array or Instance
moveUp(false, false);
-
+
inMXMLContent = oldInMXMLContent;
}
@@ -2547,26 +2552,26 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
for (int i = 0; i < len; i++)
{
getMXMLWalker().walk(node.getChild(i)); // props in object
- }
+ }
}
else
{
MXMLDescriptorSpecifier ps = getCurrentDescriptor("ps");
if (ps.value == null)
ps.value = "";
- ps.value += "{";
+ ps.value += "{";
for (int i = 0; i < len; i++)
{
IMXMLPropertySpecifierNode propName = (IMXMLPropertySpecifierNode)node.getChild(i);
- ps.value += propName.getName() + ": ";
+ ps.value += propName.getName() + ": ";
getMXMLWalker().walk(propName.getChild(0));
if (i < len - 1)
- ps.value += ", ";
- }
- ps.value += "}";
+ ps.value += ", ";
+ }
+ ps.value += "}";
}
}
-
+
@Override
public void emitArray(IMXMLArrayNode node)
{
@@ -2603,7 +2608,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
}
if (isSimple)
{
- ps.value += ASEmitterTokens.SQUARE_CLOSE.getToken();
+ ps.value += ASEmitterTokens.SQUARE_CLOSE.getToken();
}
makingSimpleArray = oldMakingSimpleArray;
@@ -2638,13 +2643,13 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
if (ps.valueNeedsQuotes)
{
// escape all single quotes found within the string
- s = s.replace(ASEmitterTokens.SINGLE_QUOTE.getToken(),
+ s = s.replace(ASEmitterTokens.SINGLE_QUOTE.getToken(),
"\\" + ASEmitterTokens.SINGLE_QUOTE.getToken());
}
s = s.replace("\r\n", "\\n");
s = s.replace("\n", "\\n");
ps.value += s;
-
+
if (ps.valueNeedsQuotes)
ps.value += ASEmitterTokens.SINGLE_QUOTE.getToken();
}
@@ -2657,7 +2662,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
IASNode cnode = node.getChild(0);
ITypeDefinition type = ((IMXMLClassNode)cnode).getValue(getMXMLWalker().getProject());
if (type == null) return;
-
+
MXMLDescriptorSpecifier ps = getCurrentDescriptor("ps");
ps.value = "new " + formatQualifiedName("org.apache.royale.core.ClassFactory") + "(";
@@ -2679,7 +2684,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
ps.value += formatQualifiedName(documentDefinition.getQualifiedName()) + ".";
ps.value += formatQualifiedName(node.getName());
ps.value += ")";
-
+
setBufferWrite(true);
emitSubDocument(node);
subDocuments.append(getBuilder().toString());
@@ -2694,11 +2699,11 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker()).getASEmitter();
((JSRoyaleEmitter)asEmitter).setBufferWrite(value);
}
-
+
//--------------------------------------------------------------------------
// JS output
//--------------------------------------------------------------------------
-
+
private void emitHeader(IMXMLDocumentNode node)
{
String cname = node.getFileNode().getName();
@@ -2709,9 +2714,9 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
String sourceName = node.getSourcePath();
for (File sourcePath : sourcePaths)
{
- if (sourceName.startsWith(sourcePath.getAbsolutePath()))
+ if (sourceName.startsWith(sourcePath.getAbsolutePath()))
{
- sourceName = sourceName.substring(sourcePath.getAbsolutePath().length() + 1);
+ sourceName = sourceName.substring(sourcePath.getAbsolutePath().length() + 1);
}
}
writeNewline("/**");
@@ -2723,7 +2728,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
writeNewline(" * @suppress {checkTypes|accessControls}");
writeNewline(" */");
writeNewline();
-
+
ArrayList<String> writtenInstances = new ArrayList<String>();
emitHeaderLine(cname, true); // provide
for (String subDocumentName : subDocumentNames)
@@ -2778,10 +2783,10 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
{
if (imp.indexOf(JSGoogEmitterTokens.AS3.getToken()) != -1)
continue;
-
+
if (imp.equals(cname))
continue;
-
+
if (imp.equals("mx.binding.Binding"))
continue;
if (imp.equals("mx.binding.BindingManager"))
@@ -2800,10 +2805,10 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
continue;
if (imp.equals("mx.core.DeferredInstanceFromFunction"))
continue;
-
+
if (NativeUtils.isNative(imp))
continue;
-
+
String formatted = formatQualifiedName(imp, false);
if (writtenInstances.indexOf(formatted) == -1)
{
@@ -2813,7 +2818,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
}
}
- // erikdebruin: Add missing language feature support, like the 'is' and
+ // erikdebruin: Add missing language feature support, like the 'is' and
// 'as' operators. We don't need to worry about requiring
// this in every project: ADVANCED_OPTIMISATIONS will NOT
// include any of the code if it is not used in the project.
@@ -2938,7 +2943,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
{
return formatQualifiedName(name, true);
}
-
+
protected String formatQualifiedName(String name, boolean useName)
{
/*
@@ -3011,7 +3016,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
IMXMLInstanceNode declNode = primitiveDeclarationNodes.get(i);
ASTNodeID nodeId = declNode.getNodeID();
String varname;
-
+
switch (nodeId)
{
case MXMLStringID:
@@ -3099,7 +3104,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
}
}
}
-
+
private String objectToString(Object value)
{
if (value instanceof String)
@@ -3154,7 +3159,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
writeNewline();
}
}
-
+
@Override
public void emitImplements(IMXMLImplementsNode node)
{
@@ -3171,13 +3176,13 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
//System.out.println("mxml implements "+list);
interfaceList = list.toString();
}
-
+
boolean isExternal(String className)
{
ICompilerProject project = getMXMLWalker().getProject();
ICompilationUnit cu = project.resolveQNameToCompilationUnit(className);
if (cu == null) return false; // unit testing
-
+
return ((RoyaleJSProject)project).isExternalLinkage(cu);
}
@@ -3209,7 +3214,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
moveDown(false, null, propertySpecifier);
emitInstance(node);
-
+
moveUp(false, false);
// build out the argument list if any
int n = node.getChildCount();
@@ -3242,7 +3247,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
list.append("'" + argList.get(j) + "'");
}
list.append("]");
-
+
MXMLDescriptorSpecifier operationInstance = propertySpecifier.propertySpecifiers.get(0);
MXMLDescriptorSpecifier argListSpecifier = new MXMLDescriptorSpecifier();
@@ -3256,7 +3261,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
break;
}
}
- }
+ }
}
@Override
@@ -3272,7 +3277,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
if (child.getNodeID() == ASTNodeID.MXMLRemoteObjectMethodID)
{
MXMLDescriptorSpecifier currentPropertySpecifier = getCurrentDescriptor("ps");
- MXMLDescriptorSpecifier currentInstance =
+ MXMLDescriptorSpecifier currentInstance =
currentPropertySpecifier.propertySpecifiers.get(currentPropertySpecifier.propertySpecifiers.size() - 1);
if (objectSpecifier == null)
@@ -3294,7 +3299,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements
moveDown(false, objectSpecifier, null);
getMXMLWalker().walk(child); // RemoteObjectMethod
moveUp(false, true);
- }
+ }
}
}
}