You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2014/09/27 05:52:43 UTC

git commit: [flex-falcon] [refs/heads/develop] - FLEX-34544 first pass at adding asdoc to js debug cross-compiles

Repository: flex-falcon
Updated Branches:
  refs/heads/develop 72814611d -> f3e9ac72d


FLEX-34544 first pass at adding asdoc to js debug cross-compiles


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

Branch: refs/heads/develop
Commit: f3e9ac72de22621a291f35ffe741e8bb4ba59535
Parents: 7281461
Author: Alex Harui <ah...@apache.org>
Authored: Fri Sep 26 20:50:13 2014 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Fri Sep 26 20:52:19 2014 -0700

----------------------------------------------------------------------
 .../compiler/asdoc/flexjs/ASDocComment.java     |  55 +++++++++
 .../apache/flex/compiler/clients/MXMLJSC.java   |   2 +
 .../codegen/js/flexjs/JSFlexJSDocEmitter.java   |  40 +++++--
 .../parsing/as/FlexJSASDocDelegate.java         | 119 +++++++++++++++++++
 4 files changed, 209 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f3e9ac72/compiler.jx/src/org/apache/flex/compiler/asdoc/flexjs/ASDocComment.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/asdoc/flexjs/ASDocComment.java b/compiler.jx/src/org/apache/flex/compiler/asdoc/flexjs/ASDocComment.java
