You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by pi...@apache.org on 2017/08/13 22:03:46 UTC

[08/13] git commit: [flex-falcon] [refs/heads/feature/amf] - upgrade to Google Closure Compiler 20170626. They deprecated a lot of APIs so lots of changes were required. The primary change is that GCC is being more careful about checking that types mat

upgrade to Google Closure Compiler 20170626.  They deprecated a lot of APIs so lots of changes were required.  The primary change is that GCC is being more careful about checking that types match in the superclasses, so that required adding @type to the accessors


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/6331b80d
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/6331b80d
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/6331b80d

Branch: refs/heads/feature/amf
Commit: 6331b80de71706429d3a73d3d103537efdd0943e
Parents: 8d7e147
Author: Alex Harui <ah...@apache.org>
Authored: Thu Aug 10 22:48:16 2017 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Thu Aug 10 22:48:16 2017 -0700

----------------------------------------------------------------------
 .../externals/pass/AbstractCompilerPass.java    |  2 +-
 .../codegen/externals/pass/AddMemberPass.java   |  2 +-
 .../externals/pass/CollectTypesPass.java        |  2 +-
 .../externals/pass/NamespaceResolutionPass.java |  2 +-
 .../externals/pass/ReferenceCompiler.java       |  5 ++-
 .../internal/codegen/js/JSSessionModel.java     |  2 +
 .../codegen/js/goog/JSGoogDocEmitter.java       |  7 +++-
 .../internal/codegen/js/goog/JarSourceFile.java |  5 ---
 .../internal/codegen/js/jx/AccessorEmitter.java | 44 ++++++++++++++------
 compiler-jx/src/main/resources/downloads.xml    |  4 +-
 .../codegen/externals/TestExternChrome.java     |  2 +-
 .../js/flexjs/TestFlexJSAccessorMembers.java    | 24 +++++------
 .../codegen/js/flexjs/TestFlexJSAccessors.java  | 14 +++----
 .../codegen/js/flexjs/TestFlexJSClass.java      | 14 +++----
 .../js/flexjs/TestFlexJSExpressions.java        |  2 +-
 .../codegen/js/flexjs/TestFlexJSPackage.java    |  4 +-
 .../flexjs/files/MyInitialView_result.js        | 16 +++++--
 .../flexjs/files/models/MyModel_result.js       | 12 ++++--
 .../flexjs/projects/super/Base_result.js        |  4 +-
 .../flexjs/projects/super/Super_result.js       |  4 +-
 20 files changed, 105 insertions(+), 66 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/AbstractCompilerPass.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/AbstractCompilerPass.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/AbstractCompilerPass.java
