You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2018/06/07 20:03:39 UTC

[royale-compiler] 05/05: try different format for externs

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

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

commit b58298c64978382382e5927ef9df06cdf2f6aaaa
Author: Alex Harui <ah...@apache.org>
AuthorDate: Thu Jun 7 13:02:30 2018 -0700

    try different format for externs
---
 .../internal/codegen/js/jx/AccessorEmitter.java    | 421 ++++++++++++---------
 1 file changed, 244 insertions(+), 177 deletions(-)

diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/AccessorEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/AccessorEmitter.java
index aaeee8d..a31ee90 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/AccessorEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/AccessorEmitter.java
@@ -94,162 +94,197 @@ public class AccessorEmitter extends JSSubEmitter implements
                 PropertyNodes p = getModel().getPropertyMap().get(propName);
                 IGetterNode getterNode = p.getter;
                 ISetterNode setterNode = p.setter;
-                if (getterNode != null)
+                if (getModel().isExterns)
                 {
+                	IAccessorNode node = (getterNode != null) ? getterNode : setterNode;
                     writeNewline();
                     writeNewline();
                     writeNewline();
+                	writeNewline("/**");
+                    if (emitExports)
+                    	writeNewline("  * @export");
+                    if (p.type != null)
+                    	writeNewline("  * @type {"+JSGoogDocEmitter.convertASTypeToJSType(p.type.getBaseName(), p.type.getPackageName()) + "} */");
+                    else
+                    	writeNewline("  */");
                     write(getEmitter().formatQualifiedName(qname));
                     write(ASEmitterTokens.MEMBER_ACCESS);
                     write(JSEmitterTokens.PROTOTYPE);
-                    if (fjs.isCustomNamespace((FunctionNode)getterNode))
+                    if (fjs.isCustomNamespace((FunctionNode)node))
                     {
-            			INamespaceDecorationNode ns = ((FunctionNode)getterNode).getActualNamespaceNode();
+            			INamespaceDecorationNode ns = ((FunctionNode)node).getActualNamespaceNode();
             			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
             			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
             			String s = nsDef.getURI();
-            			write("[\"" + s + "::" + JSRoyaleEmitterTokens.GETTER_PREFIX.getToken() + propName + "\"]");
+            			write("[\"" + s + "::" + propName + "\"]");
                     }
                     else
                     {
                         write(ASEmitterTokens.MEMBER_ACCESS);
-                        write(JSRoyaleEmitterTokens.GETTER_PREFIX);
                     	write(propName);
                     }
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.EQUAL);
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.FUNCTION);
-                    fjs.emitParameters(getterNode.getParametersContainerNode());
-
-                    fjs.emitDefinePropertyFunction(getterNode);
-                                        
-                    write(ASEmitterTokens.SEMICOLON);
+                    write(ASEmitterTokens.SEMICOLON);                	
+                	
                 }
