I couldn't easily see how this avoids opening and scanning each file twice.  
That's sort of why the inject_html was in GoogDepsWriter.  It had to visit 
every file already.

HTH,
-Alex

On 8/19/19, 12:14 PM, "joshtynj...@apache.org" <joshtynj...@apache.org> wrote:

    This is an automated email from the ASF dual-hosted git repository.
    
    joshtynjala pushed a commit to branch develop
    in repository 
https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitbox.apache.org%2Frepos%2Fasf%2Froyale-compiler.git&amp;data=02%7C01%7Caharui%40adobe.com%7C29436cd97fa94973ad2408d724d96a23%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%7C637018388518086696&amp;sdata=eF75V3CAG%2FMVURuYsUe1Wjqwf555o8j5ymln%2F8SQJGs%3D&amp;reserved=0
    
    
    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 <joshtynj...@apache.org>
    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