index 9903fc2..0bf5966 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/AbstractCompilerPass.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/AbstractCompilerPass.java
@@ -52,7 +52,7 @@ public abstract class AbstractCompilerPass implements CompilerPass, Callback
     public void process(Node externs, Node root)
     {
         //NodeTraversal.traverse(compiler, root, this);
-        NodeTraversal.traverseRoots(compiler, this, externs, root);
+        NodeTraversal.traverseRootsEs6(compiler, this, externs, root);
     }
 
     protected void log(Node n)

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/AddMemberPass.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/AddMemberPass.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/AddMemberPass.java
index 732b9e9..64fc9a9 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/AddMemberPass.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/AddMemberPass.java
@@ -38,7 +38,7 @@ public class AddMemberPass extends AbstractCompilerPass
     public boolean shouldTraverse(NodeTraversal nodeTraversal, Node n,
             Node parent)
     {
-        return n.isBlock() || n.isScript();
+        return n.isRoot() || n.isNormalBlock() || n.isScript();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/CollectTypesPass.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/CollectTypesPass.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/CollectTypesPass.java
index 44a9cc4..81e2ae2 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/CollectTypesPass.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/CollectTypesPass.java
@@ -37,7 +37,7 @@ public class CollectTypesPass extends AbstractCompilerPass
     public boolean shouldTraverse(NodeTraversal nodeTraversal, Node n,
             Node parent)
     {
-        return n.isBlock() || n.isScript();
+        return n.isRoot() || n.isNormalBlock() || n.isScript();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/NamespaceResolutionPass.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/NamespaceResolutionPass.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/NamespaceResolutionPass.java
index 6270227..8a8ec24 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/NamespaceResolutionPass.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/NamespaceResolutionPass.java
@@ -42,7 +42,7 @@ public class NamespaceResolutionPass extends AbstractCompilerPass
     public boolean shouldTraverse(NodeTraversal nodeTraversal, Node n,
             Node parent)
     {
-        return n.isBlock() || n.isScript();
+        return n.isRoot() || n.isNormalBlock() || n.isScript();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/ReferenceCompiler.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/ReferenceCompiler.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/ReferenceCompiler.java
index e941944..b2b6bdc 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/ReferenceCompiler.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/pass/ReferenceCompiler.java
@@ -32,6 +32,7 @@ import org.apache.flex.compiler.internal.codegen.externals.reference.ReferenceMo
 import com.google.javascript.jscomp.*;
 import com.google.javascript.jscomp.Compiler;
 import com.google.javascript.jscomp.CompilerOptions.LanguageMode;
+import com.google.javascript.jscomp.parsing.Config;
 
 public class ReferenceCompiler
 {
@@ -67,10 +68,10 @@ public class ReferenceCompiler
         options.setLineLengthThreshold(80);
         options.setPreferSingleQuotes(true);
         options.setIdeMode(true);
-        options.setParseJsDocDocumentation(true);
+        options.setParseJsDocDocumentation(Config.JsDocParsing.INCLUDE_DESCRIPTIONS_NO_WHITESPACE);
         options.setExternExports(false);
         options.setExtraAnnotationNames(Arrays.asList(asdocTags));
-        options.setLanguageIn(LanguageMode.ECMASCRIPT6_STRICT);
+        options.setLanguageIn(LanguageMode.ECMASCRIPT_2015);
         options.setLanguageIn(LanguageMode.ECMASCRIPT5_STRICT);
 
         options.addCustomPass(CustomPassExecutionTime.BEFORE_OPTIMIZATIONS, new NamespaceResolutionPass(model,

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/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 3ace9e5..8ceb44d 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
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.Stack;
 
 import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.definitions.ITypeDefinition;
 import org.apache.flex.compiler.tree.as.IFunctionNode;
 import org.apache.flex.compiler.tree.as.IGetterNode;
 import org.apache.flex.compiler.tree.as.ISetterNode;
@@ -47,6 +48,7 @@ public class JSSessionModel
     {
         public IGetterNode getter;
         public ISetterNode setter;
+        public ITypeDefinition type;
     }
 
     public static class BindableVarInfo

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
index cd57e7a..332bc17 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
@@ -469,6 +469,11 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
 
     protected String convertASTypeToJS(String name, String pname)
     {
+    	return convertASTypeToJSType(name, pname);
+    }
+    
+    public static String convertASTypeToJSType(String name, String pname)
+    {
         String result = "";
 
         if (name.equals(""))
@@ -488,7 +493,7 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
         {
         	// is a vector so convert the element type
         	String elementType = name.substring(8, name.length() - 1);
-        	elementType = convertASTypeToJS(elementType, pname);
+        	elementType = convertASTypeToJSType(elementType, pname);
         	name = "Vector.<" + elementType + ">";
         }
         IASGlobalFunctionConstants.BuiltinType[] builtinTypes = IASGlobalFunctionConstants.BuiltinType

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/goog/JarSourceFile.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/goog/JarSourceFile.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/goog/JarSourceFile.java
index 5155aa0..ee0a89b 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/goog/JarSourceFile.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/goog/JarSourceFile.java
@@ -54,11 +54,6 @@ public class JarSourceFile extends SourceFile {
     }
 
     @Override
-    public CharSource getCodeCharSource() {
-        return CharSource.wrap(code);
-    }
-
-    @Override
     public Reader getCodeReader() throws IOException {
         return new StringReader(code);
     }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
index c060381..19c16ae 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
@@ -31,6 +31,7 @@ import org.apache.flex.compiler.definitions.IAccessorDefinition;
 import org.apache.flex.compiler.definitions.IClassDefinition;
 import org.apache.flex.compiler.definitions.IFunctionDefinition;
 import org.apache.flex.compiler.definitions.INamespaceDefinition;
+import org.apache.flex.compiler.definitions.IParameterDefinition;
 import org.apache.flex.compiler.definitions.ITypeDefinition;
 import org.apache.flex.compiler.definitions.metadata.IMetaTag;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
@@ -40,7 +41,9 @@ import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
 import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSDocEmitter;
 import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
 import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogDocEmitter;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.projects.FlexJSProject;
 import org.apache.flex.compiler.internal.semantics.SemanticUtils;
 import org.apache.flex.compiler.internal.tree.as.FunctionNode;
 import org.apache.flex.compiler.internal.tree.as.SetterNode;
@@ -77,6 +80,10 @@ public class AccessorEmitter extends JSSubEmitter implements
     {
         // TODO (mschmalle) will remove this cast as more things get abstracted
         JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+        FlexJSProject project = (FlexJSProject)getWalker().getProject();
+        boolean emitExports = true;
+        if (project != null && project.config != null)
+        	emitExports = project.config.getExportPublicSymbols();
 
         if (!getModel().getPropertyMap().isEmpty())
         {
@@ -98,7 +105,6 @@ public class AccessorEmitter extends JSSubEmitter implements
                     if (fjs.isCustomNamespace((FunctionNode)getterNode))
                     {
             			INamespaceDecorationNode ns = ((FunctionNode)getterNode).getActualNamespaceNode();
-                        ICompilerProject project = getWalker().getProject();
             			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
             			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
             			String s = nsDef.getURI();
@@ -161,7 +167,6 @@ public class AccessorEmitter extends JSSubEmitter implements
                     if (fjs.isCustomNamespace((FunctionNode)setterNode))
                     {
             			INamespaceDecorationNode ns = ((FunctionNode)setterNode).getActualNamespaceNode();
-                        ICompilerProject project = getWalker().getProject();
             			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
             			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
             			String s = nsDef.getURI();
@@ -276,12 +281,17 @@ public class AccessorEmitter extends JSSubEmitter implements
                 PropertyNodes p = getModel().getPropertyMap().get(propName);
                 IGetterNode getterNode = p.getter;
                 ISetterNode setterNode = p.setter;
-                writeNewline("/** @export */");
+            	writeNewline("/**");
+                if (emitExports)
+                	writeNewline("  * @export");
+                if (p.type != null)
+                	writeNewline("  * @type {"+JSGoogDocEmitter.convertASTypeToJSType(p.type.getBaseName(), p.type.getPackageName()) + "} */");
+                else
+                	writeNewline("  */");
                 FunctionNode fnNode = getterNode != null ? (FunctionNode) getterNode : (FunctionNode) setterNode;
                 if (fjs.isCustomNamespace(fnNode))
                 {
         			INamespaceDecorationNode ns = fnNode.getActualNamespaceNode();
-                    ICompilerProject project = getWalker().getProject();
         			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
         			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
         			String s = nsDef.getURI();
@@ -304,7 +314,6 @@ public class AccessorEmitter extends JSSubEmitter implements
                     if (fjs.isCustomNamespace((FunctionNode)getterNode))
                     {
             			INamespaceDecorationNode ns = ((FunctionNode)getterNode).getActualNamespaceNode();
-                        ICompilerProject project = getWalker().getProject();
             			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
             			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
             			String s = nsDef.getURI();
@@ -338,7 +347,6 @@ public class AccessorEmitter extends JSSubEmitter implements
                         if (fjs.isCustomNamespace((FunctionNode)setterNode))
                         {
                 			INamespaceDecorationNode ns = ((FunctionNode)setterNode).getActualNamespaceNode();
-                            ICompilerProject project = getWalker().getProject();
                 			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
                 			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
                 			String s = nsDef.getURI();
@@ -367,7 +375,6 @@ public class AccessorEmitter extends JSSubEmitter implements
                     if (fjs.isCustomNamespace((FunctionNode)setterNode))
                     {
             			INamespaceDecorationNode ns = ((FunctionNode)setterNode).getActualNamespaceNode();
-                        ICompilerProject project = getWalker().getProject();
             			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
             			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
             			String s = nsDef.getURI();
@@ -402,7 +409,6 @@ public class AccessorEmitter extends JSSubEmitter implements
                         if (fjs.isCustomNamespace((FunctionNode)getterNode))
                         {
                 			INamespaceDecorationNode ns = ((FunctionNode)getterNode).getActualNamespaceNode();
-                            ICompilerProject project = getWalker().getProject();
                 			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
                 			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
                 			String s = nsDef.getURI();
@@ -440,7 +446,6 @@ public class AccessorEmitter extends JSSubEmitter implements
                     if (fjs.isCustomNamespace((FunctionNode)getterNode))
                     {
             			INamespaceDecorationNode ns = ((FunctionNode)getterNode).getActualNamespaceNode();
-                        ICompilerProject project = getWalker().getProject();
             			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
             			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
             			String s = nsDef.getURI();
@@ -471,7 +476,6 @@ public class AccessorEmitter extends JSSubEmitter implements
                     if (fjs.isCustomNamespace((FunctionNode)setterNode))
                     {
             			INamespaceDecorationNode ns = ((FunctionNode)setterNode).getActualNamespaceNode();
-                        ICompilerProject project = getWalker().getProject();
             			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
             			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
             			String s = nsDef.getURI();
@@ -526,7 +530,13 @@ public class AccessorEmitter extends JSSubEmitter implements
                         propName);
                 IGetterNode getterNode = p.getter;
                 ISetterNode setterNode = p.setter;
-                writeNewline("/** @export */");
+            	writeNewline("/**");
+                if (emitExports)
+                	writeNewline("  * @export");
+                if (p.type != null)
+                	writeNewline("  * @type {"+JSGoogDocEmitter.convertASTypeToJSType(p.type.getBaseName(), p.type.getPackageName()) + "} */");
+                else
+                	writeNewline("  */");
                 write(propName);
                 write(ASEmitterTokens.COLON);
                 write(ASEmitterTokens.SPACE);
@@ -541,7 +551,6 @@ public class AccessorEmitter extends JSSubEmitter implements
                     if (fjs.isCustomNamespace((FunctionNode)getterNode))
                     {
             			INamespaceDecorationNode ns = ((FunctionNode)getterNode).getActualNamespaceNode();
-                        ICompilerProject project = getWalker().getProject();
             			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
             			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
             			String s = nsDef.getURI();
@@ -566,7 +575,6 @@ public class AccessorEmitter extends JSSubEmitter implements
                     if (fjs.isCustomNamespace((FunctionNode)setterNode))
                     {
             			INamespaceDecorationNode ns = ((FunctionNode)setterNode).getActualNamespaceNode();
-                        ICompilerProject project = getWalker().getProject();
             			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
             			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
             			String s = nsDef.getURI();
@@ -605,6 +613,9 @@ public class AccessorEmitter extends JSSubEmitter implements
             map.put(name, p);
         }
         p.getter = node;
+        ICompilerProject project = (ICompilerProject)getWalker().getProject();
+        if (project != null)
+        	p.type = node.getDefinition().resolveReturnType(project);
         FunctionNode fn = (FunctionNode) node;
         fn.parseFunctionBody(fjs.getProblems());
     }
@@ -628,6 +639,13 @@ public class AccessorEmitter extends JSSubEmitter implements
             map.put(name, p);
         }
         p.setter = node;
+        ICompilerProject project = (ICompilerProject)getWalker().getProject();
+        if (project != null)
+        {
+        	IFunctionDefinition def = node.getDefinition();
+        	IParameterDefinition[] params = def.getParameters();
+        	p.type = params[0].resolveType(project);
+        }
         FunctionNode fn = (FunctionNode) node;
         fn.parseFunctionBody(fjs.getProblems());
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/main/resources/downloads.xml
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/resources/downloads.xml b/compiler-jx/src/main/resources/downloads.xml
index 9885ede..5e78c35 100644
--- a/compiler-jx/src/main/resources/downloads.xml
+++ b/compiler-jx/src/main/resources/downloads.xml
@@ -80,7 +80,7 @@
     </antcall>
 
     <!--  closure -->
-    <property name="closure.version" value="20161201"/>
+    <property name="closure.version" value="20170626"/>
     <property name="closure.name" value="closure-compiler-v${closure.version}"/>
     <property name="closure.dest.name" value="compiler"/>
     <property name="closure.dest.folder" value="google/closure-compiler"/>
@@ -90,7 +90,7 @@
       <param name="src.server" value="http://dl.google.com"/>
       <param name="src.folder" value="closure-compiler"/>
       <param name="src.filename" value="compiler-${closure.version}.zip"/>
-      <param name="src.checksum" value="bcd640e9c9f756df4117af2066621f89"/>
+      <param name="src.checksum" value="c565b5a1e12aefa5968b42ea83ea6c28"/>
     </antcall>
     
     <!--  commons-io -->

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/externals/TestExternChrome.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/externals/TestExternChrome.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/externals/TestExternChrome.java
index d2582bb..9aafd07 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/externals/TestExternChrome.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/externals/TestExternChrome.java
@@ -67,7 +67,7 @@ public class TestExternChrome extends ExternalsTestBase
                 "ChromeLoadTimes",
                 "ChromeCsiInfo" };
 
-        assertEquals(301, model.getClasses().size());
+        assertEquals(322, model.getClasses().size());
         for (String className : classes)
         {
             assertTrue(model.hasClass(className));

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessorMembers.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessorMembers.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessorMembers.java
index 4070eb8..3950cc3 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessorMembers.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessorMembers.java
@@ -39,7 +39,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
         asBlockWalker.visitClass(node);
         assertOut("/**\n * @constructor\n */\nFalconTest_A = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('FalconTest_A', FalconTest_A);\n\n\n" +
 				"FalconTest_A.prototype.get__foo = function() {\n};\n\n\n" +
-        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/** @export */\nfoo: {\nget: FalconTest_A.prototype.get__foo}}\n);");
+        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/**\n  * @export\n  * @type {number} */\nfoo: {\nget: FalconTest_A.prototype.get__foo}}\n);");
     }
 
     @Override
@@ -51,7 +51,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
         asBlockWalker.visitClass(node);
         assertOut("/**\n * @constructor\n */\nFalconTest_A = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('FalconTest_A', FalconTest_A);\n\n\n" +
 				"FalconTest_A.prototype.get__foo = function() {\n  return -1;\n};\n\n\n" +
-        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/** @export */\nfoo: {\nget: FalconTest_A.prototype.get__foo}}\n);");
+        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/**\n  * @export\n  * @type {number} */\nfoo: {\nget: FalconTest_A.prototype.get__foo}}\n);");
     }
 
     @Override
@@ -63,7 +63,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
         asBlockWalker.visitClass(node);
         assertOut("/**\n * @constructor\n */\nFalconTest_A = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('FalconTest_A', FalconTest_A);\n\n\n" +
 				"FalconTest_A.prototype.get__foo = function() {\n  return -1;\n};\n\n\n" +
-        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/** @export */\nfoo: {\nget: FalconTest_A.prototype.get__foo}}\n);");
+        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/**\n  * @export\n  * @type {number} */\nfoo: {\nget: FalconTest_A.prototype.get__foo}}\n);");
     }
 
     @Override
@@ -75,7 +75,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
         asBlockWalker.visitClass(node);
         assertOut("/**\n * @constructor\n * @extends {A}\n */\nB = function() {\n  B.base(this, 'constructor');\n};\ngoog.inherits(B, A);\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('B', B);\n\n\n" +
 				"B.prototype.get__foo = function() {\n  return B.superClass_.get__foo.apply(this);\n};\n\n\n" +
-        		"Object.defineProperties(B.prototype, /** @lends {B.prototype} */ {\n/** @export */\nfoo: {\nget: B.prototype.get__foo}}\n);");
+        		"Object.defineProperties(B.prototype, /** @lends {B.prototype} */ {\n/**\n  * @export\n  * @type {number} */\nfoo: {\nget: B.prototype.get__foo}}\n);");
     }
 
     @Test
@@ -86,7 +86,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
         asBlockWalker.visitClass(node);
         assertOut("/**\n * @constructor\n * @extends {A}\n */\nB = function() {\n  B.base(this, 'constructor');\n};\ngoog.inherits(B, A);\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('B', B);\n\n\n" +
 				"B.prototype.get__foo = function() {\n  return B.superClass_.get__foo.apply(this);\n};\n\n\n" +
-        		"Object.defineProperties(B.prototype, /** @lends {B.prototype} */ {\n/** @export */\nfoo: {\nget: B.prototype.get__foo,\nset: A.prototype.set__foo}}\n);");
+        		"Object.defineProperties(B.prototype, /** @lends {B.prototype} */ {\n/**\n  * @export\n  * @type {number} */\nfoo: {\nget: B.prototype.get__foo,\nset: A.prototype.set__foo}}\n);");
     }
     
     @Override
