You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2017/03/26 04:55:49 UTC

[3/5] git commit: [flex-falcon] [refs/heads/develop] - use dependency graph to sort out order of files. Static initializer dependencies are tracked in comments

use dependency graph to sort out order of files.  Static initializer dependencies are tracked in comments


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/fc1fa430
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/fc1fa430
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/fc1fa430

Branch: refs/heads/develop
Commit: fc1fa430e255c5ce331a2708f3418e9d4ff8b6e4
Parents: 870816b
Author: Alex Harui <ah...@apache.org>
Authored: Sat Mar 25 10:48:04 2017 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Sat Mar 25 10:48:04 2017 -0700

----------------------------------------------------------------------
 .../internal/codegen/js/JSSessionModel.java     |   2 +
 .../codegen/js/flexjs/JSFlexJSEmitter.java      | 131 +++++++---
 .../codegen/js/goog/JSGoogEmitterTokens.java    |   1 +
 .../internal/codegen/js/jx/FieldEmitter.java    |   2 +
 .../codegen/js/jx/PackageHeaderEmitter.java     |  67 ++---
 .../codegen/mxml/flexjs/MXMLFlexJSEmitter.java  | 132 +++++-----
 .../mxml/flexjs/MXMLFlexJSPublisher.java        |   2 +-
 .../compiler/internal/graph/GoogDepsWriter.java | 255 ++++++++++++-------
 .../utils/JSClosureCompilerWrapper.java         |   8 +-
 .../apache/flex/compiler/utils/NativeUtils.java |   1 +
 .../codegen/js/flexjs/TestFlexJSClass.java      |   2 +-
 .../mxml/flexjs/TestFlexJSMXMLApplication.java  |  18 +-
 .../flexjs/files/FlexJSTest_again_result.js     |  10 +-
 .../flexjs/files/MyInitialView_result.js        |  16 +-
 .../files/controllers/MyController_result.js    |   6 +-
 .../flexjs/files/models/MyModel_result.js       |   3 +-
 .../flexjs/files/wildcard_import_result.js      |   2 +-
 .../flexjs/projects/interfaces/Test_result.js   |   4 +-
 .../projects/internal/MainClass_result.js       |   3 +-
 .../DifferentPackageAsConflict_result.js        |   3 +-
 .../mypackage/TestClass_result.js               |   3 +-
 .../NoConflictNoWindow_result.js                |   3 +-
 .../NoConflictUseWindow_result.js               |   3 +-
 .../SamePackageAsConflict_result.js             |   3 +-
 .../mypackage/TestClass_result.js               |   3 +-
 .../UseWindow_result.js                         |   3 +-
 .../mypackage/TestClass_result.js               |   3 +-
 .../projects/xml_requires/XMLRequire_result.js  |   3 +-
 28 files changed, 408 insertions(+), 284 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
index 36d6881..ca47881 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
@@ -81,6 +81,8 @@ public class JSSessionModel
 
     public boolean inE4xFilter = false;
 
+    public boolean inStaticInitializer = false;
+    
     private LinkedHashMap<String, PropertyNodes> propertyMap = new LinkedHashMap<String, PropertyNodes>();
 
     private List<String> interfacePropertyMap = new ArrayList<String>();

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 8ac7ae8..af93844 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -23,7 +23,6 @@ import java.io.File;
 import java.io.FilterWriter;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import org.apache.commons.io.FileUtils;
@@ -155,6 +154,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     private DefinePropertyFunctionEmitter definePropertyFunctionEmitter;
 
     public ArrayList<String> usedNames = new ArrayList<String>();
+    public ArrayList<String> staticUsedNames = new ArrayList<String>();
     private boolean needNamespace;
 
     @Override
@@ -164,13 +164,13 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
 
     	String[] lines = output.split("\n");
     	ArrayList<String> finalLines = new ArrayList<String>();
-        ArrayList<String> deps = new ArrayList<String>();
         boolean foundLanguage = false;
         boolean foundXML = false;
         boolean foundNamespace = false;
         boolean sawRequires = false;
     	boolean stillSearching = true;
-        int depsIndex = -1;
+        int addIndex = -1;
+        int provideIndex = -1;
         int len = lines.length;
     	for (int i = 0; i < len; i++)
     	{
@@ -182,42 +182,34 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
                 {
                     // if zero requires are found, require Language after the
                     // call to goog.provide
-                    depsIndex = i + 1;
+                    provideIndex = addIndex = i + 1;
                 }
-                String token = JSGoogEmitterTokens.FLEXJS_DEPENDENCY_LIST.getToken();
-	            c = line.indexOf(token);
+	            c = line.indexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
 	            if (c != -1)
 	            {
                     // we found other requires, so we'll just add Language at
                     // the end of the list
-                    depsIndex = i;
-	                int c2 = line.indexOf("*/");
-	                String s = line.substring(c + token.length(), c2);
-	                deps.addAll(Arrays.asList(s.split(",")));
-                    if (deps.contains(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken()))
+                    addIndex = -1;
+	                int c2 = line.indexOf(")");
+	                String s = line.substring(c + 14, c2 - 1);
+                    if (s.equals(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken()))
                     {
                         foundLanguage = true;
                     }
-                    else if (deps.contains(IASLanguageConstants.XML))
+                    else if (s.equals(IASLanguageConstants.XML))
                     {
                         foundXML = true;
                     }
-                    else if (deps.contains(IASLanguageConstants.Namespace))
+                    else if (s.equals(IASLanguageConstants.Namespace))
                     {
                         foundNamespace = true;
                     }
 	    			sawRequires = true;
-	    			ArrayList<String> removalList = new ArrayList<String>();
-	    			for (String dep : deps)
-	    			{
-		    			if (!usedNames.contains(dep))
-	                    {
-	                        removalList.add(dep);
-	                    }	    				
-	    			}
-	    			for (String dep : removalList)
-	    				deps.remove(dep);
-                    continue;
+	    			if (!usedNames.contains(s))
+                    {
+                        removeLineFromMappings(i);
+                        continue;
+                    }
 	    		}
 	    		else if (sawRequires || i == len - 1)
                 {
@@ -234,30 +226,95 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
                         boolean needLanguage = flexJSProject.needLanguage;
                         if (needLanguage && !foundLanguage)
                         {
-                            deps.add(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
+                            StringBuilder appendString = new StringBuilder();
+                            appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+                            appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
+                            appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+                            appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
+                            appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+                            appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
+                            appendString.append(ASEmitterTokens.SEMICOLON.getToken());
+                            if(addIndex != -1)
+                            {
+                                // if we didn't find other requires, this index
+                                // points to the line after goog.provide
+                                finalLines.add(addIndex, appendString.toString());
+                                addLineToMappings(addIndex);
+                            }
+                            else
+                            {
+                                finalLines.add(appendString.toString());
+                                addLineToMappings(i);
+                            }
                         }
                         boolean needXML = flexJSProject.needXML;
                         if (needXML && !foundXML)
                         {
-                            deps.add(IASLanguageConstants.XML);
+                            StringBuilder appendString = new StringBuilder();
+                            appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+                            appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
+                            appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+                            appendString.append(IASLanguageConstants.XML);
+                            appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+                            appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
+                            appendString.append(ASEmitterTokens.SEMICOLON.getToken());
+                            if(addIndex != -1)
+                            {
+                                // if we didn't find other requires, this index
+                                // points to the line after goog.provide
+                                finalLines.add(addIndex, appendString.toString());
+                                addLineToMappings(addIndex);
+                            }
+                            else
+                            {
+                                finalLines.add(appendString.toString());
+                                addLineToMappings(i);
+                            }
                         }
                         if (needNamespace && !foundNamespace)
                         {
-                            deps.add(IASLanguageConstants.Namespace);
+                            StringBuilder appendString = new StringBuilder();
+                            appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+                            appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
+                            appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+                            appendString.append(IASLanguageConstants.Namespace);
+                            appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+                            appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
+                            appendString.append(ASEmitterTokens.SEMICOLON.getToken());
+                            if(addIndex != -1)
+                            {
+                                // if we didn't find other requires, this index
+                                // points to the line after goog.provide
+                                finalLines.add(addIndex, appendString.toString());
+                                addLineToMappings(addIndex);
+                            }
+                            else
+                            {
+                                finalLines.add(appendString.toString());
+                                addLineToMappings(i);
+                            }
                         }
                     }
                 }
     		}
     		finalLines.add(line);
     	}
