Repository: flex-falcon
Updated Branches:
  refs/heads/develop 1f72b5451 -> 53ed68ef7


try revisiting main class to inject Language require if needed.  The flag may 
be set after the mainCU gets written


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

Branch: refs/heads/develop
Commit: 53ed68ef76b7289a8cd024c24497f59e15b99f24
Parents: 1f72b54
Author: Alex Harui <[email protected]>
Authored: Sat Jun 13 23:13:47 2015 -0700
Committer: Alex Harui <[email protected]>
Committed: Sat Jun 13 23:14:33 2015 -0700

----------------------------------------------------------------------
 .../flex/compiler/internal/test/TestBase.java   | 87 ++++++++++++++++++++
 .../mxml/flexjs/MXMLFlexJSPublisher.java        | 33 +++++++-
 2 files changed, 119 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/53ed68ef/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java 
b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
index 2a2e90b..cd69242 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
@@ -41,7 +41,10 @@ import org.apache.flex.compiler.codegen.as.IASEmitter;
 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.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.as.ASFilterWriter;
+import 
org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
 import org.apache.flex.compiler.internal.projects.FlexJSProject;
 import org.apache.flex.compiler.internal.projects.FlexProject;
 import org.apache.flex.compiler.internal.projects.FlexProjectConfigurator;
@@ -277,9 +280,93 @@ public class TestBase implements ITestBase
             }
         }
 
+        File outputRootDir = new File(
+                FilenameNormalization.normalize(tempDir
+                        + File.separator + inputDirName));
+        String qname;
+               try {
+                       qname = mainCU.getQualifiedNames().get(0);
+               final File outputClassFile = getOutputClassFile(qname
+                       + "_output", outputRootDir);
+               appendLanguage(outputClassFile.getAbsolutePath(), qname);
+               } catch (InterruptedException e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               } catch (IOException e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               }
         return compiledFileNames;
     }
 
+    protected void writeFile(String path, String content, boolean append)
+    throws IOException
+       {
+               File tgtFile = new File(path);
+               
+               if (!tgtFile.exists())
+                   tgtFile.createNewFile();
+               
+               FileWriter fw = new FileWriter(tgtFile, append);
+               fw.write(content);
+               fw.close();
+       }
+    
+    private void appendLanguage(String path, String projectName)
+       throws IOException
+       {
+               StringBuilder appendString = new StringBuilder();
+               
appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+               appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
+               appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+               
appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
+               appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+               appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
+               appendString.append(ASEmitterTokens.SEMICOLON.getToken());
+               
+           String fileData = readCode(new File(path));
+           int reqidx = fileData.indexOf(appendString.toString());
+
+           if (reqidx == -1 && project instanceof FlexJSProject && 
((FlexJSProject)project).needLanguage)
+           {
+               reqidx = 
fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+               if (reqidx == -1)
+                       reqidx = 
fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
+               reqidx = fileData.indexOf(";", reqidx);
+                   String after = fileData.substring(reqidx + 1);
+                   String before = fileData.substring(0, reqidx + 1);
+                   String s = before + "\n" + appendString.toString() + after;
+                   writeFile(path, s, false);
+           }
+       }
+       
+       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;
+       }
+
     protected File getOutputClassFile(String qname, File outputFolder)
     {
         String[] cname = qname.split("\\.");

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/53ed68ef/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 53a6181..4292534 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
@@ -39,7 +39,9 @@ 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.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSSharedData;
+import 
org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogPublisher;
 import 
org.apache.flex.compiler.internal.driver.js.flexjs.JSCSSCompilationSession;
@@ -255,6 +257,7 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher 
implements
 
         appendExportSymbol(projectIntermediateJSFilePath, projectName);
         appendEncodedCSS(projectIntermediateJSFilePath, projectName);
+        appendLanguage(projectIntermediateJSFilePath, projectName);
 
         //if (!subsetGoog)
         //{
@@ -522,7 +525,35 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher 
implements
             writeFile(path, appendString.toString(), true);
         }
     }
-        
+     
+    private void appendLanguage(String path, String projectName)
+       throws IOException
+       {
+               StringBuilder appendString = new StringBuilder();
+               
appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+               appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
+               appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+               
appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
+               appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+               appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
+               appendString.append(ASEmitterTokens.SEMICOLON.getToken());
+               appendString.append(File.separator);
+               
+           String fileData = readCode(new File(path));
+           int reqidx = fileData.indexOf(appendString.toString());
+           if (reqidx == -1 && project.needLanguage)
+           {
+               reqidx = 
fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+               if (reqidx == -1)
+                       reqidx = 
fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
+               reqidx = fileData.indexOf(";", reqidx);
+                   String after = fileData.substring(reqidx + 1);
+                   String before = fileData.substring(0, reqidx + 1);
+                   String s = before + "\n" + appendString.toString() + after;
+                   writeFile(path, s, false);
+           }
+       }
+
     protected String readCode(File file)
     {
         String code = "";

Reply via email to