@@ -98,7 +98,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
         asBlockWalker.visitClass(node);
         assertOut("/**\n * @constructor\n */\nFalconTest_A = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('FalconTest_A', FalconTest_A);\n\n\n" +
 				"FalconTest_A.get__foo = function() {\n  return -1;\n};\n\n\n" +
-        		"Object.defineProperties(FalconTest_A, /** @lends {FalconTest_A} */ {\n/** @export */\nfoo: {\nget: FalconTest_A.get__foo}}\n);");
+        		"Object.defineProperties(FalconTest_A, /** @lends {FalconTest_A} */ {\n/**\n  * @export\n  * @type {number} */\nfoo: {\nget: FalconTest_A.get__foo}}\n);");
     }
 
     @Override
@@ -110,7 +110,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
         asBlockWalker.visitClass(node);
         assertOut("/**\n * @constructor\n */\nFalconTest_A = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('FalconTest_A', FalconTest_A);\n\n\n" +
 				"FalconTest_A.prototype.set__foo = function(value) {\n};\n\n\n" +
-        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/** @export */\nfoo: {\nset: FalconTest_A.prototype.set__foo}}\n);");
+        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/**\n  * @export\n  * @type {number} */\nfoo: {\nset: FalconTest_A.prototype.set__foo}}\n);");
     }
 
     @Override
