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