flex-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From aha...@apache.org
Subject [2/2] git commit: [flex-falcon] [refs/heads/develop] - Most of DITA output per class file. Next up: consolidate into package files
Date Mon, 24 Oct 2016 06:43:27 GMT
Most of DITA output per class file.  Next up: consolidate into package files


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

Branch: refs/heads/develop
Commit: 9345ae4f954dfb6daf74eb8116bfbb1b605b3f05
Parents: 1c96ccd
Author: Alex Harui <aharui@apache.org>
Authored: Tue Oct 18 12:26:30 2016 -0700
Committer: Alex Harui <aharui@apache.org>
Committed: Sun Oct 23 23:42:59 2016 -0700

----------------------------------------------------------------------
 .../compiler/asdoc/flexjs/ASDocComment.java     |   32 +-
 .../apache/flex/compiler/clients/ASDOCJSC.java  |    5 +
 .../apache/flex/compiler/clients/MXMLJSC.java   |    1 +
 .../js/flexjs/JSFlexJSASDocDITAEmitter.java     | 1169 ++++++++++++++++++
 .../codegen/js/flexjs/JSFlexJSASDocEmitter.java |   42 +-
 .../mxml/flexjs/MXMLFlexJSASDocEmitter.java     |    3 +-
 .../mxml/flexjs/MXMLFlexJSASDocDITABackend.java |  136 ++
 7 files changed, 1381 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/9345ae4f/compiler-jx/src/main/java/org/apache/flex/compiler/asdoc/flexjs/ASDocComment.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/asdoc/flexjs/ASDocComment.java b/compiler-jx/src/main/java/org/apache/flex/compiler/asdoc/flexjs/ASDocComment.java
index b8e97d3..0f0a4dc 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/asdoc/flexjs/ASDocComment.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/asdoc/flexjs/ASDocComment.java
@@ -78,6 +78,11 @@ public class ASDocComment implements IASDocComment
     @Override
     public void compile()
     {
+    	compile(true);
+    }
+    
+    public void compile(boolean trimlines)
+    {
         String s = token.getText();
         String[] lines = s.split("\n");
         StringBuilder sb = new StringBuilder();
@@ -89,17 +94,26 @@ public class ASDocComment implements IASDocComment
         		lines[0] = lines[0].substring(0, c);
         }
         // clip off asdoc slash-star-star
-        sb.append(lines[0].substring(3).trim());
+        String line = lines[0].substring(3);
+        if (trimlines)
+        	sb.append(line.trim());
+        else
+        	sb.append(line + "\n");
         for (int i = 1; i < n - 1; i++)
         {
-            String line = lines[i];
+            line = lines[i];
             int star = line.indexOf("*");
             int at = line.indexOf("@");
             if (at == -1)
             {
 	            sb.append(" ");
 	            if (star > -1)
-	                sb.append(line.substring(star + 1).trim());
+	            {
+	            	if (trimlines)
+	            		sb.append(line.substring(star + 1).trim());
+	            	else
+	            		sb.append(line.substring(star + 1) + "\n");
+	            }
             }
             else
             {
@@ -124,7 +138,10 @@ public class ASDocComment implements IASDocComment
             	}            		
             }
         }
-        description = sb.toString().trim().replace("\"", "\\\"");
+        if (trimlines)
+        	description = sb.toString().trim().replace("\"", "\\\"");
+        else
+        	description = sb.toString();
     }
 
     @Override