-    	if (deps.size() > 0)
-    	{
-	        StringBuilder sb = new StringBuilder();
-	        sb.append(JSGoogEmitterTokens.FLEXJS_DEPENDENCY_LIST.getToken());
-	        sb.append(Joiner.on(",").join(deps));
-	        sb.append("*/\n");
-			finalLines.add(depsIndex, sb.toString());
-    	}
+		if (staticUsedNames.size() > 0)
+		{
+			StringBuilder sb = new StringBuilder();
+			sb.append(JSGoogEmitterTokens.FLEXJS_STATIC_DEPENDENCY_LIST.getToken());
+			boolean firstDependency = true;
+			for (String staticName : staticUsedNames)
+			{
+				if (!firstDependency)
+					sb.append(",");
+				firstDependency = false;
+				sb.append(staticName);
+			}
+			sb.append("*/");
+			finalLines.add(provideIndex, sb.toString());
+		}
+
     	return Joiner.on("\n").join(finalLines);
     }
 
@@ -499,6 +556,10 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     		name = name.substring(7);
     	else if (!isDoc)
     	{
+        	if (getModel().inStaticInitializer)
+        		if (!staticUsedNames.contains(name))
+        			staticUsedNames.add(name);
+    		
     		if (!usedNames.contains(name))
     			usedNames.add(name);
     	}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitterTokens.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitterTokens.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitterTokens.java
index 5cf6d1c..07dfe14 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitterTokens.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitterTokens.java
@@ -33,6 +33,7 @@ public enum JSGoogEmitterTokens implements IEmitterTokens
     GOOG_PROVIDE("goog.provide"),
     GOOG_REQUIRE("goog.require"),
     FLEXJS_DEPENDENCY_LIST("/* FlexJS Dependency List: "),
+    FLEXJS_STATIC_DEPENDENCY_LIST("/* FlexJS Static Dependency List: "),
     OBJECT("Object"),
     ARRAY("Array"),
     ERROR("Error"),

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
index 1b0d579..7029028 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
@@ -108,7 +108,9 @@ public class FieldEmitter extends JSSubEmitter implements
         IExpressionNode vnode = node.getAssignedValueNode();
         if (vnode != null)
         {
+        	getModel().inStaticInitializer = ndef.isStatic();
             String vnodeString = getEmitter().stringifyNode(vnode);
+        	getModel().inStaticInitializer = false;
         	if ((ndef.isStatic() && !EmitterUtils.needsStaticInitializer(vnodeString, className)) || 
         			(!ndef.isStatic() && EmitterUtils.isScalar(vnode)) ||
         			isPackageOrFileMember)

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
index fa281ad..73d3b80 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
@@ -211,15 +211,14 @@ public class PackageHeaderEmitter extends JSSubEmitter implements
 
         String cname = (type != null) ? type.getQualifiedName() : otherMainDefinition.getQualifiedName();
         writtenRequires.add(cname); // make sure we don't add ourselves
-        String baseName = "";
+
 
         if (type instanceof IClassDefinition) {
-            IClassDefinition bindableClassDef = (IClassDefinition) type;
-            baseName = bindableClassDef.resolveBaseClass(flexProject).getQualifiedName();
             //check whether we should add the requires for the implicit Bindable EventDispatcher implementations
             boolean needsBindableSupport = ((IClassDefinition) type).needsEventDispatcher(flexProject);
 
             if (needsBindableSupport) {
+                IClassDefinition bindableClassDef = (IClassDefinition) type;
                 ClassDefinition objectClassDefinition = (ClassDefinition)flexProject.getBuiltinType(
                         IASLanguageConstants.BuiltinType.OBJECT);
 
@@ -259,23 +258,9 @@ public class PackageHeaderEmitter extends JSSubEmitter implements
 
         }
 
-        if (interfacesList != null && requiresList != null)
-        {
-	        for (String r : interfacesList)
-	        {
-	        	while (requiresList.contains(r))
-	        	{
-	        		requiresList.remove(r);
-	        		System.out.println("interface " + r + "is already in requires list");
-	        	}
-	        }
-        }
-        boolean emitsRequires = emitRequires(requiresList, writtenRequires, cname, baseName);
+        boolean emitsRequires = emitRequires(requiresList, writtenRequires, cname);
         boolean emitsInterfaces = emitInterfaces(interfacesList, writtenRequires);
 
-        boolean isMainCU = flexProject.mainCU != null
-        	&& cu.getName().equals(flexProject.mainCU.getName());
-        /*
         // erikdebruin: Add missing language feature support, with e.g. 'is' and
         //              'as' operators. We don't need to worry about requiring
         //              this in every project: ADVANCED_OPTIMISATIONS will NOT
@@ -301,8 +286,7 @@ public class PackageHeaderEmitter extends JSSubEmitter implements
                 }
             }
         }
-		*/
-        
+
         boolean emitsExternalRequires = emitExternalRequires(externalRequiresList, writtenRequires);
 
         if (emitsRequires || emitsInterfaces || emitsExternalRequires || isMainCU)
@@ -314,13 +298,9 @@ public class PackageHeaderEmitter extends JSSubEmitter implements
         writeNewline();
     }
 
-    private boolean emitRequires(List<String> requiresList, List<String> writtenRequires, String cname, String baseName)
+    private boolean emitRequires(List<String> requiresList, List<String> writtenRequires, String cname)
     {
-    	StringBuilder sb = new StringBuilder();
-    	sb.append(JSGoogEmitterTokens.FLEXJS_DEPENDENCY_LIST.getToken());
-    	
         boolean emitsRequires = false;
-        boolean firstDependency = true;
         if (requiresList != null)
         {
             Collections.sort(requiresList);
@@ -348,37 +328,22 @@ public class PackageHeaderEmitter extends JSSubEmitter implements
 
                 if (writtenRequires.indexOf(imp) == -1)
                 {
-                	if (imp.equals(baseName))
-                	{
-	                    /* goog.require('x');\n */
-	                    write(JSGoogEmitterTokens.GOOG_REQUIRE);
-	                    write(ASEmitterTokens.PAREN_OPEN);
-	                    write(ASEmitterTokens.SINGLE_QUOTE);
-	                    write(((JSFlexJSEmitter)getEmitter()).formatQualifiedName(imp, true));
-	                    write(ASEmitterTokens.SINGLE_QUOTE);
-	                    write(ASEmitterTokens.PAREN_CLOSE);
-	                    writeNewline(ASEmitterTokens.SEMICOLON);
-	                    emitsRequires = true;
-                	}
-                	else
-                	{
-                		if (!firstDependency)
-                			sb.append(",");
-                		sb.append(((JSFlexJSEmitter)getEmitter()).formatQualifiedName(imp, true));
-                		firstDependency = false;
-                	}
+
+                    /* goog.require('x');\n */
+                    write(JSGoogEmitterTokens.GOOG_REQUIRE);
+                    write(ASEmitterTokens.PAREN_OPEN);
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write(((JSFlexJSEmitter)getEmitter()).formatQualifiedName(imp, true));
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write(ASEmitterTokens.PAREN_CLOSE);
+                    writeNewline(ASEmitterTokens.SEMICOLON);
 
                     writtenRequires.add(imp);
+
+                    emitsRequires = true;
                 }
             }
         }
-        
-        if (!firstDependency)
-        {
-        	sb.append("*/\n");
-        	write(sb.toString());
-        	emitsRequires = true;
-        }
         return emitsRequires;
     }
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
index da9d3e3..21aef44 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
@@ -23,7 +23,6 @@ package org.apache.flex.compiler.internal.codegen.mxml.flexjs;
 import java.io.File;
 import java.io.FilterWriter;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -159,31 +158,27 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
     	String[] lines = output.split("\n");
     	ArrayList<String> finalLines = new ArrayList<String>();
     	int endRequires = -1;