-                if (setterNode != null)
+                else
                 {
-                	boolean isBindable = false;                
-                	IAccessorDefinition setterDef = (IAccessorDefinition)setterNode.getDefinition();
-                	IAccessorDefinition getterDef = null;
-                	if (getterNode != null)
-                		getterDef = (IAccessorDefinition)getterNode.getDefinition();
-                	if (setterDef.isBindable() || (getterDef != null && getterDef.isBindable()))
-                	{
-                		if (setterDef.isBindable())
-                		{
-                			IMetaTag[] tags = setterDef.getMetaTagsByName("Bindable");
-                			if (tags.length > 1)
-                        		isBindable = true;
-                			else if (tags.length == 1)
-                			{
-                				if (tags[0].getAllAttributes().length == 0)
-                					isBindable = true;
-                			}
-                		}
-                		else if (getterDef != null && getterDef.isBindable())
-                		{
-                			IMetaTag[] tags = getterDef.getMetaTagsByName("Bindable");
-                			if (tags.length > 1)
-                        		isBindable = true;
-                			else if (tags.length == 1)
-                			{
-                				if (tags[0].getAllAttributes().length == 0)
-                					isBindable = true;
-                			}                			
-                		}
-                	}
-                    writeNewline();
-                    writeNewline();
-                    writeNewline();
-                    write(getEmitter().formatQualifiedName(qname));
-                    write(ASEmitterTokens.MEMBER_ACCESS);
-                    write(JSEmitterTokens.PROTOTYPE);
-                    if (fjs.isCustomNamespace((FunctionNode)setterNode))
-                    {
-            			INamespaceDecorationNode ns = ((FunctionNode)setterNode).getActualNamespaceNode();
-            			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
-            			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
-            			String s = nsDef.getURI();
-            			write("[\"" + s + "::" + JSRoyaleEmitterTokens.SETTER_PREFIX.getToken() + propName + "\"]");
-                    }
-                    else
-                    {
-                        write(ASEmitterTokens.MEMBER_ACCESS);
-                        if (isBindable)
-                        	write(JSRoyaleEmitterTokens.BINDABLE_PREFIX);
-                        write(JSRoyaleEmitterTokens.SETTER_PREFIX);
-                    	write(propName);
-                    }
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.EQUAL);
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.FUNCTION);
-                    fjs.emitParameters(setterNode.getParametersContainerNode());
-
-                    fjs.emitDefinePropertyFunction(setterNode);
-                    
-                    write(ASEmitterTokens.SEMICOLON);
-                    
-                    if (isBindable)
-                    {
-                    	writeNewline();
-                    	writeNewline();
-                    	writeNewline();
-                        write(getEmitter().formatQualifiedName(qname));
-                        write(ASEmitterTokens.MEMBER_ACCESS);
-                        write(JSEmitterTokens.PROTOTYPE);
-                        write(ASEmitterTokens.MEMBER_ACCESS);
-                        write(JSRoyaleEmitterTokens.SETTER_PREFIX);
-                    	write(propName);
-                        write(ASEmitterTokens.SPACE);
-                        write(ASEmitterTokens.EQUAL);
-                        write(ASEmitterTokens.SPACE);
-                        write(ASEmitterTokens.FUNCTION);
-                        write(ASEmitterTokens.PAREN_OPEN);
-                        write("value");
-                        write(ASEmitterTokens.PAREN_CLOSE);
-                        write(ASEmitterTokens.SPACE);
-                        writeNewline(ASEmitterTokens.BLOCK_OPEN);
-                        write(ASEmitterTokens.VAR);
-                        write(ASEmitterTokens.SPACE);
-                        write("oldValue");
-                        write(ASEmitterTokens.SPACE);
-                        write(ASEmitterTokens.EQUAL);
-                        write(ASEmitterTokens.SPACE);
-                        write(ASEmitterTokens.THIS);
-                        write(ASEmitterTokens.MEMBER_ACCESS);
-                        write(JSRoyaleEmitterTokens.GETTER_PREFIX);
-                    	write(propName);
-                        write(ASEmitterTokens.PAREN_OPEN);
-                        write(ASEmitterTokens.PAREN_CLOSE);
-                        writeNewline(ASEmitterTokens.SEMICOLON);
-                        write(ASEmitterTokens.IF);
-                        write(ASEmitterTokens.SPACE);
-                        write(ASEmitterTokens.PAREN_OPEN);
-                        write("oldValue != value");
-                        write(ASEmitterTokens.PAREN_CLOSE);
-                        write(ASEmitterTokens.SPACE);
-                        writeNewline(ASEmitterTokens.BLOCK_OPEN);
-                        write(ASEmitterTokens.THIS);
-                        write(ASEmitterTokens.MEMBER_ACCESS);
-                        write(JSRoyaleEmitterTokens.BINDABLE_PREFIX);
-                        write(JSRoyaleEmitterTokens.SETTER_PREFIX);
-                    	write(propName);
-                        write(ASEmitterTokens.PAREN_OPEN);
-                        write("value");
-                        write(ASEmitterTokens.PAREN_CLOSE);
-                        writeNewline(ASEmitterTokens.SEMICOLON);
-                        writeNewline("    this.dispatchEvent("+fjs.formatQualifiedName(BindableEmitter.VALUECHANGE_EVENT_QNAME)+".createUpdateEvent(");
-                        writeNewline("         this, \"" + propName + "\", oldValue, value));");
-                        writeNewline(ASEmitterTokens.BLOCK_CLOSE);
-                        write(ASEmitterTokens.BLOCK_CLOSE);
-                        write(ASEmitterTokens.SEMICOLON);                        
-                        
-                    }
+	                if (getterNode != null)
+	                {
+	                    writeNewline();
+	                    writeNewline();
+	                    writeNewline();
+	                    write(getEmitter().formatQualifiedName(qname));
+	                    write(ASEmitterTokens.MEMBER_ACCESS);
+	                    write(JSEmitterTokens.PROTOTYPE);
+	                    if (fjs.isCustomNamespace((FunctionNode)getterNode))
+	                    {
+	            			INamespaceDecorationNode ns = ((FunctionNode)getterNode).getActualNamespaceNode();
+	            			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
+	            			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
+	            			String s = nsDef.getURI();
+	            			write("[\"" + s + "::" + JSRoyaleEmitterTokens.GETTER_PREFIX.getToken() + propName + "\"]");
+	                    }
+	                    else
+	                    {
+	                        write(ASEmitterTokens.MEMBER_ACCESS);
+	                        write(JSRoyaleEmitterTokens.GETTER_PREFIX);
+	                    	write(propName);
+	                    }
+	                    write(ASEmitterTokens.SPACE);
+	                    write(ASEmitterTokens.EQUAL);
+	                    write(ASEmitterTokens.SPACE);
+	                    write(ASEmitterTokens.FUNCTION);
+	                    fjs.emitParameters(getterNode.getParametersContainerNode());
+	
+	                    fjs.emitDefinePropertyFunction(getterNode);
+	                                        
+	                    write(ASEmitterTokens.SEMICOLON);
+	                }
+	                if (setterNode != null)
+	                {
+	                	boolean isBindable = false;                
+	                	IAccessorDefinition setterDef = (IAccessorDefinition)setterNode.getDefinition();
+	                	IAccessorDefinition getterDef = null;
+	                	if (getterNode != null)
+	                		getterDef = (IAccessorDefinition)getterNode.getDefinition();
+	                	if (setterDef.isBindable() || (getterDef != null && getterDef.isBindable()))
+	                	{
+	                		if (setterDef.isBindable())
+	                		{
+	                			IMetaTag[] tags = setterDef.getMetaTagsByName("Bindable");
+	                			if (tags.length > 1)
+	                        		isBindable = true;
+	                			else if (tags.length == 1)
+	                			{
+	                				if (tags[0].getAllAttributes().length == 0)
+	                					isBindable = true;
+	                			}
+	                		}
+	                		else if (getterDef != null && getterDef.isBindable())
+	                		{
+	                			IMetaTag[] tags = getterDef.getMetaTagsByName("Bindable");
+	                			if (tags.length > 1)
+	                        		isBindable = true;
+	                			else if (tags.length == 1)
+	                			{
+	                				if (tags[0].getAllAttributes().length == 0)
+	                					isBindable = true;
+	                			}                			
+	                		}
+	                	}
+	                    writeNewline();
+	                    writeNewline();
+	                    writeNewline();
+	                    write(getEmitter().formatQualifiedName(qname));
+	                    write(ASEmitterTokens.MEMBER_ACCESS);
+	                    write(JSEmitterTokens.PROTOTYPE);
+	                    if (fjs.isCustomNamespace((FunctionNode)setterNode))
+	                    {
+	            			INamespaceDecorationNode ns = ((FunctionNode)setterNode).getActualNamespaceNode();
+	            			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
+	            			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
+	            			String s = nsDef.getURI();
+	            			write("[\"" + s + "::" + JSRoyaleEmitterTokens.SETTER_PREFIX.getToken() + propName + "\"]");
+	                    }
+	                    else
+	                    {
+	                        write(ASEmitterTokens.MEMBER_ACCESS);
+	                        if (isBindable)
+	                        	write(JSRoyaleEmitterTokens.BINDABLE_PREFIX);
+	                        write(JSRoyaleEmitterTokens.SETTER_PREFIX);
+	                    	write(propName);
+	                    }
+	                    write(ASEmitterTokens.SPACE);
+	                    write(ASEmitterTokens.EQUAL);
+	                    write(ASEmitterTokens.SPACE);
+	                    write(ASEmitterTokens.FUNCTION);
+	                    fjs.emitParameters(setterNode.getParametersContainerNode());
+	
+	                    fjs.emitDefinePropertyFunction(setterNode);
+	                    
+	                    write(ASEmitterTokens.SEMICOLON);
+	                    
+	                    if (isBindable)
+	                    {
+	                    	writeNewline();
+	                    	writeNewline();
+	                    	writeNewline();
+	                        write(getEmitter().formatQualifiedName(qname));
+	                        write(ASEmitterTokens.MEMBER_ACCESS);
+	                        write(JSEmitterTokens.PROTOTYPE);
+	                        write(ASEmitterTokens.MEMBER_ACCESS);
+	                        write(JSRoyaleEmitterTokens.SETTER_PREFIX);
+	                    	write(propName);
+	                        write(ASEmitterTokens.SPACE);
+	                        write(ASEmitterTokens.EQUAL);
+	                        write(ASEmitterTokens.SPACE);
+	                        write(ASEmitterTokens.FUNCTION);
+	                        write(ASEmitterTokens.PAREN_OPEN);
+	                        write("value");
+	                        write(ASEmitterTokens.PAREN_CLOSE);
+	                        write(ASEmitterTokens.SPACE);
+	                        writeNewline(ASEmitterTokens.BLOCK_OPEN);
+	                        write(ASEmitterTokens.VAR);
+	                        write(ASEmitterTokens.SPACE);
+	                        write("oldValue");
+	                        write(ASEmitterTokens.SPACE);
+	                        write(ASEmitterTokens.EQUAL);
+	                        write(ASEmitterTokens.SPACE);
+	                        write(ASEmitterTokens.THIS);
+	                        write(ASEmitterTokens.MEMBER_ACCESS);
+	                        write(JSRoyaleEmitterTokens.GETTER_PREFIX);
+	                    	write(propName);
+	                        write(ASEmitterTokens.PAREN_OPEN);
+	                        write(ASEmitterTokens.PAREN_CLOSE);
+	                        writeNewline(ASEmitterTokens.SEMICOLON);
+	                        write(ASEmitterTokens.IF);
+	                        write(ASEmitterTokens.SPACE);
+	                        write(ASEmitterTokens.PAREN_OPEN);
+	                        write("oldValue != value");
+	                        write(ASEmitterTokens.PAREN_CLOSE);
+	                        write(ASEmitterTokens.SPACE);
+	                        writeNewline(ASEmitterTokens.BLOCK_OPEN);
+	                        write(ASEmitterTokens.THIS);
+	                        write(ASEmitterTokens.MEMBER_ACCESS);
+	                        write(JSRoyaleEmitterTokens.BINDABLE_PREFIX);
+	                        write(JSRoyaleEmitterTokens.SETTER_PREFIX);
+	                    	write(propName);
+	                        write(ASEmitterTokens.PAREN_OPEN);
+	                        write("value");
+	                        write(ASEmitterTokens.PAREN_CLOSE);
+	                        writeNewline(ASEmitterTokens.SEMICOLON);
+	                        writeNewline("    this.dispatchEvent("+fjs.formatQualifiedName(BindableEmitter.VALUECHANGE_EVENT_QNAME)+".createUpdateEvent(");
+	                        writeNewline("         this, \"" + propName + "\", oldValue, value));");
+	                        writeNewline(ASEmitterTokens.BLOCK_CLOSE);
+	                        write(ASEmitterTokens.BLOCK_CLOSE);
+	                        write(ASEmitterTokens.SEMICOLON);                        
+	                        
+	                    }
+	                }
                 }
             }
         }