@@ -122,7 +122,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
         asBlockWalker.visitClass(node);
         assertOut("/**\n * @constructor\n */\nFalconTest_A = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('FalconTest_A', FalconTest_A);\n\n\n" +
 				"FalconTest_A.prototype.set__foo = function(value) {\n  fetch('haai');\n};\n\n\n" +
-        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/** @export */\nfoo: {\nset: FalconTest_A.prototype.set__foo}}\n);");
+        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/**\n  * @export\n  * @type {number} */\nfoo: {\nset: FalconTest_A.prototype.set__foo}}\n);");
     }
 
     @Override
@@ -134,7 +134,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
         asBlockWalker.visitClass(node);
         assertOut("/**\n * @constructor\n */\nFalconTest_A = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('FalconTest_A', FalconTest_A);\n\n\n" +
 				"FalconTest_A.prototype.set__foo = function(value) {\n};\n\n\n" +
-        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/** @export */\nfoo: {\nset: FalconTest_A.prototype.set__foo}}\n);");
+        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/**\n  * @export\n  * @type {number} */\nfoo: {\nset: FalconTest_A.prototype.set__foo}}\n);");
     }
 
     @Override
@@ -146,7 +146,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
         asBlockWalker.visitClass(node);
         assertOut("/**\n * @constructor\n * @extends {A}\n */\nB = function() {\n  B.base(this, 'constructor');\n};\ngoog.inherits(B, A);\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('B', B);\n\n\n" +
 				"B.prototype.set__foo = function(value) {\n  B.superClass_.set__foo.apply(this, [ value] );\n};\n\n\n" +
-        		"Object.defineProperties(B.prototype, /** @lends {B.prototype} */ {\n/** @export */\nfoo: {\nset: B.prototype.set__foo}}\n);");
+        		"Object.defineProperties(B.prototype, /** @lends {B.prototype} */ {\n/**\n  * @export\n  * @type {number} */\nfoo: {\nset: B.prototype.set__foo}}\n);");
     }
 
     @Override
