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 <joshtynj...@apache.org> 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;