Thanks for solving this issue Josh! I think this was an important one for
everyone trying to use external javascript with Royale and hopefully will
make others come to Royale finding less problems :))

El mar., 20 ago. 2019 a las 18:01, <[email protected]> escribió:

> 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 f653998  MXMLRoyalePublisher: collect inject_html from externs in
> SWCs
> f653998 is described below
>
> commit f6539980d9c9ccb3d60472b17d9d4986904dffd8
> Author: Josh Tynjala <[email protected]>
> AuthorDate: Tue Aug 20 09:01:03 2019 -0700
>
>     MXMLRoyalePublisher: collect inject_html from externs in SWCs
> ---
>  .../codegen/mxml/royale/MXMLRoyalePublisher.java   | 33
> ++++++++++++----------
>  .../internal/projects/RoyaleJSProject.java         | 12 +++++++-
>  2 files changed, 29 insertions(+), 16 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 a4f46ef..0159b25 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
> @@ -395,42 +395,45 @@ public class MXMLRoyalePublisher extends
> JSGoogPublisher implements IJSPublisher
>
>          // Iterate over all swc dependencies and add all the externs they
> contain.
>          // (Externs are located in a "externs" directory in the root of
> the SWC)
> +        Set<ISWC> swcExterns = project.swcExterns;
>          List<ISWC> swcs = project.getLibraries();
>          List<ISWC> allswcs = new ArrayList<ISWC>();
>          allswcs.addAll(swcs);
>          allswcs.addAll(themeSWCs);
> -        if (compilerWrapper != null)
> +        for (ISWC swc : allswcs)
>          {
> -            for (ISWC swc : allswcs)
> +            Map<String, ISWCFileEntry> files = swc.getFiles();
> +            for (String key : files.keySet())
>              {
> -                Map<String, ISWCFileEntry> files = swc.getFiles();
> -                for (String key : files.keySet())
> +                if (key.startsWith(ROYALE_EXTERNS))
>                  {
> -                    if (key.startsWith(ROYALE_EXTERNS))
> +                    ISWCFileEntry fileEntry = swc.getFile(key);
> +                    if (fileEntry != null)
>                      {
> -                        ISWCFileEntry fileEntry = swc.getFile(key);
> -                        if (fileEntry != null)
> +                        InputStream is = fileEntry.createInputStream();
> +                        String code = IOUtils.toString(is, "UTF-8");
> +                        is.close();
> +
> +                        if (compilerWrapper != null)
>                          {
> -                            InputStream is =
> fileEntry.createInputStream();
> -                            String code = IOUtils.toString(is, "UTF-8");
> -                            is.close();
>                              JarSourceFile externFile = new
> JarSourceFile(key, code,true);
>                              if (googConfiguration.isVerbose())
>                              {
>                                  System.out.println("using extern: " +
> key);
>                              }
>                              compilerWrapper.addJSExternsFile(externFile);
> +                        }
>
> -                            // Write the extern into the filesystem.
> -                            // FIXME: I don't know why we need to do this.
> -                            //FileUtils.write(new File(intermediateDir,
> key), externFile.getCode());
> +                        if (swcExterns.contains(swc))
> +                        {
> +                            List<String> lines = IOUtils.readLines(new
> StringReader(code));
> +                            collectAdditionalHTML(lines,
> swc.getSWCFile().getAbsolutePath() + ":" + key);
>                          }
>                      }
>                  }
>              }
>          }
>
> -
>
>  
> /////////////////////////////////////////////////////////////////////////////////
>          // Add all files generated by the compiler to the compilation
> unit.
>
>  
> /////////////////////////////////////////////////////////////////////////////////
> @@ -655,7 +658,7 @@ public class MXMLRoyalePublisher extends
> JSGoogPublisher implements IJSPublisher
>          collectAdditionalHTML(fileLines, filePath);
>      }
>
> -    private void collectAdditionalHTML(List<String> lines, String
> filePath)
> +    private void collectAdditionalHTML(List<String> lines, String key)
>      {
>          boolean inDocComment = false;
>          boolean inConstructor = false;
> diff --git
> a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleJSProject.java
> b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleJSProject.java
> index 231a4c0..da8cef4 100644
> ---
> a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleJSProject.java
> +++
> b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleJSProject.java
> @@ -133,7 +133,14 @@ public class RoyaleJSProject extends RoyaleProject
>                         }
>                 }
>          }
> -        // IDefinition def = to.getDefinitionPromises().get(0);
> +        if (to.getCompilationUnitType() == UnitType.SWC_UNIT)
> +        {
> +            if (!isGoogProvided(def.getQualifiedName()))
> +            {
> +                SWCCompilationUnit swcUnit = (SWCCompilationUnit) to;
> +                swcExterns.add(swcUnit.getSWC());
> +            }
> +        }
>          boolean isInterface = (actualDef instanceof InterfaceDefinition)
> && (dt == DependencyType.INHERITANCE);
>          if (!isInterface)
>          {
> @@ -258,6 +265,9 @@ public class RoyaleJSProject extends RoyaleProject
>
>      // definitions that had @externs in the source
>      public ArrayList<String> sourceExterns = new ArrayList<String>();
> +
> +    // swcs that contain referenced externs
> +    public Set<ISWC> swcExterns = new HashSet<ISWC>();
>
>      // definitions that should be considered external linkage
>      public Collection<String> unitTestExterns;
>
>

-- 
Carlos Rovira
http://about.me/carlosrovira

Reply via email to