-    	int provideIndex = -1;
     	boolean sawRequires = false;
-    	boolean depsAdded = false;
     	boolean stillSearching = true;
         ArrayList<String> namesToAdd = new ArrayList<String>();
         ArrayList<String> foundRequires = new ArrayList<String>();
-        int i = 0;
     	for (String line : lines)
     	{
     		if (stillSearching)
     		{
-    			String token = JSGoogEmitterTokens.FLEXJS_DEPENDENCY_LIST.getToken();
-	            int c = line.indexOf(token);
+	            int c = line.indexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
 	            if (c > -1)
 	            {
-	                int c2 = line.indexOf("*/");
-	                String s = line.substring(c + token.length(), c2);
-	                String[] reqs = s.split(",");
-	                for (String req : reqs)
-	                {
-	                	if (usedNames.contains(req) && !foundRequires.contains(req))
-	                		foundRequires.add(req);
-	                }
+	                int c2 = line.indexOf(")");
+	                String s = line.substring(c + 14, c2 - 1);
+                    if (s.equals(IASLanguageConstants.XML))
+                    {
+                        foundXML = true;
+                    }
 	    			sawRequires = true;
-	    			endRequires = i;
+                    foundRequires.add(s);
+	    			if (!usedNames.contains(s))
+	    				continue;
 	    		}
 	    		else if (sawRequires)
 	    		{
@@ -207,23 +202,27 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
 
                     for (String nameToAdd : namesToAdd) {
                         //System.out.println("adding late requires:"+nameToAdd);
-                    	if (!foundRequires.contains(nameToAdd))
-                    		foundRequires.add(nameToAdd);
+                        finalLines.add(createRequireLine(nameToAdd,false));
                     }
-	    		}
-	    		else if (line.indexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken()) != -1)
-	    		{
-	    			provideIndex = i;
+
+	    			endRequires = finalLines.size();
 	    		}
     		}
     		finalLines.add(line);
-    		i++;
     	}
         boolean needXML = ((FlexJSProject)(((IMXMLBlockWalker) getMXMLWalker()).getProject())).needXML;
-        if (needXML && !foundRequires.contains(IASLanguageConstants.XML))
-        {
-    		foundRequires.add(IASLanguageConstants.XML);
-    		depsAdded = true;
+        if (needXML && !foundXML)
+        {
+            StringBuilder appendString = new StringBuilder();
+            appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+            appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
+            appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+            appendString.append(IASLanguageConstants.XML);
+            appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+            appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
+            appendString.append(ASEmitterTokens.SEMICOLON.getToken());
+            finalLines.add(endRequires, appendString.toString());
+            // TODO (aharui) addLineToMappings(finalLines.size());
         }
     	// append info() structure if main CU
         ICompilerProject project = getMXMLWalker().getProject();
@@ -256,8 +255,15 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
 		            			mixinInject += ", "; 
 		            		mixinInject += mixin;
 		            		firstOne = false;
-		                    foundRequires.add(mixin);
-		                    depsAdded = true;
+		                    StringBuilder appendString = new StringBuilder();
+		                    appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+		                    appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
+		                    appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+		                    appendString.append(mixin);
+		                    appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+		                    appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
+		                    appendString.append(ASEmitterTokens.SEMICOLON.getToken());
+	                        finalLines.add(endRequires, appendString.toString());
 	                        //addLineToMappings(finalLines.size());
 		            	}
 		            	mixinInject += "]";
@@ -299,18 +305,6 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
 	            }
             }
         }
-        if (foundRequires.size() > 0)
-        {
-        	StringBuilder sb = new StringBuilder();
-        	sb.append(JSGoogEmitterTokens.FLEXJS_DEPENDENCY_LIST.getToken());
-            sb.append(Joiner.on(",").join(foundRequires));
-            sb.append("*/\n");
-            if (endRequires == -1)
-            	finalLines.add(provideIndex + 1, sb.toString());
-            else
-            	finalLines.set(endRequires, sb.toString());
-
-        }
     	return Joiner.on("\n").join(finalLines);
     }
     
@@ -2324,17 +2318,20 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
         writtenInstances.add(formatQualifiedName(cname)); // make sure we don't add ourselves
         writtenInstances.add(formatQualifiedName(bcname)); // make sure we don't add the baseclass twice
         allInstances.addAll(0, instances);
-        
+        for (MXMLDescriptorSpecifier instance : allInstances)
+        {
+            String name = instance.name;
+            if (writtenInstances.indexOf(name) == -1)
+            {
+                emitHeaderLine(name);
+                writtenInstances.add(name);
+            }
+        }
         ASProjectScope projectScope = (ASProjectScope) project.getScope();
         IDefinition cdef = node.getDefinition();
         ICompilationUnit cu = projectScope
                 .getCompilationUnitForDefinition(cdef);
         ArrayList<String> deps = project.getRequires(cu);
-        for (MXMLDescriptorSpecifier instance : allInstances)
-        {
-            String name = instance.name;
-            deps.add(name);
-        }
 
         // TODO (mschmalle) will remove this cast as more things get abstracted
         JSFlexJSEmitter fjs = (JSFlexJSEmitter) ((IMXMLBlockWalker) getMXMLWalker())
