This is an automated email from the ASF dual-hosted git repository.

joshtynjala pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git

commit 9f86cdc12bdd29aa19fc6ebbb516c6f337194b03
Author: Josh Tynjala <[email protected]>
AuthorDate: Mon Nov 20 15:01:12 2023 -0800

    ClassEmitter, InterfaceEmitter: extract some of the branches into separate 
methods to help readability
---
 .../internal/codegen/js/jx/ClassEmitter.java       | 237 +++++++++++----------
 .../internal/codegen/js/jx/InterfaceEmitter.java   | 158 +++++++-------
 2 files changed, 209 insertions(+), 186 deletions(-)

diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ClassEmitter.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ClassEmitter.java
index 97e84701d..b3f2def6e 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ClassEmitter.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ClassEmitter.java
@@ -32,9 +32,7 @@ import 
org.apache.royale.compiler.definitions.INamespaceDefinition;
 import org.apache.royale.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.royale.compiler.internal.codegen.js.JSSubEmitter;
 import org.apache.royale.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
-import 
org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleDocEmitter;
 import org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitter;
-import 
org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitterTokens;
 import org.apache.royale.compiler.internal.codegen.js.utils.DocEmitterUtils;
 import org.apache.royale.compiler.internal.codegen.js.utils.EmitterUtils;
 import org.apache.royale.compiler.internal.projects.RoyaleJSProject;
@@ -99,125 +97,18 @@ public class ClassEmitter extends JSSubEmitter implements
 
         IFunctionDefinition ctorDefinition = definition.getConstructor();
 