@@ -158,7 +158,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
         asBlockWalker.visitClass(node);
         assertOut("/**\n * @constructor\n */\nFalconTest_A = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('FalconTest_A', FalconTest_A);\n\n\n" +
 				"FalconTest_A.set__foo = function(value) {\n};\n\n\n" +
-        		"Object.defineProperties(FalconTest_A, /** @lends {FalconTest_A} */ {\n/** @export */\nfoo: {\nset: FalconTest_A.set__foo}}\n);");
+        		"Object.defineProperties(FalconTest_A, /** @lends {FalconTest_A} */ {\n/**\n  * @export\n  * @type {number} */\nfoo: {\nset: FalconTest_A.set__foo}}\n);");
     }
 
     @Test
@@ -169,7 +169,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
         asBlockWalker.visitClass(node);
         assertOut("/**\n * @constructor\n * @extends {A}\n */\nB = function() {\n  B.base(this, 'constructor');\n};\ngoog.inherits(B, A);\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('B', B);\n\n\n" +
 				"B.prototype.set__foo = function(value) {\n  B.superClass_.set__foo.apply(this, [ value] );\n};\n\n\n" +
-        		"Object.defineProperties(B.prototype, /** @lends {B.prototype} */ {\n/** @export */\nfoo: {\nget: A.prototype.get__foo,\nset: B.prototype.set__foo}}\n);");
+        		"Object.defineProperties(B.prototype, /** @lends {B.prototype} */ {\n/**\n  * @export\n  * @type {number} */\nfoo: {\nget: A.prototype.get__foo,\nset: B.prototype.set__foo}}\n);");
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
index 93a6e09..32d7f58 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
@@ -49,7 +49,7 @@ public class TestFlexJSAccessors extends ASTestBase
         String expected = "/**\n * @constructor\n */\nFalconTest_A = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('FalconTest_A', FalconTest_A);\n\n\n/**\n * @export\n */\nFalconTest_A.prototype.doStuff = function() {\n  this.label = 'hello, bye';\n  var /** @type {string} */ theLabel = this.label;\n};\n\n\n/**\n * @private\n * @type {string}\n */\nFalconTest_A.prototype._label;\n\n\n" +
         		"FalconTest_A.prototype.get__label = function() {\n  return this._label;\n};\n\n\n" +
         		"FalconTest_A.prototype.set__label = function(value) {\n  this._label = value;\n};\n\n\n" +
-        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/** @export */\n" +
+        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/**\n  * @export\n  * @type {string} */\n" +
         		"label: {\nget: FalconTest_A.prototype.get__label,\nset: FalconTest_A.prototype.set__label}}\n);";
         assertOut(expected);
     }
@@ -64,7 +64,7 @@ public class TestFlexJSAccessors extends ASTestBase
         String expected = "/**\n * @constructor\n */\nB = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('B', B);\n\n\n/**\n * @export\n */\nB.prototype.doStuff = function() {\n  this.label = this.label + 'bye';\n  var /** @type {string} */ theLabel = this.label;\n};\n\n\n/**\n * @private\n * @type {string}\n */\nB.prototype._label;\n\n\n" +
 				"B.prototype.get__label = function() {\n  return this._label;\n};\n\n\n" +
 				"B.prototype.set__label = function(value) {\n  this._label = value;\n};\n\n\n" +
-        		"Object.defineProperties(B.prototype, /** @lends {B.prototype} */ {\n/** @export */\nlabel: {\n" +
+        		"Object.defineProperties(B.prototype, /** @lends {B.prototype} */ {\n/**\n  * @export\n  * @type {string} */\nlabel: {\n" +
         		"get: B.prototype.get__label,\nset: B.prototype.set__label}}\n);"; 
         assertOut(expected);
     }
@@ -79,7 +79,7 @@ public class TestFlexJSAccessors extends ASTestBase
         String expected = "/**\n * @constructor\n */\nFalconTest_A = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('FalconTest_A', FalconTest_A);\n\n\n/**\n * @export\n */\nFalconTest_A.prototype.doStuff = function() {\n  this.label = this.label + 'bye';\n  var /** @type {string} */ theLabel = this.label;\n};\n\n\n/**\n * @private\n * @type {string}\n */\nFalconTest_A.prototype._label;\n\n\n" +
 				"FalconTest_A.prototype.get__label = function() {\n  return this._label;\n};\n\n\n" +
 				"FalconTest_A.prototype.set__label = function(value) {\n  this._label = value;\n};\n\n\n" +
