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);
-			}			
+			}
 		}
 	}
 }