use more recent GCC dependency options.  We no longer need to compute deps.js, 
but we get more goog.require warnings which we now suppress when we remove 
circular goog.requires


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

Branch: refs/heads/develop
Commit: 8e68d5dec4e8b0ca4bec371d1275e93440c6ac32
Parents: e7deb06
Author: Alex Harui <aha...@apache.org>
Authored: Tue Mar 24 22:53:42 2015 -0700
Committer: Alex Harui <aha...@apache.org>
Committed: Tue Mar 24 22:53:42 2015 -0700

----------------------------------------------------------------------
 .../mxml/flexjs/MXMLFlexJSPublisher.java        |  33 ++++-
 .../compiler/internal/graph/GoogDepsWriter.java | 141 +++++++++++++++++--
 .../utils/JSClosureCompilerWrapper.java         |  14 +-
 .../utils/VF2JSClosureCompilerWrapper.java      |   2 +-
 4 files changed, 168 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/8e68d5de/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
index 0432bd0..6e1c7eb 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
@@ -269,6 +269,12 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher 
implements
         GoogDepsWriter gdw = new GoogDepsWriter(intermediateDir, projectName, 
(JSGoogConfiguration) configuration);
         try
         {
+               ArrayList<String> fileList = gdw.getListOfFiles();
+               for (String file : fileList)
+               {
+                compilerWrapper.addJSSourceFile(file); 
+               }
+               /*
             StringBuilder depsFileData = new StringBuilder();
             ok = gdw.generateDeps(problems, depsFileData);
             if (!subsetGoog)
@@ -355,7 +361,7 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher 
implements
                     FileUtils.copyFileToDirectory(file, new File(dir));
                     compilerWrapper.addJSSourceFile(file.getCanonicalPath());
                 }
-            }
+            }*/
         }
         catch (InterruptedException e)
         {
@@ -385,6 +391,7 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher 
implements
         writeCSS(projectName, intermediateDirPath);
         writeCSS(projectName, releaseDirPath);
 
+        /*
         if (!subsetGoog)
         {
             // (erikdebruin) add 'goog' files
@@ -396,22 +403,33 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher 
implements
                 compilerWrapper.addJSSourceFile(file.getCanonicalPath());
             }
         }
+        */
+        Collection<File> files = org.apache.commons.io.FileUtils.listFiles(new 
File(
+                       closureGoogSrcLibDirPath), new 
RegexFileFilter("^.*(\\.js)"),
+                DirectoryFileFilter.DIRECTORY);
+        for (File file : files)
+        {
+            compilerWrapper.addJSSourceFile(file.getCanonicalPath());
+        }
         
+        /*
         // (erikdebruin) add project files
         for (String filePath : gdw.filePathsInOrder)
         {
             compilerWrapper.addJSSourceFile(
                     new File(filePath).getCanonicalPath());   
         }
+        */
         
         compilerWrapper.setOptions(
-                projectReleaseJSFilePath, useStrictPublishing);
+                projectReleaseJSFilePath, useStrictPublishing, projectName);
         
+        /*
         // (erikdebruin) Include the 'goog' deps to allow the compiler to 
resolve
         //               dependencies.
         compilerWrapper.addJSSourceFile(
                 closureGoogSrcLibDirPath + File.separator + "deps.js");
-        
+        */
         List<String> externs = 
((JSGoogConfiguration)configuration).getExternalJSLib();
         for (String extern : externs)
         {
@@ -423,6 +441,7 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher 
implements
         
         appendSourceMapLocation(projectReleaseJSFilePath, projectName);
 
+        /*
         if (!isMarmotinniRun)
         {
             String allDeps = "";
@@ -435,8 +454,9 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher 
implements
             
             org.apache.commons.io.FileUtils.deleteQuietly(new 
File(depsTgtFilePath));
         }
-
-        if (ok)
+               */
+        
+        //if (ok)
             System.out.println("The project '"
                 + projectName
                 + "' has been successfully compiled and optimized.");
@@ -444,6 +464,7 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher 
implements
         return true;
     }
 