-				"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/** @export */\nlabel: {\n" +
+				"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/**\n  * @export\n  * @type {string} */\nlabel: {\n" +
 				"get: FalconTest_A.prototype.get__label,\nset: FalconTest_A.prototype.set__label}}\n);"; 
         assertOut(expected);
     }
@@ -94,7 +94,7 @@ public class TestFlexJSAccessors extends ASTestBase
         String expected = "/**\n * @constructor\n */\nB = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('B', B);\n\n\n/**\n * @export\n */\nB.prototype.doStuff = function() {\n  this.label = this.label;\n  var /** @type {string} */ theLabel = this.label;\n};\n\n\n/**\n * @private\n * @type {string}\n */\nB.prototype._label;\n\n\n" +
 				"B.prototype.get__label = function() {\n  return this._label;\n};\n\n\n" +
 				"B.prototype.set__label = function(value) {\n  this._label = value;\n};\n\n\n" +
-				"Object.defineProperties(B.prototype, /** @lends {B.prototype} */ {\n/** @export */\nlabel: {\n" +
+				"Object.defineProperties(B.prototype, /** @lends {B.prototype} */ {\n/**\n  * @export\n  * @type {string} */\nlabel: {\n" +
 				"get: B.prototype.get__label,\nset: B.prototype.set__label}}\n);"; 
         assertOut(expected);
     }
@@ -109,7 +109,7 @@ public class TestFlexJSAccessors extends ASTestBase
         String expected = "/**\n * @constructor\n */\nB = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('B', B);\n\n\n/**\n * @export\n */\nB.prototype.doStuff = function() {\n  var /** @type {string} */ theLabel = this[\"http://www.adobe.com/2006/actionscript/flash/proxy::label\"];\n  this[\"http://www.adobe.com/2006/actionscript/flash/proxy::label\"] = theLabel;\n};\n\n\n/**\n * @private\n * @type {string}\n */\nB.prototype._label;\n\n\n" +
 				"B.prototype[\"http://www.adobe.com/2006/actionscript/flash/proxy::get__label\"] = function() {\n  return this._label;\n};\n\n\n" +
 				"B.prototype[\"http://www.adobe.com/2006/actionscript/flash/proxy::set__label\"] = function(value) {\n  this._label = value;\n};\n\n\n" +
-        		"Object.defineProperties(B.prototype, /** @lends {B.prototype} */ {\n/** @export */\n\"http://www.adobe.com/2006/actionscript/flash/proxy::label\": {\nget: B.prototype[\"http://www.adobe.com/2006/actionscript/flash/proxy::get__label\"],\nset: B.prototype[\"http://www.adobe.com/2006/actionscript/flash/proxy::set__label\"]}}\n);";
+        		"Object.defineProperties(B.prototype, /** @lends {B.prototype} */ {\n/**\n  * @export\n  * @type {string} */\n\"http://www.adobe.com/2006/actionscript/flash/proxy::label\": {\nget: B.prototype[\"http://www.adobe.com/2006/actionscript/flash/proxy::get__label\"],\nset: B.prototype[\"http://www.adobe.com/2006/actionscript/flash/proxy::set__label\"]}}\n);";
         assertOut(expected);
     }
 
@@ -126,7 +126,7 @@ public class TestFlexJSAccessors extends ASTestBase
         		"FalconTest_A.prototype.set__label = function(value) {\nvar oldValue = this.get__label();\nif (oldValue != value) {\nthis.bindable__set__label(value);\n" +
         		"    this.dispatchEvent(org.apache.flex.events.ValueChangeEvent.createUpdateEvent(\n" +
         		"         this, \"label\", oldValue, value));\n}\n};\n\n\n" +
-        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/** @export */\n" +
+        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/**\n  * @export\n  * @type {string} */\n" +
         		"label: {\nget: FalconTest_A.prototype.get__label,\nset: FalconTest_A.prototype.set__label}}\n);";
         assertOut(expected);
     }
@@ -141,7 +141,7 @@ public class TestFlexJSAccessors extends ASTestBase
         String expected = "/**\n * @constructor\n */\nFalconTest_A = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('FalconTest_A', FalconTest_A);\n\n\n/**\n * @export\n */\nFalconTest_A.prototype.doStuff = function() {\n  this.label = 'hello, bye';\n  var /** @type {string} */ theLabel = this.label;\n};\n\n\n/**\n * @private\n * @type {string}\n */\nFalconTest_A.prototype._label;\n\n\n" +
 				"FalconTest_A.prototype.get__label = function() {\n  return this._label;\n};\n\n\n" +
 				"FalconTest_A.prototype.set__label = function(value) {\n  this._label = value;\n};\n\n\n" +
-        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/** @export */\n" +
+        		"Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n/**\n  * @export\n  * @type {string} */\n" +
         		"label: {\nget: FalconTest_A.prototype.get__label,\nset: FalconTest_A.prototype.set__label}}\n);";
         assertOut(expected);
     }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
