You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by cd...@apache.org on 2016/10/31 14:00:43 UTC
[3/7] git commit: [flex-falcon]
[refs/heads/feature-autobuild/closure-classpath-sources] - - Greatly worked
on cleaning up the compiler code
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/3724c2ff/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
deleted file mode 100644
index 164806c..0000000
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
+++ /dev/null
@@ -1,600 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.flex.compiler.internal.codegen.mxml.vf2js;
-
-import java.io.*;
-import java.net.URL;
-import java.util.*;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.io.filefilter.DirectoryFileFilter;
-import org.apache.commons.io.filefilter.FileFileFilter;
-import org.apache.commons.io.filefilter.FileFilterUtils;
-import org.apache.commons.io.filefilter.IOFileFilter;
-import org.apache.commons.io.filefilter.RegexFileFilter;
-import org.apache.flex.compiler.clients.problems.ProblemQuery;
-import org.apache.flex.compiler.codegen.js.IJSPublisher;
-import org.apache.flex.compiler.config.Configuration;
-import org.apache.flex.compiler.internal.codegen.js.JSSharedData;
-import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogPublisher;
-import org.apache.flex.compiler.internal.driver.js.flexjs.JSCSSCompilationSession;
-import org.apache.flex.compiler.internal.driver.js.goog.JSGoogConfiguration;
-import org.apache.flex.compiler.internal.graph.VF2JSDepsWriter;
-import org.apache.flex.compiler.internal.projects.FlexJSProject;
-import org.apache.flex.compiler.utils.VF2JSClosureCompilerWrapper;
-
-public class MXMLVF2JSPublisher extends JSGoogPublisher implements
- IJSPublisher
-{
-
- public static final String FLEXJS_OUTPUT_DIR_NAME = "bin";
- public static final String FLEXJS_INTERMEDIATE_DIR_NAME = "js-debug";
- public static final String FLEXJS_RELEASE_DIR_NAME = "js-release";
-
- class DependencyRecord
- {
- String path;
- String deps;
- String line;
- int lineNumber;
- }
-
- class DependencyLineComparator implements Comparator<DependencyRecord> {
- @Override
- public int compare(DependencyRecord o1, DependencyRecord o2) {
- return new Integer(o1.lineNumber).compareTo(o2.lineNumber);
- }
- }
-
- public MXMLVF2JSPublisher(Configuration config, FlexJSProject project)
- {
- super(config);
-
- this.isMarmotinniRun = ((JSGoogConfiguration) configuration)
- .getMarmotinni() != null;
- this.outputPathParameter = configuration.getOutput();
- this.useStrictPublishing = ((JSGoogConfiguration) configuration)
- .getStrictPublish();
-
- this.project = project;
- }
-
- private FlexJSProject project;
-
- private boolean isMarmotinniRun;
- private String outputPathParameter;
- private boolean useStrictPublishing;
-
- @Override
- public File getOutputFolder()
- {
- // (erikdebruin) - If there is a -marmotinni switch, we want
- // the output redirected to the directory it specifies.
- // - If there is an -output switch, use that path as the
- // output parent folder.
- if (isMarmotinniRun)
- {
- outputParentFolder = new File(
- ((JSGoogConfiguration) configuration).getMarmotinni());
- }
- else if (outputPathParameter != null)
- {
- outputParentFolder = new File(outputPathParameter);
- // FB usually specified -output <project-path>/bin-release/app.swf
- if (outputPathParameter.contains(".swf"))
- outputParentFolder = outputParentFolder.getParentFile().getParentFile();
- }
- else
- {
- outputParentFolder = new File(
- configuration.getTargetFileDirectory()).getParentFile();
- }
-
- outputParentFolder = new File(outputParentFolder,
- FLEXJS_OUTPUT_DIR_NAME);
-
- outputFolder = new File(outputParentFolder, File.separator
- + FLEXJS_INTERMEDIATE_DIR_NAME);
-
- // (erikdebruin) Marmotinni handles file management, so we
- // bypass the setup.
- if (!isMarmotinniRun)
- setupOutputFolder();
-
- return outputFolder;
- }
-
- @Override
- public boolean publish(ProblemQuery problems) throws IOException
- {
- boolean ok;
- boolean subsetGoog = true;
-
- final String intermediateDirPath = outputFolder.getPath();
- final File intermediateDir = new File(intermediateDirPath);
- File srcDir = new File(configuration.getTargetFile());
- srcDir = srcDir.getParentFile();
-
- final String projectName = FilenameUtils.getBaseName(configuration
- .getTargetFile());
- final String outputFileName = projectName
- + "." + JSSharedData.OUTPUT_EXTENSION;
-
- File releaseDir = new File(outputParentFolder, FLEXJS_RELEASE_DIR_NAME);
- final String releaseDirPath = releaseDir.getPath();
-
- if (!isMarmotinniRun)
- {
- if (releaseDir.exists())
- org.apache.commons.io.FileUtils.deleteQuietly(releaseDir);
-
- releaseDir.mkdirs();
- }
-
- // If the closure-lib parameter is empty we'll try to find the resources
- // in the classpath, dump its content to the output directory and use this
- // as closure-lib parameter.
- final String closureLibDirPath;
- if(((JSGoogConfiguration) configuration).isClosureLibSet()) {
- closureLibDirPath = ((JSGoogConfiguration) configuration).getClosureLib();
- } else {
- // Check if the "goog/deps.js" is available in the classpath.
- URL resource = Thread.currentThread().getContextClassLoader().getResource("goog/deps.js");
- if(resource != null) {
- File closureLibDir = new File(intermediateDir.getParent(), "closure");
-
- // Only create and dump the content, if the directory does not exists.
- if(!closureLibDir.exists()) {
- if(!closureLibDir.mkdirs()) {
- throw new IOException(
- "Unable to create directory for closure-lib at " + closureLibDir.getAbsolutePath());
- }
-
- // Strip the url of the parts we don't need.
- // Unless we are not using some insanely complex setup
- // the resource will always be on the same machine.
- String resourceJarPath = resource.getFile();
- if(resourceJarPath.contains(":")) {
- resourceJarPath = resourceJarPath.substring(resourceJarPath.lastIndexOf(":") + 1);
- }
- if(resourceJarPath.contains("!")) {
- resourceJarPath = resourceJarPath.substring(0, resourceJarPath.indexOf("!"));
- }
- File resourceJar = new File(resourceJarPath);
-
- // Dump the closure lib from classpath.
- dumpJar(resourceJar, closureLibDir);
- }
- // The compiler automatically adds a "closure" to the lib dir path,
- // so we omit this here.
- closureLibDirPath = intermediateDir.getParentFile().getPath();
- }
- // Fallback to the default.
- else {
- closureLibDirPath = ((JSGoogConfiguration) configuration).getClosureLib();
- }
- }
-
- final String closureGoogSrcLibDirPath = closureLibDirPath
- + "/closure/goog/";
- final String closureGoogTgtLibDirPath = intermediateDirPath
- + "/library/closure/goog";
- final String depsSrcFilePath = intermediateDirPath
- + "/library/closure/goog/deps.js";
- final String depsTgtFilePath = intermediateDirPath + "/deps.js";
- final String projectIntermediateJSFilePath = intermediateDirPath
- + File.separator + outputFileName;
- final String projectReleaseJSFilePath = releaseDirPath
- + File.separator + outputFileName;
-
- appendExportSymbol(projectIntermediateJSFilePath, projectName);
- appendEncodedCSS(projectIntermediateJSFilePath, projectName);
-
- if (!subsetGoog)
- {
- // (erikdebruin) We need to leave the 'goog' files and dependencies well
- // enough alone. We copy the entire library over so the
- // 'goog' dependencies will resolve without our help.
- FileUtils.copyDirectory(new File(closureGoogSrcLibDirPath), new File(closureGoogTgtLibDirPath));
- }
-
- VF2JSClosureCompilerWrapper compilerWrapper = new VF2JSClosureCompilerWrapper();
-
- VF2JSDepsWriter gdw = new VF2JSDepsWriter(intermediateDir, projectName, (JSGoogConfiguration) configuration);
- try
- {
- StringBuilder depsFileData = new StringBuilder();
- ok = gdw.generateDeps(problems, depsFileData);
- if (!subsetGoog)
- {
- writeFile(depsTgtFilePath, depsFileData.toString(), false);
- }
- else
- {
- String s = depsFileData.toString();
- int c = s.indexOf("'goog.");
- ArrayList<String> googreqs = new ArrayList<String>();
- while (c != -1)
- {
- int c2 = s.indexOf("'", c + 1);
- String googreq = s.substring(c, c2 + 1);
- googreqs.add(googreq);
- c = s.indexOf("'goog.", c2);
- }
- HashMap<String, DependencyRecord> defmap = new HashMap<String, DependencyRecord>();
- // read in goog's deps.js
- FileInputStream fis = new FileInputStream(closureGoogSrcLibDirPath + "/deps.js");
- Scanner scanner = new Scanner(fis, "UTF-8");
- String addDependency = "goog.addDependency('";
- int currentLine = 0;
- while (scanner.hasNextLine())
- {
- String googline = scanner.nextLine();
- if (googline.indexOf(addDependency) == 0)
- {
- int c1 = googline.indexOf("'", addDependency.length() + 1);
- String googpath = googline.substring(addDependency.length(), c1);
- String googdefs = googline.substring(googline.indexOf("[") + 1, googline.indexOf("]"));
- String googdeps = googline.substring(googline.lastIndexOf("[") + 1, googline.lastIndexOf("]"));
- String[] thedefs = googdefs.split(",");
- DependencyRecord deprec = new DependencyRecord();
- deprec.path = googpath;
- deprec.deps = googdeps;
- deprec.line = googline;
- deprec.lineNumber = currentLine;
- for (String def : thedefs)
- {
- def = def.trim();
- defmap.put(def, deprec);
- }
- }
- currentLine++;
- }
- // (erikdebruin) Prevent 'Resource leak' warning on line 212:
- scanner.close();
- ArrayList<DependencyRecord> subsetdeps = new ArrayList<DependencyRecord>();
- HashMap<String, String> gotgoog = new HashMap<String, String>();
- for (String req : googreqs)
- {
- DependencyRecord deprec = defmap.get(req);
- // if we've already processed this file, skip
- if (!gotgoog.containsKey(deprec.path))
- {
- gotgoog.put(deprec.path, null);
- subsetdeps.add(deprec);
- addDeps(subsetdeps, gotgoog, defmap, deprec.deps);
- }
- }
- // now we should have the subset of files we need in the order needed
- StringBuilder sb = new StringBuilder();
- sb.append("goog.addDependency('base.js', ['goog'], []);\n");
- File file = new File(closureGoogSrcLibDirPath + "/base.js");
- FileUtils.copyFileToDirectory(file, new File(closureGoogTgtLibDirPath));
- compilerWrapper.addJSSourceFile(file.getCanonicalPath());
- Collections.sort(subsetdeps, new DependencyLineComparator());
- for (DependencyRecord subsetdeprec : subsetdeps)
- {
- sb.append(subsetdeprec.line).append("\n");
- }
- writeFile(depsTgtFilePath, sb.toString() + depsFileData.toString(), false);
- // copy the required files
- for (String googfn : gotgoog.keySet())
- {
- file = new File(closureGoogSrcLibDirPath + File.separator + googfn);
- String dir = closureGoogTgtLibDirPath;
- if (googfn.contains("/"))
- {
- dir += File.separator + googfn.substring(0, googfn.lastIndexOf("/"));
- }
- FileUtils.copyFileToDirectory(file, new File(dir));
- compilerWrapper.addJSSourceFile(file.getCanonicalPath());
- }
- }
- }
- catch (InterruptedException e)
- {
- e.printStackTrace();
- return false;
- }
-
- IOFileFilter pngSuffixFilter = FileFilterUtils.and(FileFileFilter.FILE,
- FileFilterUtils.suffixFileFilter(".png"));
- IOFileFilter gifSuffixFilter = FileFilterUtils.and(FileFileFilter.FILE,
- FileFilterUtils.suffixFileFilter(".gif"));
- IOFileFilter jpgSuffixFilter = FileFilterUtils.and(FileFileFilter.FILE,
- FileFilterUtils.suffixFileFilter(".jpg"));
- IOFileFilter assetFiles = FileFilterUtils.or(pngSuffixFilter,
- jpgSuffixFilter, gifSuffixFilter);
-
- FileUtils.copyDirectory(srcDir, intermediateDir, assetFiles);
- FileUtils.copyDirectory(srcDir, releaseDir, assetFiles);
-
- File srcDeps = new File(depsSrcFilePath);
-
- // ToDo (erikdebruin): yeah, right, hard coded the path, nice!
- File sdkDepsFile = new File("/Users/erik/Documents/ApacheFlex/git/flex-asjs/vf2js/frameworks/js/sdk-deps.js");
- if (sdkDepsFile.exists())
- FileUtils.copyFile(sdkDepsFile, new File(intermediateDirPath + File.separator + "sdk-deps.js"));
-
- writeHTML("intermediate", projectName, intermediateDirPath, gdw.additionalHTML);
- writeHTML("release", projectName, releaseDirPath, gdw.additionalHTML);
- writeCSS(projectName, intermediateDirPath);
- writeCSS(projectName, releaseDirPath);
-
- if (!subsetGoog)
- {
- // (erikdebruin) add 'goog' files
- Collection<File> files = org.apache.commons.io.FileUtils.listFiles(new File(
- closureGoogTgtLibDirPath), 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);
-
- // (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)
- {
- compilerWrapper.addJSExternsFile(extern);
- }
-
- compilerWrapper.targetFilePath = projectReleaseJSFilePath;
- compilerWrapper.compile();
-
- appendSourceMapLocation(projectReleaseJSFilePath, projectName);
-
- if (!isMarmotinniRun)
- {
- String allDeps = "";
- if (!subsetGoog)
- allDeps += FileUtils.readFileToString(srcDeps);
- allDeps += FileUtils.readFileToString(new File(depsTgtFilePath));
-
- FileUtils.writeStringToFile(srcDeps, allDeps);
-
- org.apache.commons.io.FileUtils.deleteQuietly(new File(depsTgtFilePath));
- }
-
- if (ok)
- System.out.println("The project '"
- + projectName
- + "' has been successfully compiled and optimized.");
-
- return true;
- }
-
- private void addDeps(ArrayList<DependencyRecord> subsetdeps, HashMap<String, String> gotgoog,
- HashMap<String, DependencyRecord> defmap, String deps)
- {
- if (deps.length() == 0)
- return;
-
- String[] deplist = deps.split(",");
- for (String dep : deplist)
- {
- dep = dep.trim();
- DependencyRecord deprec = defmap.get(dep);
- if (!gotgoog.containsKey(deprec.path))
- {
- gotgoog.put(deprec.path, null);
- // put addDependencyLine in subset file
- subsetdeps.add(deprec);
- addDeps(subsetdeps, gotgoog, defmap, deprec.deps);
- }
- }
- }
-
- private void appendExportSymbol(String path, String projectName)
- throws IOException
- {
- StringBuilder appendString = new StringBuilder();
- appendString
- .append("\n\n// Ensures the symbol will be visible after compiler renaming.\n");
- appendString.append("goog.exportSymbol('");
- appendString.append(projectName);
- appendString.append("', ");
- appendString.append(projectName);
- appendString.append(");\n");
- writeFile(path, appendString.toString(), true);
- }
-
- private void appendEncodedCSS(String path, String projectName)
- throws IOException
- {
- StringBuilder appendString = new StringBuilder();
- appendString.append("\n\n");
- appendString.append(projectName);
- appendString.append(".prototype.cssData = [");
- JSCSSCompilationSession cssSession = (JSCSSCompilationSession) project.getCSSCompilationSession();
- String s = cssSession.getEncodedCSS();
- int reqidx = s.indexOf("goog.require");
- if (reqidx != -1)
- {
- String reqs = s.substring(reqidx);
- s = s.substring(0, reqidx - 1);
- String fileData = readCode(new File(path));
- reqidx = fileData.indexOf("goog.require");
- String after = fileData.substring(reqidx);
- String before = fileData.substring(0, reqidx - 1);
- s = before + reqs + after + appendString.toString() + s;
- writeFile(path, s, false);
- }
- else
- {
- appendString.append(s);
- writeFile(path, appendString.toString(), true);
- }
- }
-
- protected String readCode(File file)
- {
- String code = "";
- try
- {
- BufferedReader in = new BufferedReader(new InputStreamReader(
- new FileInputStream(file), "UTF8"));
-
- String line = in.readLine();
-
- while (line != null)
- {
- code += line + "\n";
- line = in.readLine();
- }
- code = code.substring(0, code.length() - 1);
-
- in.close();
- }
- catch (Exception e)
- {
- // nothing to see, move along...
- }
-
- return code;
- }
-
- private void writeHTML(String type, String projectName, String dirPath, List<String> additionalHTML)
- throws IOException
- {
- StringBuilder htmlFile = new StringBuilder();
- htmlFile.append("<!DOCTYPE html>\n");
- htmlFile.append("<html>\n");
- htmlFile.append("<head>\n");
- htmlFile.append("\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n");
- htmlFile.append("\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n");
- htmlFile.append("\t<link rel=\"stylesheet\" type=\"text/css\" href=\"");
- htmlFile.append(projectName);
- htmlFile.append(".css\">\n");
-
- for (String s : additionalHTML)
- htmlFile.append(s).append("\n");
-
- if ("intermediate".equals(type))
- {
- htmlFile.append("\t<script type=\"text/javascript\" src=\"./library/closure/goog/base.js\"></script>\n");
- htmlFile.append("\t<script type=\"text/javascript\" src=\"./sdk-deps.js\"></script>\n");
- htmlFile.append("\t<script type=\"text/javascript\">\n");
- //htmlFile.append("\t\tgoog.require('mx.styles.StyleProtoChain');\n");
- htmlFile.append("\t\tgoog.require('mx.managers.SystemManager');\n");
- htmlFile.append("\t\tgoog.require('mx.managers.systemClasses.ChildManager');\n");
- //htmlFile.append("\t\tgoog.require('" + projectName + "');\n");
- htmlFile.append("\t</script>\n");
- }
- else
- {
- htmlFile.append("\t<script type=\"text/javascript\" src=\"./");
- htmlFile.append(projectName);
- htmlFile.append(".js\"></script>\n");
- }
-
- htmlFile.append("</head>\n");
- htmlFile.append("<body onload=\"init();\">\n");
- htmlFile.append("\t<script type=\"text/javascript\">\n");
- htmlFile.append("\t\t'use strict';\n");
- htmlFile.append("\t\t\n");
- htmlFile.append("\t\tfunction init() {\n");
- htmlFile.append("\t\t\tvar /** @type {flash.display.LoaderInfo} */ loaderInfo,\n");
- htmlFile.append("\t\t\t /** @type {flash.display.Stage} */ stage,\n");
- htmlFile.append("\t\t\t /** @type {mx.managers.SystemManager} */ systemManager,\n");
- htmlFile.append("\t\t\t /** @type {mx.managers.systemClasses.ChildManager} */ childManager;\n");
- htmlFile.append("\t\t\t\n");
- htmlFile.append("\t\t\tstage = new flash.display.Stage();\n");
- htmlFile.append("\t\t\twindow['apache-flex_stage'] = stage;\n");
- htmlFile.append("\t\t\t\n");
- htmlFile.append("\t\t\twindow['apache-flex_loaderInfo'] = new flash.display.LoaderInfo();\n");
- htmlFile.append("\t\t\twindow['apache-flex_loaderInfo'].get_parameters = function () {\n");
- htmlFile.append("\t\t\t\tvar /** @type {Object} */ infoObject;\n");
- htmlFile.append("\t\t\t\n");
- htmlFile.append("\t\t\t infoObject = {};\n");
- htmlFile.append("\t\t\t infoObject[\"resourceModuleURLs\"] = '';\n");
- htmlFile.append("\t\t\t \n");
- htmlFile.append("\t\t\t return infoObject;\n");
- htmlFile.append("\t\t\t}\n");
- htmlFile.append("\t\t\t\n");
- htmlFile.append("\t\t\tsystemManager = new mx.managers.SystemManager();\n");
- htmlFile.append("\t\t\tsystemManager.info = function () {\n");
- htmlFile.append("\t\t\t\tvar /** @type {Object} */ infoObject;\n");
- htmlFile.append("\t\t\t\n");
- htmlFile.append("\t\t\t infoObject = {};\n");
- htmlFile.append("\t\t\t infoObject[\"applicationDPI\"] = '';\n");
- htmlFile.append("\t\t\t infoObject[\"backgroundAlpha\"] = '';\n");
- htmlFile.append("\t\t\t infoObject[\"backgroundColor\"] = '';\n");
- htmlFile.append("\t\t\t infoObject[\"backgroundImage\"] = '';\n");
- htmlFile.append("\t\t\t infoObject[\"backgroundSize\"] = '';\n");
- htmlFile.append("\t\t\t infoObject[\"cdRsls\"] = '';\n");
- htmlFile.append("\t\t\t infoObject[\"compiledLocales\"] = '';\n");
- htmlFile.append("\t\t\t infoObject[\"compiledResourceBundleNames\"] = '';\n");
- htmlFile.append("\t\t\t infoObject[\"currentDomain\"] = new flash.system.ApplicationDomain();\n");
- htmlFile.append("\t\t\t infoObject[\"fonts\"] = '';\n");
- htmlFile.append("\t\t\t infoObject[\"frames\"] = '';\n");
- htmlFile.append("\t\t\t infoObject[\"mainClassName\"] = '").append(projectName).append("';\n");
- htmlFile.append("\t\t\t infoObject[\"mixins\"] = '';\n");
- htmlFile.append("\t\t\t infoObject[\"preloader\"] = new mx.preloaders.DownloadProgressBar();\n");
- htmlFile.append("\t\t\t infoObject[\"rsls\"] = '';\n");
- htmlFile.append("\t\t\t infoObject[\"runtimeDPIProvider\"] = new mx.core.RuntimeDPIProvider();\n");
- htmlFile.append("\t\t\t infoObject[\"useNativeDragManager\"] = '';\n");
- htmlFile.append("\t\t\t infoObject[\"usePreloader\"] = false; // we're not showing a preloader in JS\n");
- htmlFile.append("\t\t\t \n");
- htmlFile.append("\t\t\t return infoObject;\n");
- htmlFile.append("\t\t\t}\n");
- htmlFile.append("\t\t\t\n");
- htmlFile.append("\t\t\tchildManager = new mx.managers.systemClasses.ChildManager(systemManager);\n");
- htmlFile.append("\t\t\t\n");
- htmlFile.append("\t\t\tmx.managers.DragManagerImpl.sm = window['apache-flex_system-manager'];\n");
- htmlFile.append("\t\t\t\n");
- htmlFile.append("\t\t\tmx.core.FlexGlobals.topLevelApplication = {};\n");
- htmlFile.append("\t\t\t\n");
- htmlFile.append("\t\t\twindow['apache-flex_loaderInfo'].dispatchEvent(new flash.events.Event(flash.events.Event.INIT));\n");
- htmlFile.append("\t\t}\n");
- htmlFile.append("\t</script>\n");
- htmlFile.append("</body>\n");
- htmlFile.append("</html>");
-
- writeFile(dirPath + File.separator + "index.html", htmlFile.toString(),
- false);
- }
-
- private void writeCSS(String projectName, String dirPath)
- throws IOException
- {
- StringBuilder cssFile = new StringBuilder();
- JSCSSCompilationSession cssSession = (JSCSSCompilationSession) project.getCSSCompilationSession();
- cssFile.append(cssSession.emitCSS());
-
- writeFile(dirPath + File.separator + projectName + ".css",
- cssFile.toString(), false);
- }
-}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/3724c2ff/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/js/vf2js/JSVF2JSConfiguration.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/js/vf2js/JSVF2JSConfiguration.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/js/vf2js/JSVF2JSConfiguration.java
deleted file mode 100644
index ae620f7..0000000
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/js/vf2js/JSVF2JSConfiguration.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.flex.compiler.internal.driver.js.vf2js;
-
-import java.util.List;
-
-import org.apache.flex.compiler.clients.MXMLJSC;
-import org.apache.flex.compiler.internal.driver.js.goog.JSGoogConfiguration;
-
-/**
- * The {@link JSVF2JSConfiguration} class holds all compiler arguments needed for
- * compiling ActionScript to JavaScript the 'goog' way.
- * <p>
- * Specific flags are implemented here for the configuration to be loaded by the
- * configure() method of {@link MXMLJSC}.
- * <p>
- * This class inherits all compiler arguments from the MXMLC compiler.
- *
- * @author Erik de Bruin
- */
-public class JSVF2JSConfiguration extends JSGoogConfiguration
-{
- public JSVF2JSConfiguration()
- {
- }
-
- //
- // 'closure-lib'
- //
-
- @Override
- public String getClosureLib()
- {
- try
- {
- if (closureLib.equals(""))
- {
- closureLib = getAbsolutePathFromPathRelativeToMXMLC(
- "../lib/google/closure-library");
- }
- }
- catch (Exception e) { /* better to try and fail... */ }
-
- return closureLib;
- }
-
- //
- // 'sdk-js-lib'
- //
-
- @Override
- public List<String> getSDKJSLib()
- {
- if (sdkJSLib.size() == 0)
- {
- try
- {
- String path = getAbsolutePathFromPathRelativeToMXMLC(
- "../../../../frameworks/js/vf2js/src");
-
- sdkJSLib.add(path);
- }
- catch (Exception e) { /* better to try and fail... */ }
- }
-
- return sdkJSLib;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/3724c2ff/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/js/vf2js/VF2JSBackend.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/js/vf2js/VF2JSBackend.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/js/vf2js/VF2JSBackend.java
deleted file mode 100644
index d0030fe..0000000
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/js/vf2js/VF2JSBackend.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.flex.compiler.internal.driver.js.vf2js;
-
-import java.io.FilterWriter;
-
-import org.apache.flex.compiler.codegen.js.IJSEmitter;
-import org.apache.flex.compiler.internal.codegen.js.vf2js.JSVF2JSEmitter;
-import org.apache.flex.compiler.internal.driver.js.goog.GoogBackend;
-import org.apache.flex.compiler.internal.targets.FlexJSTarget;
-import org.apache.flex.compiler.internal.targets.JSTarget;
-import org.apache.flex.compiler.projects.IASProject;
-import org.apache.flex.compiler.targets.ITargetProgressMonitor;
-import org.apache.flex.compiler.targets.ITargetSettings;
-
-/**
- * @author Erik de Bruin
- */
-public class VF2JSBackend extends GoogBackend
-{
-
- @Override
- public IJSEmitter createEmitter(FilterWriter out)
- {
- IJSEmitter emitter = new JSVF2JSEmitter(out);
- emitter.setDocEmitter(createDocEmitter(emitter));
- return emitter;
- }
-
- @Override
- public JSTarget createTarget(IASProject project, ITargetSettings settings,
- ITargetProgressMonitor monitor)
- {
- return new FlexJSTarget(project, settings, monitor);
- }
-
-
-}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/3724c2ff/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/mxml/vf2js/MXMLVF2JSBackend.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/mxml/vf2js/MXMLVF2JSBackend.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/mxml/vf2js/MXMLVF2JSBackend.java
deleted file mode 100644
index f69d499..0000000
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/mxml/vf2js/MXMLVF2JSBackend.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.flex.compiler.internal.driver.mxml.vf2js;
-
-import java.io.FilterWriter;
-import java.util.List;
-
-import org.apache.flex.compiler.codegen.IDocEmitter;
-import org.apache.flex.compiler.codegen.as.IASEmitter;
-import org.apache.flex.compiler.codegen.js.IJSEmitter;
-import org.apache.flex.compiler.codegen.js.IJSWriter;
-import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
-import org.apache.flex.compiler.config.Configuration;
-import org.apache.flex.compiler.config.Configurator;
-import org.apache.flex.compiler.driver.IBackend;
-import org.apache.flex.compiler.driver.IPublisher;
-import org.apache.flex.compiler.internal.codegen.js.vf2js.JSVF2JSDocEmitter;
-import org.apache.flex.compiler.internal.codegen.js.vf2js.JSVF2JSEmitter;
-import org.apache.flex.compiler.internal.codegen.mxml.MXMLBlockWalker;
-import org.apache.flex.compiler.internal.codegen.mxml.MXMLWriter;
-import org.apache.flex.compiler.internal.codegen.mxml.flexjs.MXMLFlexJSBlockWalker;
-import org.apache.flex.compiler.internal.codegen.mxml.vf2js.MXMLVF2JSEmitter;
-import org.apache.flex.compiler.internal.codegen.mxml.vf2js.MXMLVF2JSPublisher;
-import org.apache.flex.compiler.internal.driver.js.vf2js.JSVF2JSConfiguration;
-import org.apache.flex.compiler.internal.driver.mxml.MXMLBackend;
-import org.apache.flex.compiler.internal.projects.FlexJSProject;
-import org.apache.flex.compiler.internal.targets.FlexJSTarget;
-import org.apache.flex.compiler.internal.targets.JSTarget;
-import org.apache.flex.compiler.internal.visitor.as.ASNodeSwitch;
-import org.apache.flex.compiler.internal.visitor.mxml.MXMLNodeSwitch;
-import org.apache.flex.compiler.problems.ICompilerProblem;
-import org.apache.flex.compiler.projects.IASProject;
-import org.apache.flex.compiler.targets.ITargetProgressMonitor;
-import org.apache.flex.compiler.targets.ITargetSettings;
-import org.apache.flex.compiler.tree.mxml.IMXMLFileNode;
-import org.apache.flex.compiler.units.ICompilationUnit;
-import org.apache.flex.compiler.visitor.IBlockVisitor;
-import org.apache.flex.compiler.visitor.IBlockWalker;
-import org.apache.flex.compiler.visitor.mxml.IMXMLBlockWalker;
-
-/**
- * A concrete implementation of the {@link IBackend} API where the
- * {@link MXMLBlockWalker} is used to traverse the {@link IMXMLFileNode} AST.
- *
- * @author Erik de Bruin
- */
-public class MXMLVF2JSBackend extends MXMLBackend
-{
-
- @Override
- public Configurator createConfigurator()
- {
- return new Configurator(JSVF2JSConfiguration.class);
- }
-
- @Override
- public IMXMLEmitter createMXMLEmitter(FilterWriter out)
- {
- return new MXMLVF2JSEmitter(out);
- }
-
- @Override
- public IMXMLBlockWalker createMXMLWalker(IASProject project,
- List<ICompilerProblem> errors, IMXMLEmitter mxmlEmitter,
- IASEmitter asEmitter, IBlockWalker asBlockWalker)
- {
- MXMLBlockWalker walker = new MXMLFlexJSBlockWalker(errors, project,
- mxmlEmitter, asEmitter, asBlockWalker);
-
- ASNodeSwitch asStrategy = new ASNodeSwitch(
- (IBlockVisitor) asBlockWalker);
- walker.setASStrategy(asStrategy);
-
- MXMLNodeSwitch mxmlStrategy = new MXMLNodeSwitch(walker);
- walker.setMXMLStrategy(mxmlStrategy);
-
- return walker;
- }
-
- @Override
- public IDocEmitter createDocEmitter(IASEmitter emitter)
- {
- return new JSVF2JSDocEmitter((IJSEmitter) emitter);
- }
-
- @Override
- public IJSEmitter createEmitter(FilterWriter out)
- {
- IJSEmitter emitter = new JSVF2JSEmitter(out);
- emitter.setDocEmitter(createDocEmitter(emitter));
- return emitter;
- }
-
- @Override
- public IJSWriter createMXMLWriter(IASProject project,
- List<ICompilerProblem> problems, ICompilationUnit compilationUnit,
- boolean enableDebug)
- {
- return new MXMLWriter(project, problems, compilationUnit, enableDebug);
- }
-
- @Override
- public JSTarget createTarget(IASProject project, ITargetSettings settings,
- ITargetProgressMonitor monitor)
- {
- return new FlexJSTarget(project, settings, monitor);
- }
-
- @Override
- public IPublisher createPublisher(IASProject project,
- List<ICompilerProblem> errors, Configuration config)
- {
- return new MXMLVF2JSPublisher(config, (FlexJSProject) project);
- }
-}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/3724c2ff/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/mxml/vf2js/MXMLVF2JSSWCBackend.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/mxml/vf2js/MXMLVF2JSSWCBackend.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/mxml/vf2js/MXMLVF2JSSWCBackend.java
deleted file mode 100644
index f9390fc..0000000
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/mxml/vf2js/MXMLVF2JSSWCBackend.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.flex.compiler.internal.driver.mxml.vf2js;
-
-import java.io.FilterWriter;
-import java.util.List;
-
-import org.apache.flex.compiler.codegen.IDocEmitter;
-import org.apache.flex.compiler.codegen.as.IASEmitter;
-import org.apache.flex.compiler.codegen.js.IJSEmitter;
-import org.apache.flex.compiler.codegen.js.IJSWriter;
-import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
-import org.apache.flex.compiler.config.Configurator;
-import org.apache.flex.compiler.driver.IBackend;
-import org.apache.flex.compiler.internal.codegen.js.vf2js.JSVF2JSDocEmitter;
-import org.apache.flex.compiler.internal.codegen.js.vf2js.JSVF2JSEmitter;
-import org.apache.flex.compiler.internal.codegen.mxml.MXMLBlockWalker;
-import org.apache.flex.compiler.internal.codegen.mxml.MXMLWriter;
-import org.apache.flex.compiler.internal.codegen.mxml.flexjs.MXMLFlexJSBlockWalker;
-import org.apache.flex.compiler.internal.codegen.mxml.vf2js.MXMLVF2JSEmitter;
-import org.apache.flex.compiler.internal.driver.js.vf2js.JSVF2JSConfiguration;
-import org.apache.flex.compiler.internal.driver.mxml.MXMLBackend;
-import org.apache.flex.compiler.internal.targets.FlexJSSWCTarget;
-import org.apache.flex.compiler.internal.targets.JSTarget;
-import org.apache.flex.compiler.internal.visitor.as.ASNodeSwitch;
-import org.apache.flex.compiler.internal.visitor.mxml.MXMLNodeSwitch;
-import org.apache.flex.compiler.problems.ICompilerProblem;
-import org.apache.flex.compiler.projects.IASProject;
-import org.apache.flex.compiler.targets.ITargetProgressMonitor;
-import org.apache.flex.compiler.targets.ITargetSettings;
-import org.apache.flex.compiler.tree.mxml.IMXMLFileNode;
-import org.apache.flex.compiler.units.ICompilationUnit;
-import org.apache.flex.compiler.visitor.IBlockVisitor;
-import org.apache.flex.compiler.visitor.IBlockWalker;
-import org.apache.flex.compiler.visitor.mxml.IMXMLBlockWalker;
-
-/**
- * A concrete implementation of the {@link IBackend} API where the
- * {@link MXMLBlockWalker} is used to traverse the {@link IMXMLFileNode} AST.
- *
- * @author Erik de Bruin
- */
-public class MXMLVF2JSSWCBackend extends MXMLBackend
-{
-
- @Override
- public Configurator createConfigurator()
- {
- return new Configurator(JSVF2JSConfiguration.class);
- }
-
- @Override
- public IMXMLEmitter createMXMLEmitter(FilterWriter out)
- {
- return new MXMLVF2JSEmitter(out);
- }
-
- @Override
- public IMXMLBlockWalker createMXMLWalker(IASProject project,
- List<ICompilerProblem> errors, IMXMLEmitter mxmlEmitter,
- IASEmitter asEmitter, IBlockWalker asBlockWalker)
- {
- MXMLBlockWalker walker = new MXMLFlexJSBlockWalker(errors, project,
- mxmlEmitter, asEmitter, asBlockWalker);
-
- ASNodeSwitch asStrategy = new ASNodeSwitch(
- (IBlockVisitor) asBlockWalker);
- walker.setASStrategy(asStrategy);
-
- MXMLNodeSwitch mxmlStrategy = new MXMLNodeSwitch(walker);
- walker.setMXMLStrategy(mxmlStrategy);
-
- return walker;
- }
-
- @Override
- public IDocEmitter createDocEmitter(IASEmitter emitter)
- {
- return new JSVF2JSDocEmitter((IJSEmitter) emitter);
- }
-
- @Override
- public IJSEmitter createEmitter(FilterWriter out)
- {
- IJSEmitter emitter = new JSVF2JSEmitter(out);
- emitter.setDocEmitter(createDocEmitter(emitter));
- return emitter;
- }
-
- @Override
- public IJSWriter createMXMLWriter(IASProject project,
- List<ICompilerProblem> problems, ICompilationUnit compilationUnit,
- boolean enableDebug)
- {
- return new MXMLWriter(project, problems, compilationUnit, enableDebug);
- }
-
- @Override
- public JSTarget createTarget(IASProject project, ITargetSettings settings,
- ITargetProgressMonitor monitor)
- {
- return new FlexJSSWCTarget(project, settings, monitor);
- }
-}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/3724c2ff/compiler-jx/src/main/java/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
deleted file mode 100644
index 4d625d4..0000000
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
+++ /dev/null
@@ -1,406 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.flex.compiler.internal.graph;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Scanner;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.flex.compiler.clients.problems.ProblemQuery;
-import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
-import org.apache.flex.compiler.internal.driver.js.goog.JSGoogConfiguration;
-import org.apache.flex.compiler.problems.FileNotFoundProblem;
-
-import com.google.common.io.Files;
-
-public class VF2JSDepsWriter {
-
- public VF2JSDepsWriter(File outputFolder, String mainClassName, JSGoogConfiguration config)
- {
- this.outputFolderPath = outputFolder.getAbsolutePath();
- this.mainName = mainClassName;
- otherPaths = config.getSDKJSLib();
- }
-
- private ProblemQuery problems;
- private String outputFolderPath;
- private String mainName;
- private List<String> otherPaths;
- private boolean problemsFound = false;
-
- private HashMap<String,GoogDep> depMap = new HashMap<String,GoogDep>();
-
- public ArrayList<String> getListOfFiles() throws InterruptedException
- {
- buildDB();
- ArrayList<GoogDep> dps = sort(mainName);
- ArrayList<String> files = new ArrayList<String>();
- for (GoogDep gd : dps)
- {
- files.add(gd.filePath);
- }
- return files;
- }
-
- public boolean generateDeps(ProblemQuery problems, StringBuilder depsFileData)
- throws InterruptedException, FileNotFoundException
- {
- problemsFound = false;
- this.problems = problems;
- buildDB();
- ArrayList<GoogDep> dps = sort(mainName);
- String outString = "// generated by FalconJS" + "\n";
- int n = dps.size();
- for (int i = n - 1; i >= 0; i--)
- {
- GoogDep gd = dps.get(i);
- if (!isGoogClass(gd.className))
- {
- String s = "goog.addDependency('";
- s += relativePath(gd.filePath);
- s += "', ['";
- s += gd.className;
- s += "'], [";
- s += getDependencies(gd.deps);
- s += "]);\n";
- outString += s;
- }
- }
- depsFileData.append(outString);
- return !problemsFound;
- }
-
- private boolean isGoogClass(String className)
- {
- return className.startsWith("goog.");
- }
-
- private void buildDB()
- {
- addDeps(mainName);
- }
-
- public ArrayList<String> filePathsInOrder = new ArrayList<String>();
-
- public ArrayList<String> additionalHTML = new ArrayList<String>();
-
- private HashMap<String, GoogDep> visited = new HashMap<String, GoogDep>();
-
- private ArrayList<GoogDep> sort(String rootClassName)
- {
- ArrayList<GoogDep> arr = new ArrayList<GoogDep>();
- GoogDep current = depMap.get(rootClassName);
- sortFunction(current, arr);
- return arr;
- }
-
- private void sortFunction(GoogDep current, ArrayList<GoogDep> arr)
- {
- visited.put(current.className, current);
-
- filePathsInOrder.add(current.filePath);
- System.out.println("Dependencies calculated for '" + current.filePath + "'");
-
- ArrayList<String> deps = current.deps;
- for (String className : deps)
- {
- if (!visited.containsKey(className) && !isGoogClass(className))
- {
- GoogDep gd = depMap.get(className);
- sortFunction(gd, arr);
- }
- }
- arr.add(current);
- }
-
- private void addDeps(String className)
- {
- if (depMap.containsKey(className) || isGoogClass(className))
- return;
-
- // build goog dependency list
- GoogDep gd = new GoogDep();
- gd.className = className;
- gd.filePath = getFilePath(className);
- depMap.put(gd.className, gd);
- ArrayList<String> deps = getDirectDependencies(gd.filePath);
-
- gd.deps = new ArrayList<String>();
- ArrayList<String> circulars = new ArrayList<String>();
- for (String dep : deps)
- {
- if (depMap.containsKey(dep) && !isGoogClass(dep))
- {
- circulars.add(dep);
- continue;
- }
- gd.deps.add(dep);
- }
- for (String dep : deps)
- {
- addDeps(dep);
- }
- if (circulars.size() > 0)
- {
- // remove requires that would cause circularity
- try
- {
- List<String> fileLines = Files.readLines(new File(gd.filePath),
- Charset.defaultCharset());
- ArrayList<String> finalLines = new ArrayList<String>();
-
- //String inherits = getBaseClass(fileLines, className);
-
- for (String line : fileLines)
- {
- int c = line.indexOf("goog.require");
- if (c > -1)
- {
- int c2 = line.indexOf(")");
- String s = line.substring(c + 14, c2 - 1);
- if (circulars.contains(s) /* && !s.equals(inherits) */ )
- continue;
- }
- finalLines.add(line);
- }
- File file = new File(gd.filePath);
- PrintWriter out = new PrintWriter(new FileWriter(file));
- for (String s : finalLines)
- {
- out.println(s);
- }
- out.close();
-
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
-
- }
- }
-
- String getBaseClass(List<String> lines, String className)
- {
- int n = lines.size();
- for (int i = 0; i < n; i++)
- {
- String line = lines.get(i);
- int c2;
- int c = line.indexOf("goog.inherits");
- if (c > -1)
- {
- 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(")");
- return inheritLine.substring(c + 1, c2).trim();
- }
- }
- return null;
- }
-
- String getFilePath(String className)
- {
- String fn;
- File destFile;
- File f;
-
- String classPath = className.replace(".", File.separator);
-
- fn = outputFolderPath + File.separator + classPath + ".js";
- f = new File(fn);
- if (f.exists())
- {
- return fn;
- }
-
- for (String otherPath : otherPaths)
- {
- fn = otherPath + File.separator + classPath + ".js";
- f = new File(fn);
- if (f.exists())
- {
- fn = outputFolderPath + File.separator + classPath + ".js";
- destFile = new File(fn);
- // copy source to output
- try {
- FileUtils.copyFile(f, destFile);
-
- // (erikdebruin) copy class assets files
- if (className.indexOf("org.apache.flex") > -1)
- {
- File assetsDir = new File(f.getParentFile(), "assets");
- if (assetsDir.exists())
- {
- String nameOfClass = className.substring(className.lastIndexOf('.') + 1);
-
- File[] assetsList = assetsDir.listFiles();
- for (int i = 0; i < assetsList.length; i++)
- {
- File assetFile = assetsList[i];
- String assetFileName = assetFile.getName();
-
- if (assetFile.isFile() && assetFileName.indexOf(nameOfClass) == 0)
- {
- String pathOfClass = "";
- pathOfClass = className.substring(0, className.lastIndexOf('.'));
- pathOfClass = pathOfClass.replace(".", File.separator);
-
- destFile = new File(outputFolderPath +
- File.separator + pathOfClass +
- File.separator + "assets" +
- File.separator + assetFileName);
- FileUtils.copyFile(assetFile, destFile);
-
- destFile = new File(outputFolderPath.replace("js-debug", "js-release") +
- File.separator + pathOfClass +
- File.separator + "assets" +
- File.separator + assetFileName);
- FileUtils.copyFile(assetFile, destFile);
-
- System.out.println("Copied assets of the '" + nameOfClass + "' class");
- }
- }
- }
- }
- } catch (IOException e) {
- System.out.println("Error copying file for class: " + className);
- }
- return fn;
- }
- }
-
- System.out.println("Could not find file for class: " + className);
- problems.add(new FileNotFoundProblem(className));
- problemsFound = true;
- return "";
- }
-
- private ArrayList<String> getDirectDependencies(String fn)
- {
- ArrayList<String> deps = new ArrayList<String>();
-
- FileInputStream fis;
- try {
- fis = new FileInputStream(fn);
- Scanner scanner = new Scanner(fis, "UTF-8");
- boolean inInjectHTML = false;
- while (scanner.hasNextLine())
- {
- String s = scanner.nextLine();
- if (s.indexOf("goog.inherits") > -1)
- break;
- if (inInjectHTML)
- {
- int c = s.indexOf("</inject_html>");
- if (c > -1)
- {
- inInjectHTML = false;
- continue;
- }
- }
- if (inInjectHTML)
- {
- additionalHTML.add(s);
- continue;
- }
- int c = s.indexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
- if (c > -1)
- {
- int c2 = s.indexOf(")");
- s = s.substring(c + 14, c2 - 1);
- deps.add(s);
- }
- c = s.indexOf("<inject_html>");
- if (c > -1)
- {
- inInjectHTML = true;
- }
- }
- scanner.close();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- return deps;
- }
-
- private String getDependencies(ArrayList<String> deps)
- {
- String s = "";
- for (String dep : deps)
- {
- if (s.length() > 0)
- {
- s += ", ";
- }
- s += "'" + dep + "'";
- }
- return s;
- }
-
- String relativePath(String path)
- {
- if (path.indexOf(outputFolderPath) == 0)
- {
- path = path.replace(outputFolderPath, "../../..");
- }
- else
- {
- for (String otherPath : otherPaths)
- {
- if (path.indexOf(otherPath) == 0)
- {
- path = path.replace(otherPath, "../../..");
-
- }
- }
- }
- // paths are actually URIs and always have forward slashes
- path = path.replace('\\', '/');
- return path;
- }
- private class GoogDep
- {
- public String filePath;
- public String className;
- public ArrayList<String> deps;
-
- }
-}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/3724c2ff/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 fa372fd..b462568 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
@@ -23,6 +23,7 @@ import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
@@ -54,8 +55,7 @@ public class JSClosureCompilerWrapper
if (s.contains(" "))
{
String[] parts = s.split(" ");
- for (String part : parts)
- splitArgs.add(part);
+ Collections.addAll(splitArgs, parts);
}
else
splitArgs.add(s);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/3724c2ff/compiler-jx/src/main/java/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
deleted file mode 100644
index f1240e4..0000000
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.flex.compiler.utils;
-
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.logging.Level;
-
-import com.google.javascript.jscomp.CheckLevel;
-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.DiagnosticGroups;
-import com.google.javascript.jscomp.SourceFile;
-import com.google.javascript.jscomp.SourceMap;
-import com.google.javascript.jscomp.WarningLevel;
-import com.google.javascript.rhino.Node;
-import com.google.javascript.rhino.Token;
-
-public class VF2JSClosureCompilerWrapper
-{
-
- public VF2JSClosureCompilerWrapper()
- {
- Compiler.setLoggingLevel(Level.ALL);
-
- compiler_ = new Compiler();
-
- options_ = new CompilerOptions();
- initOptions();
-
- jsExternsFiles_ = new ArrayList<SourceFile>();
- initExterns();
-
- jsSourceFiles_ = new ArrayList<SourceFile>();
- }
-
- private Compiler compiler_;
- private CompilerOptions options_;
- private List<SourceFile> jsExternsFiles_;
- private List<SourceFile> jsSourceFiles_;
-
- public String targetFilePath;
-
- public void addJSExternsFile(String fileName)
- {
- addJSExternsFile(SourceFile.fromFile(fileName));
- }
-
- public void addJSExternsFile(SourceFile file)
- {
- jsExternsFiles_.add(file);
- }
-
- public void addJSSourceFile(String fileName)
- {
- jsSourceFiles_.add(SourceFile.fromFile(fileName));
- }
-
- public void compile()
- {
- compiler_.compile(jsExternsFiles_, jsSourceFiles_, options_);
-
- try
- {
- FileWriter targetFile = new FileWriter(targetFilePath);
- targetFile.write(compiler_.toSource());
- targetFile.close();
-
- FileWriter sourceMapFile = new FileWriter(options_.sourceMapOutputPath);
- compiler_.getSourceMap().appendTo(sourceMapFile, "");
- sourceMapFile.close();
- }
- catch (IOException error)
- {
- System.out.println(error);
- }
- }
-
- @SuppressWarnings( "deprecation" )
- private void initExterns()
- {
- try
- {
- List<SourceFile> defaultExterns = CommandLineRunner.getDefaultExterns();
- for (SourceFile defaultExtern : defaultExterns)
- {
- this.addJSExternsFile(defaultExtern);
- }
- }
- catch (IOException error)
- {
- System.out.println(error);
- }
- }
-
- private void initOptions()
- {
- CompilationLevel.ADVANCED_OPTIMIZATIONS.setOptionsForCompilationLevel(
- options_);
-
- WarningLevel.VERBOSE.setOptionsForWarningLevel(options_);
-
- String[] asdocTags = new String[] {"productversion",
- "playerversion", "langversion", "copy"};
- options_.setExtraAnnotationNames(Arrays.asList(asdocTags));
- }
-
- public void setOptions(String sourceMapPath, boolean useStrictPublishing)
- {
- if (useStrictPublishing)
- {
- // (erikdebruin) set compiler flags to 'strictest' to allow maximum
- // code optimization
-
- options_.getDefineReplacements().put(
- "goog.DEBUG", new Node(Token.TRUE));
-
- // ToDo (erikdebruin): re-evaluate this option on future GC release
- //options_.setLanguageIn(LanguageMode.ECMASCRIPT6_STRICT);
-
- options_.setPreferSingleQuotes(true);
-
- options_.setFoldConstants(true);
- options_.setDeadAssignmentElimination(true);
- options_.setInlineConstantVars(true);
- options_.setInlineFunctions(true);
- options_.setInlineLocalFunctions(true);
- options_.setCrossModuleCodeMotion(true);
- options_.setCoalesceVariableNames(true);
- options_.setCrossModuleMethodMotion(true);
- options_.setInlineGetters(true);
- options_.setInlineVariables(true);
- options_.setSmartNameRemoval(true);
- options_.setRemoveDeadCode(true);
- options_.setCheckMissingReturn(CheckLevel.WARNING);
- options_.setExtractPrototypeMemberDeclarations(true);
- options_.setRemoveUnusedPrototypeProperties(true);
- options_.setRemoveUnusedPrototypePropertiesInExterns(true);
- options_.setRemoveUnusedClassProperties(true);
- options_.setRemoveUnusedVars(true);
- options_.setRemoveUnusedLocalVars(true);
- options_.setCollapseVariableDeclarations(true);
- options_.setCollapseAnonymousFunctions(true);
- options_.setAliasAllStrings(true);
- options_.setConvertToDottedProperties(true);
- options_.setRewriteFunctionExpressions(true);
- options_.setOptimizeParameters(true);
- options_.setOptimizeReturns(true);
- options_.setOptimizeCalls(true);
- options_.setOptimizeArgumentsArray(true);
-
- // warnings already activated in previous incarnation
- options_.setWarningLevel(DiagnosticGroups.ACCESS_CONTROLS, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.CONST, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.CONSTANT_PROPERTY, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.STRICT_MODULE_DEP_CHECK, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.VISIBILITY, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.DEPRECATED, CheckLevel.OFF); // OFF
-
- // 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.MISSING_PROVIDE, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.CHECK_REGEXP, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.CHECK_TYPES, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.CHECK_USELESS_CODE, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.CHECK_VARIABLES, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.DEBUGGER_STATEMENT_PRESENT, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.DUPLICATE_MESSAGE, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.DUPLICATE_VARS, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.ES3, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.ES5_STRICT, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.EXTERNS_VALIDATION, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.GLOBAL_THIS, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.FILEOVERVIEW_JSDOC, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.INTERNET_EXPLORER_CHECKS, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.INVALID_CASTS, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.LINT_CHECKS, CheckLevel.OFF); // OFF
- options_.setWarningLevel(DiagnosticGroups.MISPLACED_TYPE_ANNOTATION, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.MISSING_PROPERTIES, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.MISSING_PROVIDE, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.MISSING_REQUIRE, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.MISSING_RETURN, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.NEW_CHECK_TYPES, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.NON_STANDARD_JSDOC, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.REPORT_UNKNOWN_TYPES, CheckLevel.OFF); // OFF
- options_.setWarningLevel(DiagnosticGroups.SUSPICIOUS_CODE, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.TWEAKS, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.TYPE_INVALIDATION, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.UNDEFINED_NAMES, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.UNDEFINED_VARIABLES, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.UNKNOWN_DEFINES, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.UNNECESSARY_CASTS, CheckLevel.OFF); // OFF
- options_.setWarningLevel(DiagnosticGroups.USE_OF_GOOG_BASE, CheckLevel.WARNING);
- options_.setWarningLevel(DiagnosticGroups.VIOLATED_MODULE_DEP, CheckLevel.WARNING);
- }
-
- options_.sourceMapFormat = SourceMap.Format.V3;
- options_.sourceMapOutputPath = sourceMapPath + ".map";
- }
-
-}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/3724c2ff/compiler-jx/src/main/java/org/apache/flex/compiler/utils/VF2JSProjectUtils.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/utils/VF2JSProjectUtils.java b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/VF2JSProjectUtils.java
deleted file mode 100644
index 0542097..0000000
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/utils/VF2JSProjectUtils.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.flex.compiler.utils;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.commons.io.FileUtils;
-
-import com.google.common.io.Files;
-
-
-public class VF2JSProjectUtils
-{
-
- private static File tempDir;
-
- public static final String createTempProject(String projectFilePath,
- boolean isFlashBuilderProject)
- {
- tempDir = Files.createTempDir();
-
- String fileName = projectFilePath.substring(projectFilePath.lastIndexOf(File.separator) + 1, projectFilePath.length());
-
- String path = projectFilePath.substring(0, projectFilePath.lastIndexOf(File.separator));
-
- createTempProjectDir(new File(path).listFiles(), "");
-
- return tempDir.getAbsolutePath() + File.separator + fileName;
- }
-
- private static void createTempProjectDir(File[] files, String parentPath)
- {
- for (File file : files)
- {
- if (file.isDirectory())
- {
- String path = parentPath + File.separator + file.getName();
-
- new File(tempDir + File.separator + path).mkdirs();
-
- createTempProjectDir(file.listFiles(), path);
- }
- else
- {
- String fileName = file.getName();
-
- if (fileName.contains(".") && fileName.charAt(0) != '.')
- {
- String extension = fileName.substring(fileName.lastIndexOf("."), fileName.length());
-
- if (extension.equals(".mxml") || extension.equals(".as"))
- {
- File intermediateFile = file;
- String tempFileName = fileName.substring(0, fileName.indexOf("."));
- File targetDir = new File(tempDir + File.separator + parentPath);
-
- createTempFileWithVF2JSNamespace(intermediateFile,
- tempFileName, false, targetDir, extension);
- }
- }
- }
- }
- }
-
- private static File createTempFileWithVF2JSNamespace(File intermediateFile,
- String tempFileName, boolean createTempFile, File targetDir,
- String extension)
- {
- File tempFile = null;
-
- try
- {
- String content = FileUtils.readFileToString(intermediateFile, "UTF-8");
-
- // mx (MXML)
- content = content.replace(
- "xmlns:mx=\"library://ns.adobe.com/flex/mx\"",
- "xmlns:vf2js_mx=\"http://flex.apache.org/vf2js_mx/ns\"");
- content = content.replace("<mx:", "<vf2js_mx:");
- content = content.replace("</mx:", "</vf2js_mx:");
-
- // mx (AS)
- content = content.replace("mx.", "vf2js_mx.");
-
- // s (MXML)
- content = content.replace(
- "xmlns:s=\"library://ns.adobe.com/flex/spark\"",
- "xmlns:vf2js_s=\"http://flex.apache.org/vf2js_s/ns\"");
- content = content.replace("<s:", "<vf2js_s:");
- content = content.replace("</s:", "</vf2js_s:");
-
- // s (AS)
- content = content.replace("spark.", "vf2js_s.");
-
- if (createTempFile)
- {
- tempFile = File.createTempFile(tempFileName, extension,
- targetDir);
- tempFile.deleteOnExit();
- }
- else
- {
- tempFile = new File(targetDir.getAbsolutePath(),
- tempFileName + extension);
- }
- FileUtils.writeStringToFile(tempFile, content, "UTF-8");
- }
- catch (IOException e)
- {
- throw new RuntimeException("Generating file failed", e);
- }
-
- return tempFile;
- }
-}