@@ -2352,20 +2349,10 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
         	String[] interfaces = interfaceList.split(", ");
         	for (String iface : interfaces)
         	{
-        		while (deps.contains(iface))
-        			deps.remove(iface);
+        		deps.add(iface);
         		usedNames.add(iface);
-                if (writtenInstances.indexOf(iface) == -1)
-                {
-                    emitHeaderLine(iface);
-                    writtenInstances.add(iface);
-                }
         	}
         }
-        boolean firstDependency = true;
-        boolean depsAdded = false;
-    	StringBuilder sb = new StringBuilder();
-    	sb.append(JSGoogEmitterTokens.FLEXJS_DEPENDENCY_LIST.getToken());
         if (deps != null)
         {
         	Collections.sort(deps);
@@ -2402,12 +2389,8 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
                 String formatted = formatQualifiedName(imp, false);
                 if (writtenInstances.indexOf(formatted) == -1)
                 {
-            		if (!firstDependency)
-            			sb.append(",");
-                    sb.append(formatted);
+                    emitHeaderLine(imp);
                     writtenInstances.add(formatted);
-                    firstDependency = false;
-                    depsAdded = true;
                 }
             }
         }
@@ -2422,19 +2405,10 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
             if (project instanceof FlexJSProject)
             {
             	if (((FlexJSProject)project).needLanguage)
-            	{
-            		if (!firstDependency)
-            			sb.append(",");
-            		sb.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
-                    depsAdded = true;
-            	}
+            		emitHeaderLine(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
             }
         }
-        sb.append("*/\n");
-        if (depsAdded)
-        {
-        	write(sb.toString());
-        }
+
         writeNewline();
         writeNewline();
     }
@@ -2456,6 +2430,18 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
         writeNewline(ASEmitterTokens.SEMICOLON);
     }
 
+    private String createRequireLine(String qname, boolean isProvide) {
+        StringBuilder createHeader = new StringBuilder();
+        createHeader.append(isProvide ? JSGoogEmitterTokens.GOOG_PROVIDE.getToken() : JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+        createHeader.append(ASEmitterTokens.PAREN_OPEN.getToken());
+        createHeader.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+        createHeader.append(qname);
+        createHeader.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+        createHeader.append(ASEmitterTokens.PAREN_CLOSE.getToken());
+        createHeader.append(ASEmitterTokens.SEMICOLON.getToken());
+        return createHeader.toString();
+    }
+
     //--------------------------------------------------------------------------
     //    Utils
     //--------------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
index 656dabb..40a83e3 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
@@ -367,7 +367,7 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher implements IJSPublisher
 
         if (configuration.release()) {
             final File projectReleaseMainFile = new File(releaseDir, outputFileName);
-            compilerWrapper.setOptions(projectReleaseMainFile.getCanonicalPath(), useStrictPublishing, projectName);
+            compilerWrapper.setOptions(projectReleaseMainFile.getCanonicalPath(), useStrictPublishing, !googConfiguration.getRemoveCirculars(), projectName);
             compilerWrapper.targetFilePath = projectReleaseMainFile.getCanonicalPath();
 
             compilerWrapper.compile();

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/main/java/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
index d106ea0..6d99aac 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
@@ -40,6 +40,7 @@ import org.apache.commons.io.FileUtils;
 import org.apache.flex.compiler.clients.problems.ProblemQuery;
 import org.apache.flex.compiler.common.DependencyType;
 import org.apache.flex.compiler.common.DependencyTypeSet;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
 import org.apache.flex.compiler.internal.driver.js.JSCompilationUnit;
 import org.apache.flex.compiler.internal.driver.js.goog.JSGoogConfiguration;
@@ -102,14 +103,17 @@ public class GoogDepsWriter {
 			files.add(gd.filePath);
 			visited.put(gd.className, gd);
 		}
-		GoogDep mainDep = depMap.get(mainName);
-		visited.put(mainName, mainDep);
-		for (GoogDep gd : depMap.values())
+		if (removeCirculars)
 		{
-			if (!visited.containsKey(gd.className))
-				files.add(gd.filePath);			
+			GoogDep mainDep = depMap.get(mainName);
+			visited.put(mainName, mainDep);
+			for (GoogDep gd : depMap.values())
+			{
+				if (!visited.containsKey(gd.className))
+					files.add(gd.filePath);			
+			}
+			files.add(mainDep.filePath);
 		}
-		files.add(mainDep.filePath);
 		return files;
 	}
 	
@@ -135,30 +139,33 @@ public class GoogDepsWriter {
 						.append("]);\n");
 			}
 		}
-		StringBuilder mainDeps = new StringBuilder();
-		GoogDep mainDep = depMap.get(mainName);
-		mainDeps.append("goog.addDependency('").append(relativePath(mainDep.filePath)).append("', ['")
-							.append(mainDep.className).append("'], [");
-		ArrayList<String> restOfDeps = new ArrayList<String>();
-        DependencyTypeSet dependencyTypes = DependencyTypeSet.allOf();
-		// get the list of all units not referenced by other units
-		for (GoogDep gd : depMap.values())
+		if (removeCirculars)
 		{
-			if (gd.className.equals(mainName)) continue;
-			ICompilationUnit unit = requireMap.get(gd.className);
-			if (unit == null)
+			StringBuilder mainDeps = new StringBuilder();
+			GoogDep mainDep = depMap.get(mainName);
+			mainDeps.append("goog.addDependency('").append(relativePath(mainDep.filePath)).append("', ['")
+								.append(mainDep.className).append("'], [");
+			ArrayList<String> restOfDeps = new ArrayList<String>();
+	        DependencyTypeSet dependencyTypes = DependencyTypeSet.allOf();
+			// get the list of all units not referenced by other units
+			for (GoogDep gd : depMap.values())
 			{
-				restOfDeps.add(gd.className);
-				continue;
+				if (gd.className.equals(mainName)) continue;
+				ICompilationUnit unit = requireMap.get(gd.className);
+				if (unit == null)
+				{
+					restOfDeps.add(gd.className);
+					continue;
+				}
+				Set<ICompilationUnit> deps = graph.getDirectReverseDependencies(unit, dependencyTypes);
+				if (deps.size() == 0)
+					restOfDeps.add(gd.className);
 			}
-			Set<ICompilationUnit> deps = graph.getDirectReverseDependencies(unit, dependencyTypes);
-			if (deps.size() == 0)
-				restOfDeps.add(gd.className);
+			mainDeps.append(getDependencies(restOfDeps)).append("]);\n");
+			sb.insert(0, mainDeps);
+			sb.insert(0, "// generated by FalconJX\n");
+			addRestOfDeps(mainDep, restOfDeps);
 		}
-		mainDeps.append(getDependencies(restOfDeps)).append("]);\n");
-		sb.insert(0, mainDeps);
-		sb.insert(0, "// generated by FalconJX\n");
-		addRestOfDeps(mainDep, restOfDeps);
 		return sb.toString();
 	}
 	
