This is an automated email from the ASF dual-hosted git repository.

joshtynjala pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git


The following commit(s) were added to refs/heads/develop by this push:
     new 884afe9  GoogDepsWriter: extracted inject_html detection and moved it 
to the publisher so that inject_html can be detected in externs too
884afe9 is described below

commit 884afe915e7350529baebb487d2985f638daf3d7
Author: Josh Tynjala <[email protected]>
AuthorDate: Mon Aug 19 11:53:10 2019 -0700

    GoogDepsWriter: extracted inject_html detection and moved it to the 
publisher so that inject_html can be detected in externs too
---
 .../codegen/mxml/royale/MXMLRoyalePublisher.java   | 123 ++++++++++++++++++---
 .../compiler/internal/graph/GoogDepsWriter.java    |  21 ----
 2 files changed, 105 insertions(+), 39 deletions(-)

diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyalePublisher.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyalePublisher.java
index 80326a8..a4f46ef 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyalePublisher.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyalePublisher.java
@@ -18,6 +18,7 @@
  */
 package org.apache.royale.compiler.internal.codegen.mxml.royale;
 
+import com.google.common.io.Files;
 import com.google.javascript.jscomp.SourceFile;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FilenameUtils;
@@ -52,6 +53,7 @@ import org.apache.royale.swc.ISWCManager;
 import java.io.*;
 import java.net.URL;
 import java.net.URLDecoder;
+import java.nio.charset.Charset;
 import java.util.*;
 
 public class MXMLRoyalePublisher extends JSGoogPublisher implements 
IJSPublisher
@@ -98,6 +100,7 @@ public class MXMLRoyalePublisher extends JSGoogPublisher 
implements IJSPublisher
     private String outputPathParameter;
     private String moduleOutput;
     private boolean useStrictPublishing;