@@ -138,7 +155,12 @@ public class ASDocComment implements IASDocComment
     @Override
     public IASDocTag getTag(String name)
     {
-        return tagMap.get(name).get(0);
+    	if (tagMap == null)	
+    		return null;
+    	List<IASDocTag> tags = tagMap.get(name);
+    	if (tags == null)
+    		return null;
+        return tags.get(0);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/9345ae4f/compiler-jx/src/main/java/org/apache/flex/compiler/clients/ASDOCJSC.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/ASDOCJSC.java b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/ASDOCJSC.java
index 0ba33f0..8aa0552 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/ASDOCJSC.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/ASDOCJSC.java
@@ -42,6 +42,7 @@ import org.apache.flex.compiler.internal.driver.js.amd.AMDBackend;
 import org.apache.flex.compiler.internal.driver.js.goog.ASDocConfiguration;
 import org.apache.flex.compiler.internal.driver.js.goog.GoogBackend;
 import org.apache.flex.compiler.internal.driver.mxml.flexjs.MXMLFlexJSASDocBackend;
+import org.apache.flex.compiler.internal.driver.mxml.flexjs.MXMLFlexJSASDocDITABackend;
 import org.apache.flex.compiler.internal.driver.mxml.jsc.MXMLJSCJSSWCBackend;
 import org.apache.flex.compiler.internal.driver.mxml.vf2js.MXMLVF2JSSWCBackend;
 import org.apache.flex.compiler.internal.projects.CompilerProject;
@@ -135,6 +136,10 @@ public class ASDOCJSC extends MXMLJSC
                     backend = new MXMLFlexJSASDocBackend();
                     break;
 
+                case FLEXJS_DITA:
+                    backend = new MXMLFlexJSASDocDITABackend();
+                    break;
+                    
                 case GOOG:
                     backend = new GoogBackend();
                     break;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/9345ae4f/compiler-jx/src/main/java/org/apache/flex/compiler/clients/MXMLJSC.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/MXMLJSC.java b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/MXMLJSC.java
index 0430905..875439a 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/MXMLJSC.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/MXMLJSC.java
@@ -107,6 +107,7 @@ public class MXMLJSC implements JSCompilerEntryPoint, ProblemQueryProvider,
         GOOG("goog"),
         VF2JS("vf2js"),
         FLEXJS_DUAL("flexjs_dual"),
+        FLEXJS_DITA("flexjs_dita"),
         JSC("jsc"),
         NODE("node");
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/9345ae4f/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSASDocDITAEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSASDocDITAEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSASDocDITAEmitter.java
new file mode 100644
index 0000000..04ac05a
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSASDocDITAEmitter.java
@@ -0,0 +1,1169 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.flex.compiler.internal.codegen.js.flexjs;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.FilterWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.flex.compiler.asdoc.IASDocTag;
+import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
+import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSASDocEmitter;
+import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
+import org.apache.flex.compiler.constants.IASLanguageConstants;
+import org.apache.flex.compiler.definitions.IAccessorDefinition;
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.definitions.IFunctionDefinition;
+import org.apache.flex.compiler.definitions.IInterfaceDefinition;
+import org.apache.flex.compiler.definitions.IPackageDefinition;
+import org.apache.flex.compiler.definitions.IParameterDefinition;
+import org.apache.flex.compiler.definitions.metadata.IDeprecationInfo;
+import org.apache.flex.compiler.definitions.metadata.IMetaTag;
+import org.apache.flex.compiler.definitions.references.INamespaceReference;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
+import org.apache.flex.compiler.internal.codegen.mxml.flexjs.MXMLFlexJSASDocEmitter;
+import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
+import org.apache.flex.compiler.internal.definitions.ClassDefinition;
+import org.apache.flex.compiler.internal.definitions.EventDefinition;
+import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
+import org.apache.flex.compiler.internal.definitions.InterfaceDefinition;
+import org.apache.flex.compiler.internal.definitions.VariableDefinition;
+import org.apache.flex.compiler.internal.projects.FlexJSASDocProject;
+import org.apache.flex.compiler.internal.tree.as.metadata.EventTagNode;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IAccessorNode;
+import org.apache.flex.compiler.tree.as.IClassNode;
+import org.apache.flex.compiler.tree.as.IDefinitionNode;
+import org.apache.flex.compiler.tree.as.IExpressionNode;
+import org.apache.flex.compiler.tree.as.IFileNode;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+import org.apache.flex.compiler.tree.as.IGetterNode;
+import org.apache.flex.compiler.tree.as.IInterfaceNode;
+import org.apache.flex.compiler.tree.as.INamespaceNode;
+import org.apache.flex.compiler.tree.as.IPackageNode;
+import org.apache.flex.compiler.tree.as.ISetterNode;
+import org.apache.flex.compiler.tree.as.IVariableNode;
+import org.apache.flex.compiler.tree.metadata.IMetaTagNode;
+import org.apache.flex.compiler.utils.NativeUtils;
+
+/**
+ * Concrete implementation of the 'FlexJS' JavaScript production.
+ *
+ * @author Michael Schmalle
+ * @author Erik de Bruin
+ */
+public class JSFlexJSASDocDITAEmitter extends JSGoogEmitter implements IJSFlexJSEmitter, IJSFlexJSASDocEmitter
+{
+
+	private boolean wroteSomething = false;
+	
+    @Override
+    public String postProcess(String output)
+    {
+    	return output;
+    }
+
+    public JSFlexJSASDocDITAEmitter(FilterWriter out)
+    {
+        super(out);
+    }
+
+    @Override
+    protected void writeIndent()
+    {
+        write(JSFlexJSEmitterTokens.INDENT);
+    }
+
+    @Override
+    protected String getIndent(int numIndent)
+    {
+        final StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < numIndent; i++)
+            sb.append(JSFlexJSEmitterTokens.INDENT.getToken());
+        return sb.toString();
+    }
+    
+    @Override
+    public void emitNamespace(INamespaceNode node)
+    {
+        ASDocComment asDoc = (ASDocComment) node.getASDocComment();
+        if (asDoc != null && asDoc.commentNoEnd().contains("@private"))
+        	return;
+        writeNewline("{ \"type\": \"namespace\",");
+        write("  \"qname\": \"");
+        write(formatQualifiedName(node.getQualifiedName()));
+        writeNewline("\",");
+        indentPush();
+        if (asDoc != null)
+        	writeASDoc(asDoc);
+        indentPop();
+        writeNewline("}");
+    }
+
+
+    @Override
+    public String formatQualifiedName(String name)
+    {
+        return formatQualifiedName(name, false);
+    }
+
+    public MXMLFlexJSASDocEmitter mxmlEmitter = null;
+
+    public String formatQualifiedName(String name, boolean isDoc)
+    {
+    	if (mxmlEmitter != null)
+    		name = mxmlEmitter.formatQualifiedName(name);
+        /*
+        if (name.contains("goog.") || name.startsWith("Vector."))
+            return name;
+        name = name.replaceAll("\\.", "_");
+        */
+    	if (getModel().isInternalClass(name))
+    		return getModel().getInternalClasses().get(name);
+        if (NativeUtils.isJSNative(name)) return name;
+    	if (name.startsWith("window."))
+    		name = name.substring(7);
+    	else if (!isDoc)
+    	{
+    	}
+    	int c = name.lastIndexOf(".");
+    	if (c != -1)
+    		name = name.substring(0, c) + ":" + name.substring(c + 1);
+        return name;
+    }
+
+    public String convertASTypeToJS(String name)
+    {
+        String result = name;
+
+        if (name.equals(""))
+            result = IASLanguageConstants.Object;
+        else if (name.equals(IASLanguageConstants.Class))
+            result = IASLanguageConstants.Object;
+        else if (name.equals(IASLanguageConstants._int)
+                || name.equals(IASLanguageConstants.uint))
+            result = IASLanguageConstants.Number;
+
+        boolean isBuiltinFunction = name.matches("Vector\\.<.*>");
+        if (isBuiltinFunction)
+        {
+        	result = IASLanguageConstants.Array;
+        }
+        return result;
+    }
+
+    //--------------------------------------------------------------------------
+    // Package Level
+    //--------------------------------------------------------------------------
+
+    @Override
+    public void emitPackageHeader(IPackageDefinition definition)
+    {
+    	IPackageNode packageNode = definition.getNode();
+    	IFileNode fileNode = (IFileNode) packageNode.getAncestorOfType(IFileNode.class);
+        int nodeCount = fileNode.getChildCount();
+        for (int i = 0; i < nodeCount; i++)
+        {
+	        IASNode pnode = fileNode.getChild(i);
+
+	        if (pnode instanceof IPackageNode)
+	        {
+	        }
+	        else if (pnode instanceof IClassNode)
+	        {
+	        	getWalker().walk(pnode);
+	        }
+	        else if (pnode instanceof IInterfaceNode)
+	        {
+	        	getWalker().walk(pnode);
+	        }
+            else if (pnode instanceof IFunctionNode)
+            {
+	        	getWalker().walk(pnode);
+            }
+            else if (pnode instanceof INamespaceNode)
+            {
+	        	getWalker().walk(pnode);
+            }
+            else if (pnode instanceof IVariableNode)
+            {
+	        	getWalker().walk(pnode);
+            }
+        }
+    }
+
+    @Override
+    public void emitPackageHeaderContents(IPackageDefinition definition)
+    {
+    }
+
+    @Override
+    public void emitPackageFooter(IPackageDefinition definition)
+    {
+    }
+
+    //--------------------------------------------------------------------------
+    // Class
+    //--------------------------------------------------------------------------
+
+    @Override
+    public void emitClass(IClassNode node)
+    {
+        IClassDefinition def = node.getDefinition();
+        write("<apiClassifier id=\"");
+        write(formatQualifiedName(node.getQualifiedName()));
+        write("\"><apiName>");
+        write(node.getName());
+        write("</apiName>");
+        
+        String linkText = "";
+        ASDocComment asDoc = (ASDocComment) node.getASDocComment();
+        String shortdesc = null;
+        if (asDoc != null)
+        {
+        	asDoc.compile(false);
+            shortdesc = makeShortDescription(asDoc);
+            write(shortdesc);
+            linkText = writeASDoc(asDoc);
+        }
+        else
+        	write("<shortdesc/>");        
+        
+    	write("<apiClassifierDetail>");
+    	write("<apiClassifierDef>");
+    	if (def.isPublic())
+        	write("<apiAccess value=\"public\"/>");
+    	write("<apiStatic/>");
+    	IExpressionNode interfaceNodes[] = node.getImplementedInterfaceNodes();
+        for (IExpressionNode base : interfaceNodes)
+        {
+        	write("<apiBaseInterface>");
+        	write(formatQualifiedName(base.resolve(getWalker().getProject()).getQualifiedName()));
+        	write("</apiBaseInterface>");
+        }
+    	write("<apiBaseClassifier>");
+    	IExpressionNode baseNode = node.getBaseClassExpressionNode();
+    	if (baseNode == null)
+    		write("Object");
+    	else
+    		write(formatQualifiedName(baseNode.resolve(getWalker().getProject()).getQualifiedName()));
+    	write("</apiBaseClassifier>");
+    	write("</apiClassifierDef>");
+    	if (asDoc != null)
+    	{
+        	writeAPIDesc(asDoc);
+    	}
+    	write("</apiClassifierDetail>");
+        write(linkText);
+
+        final IDefinitionNode[] members = node.getAllMemberNodes();
+        for (IDefinitionNode mnode : members)
+        {
+        	getWalker().walk(mnode);
+        }
+        IMetaTagNode[] metas = node.getMetaTagNodesByName("Event");
+        for (IMetaTagNode mnode : metas)
+        {
+        	writeEventTagNode(mnode, def);
+        }
+        
+        write("</apiClassifier>");
+        addToIndex(node.getDefinition(), asDoc);
+    	FlexJSASDocProject project = (FlexJSASDocProject)getWalker().getProject();
+    	FlexJSASDocProject.ASDocRecord record = project.new ASDocRecord();
+    	record.definition = node.getDefinition();
+    	if (asDoc != null)
+    		record.description = makeShortDescription(asDoc);
+    	else
+    		record.description = "";
+        ((FlexJSASDocProject)getWalker().getProject()).classes.put(formatQualifiedName(node.getQualifiedName()), record);
+    }
+
+    @Override
+    public void emitInterface(IInterfaceNode node)
+    {
+        IInterfaceDefinition def = node.getDefinition();
+        write("<apiClassifier id=\"");
+        write(formatQualifiedName(node.getQualifiedName()));
+        write("\"><apiName>");
+        write(node.getName());
+        write("</apiName>");
+        
+        String linkText = "";
+        ASDocComment asDoc = (ASDocComment) node.getASDocComment();
+        String shortdesc = null;
+        if (asDoc != null)
+        {
+        	asDoc.compile(false);
+            shortdesc = makeShortDescription(asDoc);
+            write(shortdesc);
+            linkText = writeASDoc(asDoc);
+        }
+        else
+        	write("<shortdesc/>");        
+        
+    	write("<apiClassifierDetail>");
+    	write("<apiClassifierDef>");
+    	write("<apiInterface/>");
+    	if (def.isPublic())
+        	write("<apiAccess value=\"public\"/>");
+    	write("<apiStatic/>");
+    	IExpressionNode baseNodes[] = node.getExtendedInterfaceNodes();
+        for (IExpressionNode base : baseNodes)
+        {
+        	write("<apiBaseInterface>");
+        	write(formatQualifiedName(base.resolve(getWalker().getProject()).getQualifiedName()));
+        	write("</apiBaseInterface>");
+        }
+    	write("<apiBaseClassifier/>");
+    	write("</apiClassifierDef>");
+    	if (asDoc != null)
+    	{
+        	writeAPIDesc(asDoc);
+    	}
+    	write("</apiClassifierDetail>");
+
+        final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
+        for (IDefinitionNode mnode : members)
+        {
+        	getWalker().walk(mnode);
+        }
+        write(linkText);
+        write("</apiClassifier>");
+        addToIndex(node.getDefinition(), asDoc);
+    	FlexJSASDocProject project = (FlexJSASDocProject)getWalker().getProject();
+    	FlexJSASDocProject.ASDocRecord record = project.new ASDocRecord();
+    	record.definition = node.getDefinition();
+    	if (asDoc != null)
+    		record.description = makeShortDescription(asDoc);
+    	else
+    		record.description = "";
+        ((FlexJSASDocProject)getWalker().getProject()).classes.put(formatQualifiedName(node.getQualifiedName()), record);
+    }
+
+    private ArrayList<String> accessors = new ArrayList<String>();
+    
+    @Override
+    public void emitGetAccessor(IGetterNode node)
+    {
+    	IDefinition def = node.getDefinition();
+    	boolean isInterface = def.getParent() instanceof InterfaceDefinition;
+    	if (node.getDefinition().isPrivate()) return;
+
+        ASDocComment asDoc = (ASDocComment) node.getASDocComment();
+        if (asDoc != null && asDoc.commentNoEnd().contains("@private"))
+        	return;
+        
+    	String name = node.getName();
+        if (accessors.contains(name)) return;
+        accessors.add(name);
+        write("<apiValue id=\"");
+        if (isInterface)
+        {
+            write(formatQualifiedName(def.getParent().getQualifiedName()));
+            write(":");        	
+        }
+        write(formatQualifiedName(def.getParent().getQualifiedName()));
+        write(":");
+        write(formatQualifiedName(node.getQualifiedName()));
+        write(":get\"><apiName>");
+        write(node.getName());
+        write("</apiName>");
+        String shortdesc = null;
+        String linkText = "";
+        if (asDoc != null)
+        {
+        	asDoc.compile(false);
+            shortdesc = makeShortDescription(asDoc);
+            write(shortdesc);
+            linkText = writeASDoc(asDoc);
+        }
+        else
+        	write("<shortdesc/>");        
+        
+    	write("<apiValueDetail>");
+    	write("<apiValueDef>");
+    	write("<apiProperty/>");
+    	if (def.isPublic() || isInterface)
+        	write("<apiAccess value=\"public\"/>");
+    	else if (def.isProtected())
+        	write("<apiAccess value=\"protected\"/>");
+    	if (def.isStatic())
+        	write("<apiStatic/>");
+    	write("<apiDynamic/>");
+    	write("<apiValueAccess value=\"read\"/>");
+    	write("<apiType value=\"");
+    	write(formatQualifiedName(def.resolveType(getWalker().getProject()).getQualifiedName()));
+    	write("\"/>");
+    	write("</apiValueDef>");
+    	if (asDoc != null)
+    	{
+        	writeAPIDesc(asDoc);
+    	}
+    	write("</apiValueDetail>");
+    	write(linkText);
+    	write("</apiValue>");        	
+        addToIndex(node.getDefinition(), asDoc);
+    }
+
+    @Override
+    public void emitSetAccessor(ISetterNode node)
+    {
+    	IDefinition def = node.getDefinition();
+    	boolean isInterface = def.getParent() instanceof InterfaceDefinition;
+    	if (node.getDefinition().isPrivate()) return;
+
+        ASDocComment asDoc = (ASDocComment) node.getASDocComment();
+        if (asDoc != null && asDoc.commentNoEnd().contains("@private"))
+        	return;
+        
+    	String name = node.getName();
+        if (accessors.contains(name)) return;
+        accessors.add(name);
+        write("<apiValue id=\"");
+        if (isInterface)
+        {
+            write(formatQualifiedName(def.getParent().getQualifiedName()));
+            write(":");        	
+        }
+        write(formatQualifiedName(def.getParent().getQualifiedName()));
+        write(":");
+        write(formatQualifiedName(node.getQualifiedName()));
+        write(":set\"><apiName>");
+        write(node.getName());
+        write("</apiName>");
+        String shortdesc = null;
+        String linkText = "";
+        if (asDoc != null)
+        {
+        	asDoc.compile(false);
+            shortdesc = makeShortDescription(asDoc);
+            write(shortdesc);
+            linkText = writeASDoc(asDoc);
+        }
+        else
+        	write("<shortdesc/>");        
+        
+    	write("<apiValueDetail>");
+    	write("<apiValueDef>");
+    	writeAPIProperties(def);
+    	if (def.isPublic() || def.getParent() instanceof InterfaceDefinition)
+        	write("<apiAccess value=\"public\"/>");
+    	else if (def.isProtected())
+        	write("<apiAccess value=\"protected\"/>");
+    	if (def.isStatic())
+        	write("<apiStatic/>");
+    	write("<apiDynamic/>");
+    	write("<apiValueAccess value=\"write\"/>");
+    	write("<apiValueClassifier>");
+    	write(formatQualifiedName(def.resolveType(getWalker().getProject()).getQualifiedName()));
+    	write("</apiValueClassifier>");
+    	write("</apiValueDef>");
+    	if (asDoc != null)
+    	{
+    		writeAPIDesc(asDoc);
+    	}
+    	write("</apiValueDetail>");
+    	write(linkText);
+    	write("</apiValue>");        	
+
+        addToIndex(node.getDefinition(), asDoc);
+    }
+    
+    @Override
+    public void emitField(IVariableNode node)
+    {
+    	IDefinition def = node.getDefinition();
+    	if (node.getDefinition().isPrivate()) return;
+    	
+        ASDocComment asDoc = (ASDocComment) node.getASDocComment();
+        if (asDoc != null && asDoc.commentNoEnd().contains("@private"))
+        	return;
+        write("<apiValue id=\"");
+        write(formatQualifiedName(def.getParent().getQualifiedName()));
+        write(":");
+        write(formatQualifiedName(node.getQualifiedName()));
+        write("\"><apiName>");
+        write(node.getName());
+        write("</apiName>");
+        String shortdesc = null;
+        String linkText = "";
+        if (asDoc != null)
+        {
+        	asDoc.compile(false);
+            shortdesc = makeShortDescription(asDoc);
+            write(shortdesc);
+            linkText = writeASDoc(asDoc);
+        }
+        else
+        	write("<shortdesc/>");        
+        
+    	write("<apiValueDetail>");
+    	write("<apiValueDef>");
+    	writeAPIProperties(def);
+    	if (def.isPublic() || def.getParent() instanceof InterfaceDefinition)
+        	write("<apiAccess value=\"public\"/>");
+    	else if (def.isProtected())
+        	write("<apiAccess value=\"protected\"/>");
+    	if (def.isStatic())
+        	write("<apiStatic/>");
+    	write("<apiDynamic/>");
+    	write("<apiValueClassifier>");
+    	write(formatQualifiedName(def.resolveType(getWalker().getProject()).getQualifiedName()));
+    	write("</apiValueClassifier>");
+    	write("</apiValueDef>");
+    	if (asDoc != null)
+    	{
+    		writeAPIDesc(asDoc);
+    	}
+    	write("</apiValueDetail>");
+    	write(linkText);
+    	write("</apiValue>"); 
+        addToIndex(node.getDefinition(), asDoc);
+    }
+
+    @Override
+    public void emitVarDeclaration(IVariableNode node)
+    {
+    	IDefinition def = node.getDefinition();
+    	if (node.getDefinition().isPrivate()) return;
+
+        ASDocComment asDoc = (ASDocComment) node.getASDocComment();
+        if (asDoc != null && asDoc.commentNoEnd().contains("@private"))
+        	return;
+        write("<apiValue id=\"");
+        write(formatQualifiedName(node.getQualifiedName()));
+        write("\"><apiName>");
+        write(node.getName());
+        write("</apiName>");
+        String shortdesc = null;
+        if (asDoc != null)
+        {
+        	asDoc.compile(false);
+            shortdesc = makeShortDescription(asDoc);
+            write(shortdesc);
+            writeASDoc(asDoc);
+        }
+        else
+        	write("<shortdesc/>");        
+        
+    	write("<apiValueDetail>");
+    	write("<apiValueDef>");
+    	writeAPIProperties(def);
+    	if (def.isPublic() || def.getParent() instanceof InterfaceDefinition)
+        	write("<apiAccess value=\"public\"/>");
+    	else if (def.isProtected())
+        	write("<apiAccess value=\"protected\"/>");
+    	if (def.isStatic())
+        	write("<apiStatic/>");
+    	write("<apiDynamic/>");
+    	write("<apiType value=\"");
+    	write(formatQualifiedName(def.resolveType(getWalker().getProject()).getQualifiedName()));
+    	write("\"/>");
+    	write("</apiValueDef>");
+    	if (asDoc != null)
+    	{
+        	writeAPIDesc(asDoc);
+    	}
+    	write("</apiValueDetail>");
+    	write("</apiValue>"); 
+        addToIndex(node.getDefinition(), asDoc);
+    }
+
+    @Override
+    public void emitAccessors(IAccessorNode node)
+    {
+    	if (node.getDefinition().isPrivate()) return;
+
+    	String name = node.getName();
+        if (accessors.contains(name)) return;
+        accessors.add(name);
+        writeNewline("{ \"type\": \"accessor\",");
+    	IAccessorDefinition def = (IAccessorDefinition)node.getDefinition();
+    	IAccessorDefinition otherDef = (IAccessorDefinition)def.resolveCorrespondingAccessor(getWalker().getProject());
+    	IAccessorNode otherNode = null;
+    	if (otherDef != null)
+    	{
+        	otherNode = (IAccessorNode)otherDef.getNode();
+            writeNewline("  \"access\": \"read-write\",");
+    	}
+    	else
+            writeNewline("  \"access\": \"read-only\",");
+        ASDocComment asDoc = (ASDocComment) node.getASDocComment();
+        if (asDoc == null || asDoc.commentNoEnd().contains("@private"))
+        {
+        	if (otherNode != null)
+        		asDoc = (ASDocComment) otherNode.getASDocComment();        		
+        }
+        write("<apiValue id=\"");
+        write(formatQualifiedName(node.getQualifiedName()));
+        write(":set\"><apiName>");
+        write(node.getName());
+        write("</apiName>");
+        String shortdesc = null;
+        if (asDoc != null)
+        {
+        	asDoc.compile(false);
+            shortdesc = makeShortDescription(asDoc);
+            write(shortdesc);
+            writeASDoc(asDoc);
+        }
+        else
+        	write("<shortdesc/>");        
+        
+    	write("<apiValueDetail>");
+    	write("<apiValueDef>");
+    	writeAPIProperties(def);
+    	if (def.isPublic() || def.getParent() instanceof InterfaceDefinition)
+        	write("<apiAccess value=\"public\"/>");
+    	else if (def.isProtected())
+        	write("<apiAccess value=\"protected\"/>");
+    	if (def.isStatic())
+        	write("<apiStatic/>");
+    	write("<apiDynamic/>");
+    	if (otherDef != null)
+    	{
+        	otherNode = (IAccessorNode)otherDef.getNode();
+        	write("<apiValueAccess value=\"read-write\"/>");
+    	}
+    	else
+            writeNewline("  \"access\": \"read\",");
+    	write("<apiType value=\"");
+    	write(formatQualifiedName(def.resolveType(getWalker().getProject()).getQualifiedName()));
+    	write("\"/>");
+    	write("</apiValueDef>");
+    	if (asDoc != null)
+    	{
+        	writeAPIDesc(asDoc);
+    	}
+    	write("</apiValueDetail>");
+    	write("</apiValue>");     
+        addToIndex(node.getDefinition(), asDoc);
+    }
+    
+    @Override
+    public void emitMethod(IFunctionNode node)
+    {
+    	IFunctionDefinition def = node.getDefinition();
+    	if (def.isPrivate()) return;
+
+        ASDocComment asDoc = (ASDocComment) node.getASDocComment();
+        if (asDoc != null && asDoc.commentNoEnd().contains("@private"))
+        	return;
+        
+        if (node.isConstructor())
+        {
+            write("<apiConstructor id=\"");
+            write(formatQualifiedName(node.getQualifiedName()));
+            write(":");
+            write(node.getName());
+            write("\"><apiName>");
+            write(node.getName());
+            write("</apiName>");
+            String shortdesc = null;
+            if (asDoc != null)
+            {
+            	asDoc.compile(false);
+                shortdesc = makeShortDescription(asDoc);
+                write(shortdesc);
+                writeASDoc(asDoc);
+            }
+            else
+            	write("<shortdesc/>");        
+            
+        	write("<apiConstructorDetail>");
+        	write("<apiConstructorDef>");
+            write("<apiAccess value=\"public\"/>");
+        	write("</apiConstructorDef>");
+        	if (asDoc != null)
+        	{
+            	writeAPIDesc(asDoc);
+        	}
+        	write("</apiConstructorDetail>");
+        	write("</apiConstructor>");
+        }
+        else
+        {
+            write("<apiOperation id=\"");
+            write(formatQualifiedName(def.getParent().getQualifiedName()));
+            write(":");
+            write(formatQualifiedName(node.getQualifiedName()));
+            write("\"><apiName>");
+            write(node.getName());
+            write("</apiName>");
+            String shortdesc = null;
+            if (asDoc != null)
+            {
+            	asDoc.compile(false);
+                shortdesc = makeShortDescription(asDoc);
+                write(shortdesc);
+                writeASDoc(asDoc);
+            }
+            else
+            	write("<shortdesc/>");        
+            
+        	write("<apiOperationDetail>");
+        	write("<apiOperationDef>");
+        	if (def.isPublic() || def.getParent() instanceof InterfaceDefinition)
+            	write("<apiAccess value=\"public\"/>");
+        	else if (def.isProtected())
+            	write("<apiAccess value=\"protected\"/>");
+        	if (def.isStatic())
+            	write("<apiStatic/>");
+        	write("<apiReturn><apiType value=\"");
+        	write(def.getReturnTypeAsDisplayString());
+        	write("\"/></apiReturn>");
+        	IParameterDefinition params[] = def.getParameters();
+        	write("<apiParam>");
+        	for (IParameterDefinition param : params)
+        	{
+        		write("<apiItemName>");
+        		write(param.getBaseName());
+        		write("</apiItemName><apiType value=\"");
+        		write(param.getTypeAsDisplayString());
+        		write("\">");
+        		if (param.hasDefaultValue())
+        		{
+        			write("<apiData>");
+        			write(param.getNode().getDefaultValue());
+        			write("</apiData>");
+        		}
+        		write("</apiParam>");
+        	}
+        	write("</apiOperationDef>");
+        	if (asDoc != null)
+        	{
+            	writeAPIDesc(asDoc);
+        	}
+        	write("</apiOperationDetail>");
+        	write("</apiOperation>");        	
+        }
+        addToIndex(node.getDefinition(), asDoc);
+    }
+    
+    public String writeASDoc(ASDocComment asDoc)
+    {
+    	StringBuilder linkText = new StringBuilder();
+    	FlexJSASDocProject project = (FlexJSASDocProject)getWalker().getProject();
+    	List<String> tagList = project.tags;
+    	Map<String, List<IASDocTag>> tags = asDoc.getTags();
+    	if (tags != null)
+    	{
+    		write("<prolog><asMetadata><apiVersion>");
+			List<IASDocTag> values = tags.get("langversion");
+			if (values != null)
+			{
+				for (IASDocTag value : values)
+				{
+					write("<apiLanguage version=\"");
+					write(value.getDescription());
+					write("\"/>");
+				}
+			}
+			values = tags.get("playerversion");
+			if (values != null)
+			{
+				for (IASDocTag value : values)
+				{
+					write("<apiPlatform description=\"\" name=\"");
+					String desc = value.getDescription();
+					String parts[] = desc.split(" ");
+					write(parts[0]);
+					write("\" version=\"");
+					write(parts[1]);
+					write("\"/>");
+				}
+			}
+			values = tags.get("productversion");
+			if (values != null)
+			{
+				for (IASDocTag value : values)
+				{
+					write("<apiTool description=\"\" name=\"");
+					String desc = value.getDescription();
+					String parts[] = desc.split(" ");
+					write(parts[0]);
+					write("\" version=\"");
+					write(parts[1]);
+					write("\"/>");
+				}
+			}
+			values = tags.get("see");
+			if (values != null)
+			{
+				linkText.append("<related-links>");
+				for (IASDocTag value : values)
+				{
+					linkText.append("<link href=\"");
+					String desc = value.getDescription();
+					String parts[] = desc.split("#");
+					String fileName = parts[0];
+					int c = fileName.lastIndexOf(".");
+					if (c == -1)
+					{
+						c = fileName.length();
+					}
+					linkText.append(fileName.substring(0, c));
+					if (parts.length == 1)
+					{
+						linkText.append(".xml");
+					}
+					else
+					{
+						linkText.append(".xml#");
+						linkText.append(fileName.substring(c + 1));
+						linkText.append("/");
+						linkText.append(parts[1]);						
+					}
+					linkText.append("\"/>");
+					linkText.append("<linktext>");
+					linkText.append(parts[0]);
+					if (parts.length > 1)
+					{
+						linkText.append(".");
+						linkText.append(parts[1]);
+					}
+					linkText.append("</linktext>");
+					linkText.append("</link>");
+				}
+				linkText.append("</related-links>");
+			}
+    		write("</apiVersion></asMetadata>");
+    		boolean needHeader = true;
+    		boolean needFooter = false;
+    		Set<String> tagNames = tags.keySet();
+    		for (String tagName : tagNames)
+    		{
+    			if (!tagList.contains(tagName))
+    				tagList.add(tagName);
+    			if (!(tagName.equals("see") ||
+      				  tagName.equals("copy") ||
+    				  tagName.equals("productversion") ||
+    				  tagName.equals("langversion") ||
+    				  tagName.equals("playerversion")))
+    			{
+    				if (needHeader)
+    				{
+    					write("<asCustoms>");
+    					needFooter = true;
+    				}
+    				values = tags.get(tagName);
+    				if (values != null)
+    				{
+	    				write("<" + tagName + ">");
+	    				for (IASDocTag value : values)
+	    				{
+	    					write(value.getDescription());
+	    				}
+	    				write("</" + tagName + ">");
+    				}
+    				else
+	    				write("<" + tagName + "/>");
+    			}
+    		}
+    		if (needFooter)
+				write("</asCustoms>");
+    		write("</prolog>");
+    	}
+    	else
+    		write("<prolog/>");
+    	return linkText.toString();
+    }
+    
+    @Override
+    public void write(String value)
+    {
+    	super.write(value);
+    	wroteSomething = true;
+    }
+    
+    public void writeEventTagNode(IMetaTagNode node, IClassDefinition classDef)
+    {
+    	EventTagNode evt = (EventTagNode)node;
+        ASDocComment asDoc = (ASDocComment) evt.getASDocComment();
+        if (asDoc != null && asDoc.commentNoEnd().contains("@private"))
+        	return;
+        write("<adobeApiEvent id=\"");
+        write(formatQualifiedName(classDef.getQualifiedName()));
+        write("_");
+        write(evt.getValue("type"));
+        write("_");
+        write(evt.getValue("name"));
+        writeNewline("\">");
+        write("<apiName>");
+        write(evt.getValue("name"));
+        write("</apiName>");
+        if (asDoc != null)
+        {
+        	asDoc.compile(false);
+        	write(makeShortDescription(asDoc));
+        	writeASDoc(asDoc);
+        }
+    	write("<adobeApiEventDetail>");
+    	write("<adobeApiEventDef>");
+    	write("<adobeApiEventClassifier>");
+        write(evt.getValue("type"));
+    	write("</adobeApiEventClassifier>");
+    	write("<apiGeneratedEvent>");
+    	write("</adobeApiEventDef>");
+    	if (asDoc != null)
+    	{
+        	writeAPIDesc(asDoc);
+    	}
+    	write("</adobeApiEventDetail>");
+    	write("</adobeApiEvent>");
+        	
+        addToIndex(evt.getDefinition(), asDoc);
+    }
+    
+    private void addToIndex(IDefinition def, ASDocComment asDoc)
+    {
+    	FlexJSASDocProject project = (FlexJSASDocProject)getWalker().getProject();
+    	List<FlexJSASDocProject.ASDocRecord> list = project.index.get(def.getBaseName());
+    	if (list == null)
+    	{
+    		list = new ArrayList<FlexJSASDocProject.ASDocRecord>();
+    		project.index.put(def.getBaseName(), list);
+    	}
+    	FlexJSASDocProject.ASDocRecord record = project.new ASDocRecord();
+    	record.definition = def;
+    	if (asDoc != null)
+    		record.description = makeShortDescription(asDoc);
+    	else
+    		record.description = "";
+    	list.add(record);
+    }
+    
+    private String makeShortDescription(ASDocComment asDoc)
+    {
+    	String description = asDoc.getDescription();
+    	if (description == null || description.length() == 0)
+    		return "<shortdesc/>";
+    	
+    	StringBuilder sb = new StringBuilder();
+    	sb.append("<shortdesc");
+    	IASDocTag copyTag = asDoc.getTag("copy");
+    	if (copyTag != null)
+    	{
+    		sb.append(" conref=\"");
+    		sb.append(copyTag.getDescription());
+    		sb.append("\">\n");
+    	}
+    	else
+    	{
+    		sb.append(">");
+        	int c = description.indexOf(".");
+        	if (c != -1)
+        		sb.append(description.substring(0, c + 1));
+        	else
+        		sb.append(description);
+    	}
+    	sb.append("</shortdesc>");    		
+    	return sb.toString();
+    }
+    
+    private void writeAPIDesc(ASDocComment asDoc)
+    {
+       	write("<apiDesc");
+    	IASDocTag copyTag = asDoc.getTag("copy");
+    	if (copyTag != null)
+    	{
+    		write(" conref=\"");
+    		write(copyTag.getDescription());
+    		write("\">\n");
+    	}
+    	else
+    	{
+    		write(">");
+        	write(asDoc.getDescription());
+    	}
+    	write("</apiDesc>");
+
+    }
+
+    public void writeAPIProperties(IDefinition def)
+    {
+    	IMetaTag propTag = def.getMetaTagByName("Bindable");
+    	if (propTag == null)
+    	{
+        	write("<apiProperty/>");
+        	return;
+    	}
+    	write("<apiProperty isBindable=\"true\"");
+    	String value = propTag.getValue();
+    	if (value != null)
+    	{
+    		write(" name=\"");
+    		write(value);
+    		write("\"");
+    	}
+    	write("/>");
+    }
+    
+    public void outputIndex(File outputFolder, FlexJSASDocProject project) throws IOException
+    {
+	    final File indexFile = new File(outputFolder, "index.json");
+	    FileWriter out = new FileWriter(indexFile);
+		out.write("{  \"index\": [");
+	    System.out.println("Compiling file: " + indexFile);
+    	Set<String> keys = project.index.keySet();
+    	List<String> keyList = new ArrayList<String>(keys);
+    	Collections.sort(keyList);
+    	boolean firstLine = true;
+    	for (String key : keyList)
+    	{
+        	List<FlexJSASDocProject.ASDocRecord> list = project.index.get(key);
+        	for (FlexJSASDocProject.ASDocRecord record : list)
+        	{
+        		if (!firstLine)
+        			out.write(",\n");
+        		firstLine = false;
+	        	out.write("{ \"name\": \"");
+	        	out.write(key);
+	        	out.write("\",\n");
+	        	out.write("  \"type\": ");
+	        	if (record.definition instanceof ClassDefinition)
+	        		out.write("\"Class\",\n");
+	        	else if (record.definition instanceof InterfaceDefinition)
+	        		out.write("\"Interface\",\n");
+	        	else if (record.definition instanceof EventDefinition)
+	        		out.write("\"Event\",\n");
+	        	else if (record.definition instanceof AccessorDefinition)
+	        	{
+	        		out.write("\"Property\",\n");
+	        		out.write("  \"class\": \"");
+	        		out.write(formatQualifiedName(record.definition.getParent().getQualifiedName()));
+	        		out.write("\",\n");
+	        	}
+	        	else if (record.definition instanceof VariableDefinition)
+	        	{
+	        		out.write("\"Property\",\n");
+	        		out.write("  \"class\": \"");
+	        		out.write(formatQualifiedName(record.definition.getParent().getQualifiedName()));
+	        		out.write("\",\n");
+	        	}
+	        	else if (record.definition instanceof FunctionDefinition)
+	        	{
+	        		out.write("\"Method\",\n");
+	        		out.write("  \"class\": \"");
+	        		out.write(formatQualifiedName(record.definition.getParent().getQualifiedName()));
+	        		out.write("\",\n");
+	        	}
+	        	out.write("  \"description\": \"");
+	        	out.write(record.description);
+	        	out.write("\"}");
+        	}        	
+    	}
+		out.write("]}");
+        try {
+			out.flush();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+        try {
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+    }
+
+    public void outputClasses(File outputFolder, FlexJSASDocProject project) throws IOException
+    {
+	    final File indexFile = new File(outputFolder, "classes.json");
+	    FileWriter out = new FileWriter(indexFile);
+		out.write("{  \"classes\": [");
+	    System.out.println("Compiling file: " + indexFile);
+    	Set<String> keys = project.classes.keySet();
+    	List<String> keyList = new ArrayList<String>(keys);
+    	Collections.sort(keyList);
+    	boolean firstLine = true;
+    	for (String key : keyList)
+    	{
+    		if (!firstLine)
+    			out.write(",\n");
+    		firstLine = false;
+        	FlexJSASDocProject.ASDocRecord record = project.classes.get(key);
+        	out.write("{ \"name\": \"");
+        	out.write(key);
+        	out.write("\",\n");
+        	out.write("  \"description\": \"");
+        	out.write(record.description);
+        	out.write("\"}");
+    	}
+		out.write("]}");
+        try {
+			out.flush();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+        try {
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+    }
+    
+    public void outputTags(File outputFolder, FlexJSASDocProject project) throws IOException
+    {
+	    final File indexFile = new File(outputFolder, "tags.json");
+	    FileWriter out = new FileWriter(indexFile);
+		out.write("{  \"tags\": [");
+	    System.out.println("Compiling file: " + indexFile);
+    	Collections.sort(project.tags);
+    	boolean firstLine = true;
+    	for (String tag : project.tags)
+    	{
+    		if (!firstLine)
+    			out.write(",\n");
+    		firstLine = false;
+        	out.write("\"");
+        	out.write(tag);
+        	out.write("\"");
+    	}
+		out.write("]}");
+        try {
+			out.flush();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+        try {
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/9345ae4f/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSASDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSASDocEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSASDocEmitter.java
index 63e5e03..47b6854 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSASDocEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSASDocEmitter.java
@@ -40,6 +40,7 @@ import org.apache.flex.compiler.constants.IASLanguageConstants;
 import org.apache.flex.compiler.definitions.IAccessorDefinition;
 import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.definitions.IPackageDefinition;
+import org.apache.flex.compiler.definitions.IParameterDefinition;
 import org.apache.flex.compiler.definitions.metadata.IDeprecationInfo;
 import org.apache.flex.compiler.definitions.references.INamespaceReference;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
@@ -233,6 +234,9 @@ public class JSFlexJSASDocEmitter extends JSGoogEmitter implements IJSFlexJSEmit
         write(formatQualifiedName(node.getQualifiedName()));
         writeNewline("\",");
         indentPush();
+        write("  \"baseClassname\": \"");
+        write(formatQualifiedName(node.getBaseClassName()));
+        writeNewline("\",");
         if (asDoc != null)
         	writeASDoc(asDoc);
         final IDefinitionNode[] members = node.getAllMemberNodes();
@@ -303,6 +307,22 @@ public class JSFlexJSASDocEmitter extends JSGoogEmitter implements IJSFlexJSEmit
         write("  \"qname\": \"");
         write(formatQualifiedName(node.getQualifiedName()));
         writeNewline("\",");
+        String bases[] = node.getExtendedInterfaces();
+        if (bases.length > 0)
+        {
+        	writeNewline(",");
+        	writeNewline("extends: [");
+            boolean firstBase = true;
+	        for (String base : bases)
+	        {
+	        	if (!firstBase)
+	        		writeNewline(", ");
+	        	firstBase = false;
+	        	write("\"" + base + "\"");
+	        	write(base);
+	        }
+        	writeNewline("]");
+        }
         indentPush();
         if (asDoc != null)
         	writeASDoc(asDoc);
@@ -509,6 +529,23 @@ public class JSFlexJSASDocEmitter extends JSGoogEmitter implements IJSFlexJSEmit
         indentPush();
         if (asDoc != null)
         	writeASDoc(asDoc);
+        write("  \"return\": \"");
+        write(formatQualifiedName(node.getReturnType()));
+        writeNewline("\",");
+        write("  \"params\": [");
+        boolean firstParam = true;
+    	IParameterDefinition params[] = node.getDefinition().getParameters();
+    	for (IParameterDefinition param : params)
+    	{
+    		if (!firstParam)
+    			writeNewline(",");
+    		write("{ name: \"");
+    		write(param.getBaseName());
+    		write("\", type: \"");
+            write(formatQualifiedName(param.getTypeAsDisplayString()));
+            writeNewline("\"}");    		
+    	}
+    	write("]");
         indentPop();
         write("}");
         addToIndex(node.getDefinition(), asDoc);
@@ -634,7 +671,10 @@ public class JSFlexJSASDocEmitter extends JSGoogEmitter implements IJSFlexJSEmit
         if (asDoc != null && asDoc.commentNoEnd().contains("@private"))
         	return;
         write("{ \"qname\": \"");
-        write(formatQualifiedName(evt.getName()));
+        write(formatQualifiedName(evt.getValue("name")));
+        writeNewline("\",");
+        write("  \"type\": \"");
+        write(evt.getValue("type"));
         writeNewline("\",");
         indentPush();
         if (asDoc != null)

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/9345ae4f/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSASDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSASDocEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSASDocEmitter.java
index 1a91e6e..9ca02e5 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSASDocEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSASDocEmitter.java
@@ -30,6 +30,7 @@ import java.util.Set;
 import org.apache.flex.abc.semantics.Name;
 import org.apache.flex.abc.semantics.Namespace;
 import org.apache.flex.compiler.codegen.as.IASEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
 import org.apache.flex.compiler.codegen.mxml.flexjs.IMXMLFlexJSEmitter;
 import org.apache.flex.compiler.definitions.IClassDefinition;
 import org.apache.flex.compiler.definitions.IDefinition;
@@ -131,7 +132,7 @@ public class MXMLFlexJSASDocEmitter extends MXMLEmitter implements
         documentDefinition = cdef;
 
         // TODO (mschmalle) will remove this cast as more things get abstracted
-        JSFlexJSASDocEmitter fjs = (JSFlexJSASDocEmitter) ((IMXMLBlockWalker) getMXMLWalker())
+        IJSEmitter fjs = (IJSEmitter) ((IMXMLBlockWalker) getMXMLWalker())
                 .getASEmitter();
 
         fjs.getModel().setCurrentClass(cdef);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/9345ae4f/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/mxml/flexjs/MXMLFlexJSASDocDITABackend.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/mxml/flexjs/MXMLFlexJSASDocDITABackend.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/mxml/flexjs/MXMLFlexJSASDocDITABackend.java
new file mode 100644
index 0000000..84ae221
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/mxml/flexjs/MXMLFlexJSASDocDITABackend.java
@@ -0,0 +1,136 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.flex.compiler.internal.driver.mxml.flexjs;
+
+import java.io.FilterWriter;
+import java.util.List;
+
+import org.apache.flex.compiler.codegen.IDocEmitter;
+import org.apache.flex.compiler.codegen.as.IASEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.codegen.js.IJSWriter;
+import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
+import org.apache.flex.compiler.config.Configurator;
+import org.apache.flex.compiler.driver.IBackend;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSASDocDITAEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSASDocEmitter;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogDocEmitter;
+import org.apache.flex.compiler.internal.codegen.mxml.MXMLBlockWalker;
+import org.apache.flex.compiler.internal.codegen.mxml.MXMLWriter;
+import org.apache.flex.compiler.internal.codegen.mxml.flexjs.MXMLFlexJSASDocEmitter;
+import org.apache.flex.compiler.internal.codegen.mxml.flexjs.MXMLFlexJSBlockWalker;
+import org.apache.flex.compiler.internal.driver.js.goog.ASDocConfiguration;
+import org.apache.flex.compiler.internal.driver.mxml.ASDocASSourceFileHandler;
+import org.apache.flex.compiler.internal.projects.ISourceFileHandler;
+import org.apache.flex.compiler.internal.targets.FlexJSSWCTarget;
+import org.apache.flex.compiler.internal.targets.JSTarget;
+import org.apache.flex.compiler.internal.visitor.as.ASNodeSwitch;
+import org.apache.flex.compiler.internal.visitor.mxml.MXMLNodeSwitch;
+import org.apache.flex.compiler.problems.ICompilerProblem;
+import org.apache.flex.compiler.projects.IASProject;
+import org.apache.flex.compiler.targets.ITargetProgressMonitor;
+import org.apache.flex.compiler.targets.ITargetSettings;
+import org.apache.flex.compiler.tree.mxml.IMXMLFileNode;
+import org.apache.flex.compiler.units.ICompilationUnit;
+import org.apache.flex.compiler.visitor.IBlockVisitor;
+import org.apache.flex.compiler.visitor.IBlockWalker;
+import org.apache.flex.compiler.visitor.mxml.IMXMLBlockWalker;
+
+/**
+ * A concrete implementation of the {@link IBackend} API where the
+ * {@link MXMLBlockWalker} is used to traverse the {@link IMXMLFileNode} AST.
+ * 
+ * @author Erik de Bruin
+ */
+public class MXMLFlexJSASDocDITABackend extends MXMLFlexJSSWCBackend
+{
+
+    @Override
+    public Configurator createConfigurator()
+    {
+        return new Configurator(ASDocConfiguration.class);
+    }
+
+    @Override
+    public IMXMLEmitter createMXMLEmitter(FilterWriter out)
+    {
+        return new MXMLFlexJSASDocEmitter(out);
+    }
+
+    @Override
+    public IMXMLBlockWalker createMXMLWalker(IASProject project,
+            List<ICompilerProblem> errors, IMXMLEmitter mxmlEmitter,
+            IASEmitter asEmitter, IBlockWalker asBlockWalker)
+    {
+        MXMLBlockWalker walker = new MXMLFlexJSBlockWalker(errors, project,
+                mxmlEmitter, asEmitter, asBlockWalker);
+
+        ASNodeSwitch asStrategy = new ASNodeSwitch(
+                (IBlockVisitor) asBlockWalker);
+        walker.setASStrategy(asStrategy);
+
+        MXMLNodeSwitch mxmlStrategy = new MXMLNodeSwitch(walker);
+        walker.setMXMLStrategy(mxmlStrategy);
+
+        return walker;
+    }
+
+    @Override
+    public IDocEmitter createDocEmitter(IASEmitter emitter)
+    {
+        return new JSGoogDocEmitter((IJSEmitter) emitter);
+    }
+
+    @Override
+    public IJSEmitter createEmitter(FilterWriter out)
+    {
+        IJSEmitter emitter = new JSFlexJSASDocDITAEmitter(out);
+        emitter.setDocEmitter(createDocEmitter(emitter));
+        return emitter;
+    }
+    
+    @Override
+    public IJSWriter createMXMLWriter(IASProject project,
+            List<ICompilerProblem> problems, ICompilationUnit compilationUnit,
+            boolean enableDebug)
+    {
+        return new MXMLWriter(project, problems, compilationUnit, enableDebug);
+    }
+
+    @Override
+    public JSTarget createTarget(IASProject project, ITargetSettings settings,
+            ITargetProgressMonitor monitor)
+    {
+        return new FlexJSSWCTarget(project, settings, monitor);
+    }
+    
+    @Override
+    public ISourceFileHandler getSourceFileHandlerInstance()
+    {
+        return ASDocASSourceFileHandler.INSTANCE;
+    }
+
+    @Override
+    public String getOutputExtension()
+    {
+        return "xml";
+    }
+
+}


Mime
View raw message