+    /*
     private void addDeps(ArrayList<DependencyRecord> subsetdeps, 
HashMap<String, String> gotgoog, 
                             HashMap<String, DependencyRecord> defmap, String 
deps)
     {
@@ -464,7 +485,7 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher 
implements
                 addDeps(subsetdeps, gotgoog, defmap, deprec.deps);             
           
             }
         }
-    }
+    }*/
     
     private void appendExportSymbol(String path, String projectName)
             throws IOException

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/8e68d5de/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java 
b/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
index 53a216e..cd036be 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
@@ -176,19 +176,89 @@ public class GoogDepsWriter {
                 List<String> fileLines = Files.readLines(new 
File(gd.filePath), Charset.defaultCharset());
                 ArrayList<String> finalLines = new ArrayList<String>();
                 
-                String inherits = getBaseClass(fileLines, className);
-                
+                FileInfo fi = getBaseClass(fileLines, className);
+                int suppressCount = 0;
+                int i = 0;
                 for (String line : fileLines)
                 {
-                    int c = 
line.indexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
-                    if (c > -1)
-                    {
-                        int c2 = line.indexOf(")");
-                        String s = line.substring(c + 14, c2 - 1);
-                        if (circulars.contains(s) && !s.equals(inherits))
-                            continue;
-                    }
+                       if (i < fi.constructorLine)
+                       {
+                           int c = 
line.indexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+                           if (c > -1)
+                           {
+                               int c2 = line.indexOf(")");
+                               String s = line.substring(c + 14, c2 - 1);
+                               if (circulars.contains(s) && 
!s.equals(fi.inherits))
+                               {
+                                       suppressCount++;
+                                   continue;
+                               }
+                           }
+                       }
                     finalLines.add(line);
+                    i++;
+                }
+                if (suppressCount > 0)
+                {
+                       if (fi.suppressLine > 0)
+                       {
+                               if (fi.suppressLine < fi.constructorLine) 
+                               {
+                                       String line = 
finalLines.get(fi.suppressLine);
+                                       int c = line.indexOf("@suppress {");
+                                       if (c > -1)
+                                       {
+                                               if 
(!line.contains("missingRequire"))
+                                               {
+                                                       line = 
line.substring(0, c) + "@suppress {missingRequire|" + line.substring(c + 11);
+                                                       
finalLines.remove(fi.suppressLine);
+                                                       
finalLines.add(fi.suppressLine, line);
+                                               }
+                                       }
+                                       else
+                                               System.out.println("Confused by 
@suppress in " + className);
+                               }
+                               else                            
+                               {
+                                       // the @suppress was for the 
constructor or some other thing so add a top-level
+                                       // @suppress
+                                       if (fi.fileoverviewLine > -1)
+                                       {
+                                               // there is already a 
fileOverview but no @suppress
+                                               
finalLines.add(fi.fileoverviewLine + 1, " *  @suppress {missingRequire}");
+                                       }
+                                       else if (fi.googProvideLine > -1)
+                                       {
+                                               
finalLines.add(fi.googProvideLine, " */");
+                                               
finalLines.add(fi.googProvideLine, " *  @suppress {missingRequire}");
+                                               
finalLines.add(fi.googProvideLine, " *  @fileoverview");
+                                               
finalLines.add(fi.googProvideLine, "/**");
+                                       }
+                                       else
+                                       {
+                                               System.out.println("Confused by 
@suppress in " + className);
+                                       }
+                               }
+                       }
+                       else
+                       {
+                               if (fi.fileoverviewLine > -1)
+                               {
+                                       // there is already a fileoverview but 
no @suppress
+                                       finalLines.add(fi.fileoverviewLine + 1, 
" *  @suppress {missingRequire}");
+                               }
+                               else if (fi.googProvideLine > -1)
+                               {
+                                       finalLines.add(fi.googProvideLine, " 
*/");
+                                       finalLines.add(fi.googProvideLine, " *  
@suppress {missingRequire}");
+                                       finalLines.add(fi.googProvideLine, " *  
@fileoverview");
+                                       finalLines.add(fi.googProvideLine, 
"/**");
+                               }
+                               else
+                               {
+                                       System.out.println("Confused by 
@suppress in " + className);
+                               }                               
+                       }
                 }
                 File file = new File(gd.filePath);  
                 PrintWriter out = new PrintWriter(new FileWriter(file));  
@@ -207,9 +277,15 @@ public class GoogDepsWriter {
                }
        }
        
-       String getBaseClass(List<String> lines, String className)
+       FileInfo getBaseClass(List<String> lines, String className)
        {
+               FileInfo fi = new FileInfo();
+               
            int n = lines.size();
+           fi.constructorLine = n;
+           fi.suppressLine = -1;
+           fi.fileoverviewLine = -1;
+           fi.googProvideLine = -1;
            for (int i = 0; i < n; i++)
            {
                String line = lines.get(i);
@@ -232,10 +308,41 @@ public class GoogDepsWriter {
                 }
                    c = inheritLine.indexOf(",");
                 c2 = inheritLine.indexOf(")");
-                return inheritLine.substring(c + 1, c2).trim();            
+                fi.inherits = inheritLine.substring(c + 1, c2).trim();
+                return fi;
+               }
+               else
+               {
+                       c = line.indexOf("@constructor");
+                       if (c > -1)
+                               fi.constructorLine = i;
+                       else
+                       {
+                               c = line.indexOf("@interface");
+                               if (c > -1)
+                                       fi.constructorLine = i;
+                               else
+                               {
+                                       c = line.indexOf("@suppress");
+                                       if (c > -1)
+                                               fi.suppressLine = i;
+                                       else
+                                       {
+                                               c = 
line.indexOf("@fileoverview");
+                                               if (c > -1)
+                                                       fi.fileoverviewLine = i;
+                                               else
+                                               {
+                                                       c = 
line.indexOf("goog.provide");
+                                                       if (c > -1)
+                                                               
fi.googProvideLine = i;                                                 
+                                               }
+                                       }
+                               }
+                       }
                }
            }
-           return null;
+           return fi;
        }
        
        String getFilePath(String className)
@@ -403,4 +510,12 @@ public class GoogDepsWriter {
                public ArrayList<String> deps;
                
        }
+       private class FileInfo
+       {
+               public String inherits;
+               public int constructorLine;
+               public int suppressLine;
+               public int fileoverviewLine;
+               public int googProvideLine;
+       }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/8e68d5de/compiler.jx/src/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java 
b/compiler.jx/src/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java
index 30d976c..b16522a 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java
@@ -31,6 +31,7 @@ import com.google.javascript.jscomp.CommandLineRunner;
 import com.google.javascript.jscomp.CompilationLevel;
 import com.google.javascript.jscomp.Compiler;
 import com.google.javascript.jscomp.CompilerOptions;
+import com.google.javascript.jscomp.DependencyOptions;
 import com.google.javascript.jscomp.DiagnosticGroups;
 import com.google.javascript.jscomp.FlexJSDiagnosticGroups;
 import com.google.javascript.jscomp.SourceFile;
@@ -141,7 +142,7 @@ public class JSClosureCompilerWrapper
         options_.setExtraAnnotationNames(Arrays.asList(asdocTags));
     }
     
-    public void setOptions(String sourceMapPath, boolean useStrictPublishing)
+    public void setOptions(String sourceMapPath, boolean useStrictPublishing, 
String projectName)
     {
         if (useStrictPublishing)
         {
@@ -186,6 +187,15 @@ public class JSClosureCompilerWrapper
             options_.setOptimizeCalls(true);
             options_.setOptimizeArgumentsArray(true);
             
+            DependencyOptions dopts = new DependencyOptions();
+            ArrayList<String> entryPoints = new ArrayList<String>();
+            entryPoints.add(projectName);
+            dopts.setDependencyPruning(true)
+                 .setDependencySorting(true)
+                 .setMoocherDropping(true)
+                 .setEntryPoints(entryPoints);
+            options_.setDependencyOptions(dopts);
+            
             // warnings already activated in previous incarnation
             options_.setWarningLevel(DiagnosticGroups.ACCESS_CONTROLS, 
CheckLevel.WARNING);
             options_.setWarningLevel(DiagnosticGroups.CONST, 
CheckLevel.WARNING);
@@ -197,7 +207,7 @@ public class JSClosureCompilerWrapper
             // the 'full' set of warnings
             options_.setWarningLevel(DiagnosticGroups.AMBIGUOUS_FUNCTION_DECL, 
CheckLevel.WARNING);
             
options_.setWarningLevel(DiagnosticGroups.CHECK_EVENTFUL_OBJECT_DISPOSAL, 
CheckLevel.WARNING);
-            options_.setWarningLevel(DiagnosticGroups.CHECK_PROVIDES, 
CheckLevel.WARNING);
+            options_.setWarningLevel(DiagnosticGroups.MISSING_PROVIDE, 
CheckLevel.WARNING);
             options_.setWarningLevel(DiagnosticGroups.CHECK_REGEXP, 
CheckLevel.WARNING);
             
options_.setWarningLevel(DiagnosticGroups.CHECK_STRUCT_DICT_INHERITANCE, 
CheckLevel.WARNING);
             options_.setWarningLevel(DiagnosticGroups.CHECK_TYPES, 
CheckLevel.WARNING);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/8e68d5de/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
 
b/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
index cdbdba6..9b188b9 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
@@ -183,7 +183,7 @@ public class VF2JSClosureCompilerWrapper
             // the 'full' set of warnings
             options_.setWarningLevel(DiagnosticGroups.AMBIGUOUS_FUNCTION_DECL, 
CheckLevel.WARNING);
             
options_.setWarningLevel(DiagnosticGroups.CHECK_EVENTFUL_OBJECT_DISPOSAL, 
CheckLevel.WARNING);
-            options_.setWarningLevel(DiagnosticGroups.CHECK_PROVIDES, 
CheckLevel.WARNING);
+            options_.setWarningLevel(DiagnosticGroups.MISSING_PROVIDE, 
CheckLevel.WARNING);
             options_.setWarningLevel(DiagnosticGroups.CHECK_REGEXP, 
CheckLevel.WARNING);
             
options_.setWarningLevel(DiagnosticGroups.CHECK_STRUCT_DICT_INHERITANCE, 
CheckLevel.WARNING);
             options_.setWarningLevel(DiagnosticGroups.CHECK_TYPES, 
CheckLevel.WARNING);

Reply via email to