@@ -179,68 +186,115 @@ public class GoogDepsWriter {
     
 	private ArrayList<GoogDep> sort()
 	{
+		ArrayList<GoogDep> arr = new ArrayList<GoogDep>();
 		GoogDep current = depMap.get(mainName);
-		sortFunction(current);
-		ICompilationUnit mainUnit = requireMap.get(mainName);
-		ArrayList<ICompilationUnit> roots = new ArrayList<ICompilationUnit>();
-		roots.add(mainUnit);
-		requireMap.remove(mainName);
-		
-		List<ICompilationUnit> order = graph.topologicalSort(requireMap.values());
-		ArrayList<GoogDep> depsInOrder = new ArrayList<GoogDep>();
-		for (ICompilationUnit unit : order)
+		sortFunction(current, arr);
+		if (removeCirculars)
 		{
-			String name = requireMap2.get(unit);
-			GoogDep dep = depMap.get(name);
-			depsInOrder.add(dep);
+			ICompilationUnit mainUnit = requireMap.get(mainName);
+			ArrayList<ICompilationUnit> roots = new ArrayList<ICompilationUnit>();
+			roots.add(mainUnit);
+			requireMap.remove(mainName);
+			
+			List<ICompilationUnit> order = graph.topologicalSort(requireMap.values());
+			ArrayList<GoogDep> depsInOrder = new ArrayList<GoogDep>();
+			for (ICompilationUnit unit : order)
+			{
+				String name = requireMap2.get(unit);
+				GoogDep dep = depMap.get(name);
+				depsInOrder.add(dep);
+			}
+			return depsInOrder;
 		}
-		return depsInOrder;
+		return arr;
 	}
 	
-	private void sortFunction(GoogDep current)
+	private void sortFunction(GoogDep current, List<GoogDep> arr)
 	{
 		visited.put(current.className, current);
 		
-		//removeRequires(current);
+		if (removeCirculars)
+			removeRequires(current);
         System.out.println("Dependencies calculated for '" + current.className + "'");
 
-		ICompilationUnit unit;
-		if (current.fileInfo.deps == null)
-			return;
+		ICompilationUnit unit = null;
 		
-		unit = requireMap.get(current.className);
-		if (unit == null)
-		{
-			unit = new JSCompilationUnit(project, current.filePath, DefinitionPriority.BasePriority.SOURCE_LIST, current.className);
-			graph.addCompilationUnit(unit);
-			requireMap.put(current.className, unit);
-			requireMap2.put(unit, current.className);
-		}
-		ArrayList<String> deps = current.deps;
-		for (String className : deps)
+		if (removeCirculars)
+			if (current.fileInfo.deps == null)
+				return;
+		
+		if (removeCirculars)
 		{
-			if (!isGoogClass(className))
+			unit = requireMap.get(current.className);
+			if (unit == null)
 			{
-				GoogDep gd = depMap.get(className);
-				if (gd != null && current.fileInfo.impls != null && current.fileInfo.impls.contains(className))
+				unit = new JSCompilationUnit(project, current.filePath, DefinitionPriority.BasePriority.SOURCE_LIST, current.className);
+				graph.addCompilationUnit(unit);
+				requireMap.put(current.className, unit);
+				requireMap2.put(unit, current.className);
+			}
+			if (current.fileInfo.staticDeps != null && removeCirculars)
+			{
+				for (String staticDep : current.fileInfo.staticDeps)
 				{
-					ICompilationUnit base = requireMap.get(className);
+					ICompilationUnit base = requireMap.get(staticDep);
 					if (base == null)
 					{
-						base = new JSCompilationUnit(project, className, DefinitionPriority.BasePriority.SOURCE_LIST, className);
+						base = new JSCompilationUnit(project, staticDep, DefinitionPriority.BasePriority.SOURCE_LIST, staticDep);
 						graph.addCompilationUnit(base);
-						requireMap.put(className, base);
-						requireMap2.put(base, className);
+						requireMap.put(staticDep, base);
+						requireMap2.put(base, staticDep);
 					}
+					System.out.println(current.className + " static initialization depends on " + staticDep);
 					graph.addDependency(unit, base, DependencyType.INHERITANCE);
+					
 				}
-				if (!visited.containsKey(className))
+			}
+		}
+		ArrayList<String> impls = current.fileInfo.impls != null ? current.fileInfo.impls : null;
+		if (impls != null)
+		{
+			for (String className : impls)
+			{
+				if (!isGoogClass(className))
 				{
+					GoogDep gd = depMap.get(className);
 					if (gd != null)
-						sortFunction(gd);
+					{
+						if (removeCirculars)
+						{
+							ICompilationUnit base = requireMap.get(className);
+							if (base == null)
+							{
+								base = new JSCompilationUnit(project, className, DefinitionPriority.BasePriority.SOURCE_LIST, className);
+								graph.addCompilationUnit(base);
+								requireMap.put(className, base);
+								requireMap2.put(base, className);
+							}
+							System.out.println(current.className + " depends on " + className);
+							graph.addDependency(unit, base, DependencyType.INHERITANCE);
+						}
+						if (!visited.containsKey(className))
+						{
+							sortFunction(gd, arr);
+						}
+					}
 				}
 			}
 		}
+		ArrayList<String> deps = current.deps;
+		for (String className : deps)
+		{
+			if (!isGoogClass(className))
+			{
+				GoogDep gd = depMap.get(className);
+				if (!visited.containsKey(className))
+				{
+					sortFunction(gd, arr);
+				}
+			}
+		}
+		arr.add(current);
 	}
 	
 	private void addRestOfDeps(GoogDep main, List<String> restOfDeps)
@@ -292,6 +346,13 @@ public class GoogDepsWriter {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
+		if (gd.fileInfo.impls != null)
+		{
+	        for (String dep : gd.fileInfo.impls)
+	        {
+	            addDeps(dep);
+	        }
+		}
 		gd.deps = new ArrayList<String>();
 		if (gd.fileInfo.deps != null)
 		{
@@ -314,6 +375,10 @@ public class GoogDepsWriter {
             List<String> fileLines = Files.readLines(new File(gd.filePath), Charset.defaultCharset());
             ArrayList<String> finalLines = new ArrayList<String>();
             
+            boolean firstDependency = true;
+        	StringBuilder sb = new StringBuilder();
+        	sb.append(JSGoogEmitterTokens.FLEXJS_DEPENDENCY_LIST.getToken());
+        	
             FileInfo fi = gd.fileInfo;
             int suppressCount = 0;
             int i = 0;
@@ -321,7 +386,10 @@ public class GoogDepsWriter {
             {
             	if (i < fi.constructorLine)
             	{
-                    int c = line.indexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+                    int c = line.indexOf(JSGoogEmitterTokens.FLEXJS_DEPENDENCY_LIST.getToken());
+                    if (c > -1)
+                    	return; // already been processed
+                    c = line.indexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
                     if (c > -1)
                     {
                         int c2 = line.indexOf(")");
@@ -332,6 +400,10 @@ public class GoogDepsWriter {
                         	// time and that class is not this class
                         	suppressCount++;
                         	System.out.println(gd.filePath + " removing require: " + s);
+                    		if (!firstDependency)
+                    			sb.append(",");
+                    		sb.append(s);
+                    		firstDependency = false;
                         	continue;
 	                    }
                     }
@@ -401,6 +473,9 @@ public class GoogDepsWriter {
             		}                		
             	}
             }
+
+            sb.append("*/");
+            finalLines.add(gd.fileInfo.googProvideLine + 1, sb.toString());
             File file = new File(gd.filePath);  
             PrintWriter out = new PrintWriter(new FileWriter(file));  
             for (String s : finalLines)
@@ -421,7 +496,6 @@ public class GoogDepsWriter {
 		FileInfo fi = new FileInfo();
 		
 	    int n = lines.size();
-	    fi.constructorLine = n;
 	    fi.suppressLine = -1;
 	    fi.fileoverviewLine = -1;
 	    fi.googProvideLine = -1;
@@ -430,25 +504,9 @@ public class GoogDepsWriter {
 	    {
 	        String line = lines.get(i);
 	        int c2;
-	        int c = line.indexOf("goog.inherits");
-	        if (c > -1)
+	        int c = line.indexOf("*/");
+	        if (c > -1 && fi.constructorLine > 0)
 	        {
-	            String inheritLine = ""; 
-                while (true)
-                {
-                    inheritLine += line;
-                    c2 = line.indexOf(")");
-                    if (c2 > -1)
-                        break;
-                    else
-                    {
-                        i++;
-                        line = lines.get(i);
-                    }
-                }
-	            c = inheritLine.indexOf(",");
-                c2 = inheritLine.indexOf(")");
-                fi.inherits = inheritLine.substring(c + 1, c2).trim();
                 return fi;
 	        }
 	        else
@@ -525,9 +583,35 @@ public class GoogDepsWriter {
 						    				if (c > -1)
 						    				{
 						    					c2 = line.indexOf("*/");
-						    					line = line.substring(c + token.length(), c2 - 1);
+						    					line = line.substring(c + token.length(), c2);
 							        			fi.deps = new ArrayList<String>();
 						    					fi.deps.addAll(Arrays.asList(line.split(",")));
+						    					fi.depsLine = i;
+						    				}
+						    				else if (fi.depsLine == 0)
+						    				{
+						    					token = JSGoogEmitterTokens.GOOG_REQUIRE.getToken();
+						    					c = line.indexOf(token);
+						    					if (c > -1)
+						    					{
+						                            c2 = line.indexOf(")");
+						                            String s = line.substring(c + 14, c2 - 1);
+						                            if (fi.deps == null)
+						                            	fi.deps = new ArrayList<String>();
+						                            fi.deps.add(s);
+						    					}
+						    					else
+						    					{
+								        			token = JSGoogEmitterTokens.FLEXJS_STATIC_DEPENDENCY_LIST.getToken();
+								    				c = line.indexOf(token);
+								    				if (c > -1)
+								    				{
+								    					c2 = line.indexOf("*/");
+								    					line = line.substring(c + token.length(), c2);
+									        			fi.staticDeps = new ArrayList<String>();
+								    					fi.staticDeps.addAll(Arrays.asList(line.split(",")));
+								    				}						    						
+						    					}
 						    				}
 
 						        		}
@@ -736,10 +820,11 @@ public class GoogDepsWriter {
 	@SuppressWarnings( "unused" )
 	private class FileInfo
 	{
-		public String inherits;
 		public ArrayList<String> impls;
 		public ArrayList<String> deps;
+		public ArrayList<String> staticDeps;
 		public int constructorLine;
+		public int depsLine;
 		public int suppressLine;
 		public int fileoverviewLine;
 		public int googProvideLine;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/main/java/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java
index cad59fa..42ad2b3 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java
@@ -186,7 +186,7 @@ public class JSClosureCompilerWrapper
         options_.setExtraAnnotationNames(Arrays.asList(asdocTags));
     }
     
-    public void setOptions(String sourceMapPath, boolean useStrictPublishing, String projectName)
+    public void setOptions(String sourceMapPath, boolean useStrictPublishing, boolean manageDependencies, String projectName)
     {
         if (useStrictPublishing)
         {
@@ -232,9 +232,9 @@ public class JSClosureCompilerWrapper
             DependencyOptions dopts = new DependencyOptions();
             ArrayList<ModuleIdentifier> entryPoints = new ArrayList<ModuleIdentifier>();
             entryPoints.add(ModuleIdentifier.forClosure(projectName));
-            dopts.setDependencyPruning(false)
-                 .setDependencySorting(false)
-                 .setMoocherDropping(false)
+            dopts.setDependencyPruning(manageDependencies)
+                 .setDependencySorting(manageDependencies)
+                 .setMoocherDropping(manageDependencies)
                  .setEntryPoints(entryPoints);
             options_.setDependencyOptions(dopts);
             

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/main/java/org/apache/flex/compiler/utils/NativeUtils.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/utils/NativeUtils.java b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/NativeUtils.java
index bdf031e..7245a17 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/utils/NativeUtils.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/NativeUtils.java
@@ -106,6 +106,7 @@ public class NativeUtils
         parseFloat("parseFloat"),
         parseInt("parseInt"),
         String("String"),
+        undefined("undefined"),
         unescape("unescape"),
 
         // (erikdebruin) These aren't strictly 'native' to JS, but the 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
index 6664be5..07c8000 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
@@ -468,7 +468,7 @@ public class TestFlexJSClass extends TestGoogClass
     {
         FileNode node = (FileNode)getNode("package org.apache.flex {\npublic class A {\nimport flash.display.Sprite; Sprite;\n}}", FileNode.class, 0);
         asBlockWalker.visitFile(node);
-        assertOut("/**\n * org.apache.flex.A\n *\n * @fileoverview\n *\n * @suppress {checkTypes|accessControls}\n */\n\ngoog.provide('org.apache.flex.A');\n\n/* FlexJS Dependency List: flash.display.Sprite*/\n\n\n\n/**\n * @constructor\n */\norg.apache.flex.A = function() {\n};");
+        assertOut("/**\n * org.apache.flex.A\n *\n * @fileoverview\n *\n * @suppress {checkTypes|accessControls}\n */\n\ngoog.provide('org.apache.flex.A');\n\ngoog.require('flash.display.Sprite');\n\n\n\n/**\n * @constructor\n */\norg.apache.flex.A = function() {\n};");
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/TestFlexJSMXMLApplication.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/TestFlexJSMXMLApplication.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/TestFlexJSMXMLApplication.java
index b03f72c..d49661d 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/TestFlexJSMXMLApplication.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/TestFlexJSMXMLApplication.java
@@ -316,7 +316,9 @@ public class TestFlexJSMXMLApplication extends FlexJSTestBase
         		"goog.provide('AppName');\n" +
         		"\n" +
         		"goog.require('org.apache.flex.core.Application');\n" +
-        		"/* FlexJS Dependency List: org.apache.flex.core.View,org.apache.flex.html.Label,org.apache.flex.net.HTTPConstants*/\n" +
+        		"goog.require('org.apache.flex.core.View');\n" +
+        		"goog.require('org.apache.flex.html.Label');\n" +
+        		"goog.require('org.apache.flex.net.HTTPConstants');\n" +
         		"\n" +
         		"\n" +
         		"\n" +
@@ -436,7 +438,9 @@ public class TestFlexJSMXMLApplication extends FlexJSTestBase
         		"goog.provide('AppName');\n" +
         		"\n" +
         		"goog.require('org.apache.flex.core.Application');\n" +
-        		"/* FlexJS Dependency List: org.apache.flex.core.View,org.apache.flex.html.Label,org.apache.flex.net.HTTPConstants*/\n" +
+        		"goog.require('org.apache.flex.core.View');\n" +
+        		"goog.require('org.apache.flex.html.Label');\n" +
+        		"goog.require('org.apache.flex.net.HTTPConstants');\n" +
         		"\n" +
         		"\n" +
         		"\n" +
@@ -557,7 +561,9 @@ public class TestFlexJSMXMLApplication extends FlexJSTestBase
         		"goog.provide('AppName');\n" +
         		"\n" +
         		"goog.require('org.apache.flex.core.Application');\n" +
-        		"/* FlexJS Dependency List: binding.ComplexValueObject,org.apache.flex.core.View,org.apache.flex.html.Label*/\n" +
+        		"goog.require('org.apache.flex.core.View');\n" +
+        		"goog.require('org.apache.flex.html.Label');\n" +
+        		"goog.require('binding.ComplexValueObject');\n" +
         		"\n" +
         		"\n" +
         		"\n" +
@@ -710,8 +716,10 @@ public class TestFlexJSMXMLApplication extends FlexJSTestBase
         		"goog.provide('AppName');\n" +
         		"\n" +
         		"goog.require('org.apache.flex.core.Application');\n" +
-        		"/* FlexJS Dependency List: org.apache.flex.core.View,org.apache.flex.html.Label,org.apache.flex.core.Application,XML*/\n" +
-        		"\n" +
+        		"goog.require('org.apache.flex.core.View');\n" +
+        		"goog.require('org.apache.flex.html.Label');\n" +
+        		"goog.require('XML');\n" +
+        		"goog.require('XML');\n" +
         		"\n" +
         		"\n" +
         		"\n" +

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/resources/flexjs/files/FlexJSTest_again_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/files/FlexJSTest_again_result.js b/compiler-jx/src/test/resources/flexjs/files/FlexJSTest_again_result.js
index fa34845..7da2ae9 100644
--- a/compiler-jx/src/test/resources/flexjs/files/FlexJSTest_again_result.js
+++ b/compiler-jx/src/test/resources/flexjs/files/FlexJSTest_again_result.js
@@ -22,7 +22,15 @@
 goog.provide('FlexJSTest_again');
 
 goog.require('org.apache.flex.core.Application');
-/* FlexJS Dependency List: MyInitialView,StockDataJSONItemConverter,controllers.MyController,models.MyModel,org.apache.flex.collections.LazyCollection,org.apache.flex.collections.parsers.JSONInputParser,org.apache.flex.core.SimpleCSSValuesImpl,org.apache.flex.events.Event,org.apache.flex.net.HTTPService*/
+goog.require('org.apache.flex.core.SimpleCSSValuesImpl');
+goog.require('MyInitialView');
+goog.require('models.MyModel');
+goog.require('controllers.MyController');
+goog.require('org.apache.flex.net.HTTPService');
+goog.require('org.apache.flex.collections.LazyCollection');
+goog.require('org.apache.flex.collections.parsers.JSONInputParser');
+goog.require('StockDataJSONItemConverter');
+goog.require('org.apache.flex.events.Event');
 
 
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/resources/flexjs/files/MyInitialView_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/files/MyInitialView_result.js b/compiler-jx/src/test/resources/flexjs/files/MyInitialView_result.js
index 1869f7a..1bc0837 100644
--- a/compiler-jx/src/test/resources/flexjs/files/MyInitialView_result.js
+++ b/compiler-jx/src/test/resources/flexjs/files/MyInitialView_result.js
@@ -22,7 +22,21 @@
 goog.provide('MyInitialView');
 
 goog.require('org.apache.flex.core.View');
-/* FlexJS Dependency List: org.apache.flex.binding.ConstantBinding,org.apache.flex.binding.SimpleBinding,org.apache.flex.events.CustomEvent,org.apache.flex.events.Event,org.apache.flex.events.MouseEvent,org.apache.flex.html.CheckBox,org.apache.flex.html.ComboBox,org.apache.flex.html.DropDownList,org.apache.flex.html.Label,org.apache.flex.html.List,org.apache.flex.html.RadioButton,org.apache.flex.html.TextArea,org.apache.flex.html.TextButton,org.apache.flex.html.TextInput,org.apache.flex.utils.Timer*/
+goog.require('org.apache.flex.html.Label');
+goog.require('org.apache.flex.binding.SimpleBinding');
+goog.require('org.apache.flex.html.TextButton');
+goog.require('org.apache.flex.html.List');
+goog.require('org.apache.flex.binding.ConstantBinding');
+goog.require('org.apache.flex.html.TextArea');
+goog.require('org.apache.flex.html.TextInput');
+goog.require('org.apache.flex.html.CheckBox');
+goog.require('org.apache.flex.html.RadioButton');
+goog.require('org.apache.flex.html.DropDownList');
+goog.require('org.apache.flex.html.ComboBox');
+goog.require('org.apache.flex.events.CustomEvent');
+goog.require('org.apache.flex.events.Event');
+goog.require('org.apache.flex.events.MouseEvent');
+goog.require('org.apache.flex.utils.Timer');
 
 
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/resources/flexjs/files/controllers/MyController_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/files/controllers/MyController_result.js b/compiler-jx/src/test/resources/flexjs/files/controllers/MyController_result.js
index 9660e90..7fde95a 100644
--- a/compiler-jx/src/test/resources/flexjs/files/controllers/MyController_result.js
+++ b/compiler-jx/src/test/resources/flexjs/files/controllers/MyController_result.js
@@ -21,9 +21,11 @@
 
 goog.provide('controllers.MyController');
 
-/* FlexJS Dependency List: FlexJSTest_again,MyInitialView,models.MyModel,org.apache.flex.utils.Language*/
-
+goog.require('FlexJSTest_again');
+goog.require('MyInitialView');
+goog.require('models.MyModel');
 goog.require('org.apache.flex.core.IDocument');
+goog.require('org.apache.flex.utils.Language');
 
 
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/resources/flexjs/files/models/MyModel_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/files/models/MyModel_result.js b/compiler-jx/src/test/resources/flexjs/files/models/MyModel_result.js
index 451f6f6..ff0160f 100644
--- a/compiler-jx/src/test/resources/flexjs/files/models/MyModel_result.js
+++ b/compiler-jx/src/test/resources/flexjs/files/models/MyModel_result.js
@@ -21,9 +21,8 @@
 
 goog.provide('models.MyModel');
 
+goog.require('org.apache.flex.events.Event');
 goog.require('org.apache.flex.events.EventDispatcher');
-/* FlexJS Dependency List: org.apache.flex.events.Event*/
-
 
 
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/resources/flexjs/files/wildcard_import_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/files/wildcard_import_result.js b/compiler-jx/src/test/resources/flexjs/files/wildcard_import_result.js
index b7fadeb..7bc6a18 100644
--- a/compiler-jx/src/test/resources/flexjs/files/wildcard_import_result.js
+++ b/compiler-jx/src/test/resources/flexjs/files/wildcard_import_result.js
@@ -22,7 +22,7 @@
 goog.provide('wildcard_import');
 
 goog.require('org.apache.flex.core.Application');
-/* FlexJS Dependency List: org.apache.flex.html.Button*/
+goog.require('org.apache.flex.html.Button');
 
 
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/resources/flexjs/projects/interfaces/Test_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/interfaces/Test_result.js b/compiler-jx/src/test/resources/flexjs/projects/interfaces/Test_result.js
index 3d9a208..d2f47bd 100644
--- a/compiler-jx/src/test/resources/flexjs/projects/interfaces/Test_result.js
+++ b/compiler-jx/src/test/resources/flexjs/projects/interfaces/Test_result.js
@@ -22,10 +22,10 @@
 goog.provide('Test');
 
 goog.require('classes.A');
-/* FlexJS Dependency List: interfaces.IC,org.apache.flex.utils.Language*/
-
 goog.require('interfaces.IA');
+goog.require('interfaces.IC');
 goog.require('interfaces.IE');
+goog.require('org.apache.flex.utils.Language');
 
 
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/resources/flexjs/projects/internal/MainClass_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/internal/MainClass_result.js b/compiler-jx/src/test/resources/flexjs/projects/internal/MainClass_result.js
index 10e2247..a96b203 100644
--- a/compiler-jx/src/test/resources/flexjs/projects/internal/MainClass_result.js
+++ b/compiler-jx/src/test/resources/flexjs/projects/internal/MainClass_result.js
@@ -21,8 +21,7 @@
 
 goog.provide('MainClass');
 
-/* FlexJS Dependency List: OtherClass*/
-
+goog.require('OtherClass');
 
 
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_different_package_as_conflict/DifferentPackageAsConflict_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_different_package_as_conflict/DifferentPackageAsConflict_result.js b/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_different_package_as_conflict/DifferentPackageAsConflict_result.js
index befa608..deee65d 100644
--- a/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_different_package_as_conflict/DifferentPackageAsConflict_result.js
+++ b/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_different_package_as_conflict/DifferentPackageAsConflict_result.js
@@ -21,8 +21,7 @@
 
 goog.provide('DifferentPackageAsConflict');
 
-/* FlexJS Dependency List: mypackage.TestClass*/
-
+goog.require('mypackage.TestClass');
 
 
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_different_package_as_conflict/mypackage/TestClass_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_different_package_as_conflict/mypackage/TestClass_result.js b/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_different_package_as_conflict/mypackage/TestClass_result.js
index f950891..229dbc2 100644
--- a/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_different_package_as_conflict/mypackage/TestClass_result.js
+++ b/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_different_package_as_conflict/mypackage/TestClass_result.js
@@ -22,8 +22,7 @@
 
 goog.provide('mypackage.TestClass');
 
-/* FlexJS Dependency List: otherpackage.Event*/
-
+goog.require('otherpackage.Event');
 
 
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_no_conflict_no_window/NoConflictNoWindow_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_no_conflict_no_window/NoConflictNoWindow_result.js b/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_no_conflict_no_window/NoConflictNoWindow_result.js
index 4b4238f..54347bc 100644
--- a/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_no_conflict_no_window/NoConflictNoWindow_result.js
+++ b/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_no_conflict_no_window/NoConflictNoWindow_result.js
@@ -21,8 +21,7 @@
 
 goog.provide('NoConflictNoWindow');
 
-/* FlexJS Dependency List: mypackage.TestClass*/
-
+goog.require('mypackage.TestClass');
 
 
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_no_conflict_use_window/NoConflictUseWindow_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_no_conflict_use_window/NoConflictUseWindow_result.js b/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_no_conflict_use_window/NoConflictUseWindow_result.js
index b5719d6..c99ffad 100644
--- a/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_no_conflict_use_window/NoConflictUseWindow_result.js
+++ b/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_no_conflict_use_window/NoConflictUseWindow_result.js
@@ -21,8 +21,7 @@
 
 goog.provide('NoConflictUseWindow');
 
-/* FlexJS Dependency List: mypackage.TestClass*/
-
+goog.require('mypackage.TestClass');
 
 
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_same_package_as_conflict/SamePackageAsConflict_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_same_package_as_conflict/SamePackageAsConflict_result.js b/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_same_package_as_conflict/SamePackageAsConflict_result.js
index e9cf354..83f36cc 100644
--- a/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_same_package_as_conflict/SamePackageAsConflict_result.js
+++ b/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_same_package_as_conflict/SamePackageAsConflict_result.js
@@ -21,8 +21,7 @@
 
 goog.provide('SamePackageAsConflict');
 
-/* FlexJS Dependency List: mypackage.TestClass*/
-
+goog.require('mypackage.TestClass');
 
 
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_same_package_as_conflict/mypackage/TestClass_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_same_package_as_conflict/mypackage/TestClass_result.js b/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_same_package_as_conflict/mypackage/TestClass_result.js
index cd6e7a6..fbb13ea 100644
--- a/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_same_package_as_conflict/mypackage/TestClass_result.js
+++ b/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_same_package_as_conflict/mypackage/TestClass_result.js
@@ -22,8 +22,7 @@
 
 goog.provide('mypackage.TestClass');
 
-/* FlexJS Dependency List: mypackage.Event*/
-
+goog.require('mypackage.Event');
 
 
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_use_window/UseWindow_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_use_window/UseWindow_result.js b/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_use_window/UseWindow_result.js
index 629b8e5..ca1d8dd 100644
--- a/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_use_window/UseWindow_result.js
+++ b/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_use_window/UseWindow_result.js
@@ -21,8 +21,7 @@
 
 goog.provide('UseWindow');
 
-/* FlexJS Dependency List: mypackage.TestClass*/
-
+goog.require('mypackage.TestClass');
 
 
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_use_window/mypackage/TestClass_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_use_window/mypackage/TestClass_result.js b/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_use_window/mypackage/TestClass_result.js
index 9ec0d4f..7af3f86 100644
--- a/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_use_window/mypackage/TestClass_result.js
+++ b/compiler-jx/src/test/resources/flexjs/projects/package_conflicts_use_window/mypackage/TestClass_result.js
@@ -22,8 +22,7 @@
 
 goog.provide('mypackage.TestClass');
 
-/* FlexJS Dependency List: otherpackage.Event*/
-
+goog.require('otherpackage.Event');
 
 
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fc1fa430/compiler-jx/src/test/resources/flexjs/projects/xml_requires/XMLRequire_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/xml_requires/XMLRequire_result.js b/compiler-jx/src/test/resources/flexjs/projects/xml_requires/XMLRequire_result.js
index c788cf8..17ab6dc 100644
--- a/compiler-jx/src/test/resources/flexjs/projects/xml_requires/XMLRequire_result.js
+++ b/compiler-jx/src/test/resources/flexjs/projects/xml_requires/XMLRequire_result.js
@@ -21,8 +21,7 @@
 
 goog.provide('XMLRequire');
 
-/* FlexJS Dependency List: XML*/
-
+goog.require('XML');