+    private List<String> additionalHTML = new ArrayList<String>();
 
     private GoogDepsWriter getGoogDepsWriter(File intermediateDir, 
                                                                                
String mainClassQName, 
@@ -441,36 +444,42 @@ public class MXMLRoyalePublisher extends JSGoogPublisher 
implements IJSPublisher
         if (fileList == null)
             return false; // some error occurred
         
-        if (compilerWrapper != null)
+        for (String sourceExtern : project.sourceExterns)
         {
-            for (String sourceExtern : project.sourceExterns)
+            String sourceExternFileName = sourceExtern.replace(".", "/") + 
".js";
+            File sourceExternFile = new File(intermediateDir, 
sourceExternFileName);
+            if (sourceExternFile.exists())
             {
-                String sourceExternFileName = sourceExtern.replace(".", "/") + 
".js";
-                File sourceExternFile = new File(intermediateDir, 
sourceExternFileName);
-                if (sourceExternFile.exists())
-                {
-                    String sourceExternPath = 
sourceExternFile.getAbsolutePath();
-                    if (!sourceExternFiles.contains(sourceExternPath))
-                        sourceExternFiles.add(sourceExternPath);
-                }
+                String sourceExternPath = sourceExternFile.getAbsolutePath();
+                if (!sourceExternFiles.contains(sourceExternPath))
+                    sourceExternFiles.add(sourceExternPath);
             }
-            for (String file : fileList) {
+        }
+        for (String file : fileList)
+        {
+            if (compilerWrapper != null)
+            {
                 compilerWrapper.addJSSourceFile(file);
                 if (googConfiguration.isVerbose())
                 {            
                     System.out.println("using source file: " + file);
                 }
             }
-            for (String file : sourceExternFiles) {
+            collectFileAdditionalHTML(file);
+        }
+        for (String file : sourceExternFiles)
+        {
+            if (compilerWrapper != null)
+            {
                 compilerWrapper.addJSExternsFile(file);
                 if (googConfiguration.isVerbose())
                 {
                     System.out.println("using extern file: " + file);
                 }
             }
+            collectFileAdditionalHTML(file);
         }
 
-
         
/////////////////////////////////////////////////////////////////////////////////
         // Generate the index.html for loading the application.
         
/////////////////////////////////////////////////////////////////////////////////
@@ -484,7 +493,7 @@ public class MXMLRoyalePublisher extends JSGoogPublisher 
implements IJSPublisher
 
         if (project.isModule(mainClassQName))
         {
-            for (String s : gdw.additionalHTML)
+            for (String s : additionalHTML)
             {
                 moduleAdditionHTML += "document.head.innerHTML += '"+ s.trim() 
+ "';";
             }
@@ -501,17 +510,17 @@ public class MXMLRoyalePublisher extends JSGoogPublisher 
implements IJSPublisher
                // Create the index.html for the debug-js version.
                if (!((JSGoogConfiguration)configuration).getSkipTranspile()) {
                    if (template != null) {
-                       writeTemplate(template, "intermediate", projectName, 
mainClassQName, intermediateDir, depsFileData, gdw.additionalHTML);
+                       writeTemplate(template, "intermediate", projectName, 
mainClassQName, intermediateDir, depsFileData, additionalHTML);
                    } else {
-                       writeHTML("intermediate", projectName, mainClassQName, 
intermediateDir, depsFileData, gdw.additionalHTML);
+                       writeHTML("intermediate", projectName, mainClassQName, 
intermediateDir, depsFileData, additionalHTML);
                    }
                }
                // Create the index.html for the release-js version.
                if (configuration.release()) {
                    if (template != null) {
-                       writeTemplate(template, "release", projectName, 
mainClassQName, releaseDir, depsFileData, gdw.additionalHTML);
+                       writeTemplate(template, "release", projectName, 
mainClassQName, releaseDir, depsFileData, additionalHTML);
                    } else {
-                       writeHTML("release", projectName, mainClassQName, 
releaseDir, null, gdw.additionalHTML);
+                       writeHTML("release", projectName, mainClassQName, 
releaseDir, null, additionalHTML);
                    }
                }
         }        
@@ -631,6 +640,84 @@ public class MXMLRoyalePublisher extends JSGoogPublisher 
implements IJSPublisher
         }
         return list;
     }
+
+    private void collectFileAdditionalHTML(String filePath)
+    {
+        List<String> fileLines;
+        try
+        {
+            fileLines = Files.readLines(new File(filePath), 
Charset.defaultCharset());
+        }
+        catch(IOException e)
+        {
+            return;
+        }
+        collectAdditionalHTML(fileLines, filePath);
+    }
+
+    private void collectAdditionalHTML(List<String> lines, String filePath)
+    {
+        boolean inDocComment = false;
+        boolean inConstructor = false;
+        boolean inInjectHTML = false;
+           for (int i = 0; i < lines.size(); i++)
+           {
+            String line = lines.get(i);
+            if (inDocComment)
+            {
+                if (inInjectHTML)
+                {
+                    if (line.indexOf("</inject_html>") > -1)
+                    {
+                        inInjectHTML = false;
+                        continue;
+                    }
+                    line = line.trim();
+                    if (line.startsWith("*"))
+                        line = line.substring(1);
+                    additionalHTML.add(line);
+                    continue;
+                }
+                int c = line.indexOf("<inject_html>");
+                if (c != -1)
+                {
+                    inInjectHTML = true;
+                    continue;
+                }
+                if (!inConstructor)
+                {
+                    c = line.indexOf("@constructor");
+                    if(c != -1)
+                    {
+                        inConstructor = true;
+                        continue;
+                    }
+                }
+                c = line.indexOf("*/");
+                if(c != -1)
+                {
+                    if(inConstructor)
+                    {
+                        //we're done
+                        break;
+                    }
+                    inInjectHTML = false;
+                    inDocComment = false;
+                    inConstructor = false;
+                }
+
+            }
+            else
+            {
+                int c = line.indexOf("/**");
+                if(c != -1)
+                {
+                    inDocComment = true;
+                    continue;
+                }
+            }
+        }
+    }
     
     private void sortClosureFile(List<String> deps, String entryPoint, 
List<String> sortedFiles)
     {
diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/GoogDepsWriter.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/GoogDepsWriter.java
index 66ef9a3..cf87fba 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/GoogDepsWriter.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/GoogDepsWriter.java
@@ -325,8 +325,6 @@ public class GoogDepsWriter {
                addDeps(mainName);
                return true;
        }
-       
-    public ArrayList<String> additionalHTML = new ArrayList<String>();
     
     private HashMap<String, GoogDep> visited = new HashMap<String, GoogDep>();
     
@@ -1091,7 +1089,6 @@ public class GoogDepsWriter {
            fi.suppressLine = -1;
            fi.fileoverviewLine = -1;
            fi.googProvideLine = -1;
-               boolean inInjectHTML = false;
            for (int i = 0; i < n; i++)
            {
                String line = lines.get(i);
@@ -1103,24 +1100,6 @@ public class GoogDepsWriter {
                }
                else
                {
-                       if (inInjectHTML)
-                   {
-                       if (line.indexOf("</inject_html>") > -1)
-                       {
-                           inInjectHTML = false;
-                           continue;
-                       }
-                       line = line.trim();
-                       if (line.startsWith("*"))
-                               line = line.substring(1);
-                                   additionalHTML.add(line);
-                                   continue;
-                   }
-                c = line.indexOf("<inject_html>");
-                if (c > -1)
-                {
-                    inInjectHTML = true;
-                }
                        c = line.indexOf("@constructor");
                        if (c > -1)
                        {

Reply via email to