-        // look for force-linking pattern in scope block node
-        int childNodeCount = node.getChildCount();
-        for (int i = 0; i < childNodeCount; i++)
-        {
-               IASNode child = node.getChild(i);
-               if (child.getNodeID() == ASTNodeID.BlockID)
-               {
-                       int blockNodeCount = child.getChildCount();
-                       for (int j = 0; j < blockNodeCount - 1; j++)
-                       {
-                               IASNode blockChild = child.getChild(j);
-                               if (blockChild.getNodeID() == 
ASTNodeID.ImportID)
-                               {
-                                       IASNode afterChild = child.getChild(j + 
1);
-                                       if (afterChild.getNodeID() == 
ASTNodeID.IdentifierID)
-                                       {
-                                               IDefinition def = 
((IdentifierNode)afterChild).resolve(project);
-                                               if (def instanceof 
IClassDefinition)
-                                               {
-                                                       
fjs.usedNames.add(def.getQualifiedName());
-                                               }
-                                       }
-                               }
-                       }
-                       break;
-               }               
-        }
+        collectUsedNames(node);
         
         // Static-only (Singleton) classes may not have a constructor
         if (ctorDefinition != null)
         {
-            IFunctionNode ctorNode = (IFunctionNode) ctorDefinition.getNode();
-            if (ctorNode != null)
-            {
-                // constructor
-                getEmitter().emitMethod(ctorNode);
-                write(ASEmitterTokens.SEMICOLON);
-            }
-            else
-            {
-                String qname = definition.getQualifiedName();
-                if (qname != null && !qname.equals(""))
-                {
-                    if (fjs.getModel().isExterns && 
definition.getBaseName().equals(qname))
-                    {
-                        writeToken(ASEmitterTokens.VAR);
-                    }
-                    write(getEmitter().formatQualifiedName(qname));
-                    write(ASEmitterTokens.SPACE);
-                    writeToken(ASEmitterTokens.EQUAL);
-                    write(ASEmitterTokens.FUNCTION);
-                    write(ASEmitterTokens.PAREN_OPEN);
-                    write(ASEmitterTokens.PAREN_CLOSE);
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.BLOCK_OPEN);
-                    writeNewline();
-                    fjs.emitComplexInitializers(node);
-                    write(ASEmitterTokens.BLOCK_CLOSE);
-                    write(ASEmitterTokens.SEMICOLON);
-                }
-            }
+            emitConstructor(ctorDefinition, definition, node);
         }
 
         IDefinitionNode[] dnodes = node.getAllMemberNodes();
         for (IDefinitionNode dnode : dnodes)
         {
-            if (dnode.getNodeID() == ASTNodeID.VariableID)
-            {
-                writeNewline();
-                writeNewline();
-                writeNewline();
-                getEmitter().emitField((IVariableNode) dnode);
-                startMapping(dnode, dnode);
-                write(ASEmitterTokens.SEMICOLON);
-                endMapping(dnode);
-            }
-            else if (dnode.getNodeID() == ASTNodeID.FunctionID)
-            {
-                if (!((IFunctionNode) dnode).isConstructor())
-                {
-                    writeNewline();
-                    writeNewline();
-                    writeNewline();
-                    getEmitter().emitMethod((IFunctionNode) dnode);
-                    write(ASEmitterTokens.SEMICOLON);
-                    if (getModel().defaultXMLNamespaceActive) {
-                        getModel().registerDefaultXMLNamespace((FunctionScope) 
((IFunctionNode) dnode).getScopedNode().getScope(), null);
-                    }
-                }
-            }
-            else if (dnode.getNodeID() == ASTNodeID.GetterID
-                    || dnode.getNodeID() == ASTNodeID.SetterID)
-            {
-                //writeNewline();
-                //writeNewline();
-                //writeNewline();
-                fjs.emitAccessors((IAccessorNode) dnode);
-                //this shouldn't write anything, just set up
-                //a data structure for emitASGettersAndSetters
-                //write(ASEmitterTokens.SEMICOLON);
-            }
-            else if (dnode.getNodeID() == ASTNodeID.BindableVariableID)
-            {
-                writeNewline();
-                writeNewline();
-                writeNewline();
-                getEmitter().emitField((IVariableNode) dnode);
-                startMapping(dnode, dnode);
-                write(ASEmitterTokens.SEMICOLON);
-                endMapping(dnode);
-            } else if (dnode.getNodeID() == ASTNodeID.NamespaceID) {
-                writeNewline();
-                writeNewline();
-                writeNewline();
-                getEmitter().emitNamespace((INamespaceNode) dnode);
-                startMapping(dnode, dnode);
-                write(ASEmitterTokens.SEMICOLON);
-                endMapping(dnode);
-            }
+            emitMember(dnode);
         }
 
         fjs.getBindableEmitter().emit(definition);
@@ -302,4 +193,126 @@ public class ClassEmitter extends JSSubEmitter implements
         if (wroteOne)
                writeNewline();
     }