-        if (!getModel().getPropertyMap().isEmpty())
+        if (!getModel().getPropertyMap().isEmpty() && !getModel().isExterns)
         {
             writeNewline();
             writeNewline();
@@ -437,69 +472,101 @@ public class AccessorEmitter extends JSSubEmitter implements
                 PropertyNodes p = getModel().getStaticPropertyMap().get(propName);
                 IGetterNode getterNode = p.getter;
                 ISetterNode setterNode = p.setter;
-                if (getterNode != null)
+                if (getModel().isExterns)
                 {
+                	IAccessorNode node = (getterNode != null) ? getterNode : setterNode;
                     writeNewline();
                     writeNewline();
                     writeNewline();
+                	writeNewline("/**");
+                    if (emitExports)
+                    	writeNewline("  * @export");
+                    if (p.type != null)
+                    	writeNewline("  * @type {"+JSGoogDocEmitter.convertASTypeToJSType(p.type.getBaseName(), p.type.getPackageName()) + "} */");
+                    else
+                    	writeNewline("  */");
                     write(getEmitter().formatQualifiedName(qname));
-                    if (fjs.isCustomNamespace((FunctionNode)getterNode))
+                    if (fjs.isCustomNamespace((FunctionNode)node))
                     {
-            			INamespaceDecorationNode ns = ((FunctionNode)getterNode).getActualNamespaceNode();
+            			INamespaceDecorationNode ns = ((FunctionNode)node).getActualNamespaceNode();
             			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
             			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
             			String s = nsDef.getURI();
-            			write("[\"" + s + "::" + JSRoyaleEmitterTokens.GETTER_PREFIX.getToken() + propName + "\"]");
+            			write("[\"" + s + "::" + propName + "\"]");
                     }
                     else
                     {
                         write(ASEmitterTokens.MEMBER_ACCESS);
-                        write(JSRoyaleEmitterTokens.GETTER_PREFIX);
                     	write(propName);
                     }
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.EQUAL);
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.FUNCTION);
-                    fjs.emitParameters(getterNode.getParametersContainerNode());
-
-                    fjs.emitDefinePropertyFunction(getterNode);
-                    
-                    write(ASEmitterTokens.SEMICOLON);
+                    write(ASEmitterTokens.SEMICOLON);                	
                 }