index fbb1c41..83d727f 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
@@ -180,7 +180,7 @@ public class TestFlexJSClass extends TestGoogClass
     {
         IClassNode node = getClassNode("public class B {public function B() {}; public function set baz(value:Object):void {}; public function set foo(value:Object):void {baz = value;};}");
         asBlockWalker.visitClass(node);
-        String expected = "/**\n * @constructor\n */\norg.apache.flex.B = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('org.apache.flex.B', org.apache.flex.B);\n\n\norg.apache.flex.B.prototype.set__baz = function(value) {\n};\n\n\norg.apache.flex.B.prototype.set__foo = function(value) {\n  this.baz = value;\n};\n\n\nObject.defineProperties(org.apache.flex.B.prototype, /** @lends {org.apache.flex.B.prototype} */ {\n/** @export */\nbaz: {\nset: org.apache.flex.B.prototype.set__baz},\n/** @export */\nfoo: {\nset: org.apache.flex.B.prototype.set__foo}}\n);";
+        String expected = "/**\n * @constructor\n */\norg.apache.flex.B = function() {\n};\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('org.apache.flex.B', org.apache.flex.B);\n\n\norg.apache.flex.B.prototype.set__baz = function(value) {\n};\n\n\norg.apache.flex.B.prototype.set__foo = function(value) {\n  this.baz = value;\n};\n\n\nObject.defineProperties(org.apache.flex.B.prototype, /** @lends {org.apache.flex.B.prototype} */ {\n/**\n  * @export\n  * @type {Object} */\nbaz: {\nset: org.apache.flex.B.prototype.set__baz},\n/**\n  * @export\n  * @type {Object} */\nfoo: {\nset: org.apache.flex.B.prototype.set__foo}}\n);";
         assertOut(expected);
     }
 
@@ -189,7 +189,7 @@ public class TestFlexJSClass extends TestGoogClass
     {
         IClassNode node = getClassNode("public class B extends A {public function B() {}; override public function set foo(value:Object):void {super.foo = value;};} class A {public function set foo(value:Object):void {}}");
         asBlockWalker.visitClass(node);
-        String expected = "/**\n * @constructor\n * @extends {org.apache.flex.A}\n */\norg.apache.flex.B = function() {\n  org.apache.flex.B.base(this, 'constructor');\n};\ngoog.inherits(org.apache.flex.B, org.apache.flex.A);\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('org.apache.flex.B', org.apache.flex.B);\n\n\norg.apache.flex.B.prototype.set__foo = function(value) {\n  org.apache.flex.B.superClass_.set__foo.apply(this, [ value] );\n};\n\n\nObject.defineProperties(org.apache.flex.B.prototype, /** @lends {org.apache.flex.B.prototype} */ {\n/** @export */\nfoo: {\nset: org.apache.flex.B.prototype.set__foo}}\n);";
+        String expected = "/**\n * @constructor\n * @extends {org.apache.flex.A}\n */\norg.apache.flex.B = function() {\n  org.apache.flex.B.base(this, 'constructor');\n};\ngoog.inherits(org.apache.flex.B, org.apache.flex.A);\n\n\n/**\n * Prevent renaming of class. Needed for reflection.\n */\ngoog.exportSymbol('org.apache.flex.B', org.apache.flex.B);\n\n\norg.apache.flex.B.prototype.set__foo = function(value) {\n  org.apache.flex.B.superClass_.set__foo.apply(this, [ value] );\n};\n\n\nObject.defineProperties(org.apache.flex.B.prototype, /** @lends {org.apache.flex.B.prototype} */ {\n/**\n  * @export\n  * @type {Object} */\nfoo: {\nset: org.apache.flex.B.prototype.set__foo}}\n);";
         assertOut(expected);
     }
 
@@ -511,11 +511,11 @@ public class TestFlexJSClass extends TestGoogClass
         		"org.apache.flex.A.prototype.set__foo5 = function(value) {\n};\n\n\n" +
         		"org.apache.flex.A.prototype[\"http://www.adobe.com/2006/actionscript/flash/proxy::get__foo6\"] = function() {\n  return null;\n};\n\n\n" +
         		"org.apache.flex.A.prototype[\"http://www.adobe.com/2006/actionscript/flash/proxy::set__foo6\"] = function(value) {\n};\n\n\n" +
-        		"Object.defineProperties(org.apache.flex.A.prototype, /** @lends {org.apache.flex.A.prototype} */ {\n/** @export */\n" +
-        		    "foo1: {\nget: org.apache.flex.A.prototype.get__foo1,\nset: org.apache.flex.A.prototype.set__foo1},\n/** @export */\n" +
-        		    "foo2: {\nget: org.apache.flex.A.prototype.get__foo2,\nset: org.apache.flex.A.prototype.set__foo2},\n/** @export */\n" +
-        		    "foo3: {\nget: org.apache.flex.A.prototype.get__foo3,\nset: org.apache.flex.A.prototype.set__foo3},\n/** @export */\n" +
-        		    "foo5: {\nget: org.apache.flex.A.prototype.get__foo5,\nset: org.apache.flex.A.prototype.set__foo5},\n/** @export */\n" +
+        		"Object.defineProperties(org.apache.flex.A.prototype, /** @lends {org.apache.flex.A.prototype} */ {\n/**\n  * @export\n  * @type {Object} */\n" +
+        		    "foo1: {\nget: org.apache.flex.A.prototype.get__foo1,\nset: org.apache.flex.A.prototype.set__foo1},\n/**\n  * @export\n  * @type {Object} */\n" +
+        		    "foo2: {\nget: org.apache.flex.A.prototype.get__foo2,\nset: org.apache.flex.A.prototype.set__foo2},\n/**\n  * @export\n  * @type {Object} */\n" +
+        		    "foo3: {\nget: org.apache.flex.A.prototype.get__foo3,\nset: org.apache.flex.A.prototype.set__foo3},\n/**\n  * @export\n  * @type {Object} */\n" +
+        		    "foo5: {\nget: org.apache.flex.A.prototype.get__foo5,\nset: org.apache.flex.A.prototype.set__foo5},\n/**\n  * @export\n  * @type {Object} */\n" +
         		    "\"http://www.adobe.com/2006/actionscript/flash/proxy::foo6\": {\nget: org.apache.flex.A.prototype[\"http://www.adobe.com/2006/actionscript/flash/proxy::get__foo6\"],\n" +
         		    																"set: org.apache.flex.A.prototype[\"http://www.adobe.com/2006/actionscript/flash/proxy::set__foo6\"]}}\n);");
     }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