+
+    private void emitConstructor(IFunctionDefinition ctorDefinition, 
IClassDefinition definition, IClassNode node) {
+        JSRoyaleEmitter fjs = (JSRoyaleEmitter) getEmitter();
+        IFunctionNode ctorNode = (IFunctionNode) ctorDefinition.getNode();
+        if (ctorNode != null)
+        {
+            // constructor
+            getEmitter().emitMethod(ctorNode);
+            write(ASEmitterTokens.SEMICOLON);
+        }
+        else
+        {
+            String qname = definition.getQualifiedName();
+            if (qname != null && !qname.equals(""))
+            {
+                if (fjs.getModel().isExterns && 
definition.getBaseName().equals(qname))
+                {
+                    writeToken(ASEmitterTokens.VAR);
+                }
+                write(getEmitter().formatQualifiedName(qname));
+                write(ASEmitterTokens.SPACE);
+                writeToken(ASEmitterTokens.EQUAL);
+                write(ASEmitterTokens.FUNCTION);
+                write(ASEmitterTokens.PAREN_OPEN);
+                write(ASEmitterTokens.PAREN_CLOSE);
+                write(ASEmitterTokens.SPACE);
+                write(ASEmitterTokens.BLOCK_OPEN);
+                writeNewline();
+                fjs.emitComplexInitializers(node);
+                write(ASEmitterTokens.BLOCK_CLOSE);
+                write(ASEmitterTokens.SEMICOLON);
+            }
+        }
+    }
+
+    private void collectUsedNames(IClassNode node) {
+        JSRoyaleEmitter fjs = (JSRoyaleEmitter) getEmitter();
+        // look for force-linking pattern in scope block node
+        int childNodeCount = node.getChildCount();
+        for (int i = 0; i < childNodeCount; i++)
+        {
+            IASNode child = node.getChild(i);
+            if (child.getNodeID() == ASTNodeID.BlockID)
+            {
+                int blockNodeCount = child.getChildCount();
+                for (int j = 0; j < blockNodeCount - 1; j++)
+                {
+                    IASNode blockChild = child.getChild(j);
+                    if (blockChild.getNodeID() == ASTNodeID.ImportID)
+                    {
+                        IASNode afterChild = child.getChild(j + 1);
+                        if (afterChild.getNodeID() == ASTNodeID.IdentifierID)
+                        {
+                            IDefinition def = 
((IdentifierNode)afterChild).resolve(getWalker().getProject());
+                            if (def instanceof IClassDefinition)
+                            {
+                                fjs.usedNames.add(def.getQualifiedName());
+                            }
+                        }
+                    }
+                }
+                break;
+            }          
+        }
+    }
+
+    private void emitMember(IDefinitionNode dnode) {
+        JSRoyaleEmitter fjs = (JSRoyaleEmitter) getEmitter();
+        if (dnode.getNodeID() == ASTNodeID.VariableID)
+        {
+            writeNewline();
+            writeNewline();
+            writeNewline();
+            getEmitter().emitField((IVariableNode) dnode);
+            startMapping(dnode, dnode);
+            write(ASEmitterTokens.SEMICOLON);
+            endMapping(dnode);
+        }
+        else if (dnode.getNodeID() == ASTNodeID.FunctionID)
+        {
+            if (!((IFunctionNode) dnode).isConstructor())
+            {
+                writeNewline();
+                writeNewline();
+                writeNewline();
+                getEmitter().emitMethod((IFunctionNode) dnode);
+                write(ASEmitterTokens.SEMICOLON);
+                if (getModel().defaultXMLNamespaceActive) {
+                    getModel().registerDefaultXMLNamespace((FunctionScope) 
((IFunctionNode) dnode).getScopedNode().getScope(), null);
+                }
+            }
+        }
+        else if (dnode.getNodeID() == ASTNodeID.GetterID
+                || dnode.getNodeID() == ASTNodeID.SetterID)
+        {
+            //writeNewline();
+            //writeNewline();
+            //writeNewline();
+            fjs.emitAccessors((IAccessorNode) dnode);
+            //this shouldn't write anything, just set up
+            //a data structure for emitASGettersAndSetters
+            //write(ASEmitterTokens.SEMICOLON);
+        }
+        else if (dnode.getNodeID() == ASTNodeID.BindableVariableID)
+        {
+            writeNewline();
+            writeNewline();
+            writeNewline();
+            getEmitter().emitField((IVariableNode) dnode);
+            startMapping(dnode, dnode);
+            write(ASEmitterTokens.SEMICOLON);
+            endMapping(dnode);
+        } else if (dnode.getNodeID() == ASTNodeID.NamespaceID) {
+            writeNewline();
+            writeNewline();
+            writeNewline();
+            getEmitter().emitNamespace((INamespaceNode) dnode);
+            startMapping(dnode, dnode);
+            write(ASEmitterTokens.SEMICOLON);
+            endMapping(dnode);
+        }
+    }
 }
diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/InterfaceEmitter.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/InterfaceEmitter.java
index cab1d554c..cb9550162 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/InterfaceEmitter.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/InterfaceEmitter.java
@@ -28,7 +28,6 @@ import 
org.apache.royale.compiler.internal.codegen.js.JSEmitterTokens;
 import org.apache.royale.compiler.internal.codegen.js.JSSubEmitter;
 import 
