allow use of @externs to generate typedefs from ActionScript
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/2531a9c4 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/2531a9c4 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/2531a9c4 Branch: refs/heads/master Commit: 2531a9c4c0fb8286c27dfd755c70d8271727cc58 Parents: eb2da04 Author: Alex Harui <[email protected]> Authored: Thu Jan 19 09:27:54 2017 -0800 Committer: Alex Harui <[email protected]> Committed: Thu Jan 19 09:28:16 2017 -0800 ---------------------------------------------------------------------- .../org/apache/flex/compiler/clients/COMPJSC.java | 17 +++++++++++++---- .../internal/codegen/js/JSSessionModel.java | 2 ++ .../compiler/internal/codegen/js/JSWriter.java | 9 +++++++++ .../codegen/js/flexjs/JSFlexJSEmitterTokens.java | 1 + .../codegen/js/jx/PackageFooterEmitter.java | 3 +++ .../codegen/js/jx/PackageHeaderEmitter.java | 15 +++++++++++++++ 6 files changed, 43 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2531a9c4/compiler-jx/src/main/java/org/apache/flex/compiler/clients/COMPJSC.java ---------------------------------------------------------------------- diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/COMPJSC.java b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/COMPJSC.java index 0d97e06..b208351 100644 --- a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/COMPJSC.java +++ b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/COMPJSC.java @@ -20,6 +20,7 @@ package org.apache.flex.compiler.clients; import java.io.BufferedOutputStream; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; @@ -43,6 +44,7 @@ import org.apache.flex.compiler.driver.js.IJSApplication; import org.apache.flex.compiler.exceptions.ConfigurationException; import org.apache.flex.compiler.exceptions.ConfigurationException.IOError; import org.apache.flex.compiler.exceptions.ConfigurationException.MustSpecifyTarget; +import org.apache.flex.compiler.internal.codegen.js.JSWriter; import org.apache.flex.compiler.internal.driver.as.ASBackend; import org.apache.flex.compiler.internal.driver.js.amd.AMDBackend; import org.apache.flex.compiler.internal.driver.js.goog.GoogBackend; @@ -201,6 +203,7 @@ public class COMPJSC extends MXMLJSC String outputFolderName = getOutputFilePath(); File swcFile = new File(outputFolderName); File jsOut = new File("js/out"); + File externsOut = new File("externs"); ZipFile zipFile = null; ZipOutputStream zipOutputStream = null; String catalog = null; @@ -308,9 +311,7 @@ public class COMPJSC extends MXMLJSC } else { - String outputClassFile = getOutputClassFile( - cu.getQualifiedNames().get(0), jsOut).getPath(); - System.out.println("Compiling file: " + outputClassFile); + System.out.println("Compiling file: " + cu.getQualifiedNames().get(0)); ICompilationUnit unit = cu; @@ -328,8 +329,16 @@ public class COMPJSC extends MXMLJSC unit, false); } problems.addAll(errors); + ByteArrayOutputStream temp = new ByteArrayOutputStream(); + writer.writeTo(temp); + boolean isExterns = false; + if (writer instanceof JSWriter) + isExterns = ((JSWriter)writer).isExterns(); + String outputClassFile = getOutputClassFile( + cu.getQualifiedNames().get(0), isExterns ? externsOut : jsOut).getPath(); + System.out.println("Writing file: " + outputClassFile); zipOutputStream.putNextEntry(new ZipEntry(outputClassFile)); - writer.writeTo(zipOutputStream); + temp.writeTo(zipOutputStream); zipOutputStream.flush(); zipOutputStream.closeEntry(); writer.close(); http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2531a9c4/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java ---------------------------------------------------------------------- diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java index 3964802..36d6881 100644 --- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java +++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java @@ -77,6 +77,8 @@ public class JSSessionModel } private Stack<Context> stack = new Stack<Context>(); + public boolean isExterns = false; + public boolean inE4xFilter = false; private LinkedHashMap<String, PropertyNodes> propertyMap = new LinkedHashMap<String, PropertyNodes>(); http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2531a9c4/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSWriter.java ---------------------------------------------------------------------- diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSWriter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSWriter.java index 44c5f94..0eb6c9b 100644 --- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSWriter.java +++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSWriter.java @@ -49,6 +49,13 @@ public class JSWriter implements IJSWriter @SuppressWarnings("unused") private boolean enableDebug; + private boolean isExterns = false; + + public boolean isExterns() + { + return this.isExterns; + } + /** * Create a JSApplication writer. * @@ -91,6 +98,8 @@ public class JSWriter implements IJSWriter walker.visitCompilationUnit(compilationUnit); + isExterns = emitter.getModel().isExterns; + try { jsOut.write(emitter.postProcess(writer.toString()).getBytes()); http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2531a9c4/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java ---------------------------------------------------------------------- diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java index cff0a58..0a1d2d4 100644 --- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java +++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java @@ -41,6 +41,7 @@ public enum JSFlexJSEmitterTokens implements IEmitterTokens QNAME("qName"), UNDERSCORE("_"), EMIT_COERCION("@flexjsemitcoercion"), + EXTERNS("@externs"), IGNORE_COERCION("@flexjsignorecoercion"), IGNORE_IMPORT("@flexjsignoreimport"), IGNORE_STRING_COERCION("@flexjsnoimplicitstringconversion"), http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2531a9c4/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java ---------------------------------------------------------------------- diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java index 57393e9..d2f53c5 100644 --- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java +++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java @@ -175,6 +175,8 @@ public class PackageFooterEmitter extends JSSubEmitter implements // Removed this exclusion to support interface reflection (GD) // if (!(tnode instanceof IInterfaceNode)) // { + if (!getEmitter().getModel().isExterns) + { writeNewline(); writeNewline(); writeNewline(); @@ -191,6 +193,7 @@ public class PackageFooterEmitter extends JSSubEmitter implements write(getEmitter().formatQualifiedName(tnode.getQualifiedName())); write(ASEmitterTokens.PAREN_CLOSE); write(ASEmitterTokens.SEMICOLON); + } // } collectReflectionData(tnode); http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2531a9c4/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java ---------------------------------------------------------------------- diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java index 805a6ee..73d3b80 100644 --- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java +++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java @@ -67,9 +67,22 @@ public class PackageHeaderEmitter extends JSSubEmitter implements ITypeDefinition type = EmitterUtils.findType(containedScope .getAllLocalDefinitions()); String qname = null; + boolean isExterns = false; if (type != null) { qname = type.getQualifiedName(); + ITypeNode typeNode = type.getNode(); + if (typeNode instanceof ClassNode) + { + ClassNode classNode = (ClassNode) typeNode; + ASDocComment asDoc = (ASDocComment) classNode.getASDocComment(); + if (asDoc != null) + { + String asDocString = asDoc.commentNoEnd(); + isExterns = asDocString.contains(JSFlexJSEmitterTokens.EXTERNS.getToken()); + getEmitter().getModel().isExterns = isExterns; + } + } } if (qname == null) { @@ -119,6 +132,8 @@ public class PackageHeaderEmitter extends JSSubEmitter implements writeNewline(" * " + qname); writeNewline(" *"); writeNewline(" * @fileoverview"); + if (isExterns) + writeNewline(" * @externs"); writeNewline(" *"); // need to suppress access controls so access to protected/private from defineProperties // doesn't generate warnings.