index dc28b6b..8b93413 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
@@ -102,7 +102,7 @@ public class TestFlexJSExpressions extends TestGoogExpressions
         		  "  return FalconTest_A.superClass_.isDefaultPrevented.apply(this);\n" +
         		  "};\n\n\n" +
         		  "Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n" +
-        		  "/** @export */\n" +
+        		  "/**\n  * @export\n  * @type {boolean} */\n" +
         		  "defaultPrevented: {\nget: FalconTest_A.prototype.get__defaultPrevented}}\n);");
     }
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java
index 360b875..86022ff 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java
@@ -794,7 +794,7 @@ public class TestFlexJSPackage extends TestGoogPackage
         		  "\n" +
         		  "\n" +
         		  "Object.defineProperties(foo.bar.baz.A.prototype, /** @lends {foo.bar.baz.A.prototype} */ {\n" +
-                  "/** @export */\n" +
+                  "/**\n  * @export\n  * @type {string} */\n" +
                   "myString: {\n" +
                   "get: foo.bar.baz.A.prototype.get__myString,\n" +
                   "set: foo.bar.baz.A.prototype.set__myString}}\n" +
@@ -850,7 +850,7 @@ public class TestFlexJSPackage extends TestGoogPackage
         		  "\n" +
         		  "\n" +
         		  "Object.defineProperties(foo.bar.baz.A.InternalClass.prototype, /** @lends {foo.bar.baz.A.InternalClass.prototype} */ {\n" +
-                  "/** @export */\n" +
+                  "/**\n  * @export\n  * @type {string} */\n" +
                   "someString: {\n" +
                   "get: foo.bar.baz.A.InternalClass.prototype.get__someString,\n" +
                   "set: foo.bar.baz.A.InternalClass.prototype.set__someString}}\n" +

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/test/resources/flexjs/files/MyInitialView_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/files/MyInitialView_result.js b/compiler-jx/src/test/resources/flexjs/files/MyInitialView_result.js
index 7fe3836..ae55d78 100644
--- a/compiler-jx/src/test/resources/flexjs/files/MyInitialView_result.js
+++ b/compiler-jx/src/test/resources/flexjs/files/MyInitialView_result.js
@@ -269,16 +269,24 @@ MyInitialView.prototype.get__comboBoxValue = function() {
 
 
 Object.defineProperties(MyInitialView.prototype, /** @lends {MyInitialView.prototype} */ {
-/** @export */
+/**
+  * @export
+  * @type {string} */
 symbol: {
 get: MyInitialView.prototype.get__symbol},
-/** @export */
+/**
+  * @export
+  * @type {string} */
 city: {
 get: MyInitialView.prototype.get__city},
-/** @export */
+/**
+  * @export
+  * @type {string} */
 inputText: {
 get: MyInitialView.prototype.get__inputText},
-/** @export */
+/**
+  * @export
+  * @type {string} */
 comboBoxValue: {
 get: MyInitialView.prototype.get__comboBoxValue}}
 );/**

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/test/resources/flexjs/files/models/MyModel_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/files/models/MyModel_result.js b/compiler-jx/src/test/resources/flexjs/files/models/MyModel_result.js
index ab547d7..041d254 100644
--- a/compiler-jx/src/test/resources/flexjs/files/models/MyModel_result.js
+++ b/compiler-jx/src/test/resources/flexjs/files/models/MyModel_result.js
@@ -90,14 +90,20 @@ models.MyModel.prototype.get__cities = function() {
 
 
 Object.defineProperties(models.MyModel.prototype, /** @lends {models.MyModel.prototype} */ {
-/** @export */
+/**
+  * @export
+  * @type {string} */
 labelText: {
 get: models.MyModel.prototype.get__labelText,
 set: models.MyModel.prototype.set__labelText},
-/** @export */
+/**
+  * @export
+  * @type {Array} */
 strings: {
 get: models.MyModel.prototype.get__strings},
-/** @export */
+/**
+  * @export
+  * @type {Array} */
 cities: {
 get: models.MyModel.prototype.get__cities}}
 );

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/test/resources/flexjs/projects/super/Base_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/super/Base_result.js b/compiler-jx/src/test/resources/flexjs/projects/super/Base_result.js
index 720e39c..3c712ac 100644
--- a/compiler-jx/src/test/resources/flexjs/projects/super/Base_result.js
+++ b/compiler-jx/src/test/resources/flexjs/projects/super/Base_result.js
@@ -54,7 +54,9 @@ Base.prototype.set__text = function(value) {
 
 
 Object.defineProperties(Base.prototype, /** @lends {Base.prototype} */ {
-/** @export */
+/**
+  * @export
+  * @type {string} */
 text: {
 get: Base.prototype.get__text,
 set: Base.prototype.set__text}}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6331b80d/compiler-jx/src/test/resources/flexjs/projects/super/Super_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/super/Super_result.js b/compiler-jx/src/test/resources/flexjs/projects/super/Super_result.js
index d77b6b2..53d1d2d 100644
--- a/compiler-jx/src/test/resources/flexjs/projects/super/Super_result.js
+++ b/compiler-jx/src/test/resources/flexjs/projects/super/Super_result.js
@@ -56,7 +56,9 @@ Super.prototype.set__text = function(value) {
 
 
 Object.defineProperties(Super.prototype, /** @lends {Super.prototype} */ {
-/** @export */
+/**
+  * @export
+  * @type {string} */
 text: {
 get: Super.prototype.get__text,
 set: Super.prototype.set__text}}