org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleDocEmitter;
 import org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitter;
-import 
org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitterTokens;
 import org.apache.royale.compiler.internal.tree.as.TypedExpressionNode;
 import org.apache.royale.compiler.projects.ICompilerProject;
 import org.apache.royale.compiler.tree.ASTNodeID;
@@ -60,90 +59,101 @@ public class InterfaceEmitter extends JSSubEmitter 
implements
         String qname = node.getQualifiedName();
         if (qname != null && !qname.equals(""))
         {
-            write(getEmitter().formatQualifiedName(qname));
-            write(ASEmitterTokens.SPACE);
-            writeToken(ASEmitterTokens.EQUAL);
-            write(ASEmitterTokens.FUNCTION);
-            write(ASEmitterTokens.PAREN_OPEN);
-            write(ASEmitterTokens.PAREN_CLOSE);
-            write(ASEmitterTokens.SPACE);
-            write(ASEmitterTokens.BLOCK_OPEN);
-            writeNewline();
-            write(ASEmitterTokens.BLOCK_CLOSE);
-            write(ASEmitterTokens.SEMICOLON);
+            emitConstructor(qname);
         }
-
-        JSRoyaleDocEmitter doc = (JSRoyaleDocEmitter) 
getEmitter().getDocEmitter();
            
         final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
         for (IDefinitionNode mnode : members)
         {
-            boolean isAccessor = mnode.getNodeID() == ASTNodeID.GetterID
-                    || mnode.getNodeID() == ASTNodeID.SetterID;
+            emitMember(mnode, node);
+        }
+        fjs.getPackageFooterEmitter().emitClassInfo(node);
+    }
 