new file mode 100644
index 0000000..379a4c2
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/asdoc/flexjs/ASDocComment.java
@@ -0,0 +1,55 @@
+/*
+ *
+ *  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.asdoc.flexjs;
+
+import org.apache.flex.compiler.asdoc.IASDocComment;
+import org.apache.flex.compiler.internal.codegen.js.JSDocEmitterTokens;
+
+import antlr.Token;
+
+public class ASDocComment implements IASDocComment
+{
+
+    public ASDocComment(Token t)
+    {
+        token = t;
+    }
+    
+    Token token;
+    
+    public String commentNoEnd()
+    {
+        String s = token.getText();
+        String[] lines = s.split("\n");
+        StringBuilder sb = new StringBuilder();
+        sb.append(lines[0]);
+        sb.append("\n");
+        int n = lines.length;
+        for (int i = 1; i < n - 1; i++)
+        {
+            String line = lines[i];
+            int star = line.indexOf("*");
+            sb.append(" ");
+            sb.append(line.substring(star));
+            sb.append("\n");
+        }
+        return sb.toString();
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f3e9ac72/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java b/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
index 0e1c0a7..bb581ac 100644
--- a/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
+++ b/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
@@ -58,6 +58,7 @@ import org.apache.flex.compiler.internal.driver.js.amd.AMDBackend;
 import org.apache.flex.compiler.internal.driver.js.goog.GoogBackend;
 import org.apache.flex.compiler.internal.driver.mxml.flexjs.MXMLFlexJSBackend;
 import org.apache.flex.compiler.internal.driver.mxml.vf2js.MXMLVF2JSBackend;
+import org.apache.flex.compiler.internal.parsing.as.FlexJSASDocDelegate;
 import org.apache.flex.compiler.internal.projects.CompilerProject;
 import org.apache.flex.compiler.internal.projects.FlexJSProject;
 import org.apache.flex.compiler.internal.projects.ISourceFileHandler;
@@ -211,6 +212,7 @@ public class MXMLJSC
     {
         JSSharedData.backend = backend;
         workspace = new Workspace();
+        workspace.setASDocDelegate(new FlexJSASDocDelegate());
         project = new FlexJSProject(workspace);
         problems = new ProblemQuery();
         JSSharedData.OUTPUT_EXTENSION = backend.getOutputExtension();

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f3e9ac72/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
index 8571846..bc17444 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
@@ -19,6 +19,7 @@
 
 package org.apache.flex.compiler.internal.codegen.js.flexjs;
 
+import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
 import org.apache.flex.compiler.codegen.js.IJSEmitter;
 import org.apache.flex.compiler.common.ASModifier;
 import org.apache.flex.compiler.common.DependencyType;
@@ -52,13 +53,18 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
     {
         IClassDefinition classDefinition = resolveClassDefinition(node);
 
+        ASDocComment asDoc = (ASDocComment) node.getASDocComment();
+        
         if (node instanceof IFunctionNode)
         {
             boolean hasDoc = false;
 
             if (node.isConstructor())
             {
-                begin();
+                if (asDoc != null)
+                    write(asDoc.commentNoEnd());
+                else
+                    begin();
                 hasDoc = true;
 
                 emitJSDocLine(JSEmitterTokens.CONSTRUCTOR);
@@ -88,7 +94,10 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
                 String ns = node.getNamespace();
                 if (ns != null)
                 {
-                    begin();
+                    if (asDoc != null)
+                        write(asDoc.commentNoEnd());
+                    else
+                        begin();
                     emitMethodAccess(node);
                     hasDoc = true;
                 }
@@ -100,7 +109,10 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
             {
                 if (!hasDoc)
                 {
-                    begin();
+                    if (asDoc != null)
+                        write(asDoc.commentNoEnd());
+                    else
+                        begin();
                     emitMethodAccess(node);
                     hasDoc = true;
                 }
@@ -124,7 +136,10 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
                 {
                     if (!hasDoc)
                     {
-                        begin();
+                        if (asDoc != null)
+                            write(asDoc.commentNoEnd());
+                        else
+                            begin();
                         emitMethodAccess(node);
                         hasDoc = true;
                     }
@@ -147,7 +162,10 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
                 {
                     if (!hasDoc)
                     {
-                        begin();
+                        if (asDoc != null)
+                            write(asDoc.commentNoEnd());
+                        else
+                            begin();
                         emitMethodAccess(node);
                         hasDoc = true;
                     }
@@ -165,11 +183,16 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
     {
         boolean hasDoc = false;
         
+        ASDocComment asDoc = (ASDocComment) ((IFunctionNode) node).getASDocComment();
+        
         String returnType = ((IFunctionNode) node).getReturnType();
         if (returnType != ""
                 && returnType != ASEmitterTokens.VOID.getToken()) // has return
         {
-            begin();
+            if (asDoc != null)
+                write(asDoc.commentNoEnd());
+            else
+                begin();
             hasDoc = true;
 
             ITypeDefinition tdef = ((IFunctionDefinition)node.getDefinition())
@@ -183,7 +206,10 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
         {
             if (!hasDoc)
             {
-                begin();
+                if (asDoc != null)
+                    write(asDoc.commentNoEnd());
+                else
+                    begin();
                 hasDoc = true;
             }
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f3e9ac72/compiler.jx/src/org/apache/flex/compiler/internal/parsing/as/FlexJSASDocDelegate.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/parsing/as/FlexJSASDocDelegate.java b/compiler.jx/src/org/apache/flex/compiler/internal/parsing/as/FlexJSASDocDelegate.java
new file mode 100644
index 0000000..c2fd2aa
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/parsing/as/FlexJSASDocDelegate.java
@@ -0,0 +1,119 @@
+package org.apache.flex.compiler.internal.parsing.as;
+
+
+
+
+import antlr.Token;
+
+import org.apache.flex.compiler.asdoc.IASDocComment;
+import org.apache.flex.compiler.asdoc.IASDocDelegate;
+import org.apache.flex.compiler.asdoc.IASParserASDocDelegate;
+import org.apache.flex.compiler.asdoc.IMetadataParserASDocDelegate;
+import org.apache.flex.compiler.asdoc.IPackageDITAParser;
+import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
+import org.apache.flex.compiler.common.ISourceLocation;
+import org.apache.flex.compiler.definitions.IDocumentableDefinition;
+import org.apache.flex.compiler.tree.as.IDocumentableDefinitionNode;
+
+/**
+ * Default implementation of {@link IASDocDelegate} that does not have any code
+ * model or eclipse dependencies.
+ */
+public final class FlexJSASDocDelegate implements IASDocDelegate
+{
+    private static final FlexJSASDocDelegate INSTANCE = new FlexJSASDocDelegate();
+
+    /**
+     * Gets the single instance of this delegate.
+     * 
+     * @return The single instance of this delegate.
+     */
+    public static IASDocDelegate get()
+    {
+        return INSTANCE;
+    }
+
+    public FlexJSASDocDelegate()
+    {
+    }
+
+    @Override
+    public IASParserASDocDelegate getASParserASDocDelegate()
+    {
+        return ASDelegate.INSTANCE;
+    }
+
+    @Override
+    public IASDocComment createASDocComment(ISourceLocation location, IDocumentableDefinition definition)
+    {
+        return null;
+    }
+
+    @Override
+    public IPackageDITAParser getPackageDitaParser()
+    {
+        return IPackageDITAParser.NIL_PARSER;
+    }
+
+    private static final class ASDelegate implements IASParserASDocDelegate
+    {
+        static final ASDelegate INSTANCE = new ASDelegate();
+
+        @Override
+        public void beforeVariable()
+        {
+        }
+
+        @Override
+        public void afterVariable()
+        {
+        }
+
+        Token currentToken;
+        
+        @Override
+        public void setCurrentASDocToken(Token asDocToken)
+        {
+            currentToken = asDocToken;
+        }
+
+        @Override
+        public IASDocComment afterDefinition(IDocumentableDefinitionNode definitionNode)
+        {
+            return new ASDocComment(currentToken);
+        }
+
+        @Override
+        public IMetadataParserASDocDelegate getMetadataParserASDocDelegate()
+        {
+            return MetadataDelegate.INSTANCE;
+        }
+
+    }
+
+    private static final class MetadataDelegate implements IMetadataParserASDocDelegate
+    {
+        static final MetadataDelegate INSTANCE = new MetadataDelegate();
+
+        @Override
+        public void setCurrentASDocToken(Token asDocToken)
+        {
+        }
+
+        @Override
+        public IASDocComment afterDefinition(IDocumentableDefinitionNode definitionNode)
+        {
+            return null;
+        }
+
+        @Override
+        public void clearMetadataComment(String metaDataTagName)
+        {
+        }
+
+        @Override
+        public void afterMetadata(int metaDataEndOffset)
+        {
+        }
+    }
+}