-                if (setterNode != null)
+                else
                 {
-                    writeNewline();
-                    writeNewline();
-                    writeNewline();
-                    write(getEmitter().formatQualifiedName(qname));
-                    if (fjs.isCustomNamespace((FunctionNode)setterNode))
-                    {
-            			INamespaceDecorationNode ns = ((FunctionNode)setterNode).getActualNamespaceNode();
-            			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
-            			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
-            			String s = nsDef.getURI();
-            			write("[\"" + s + "::" + JSRoyaleEmitterTokens.SETTER_PREFIX.getToken() + propName + "\"]");
-                    }
-                    else
-                    {
-                        write(ASEmitterTokens.MEMBER_ACCESS);
-                        write(JSRoyaleEmitterTokens.SETTER_PREFIX);
-                    	write(propName);
-                    }
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.EQUAL);
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.FUNCTION);
-                    fjs.emitParameters(setterNode.getParametersContainerNode());
-
-                    fjs.emitDefinePropertyFunction(setterNode);
-                    
-                    write(ASEmitterTokens.SEMICOLON);
+	                if (getterNode != null)
+	                {
+	                    writeNewline();
+	                    writeNewline();
+	                    writeNewline();
+	                    write(getEmitter().formatQualifiedName(qname));
+	                    if (fjs.isCustomNamespace((FunctionNode)getterNode))
+	                    {
+	            			INamespaceDecorationNode ns = ((FunctionNode)getterNode).getActualNamespaceNode();
+	            			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
+	            			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
+	            			String s = nsDef.getURI();
+	            			write("[\"" + s + "::" + JSRoyaleEmitterTokens.GETTER_PREFIX.getToken() + propName + "\"]");
+	                    }
+	                    else
+	                    {
+	                        write(ASEmitterTokens.MEMBER_ACCESS);
+	                        write(JSRoyaleEmitterTokens.GETTER_PREFIX);
+	                    	write(propName);
+	                    }
+	                    write(ASEmitterTokens.SPACE);
+	                    write(ASEmitterTokens.EQUAL);
+	                    write(ASEmitterTokens.SPACE);
+	                    write(ASEmitterTokens.FUNCTION);
+	                    fjs.emitParameters(getterNode.getParametersContainerNode());
+	
+	                    fjs.emitDefinePropertyFunction(getterNode);
+	                    
+	                    write(ASEmitterTokens.SEMICOLON);
+	                }
+	                if (setterNode != null)
+	                {
+	                    writeNewline();
+	                    writeNewline();
+	                    writeNewline();
+	                    write(getEmitter().formatQualifiedName(qname));
+	                    if (fjs.isCustomNamespace((FunctionNode)setterNode))
+	                    {
+	            			INamespaceDecorationNode ns = ((FunctionNode)setterNode).getActualNamespaceNode();
+	            			INamespaceDefinition nsDef = (INamespaceDefinition)ns.resolve(project);
+	            			fjs.formatQualifiedName(nsDef.getQualifiedName()); // register with used names 
+	            			String s = nsDef.getURI();
+	            			write("[\"" + s + "::" + JSRoyaleEmitterTokens.SETTER_PREFIX.getToken() + propName + "\"]");
+	                    }
+	                    else
+	                    {
+	                        write(ASEmitterTokens.MEMBER_ACCESS);
+	                        write(JSRoyaleEmitterTokens.SETTER_PREFIX);
+	                    	write(propName);
+	                    }
+	                    write(ASEmitterTokens.SPACE);
+	                    write(ASEmitterTokens.EQUAL);
+	                    write(ASEmitterTokens.SPACE);
+	                    write(ASEmitterTokens.FUNCTION);
+	                    fjs.emitParameters(setterNode.getParametersContainerNode());
+	
+	                    fjs.emitDefinePropertyFunction(setterNode);
+	                    
+	                    write(ASEmitterTokens.SEMICOLON);
+	                }
                 }
             }
         }
-        if (!getModel().getStaticPropertyMap().isEmpty())
+        if (!getModel().getStaticPropertyMap().isEmpty() && !getModel().isExterns)
         {
             writeNewline();
             writeNewline();

-- 
To stop receiving notification emails like this one, please contact
aharui@apache.org.