-            String memberName = mnode.getQualifiedName();
-            if (!isAccessor
-                    || 
!getModel().getInterfacePropertyMap().contains(memberName))
-            {
-                writeNewline();
+    private void emitConstructor(String qname) {
+        write(getEmitter().formatQualifiedName(qname));
+        write(ASEmitterTokens.SPACE);
+        writeToken(ASEmitterTokens.EQUAL);
+        write(ASEmitterTokens.FUNCTION);
+        write(ASEmitterTokens.PAREN_OPEN);
+        write(ASEmitterTokens.PAREN_CLOSE);
+        write(ASEmitterTokens.SPACE);
+        write(ASEmitterTokens.BLOCK_OPEN);
+        writeNewline();
+        write(ASEmitterTokens.BLOCK_CLOSE);
+        write(ASEmitterTokens.SEMICOLON);
+    }
 
-                if (isAccessor)
-                {
-                       IAccessorNode accessor = (IAccessorNode)mnode;
-                       String propType = accessor.getVariableType();
-                       IExpressionNode typeNode = 
accessor.getVariableTypeNode();
-                       ITypeDefinition typeDef = typeNode.resolveType(project);
-                       String packageName = typeDef.getPackageName();
-                       packageName = project.getActualPackageName(packageName);
-                    if (typeNode instanceof TypedExpressionNode) {
-                        propType = "Vector.<" +
-                        JSRoyaleDocEmitter.convertASTypeToJSType(
-                                        
((TypedExpressionNode)typeNode).getTypeNode().resolveType(project).getQualifiedName(),
-                                        "")
-                                +">";
-                        packageName = "";
-                    }
-                    write(JSDocEmitterTokens.JSDOC_OPEN);
-                    write(ASEmitterTokens.SPACE);
-                    fjs.getDocEmitter().emitType(propType, packageName);
-                    write(ASEmitterTokens.SPACE);
-                    write(JSDocEmitterTokens.JSDOC_CLOSE);
-                }
-                else
-                {
-                       doc.emitMethodDoc((IFunctionNode)mnode, project);
-                }
-                write(getEmitter().formatQualifiedName(qname));
-                write(ASEmitterTokens.MEMBER_ACCESS);
-                write(JSEmitterTokens.PROTOTYPE);
-                write(ASEmitterTokens.MEMBER_ACCESS);
-                write(memberName);
-
-                if (isAccessor
-                        && !getModel().getInterfacePropertyMap()
-                                .contains(memberName))
-                {
-                    getModel().getInterfacePropertyMap().add(memberName);
-                }
-                else
-                {
-                    write(ASEmitterTokens.SPACE);
-                    writeToken(ASEmitterTokens.EQUAL);
-                    write(ASEmitterTokens.FUNCTION);
-
-                    fjs.emitParameters(((IFunctionNode) mnode)
-                            .getParametersContainerNode());
-
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.BLOCK_OPEN);
-                    writeNewline();
-                    write(ASEmitterTokens.BLOCK_CLOSE);
+    private void emitMember(IDefinitionNode mnode, IInterfaceNode node) {
+        JSRoyaleEmitter fjs = (JSRoyaleEmitter) getEmitter();
+        JSRoyaleDocEmitter doc = (JSRoyaleDocEmitter) 
getEmitter().getDocEmitter();
+
+        String qname = node.getQualifiedName();
+
+        boolean isAccessor = mnode.getNodeID() == ASTNodeID.GetterID
+                || mnode.getNodeID() == ASTNodeID.SetterID;
+
+        String memberName = mnode.getQualifiedName();
+        if (!isAccessor
+                || !getModel().getInterfacePropertyMap().contains(memberName))
+        {
+            writeNewline();
+
+            if (isAccessor)
+            {
+                IAccessorNode accessor = (IAccessorNode)mnode;
+                String propType = accessor.getVariableType();
+                IExpressionNode typeNode = accessor.getVariableTypeNode();
+                ITypeDefinition typeDef = 
typeNode.resolveType(getWalker().getProject());
+                String packageName = typeDef.getPackageName();
+                packageName = 
getWalker().getProject().getActualPackageName(packageName);
+                if (typeNode instanceof TypedExpressionNode) {
+                    propType = "Vector.<" +
+                    JSRoyaleDocEmitter.convertASTypeToJSType(
+                                    
((TypedExpressionNode)typeNode).getTypeNode().resolveType(getWalker().getProject()).getQualifiedName(),
+                                    "")
+                            +">";
+                    packageName = "";
                 }
+                write(JSDocEmitterTokens.JSDOC_OPEN);
+                write(ASEmitterTokens.SPACE);
+                fjs.getDocEmitter().emitType(propType, packageName);
+                write(ASEmitterTokens.SPACE);
+                write(JSDocEmitterTokens.JSDOC_CLOSE);
+            }
+            else
+            {
+                doc.emitMethodDoc((IFunctionNode)mnode, 
getWalker().getProject());
+            }
+            write(getEmitter().formatQualifiedName(qname));
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            write(JSEmitterTokens.PROTOTYPE);
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            write(memberName);
+
+            if (isAccessor
+                    && !getModel().getInterfacePropertyMap()
+                            .contains(memberName))
+            {
+                getModel().getInterfacePropertyMap().add(memberName);
+            }
+            else
+            {
+                write(ASEmitterTokens.SPACE);
+                writeToken(ASEmitterTokens.EQUAL);
+                write(ASEmitterTokens.FUNCTION);
+
+                fjs.emitParameters(((IFunctionNode) mnode)
+                        .getParametersContainerNode());
 
-                write(ASEmitterTokens.SEMICOLON);
+                write(ASEmitterTokens.SPACE);
+                write(ASEmitterTokens.BLOCK_OPEN);
+                writeNewline();
+                write(ASEmitterTokens.BLOCK_CLOSE);
             }
+
+            write(ASEmitterTokens.SEMICOLON);
         }
-        fjs.getPackageFooterEmitter().emitClassInfo(node);
     }
 
 }

Reply via email to