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/05/23 22:58:38 UTC

[royale-compiler] branch develop updated: fix the way we generate externs. This should eliminate warnings from Closure Compiler

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


The following commit(s) were added to refs/heads/develop by this push:
     new 850c46a  fix the way we generate externs.  This should eliminate warnings from Closure Compiler
850c46a is described below

commit 850c46aaf8aa008bf10701116477143a60996f23
Author: Alex Harui <ah...@apache.org>
AuthorDate: Wed May 23 15:58:28 2018 -0700

    fix the way we generate externs.  This should eliminate warnings from Closure Compiler
---
 .../codegen/js/jx/PackageFooterEmitter.java        | 225 +++++++++++----------
 .../codegen/js/jx/PackageHeaderEmitter.java        |  78 ++++---
 2 files changed, 166 insertions(+), 137 deletions(-)

diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/PackageFooterEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
index 980f1b3..0048b91 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
@@ -76,121 +76,124 @@ public class PackageFooterEmitter extends JSSubEmitter implements
 
 		boolean isInterface = tnode instanceof IInterfaceNode;
 
-	    /*
-	     * Metadata
-	     * 
-	     * @type {Object.<string, Array.<Object>>}
-	     */
-	    writeNewline();
-	    writeNewline();
-	    writeNewline();
-	    doc.begin();
-	    writeNewline(" * Metadata");
-	    writeNewline(" *");
-	    writeNewline(" * @type {Object.<string, Array.<Object>>}");
-	    doc.end();
-
-	    // a.B.prototype.AFJS_CLASS_INFO = {  };
-	    write(getEmitter().formatQualifiedName(tnode.getQualifiedName()));
-	    write(ASEmitterTokens.MEMBER_ACCESS);
-	    write(JSEmitterTokens.PROTOTYPE);
-	    write(ASEmitterTokens.MEMBER_ACCESS);
-	    writeToken(JSRoyaleEmitterTokens.ROYALE_CLASS_INFO);
-	    writeToken(ASEmitterTokens.EQUAL);
-	    writeToken(ASEmitterTokens.BLOCK_OPEN);
-	
-	    // names: [{ name: '', qName: '', kind:'interface|class' }]
-	    write(JSRoyaleEmitterTokens.NAMES);
-	    writeToken(ASEmitterTokens.COLON);
-	    write(ASEmitterTokens.SQUARE_OPEN);
-	    writeToken(ASEmitterTokens.BLOCK_OPEN);
-	    write(JSRoyaleEmitterTokens.NAME);
-	    writeToken(ASEmitterTokens.COLON);
-	    write(ASEmitterTokens.SINGLE_QUOTE);
-	    write(tnode.getName());
-	    write(ASEmitterTokens.SINGLE_QUOTE);
-	    writeToken(ASEmitterTokens.COMMA);
-	    write(JSRoyaleEmitterTokens.QNAME);
-	    writeToken(ASEmitterTokens.COLON);
-	    write(ASEmitterTokens.SINGLE_QUOTE);
-	    write(getEmitter().formatQualifiedName(tnode.getQualifiedName()));
-	    write(ASEmitterTokens.SINGLE_QUOTE);
-		writeToken(ASEmitterTokens.COMMA);
-		write(JSRoyaleEmitterTokens.ROYALE_CLASS_INFO_KIND);
-		writeToken(ASEmitterTokens.COLON);
-		write(ASEmitterTokens.SINGLE_QUOTE);
-		if (isInterface) write(JSRoyaleEmitterTokens.ROYALE_CLASS_INFO_INTERFACE_KIND);
-		else write(JSRoyaleEmitterTokens.ROYALE_CLASS_INFO_CLASS_KIND);
-		writeToken(ASEmitterTokens.SINGLE_QUOTE);
-	    write(ASEmitterTokens.BLOCK_CLOSE);
-	    write(ASEmitterTokens.SQUARE_CLOSE);
-
-	    IExpressionNode[] enodes;
-	    if (tnode instanceof IClassNode)
-	        enodes = ((IClassNode) tnode).getImplementedInterfaceNodes();
-	    else {
-			enodes = ((IInterfaceNode) tnode).getExtendedInterfaceNodes();
-		}
-
-
-		boolean needsIEventDispatcher = tnode instanceof IClassNode
-				&& ((IClassDefinition) tnode.getDefinition()).needsEventDispatcher(getProject())
-				&& getModel().getImplicitBindableImplementation() == ImplicitBindableImplementation.IMPLEMENTS;
-
-		//we can remove the mapping from the model for ImplicitBindableImplementation now
-		if (tnode.getDefinition() instanceof IClassDefinition)
-				getModel().unregisterImplicitBindableImplementation(
-						(IClassDefinition) tnode.getDefinition());
-
-	    if (enodes.length > 0 || needsIEventDispatcher)
+	    if (!getEmitter().getModel().isExterns)
 	    {
-	        writeToken(ASEmitterTokens.COMMA);
+		    /*
+		     * Metadata
+		     * 
+		     * @type {Object.<string, Array.<Object>>}
+		     */
+		    writeNewline();
+		    writeNewline();
+		    writeNewline();
+		    doc.begin();
+		    writeNewline(" * Metadata");
+		    writeNewline(" *");
+		    writeNewline(" * @type {Object.<string, Array.<Object>>}");
+		    doc.end();
 	
-	        // interfaces: [a.IC, a.ID]
-	        write(JSRoyaleEmitterTokens.INTERFACES);
-	        writeToken(ASEmitterTokens.COLON);
-	        write(ASEmitterTokens.SQUARE_OPEN);
-			if (needsIEventDispatcher) {
-				//add IEventDispatcher interface to implemented interfaces list
-				write(getEmitter().formatQualifiedName(BindableEmitter.DISPATCHER_INTERFACE_QNAME));
-				if (enodes.length > 0)
-					writeToken(ASEmitterTokens.COMMA);
+		    // a.B.prototype.AFJS_CLASS_INFO = {  };
+		    write(getEmitter().formatQualifiedName(tnode.getQualifiedName()));
+		    write(ASEmitterTokens.MEMBER_ACCESS);
+		    write(JSEmitterTokens.PROTOTYPE);
+		    write(ASEmitterTokens.MEMBER_ACCESS);
+		    writeToken(JSRoyaleEmitterTokens.ROYALE_CLASS_INFO);
+		    writeToken(ASEmitterTokens.EQUAL);
+		    writeToken(ASEmitterTokens.BLOCK_OPEN);
+		
+		    // names: [{ name: '', qName: '', kind:'interface|class' }]
+		    write(JSRoyaleEmitterTokens.NAMES);
+		    writeToken(ASEmitterTokens.COLON);
+		    write(ASEmitterTokens.SQUARE_OPEN);
+		    writeToken(ASEmitterTokens.BLOCK_OPEN);
+		    write(JSRoyaleEmitterTokens.NAME);
+		    writeToken(ASEmitterTokens.COLON);
+		    write(ASEmitterTokens.SINGLE_QUOTE);
+		    write(tnode.getName());
+		    write(ASEmitterTokens.SINGLE_QUOTE);
+		    writeToken(ASEmitterTokens.COMMA);
+		    write(JSRoyaleEmitterTokens.QNAME);
+		    writeToken(ASEmitterTokens.COLON);
+		    write(ASEmitterTokens.SINGLE_QUOTE);
+		    write(getEmitter().formatQualifiedName(tnode.getQualifiedName()));
+		    write(ASEmitterTokens.SINGLE_QUOTE);
+			writeToken(ASEmitterTokens.COMMA);
+			write(JSRoyaleEmitterTokens.ROYALE_CLASS_INFO_KIND);
+			writeToken(ASEmitterTokens.COLON);
+			write(ASEmitterTokens.SINGLE_QUOTE);
+			if (isInterface) write(JSRoyaleEmitterTokens.ROYALE_CLASS_INFO_INTERFACE_KIND);
+			else write(JSRoyaleEmitterTokens.ROYALE_CLASS_INFO_CLASS_KIND);
+			writeToken(ASEmitterTokens.SINGLE_QUOTE);
+		    write(ASEmitterTokens.BLOCK_CLOSE);
+		    write(ASEmitterTokens.SQUARE_CLOSE);
+	
+		    IExpressionNode[] enodes;
+		    if (tnode instanceof IClassNode)
+		        enodes = ((IClassNode) tnode).getImplementedInterfaceNodes();
+		    else {
+				enodes = ((IInterfaceNode) tnode).getExtendedInterfaceNodes();
 			}
-	        int i = 0;
-	        for (IExpressionNode enode : enodes)
-	        {
-	        	IDefinition edef = enode.resolve(getProject());
-	        	if (edef == null)
-	        		continue;
-	            write(getEmitter().formatQualifiedName(
-	                    edef.getQualifiedName()));
-	            if (i < enodes.length - 1)
-	                writeToken(ASEmitterTokens.COMMA);
-	            i++;
-	        }
-	        write(ASEmitterTokens.SQUARE_CLOSE);
+	
+	
+			boolean needsIEventDispatcher = tnode instanceof IClassNode
+					&& ((IClassDefinition) tnode.getDefinition()).needsEventDispatcher(getProject())
+					&& getModel().getImplicitBindableImplementation() == ImplicitBindableImplementation.IMPLEMENTS;
+	
+			//we can remove the mapping from the model for ImplicitBindableImplementation now
+			if (tnode.getDefinition() instanceof IClassDefinition)
+					getModel().unregisterImplicitBindableImplementation(
+							(IClassDefinition) tnode.getDefinition());
+	
+		    if (enodes.length > 0 || needsIEventDispatcher)
+		    {
+		        writeToken(ASEmitterTokens.COMMA);
+		
+		        // interfaces: [a.IC, a.ID]
+		        write(JSRoyaleEmitterTokens.INTERFACES);
+		        writeToken(ASEmitterTokens.COLON);
+		        write(ASEmitterTokens.SQUARE_OPEN);
+				if (needsIEventDispatcher) {
+					//add IEventDispatcher interface to implemented interfaces list
+					write(getEmitter().formatQualifiedName(BindableEmitter.DISPATCHER_INTERFACE_QNAME));
+					if (enodes.length > 0)
+						writeToken(ASEmitterTokens.COMMA);
+				}
+		        int i = 0;
+		        for (IExpressionNode enode : enodes)
+		        {
+		        	IDefinition edef = enode.resolve(getProject());
+		        	if (edef == null)
+		        		continue;
+		            write(getEmitter().formatQualifiedName(
+		                    edef.getQualifiedName()));
+		            if (i < enodes.length - 1)
+		                writeToken(ASEmitterTokens.COMMA);
+		            i++;
+		        }
+		        write(ASEmitterTokens.SQUARE_CLOSE);
+		    }
+		    write(ASEmitterTokens.SPACE);
+		    write(ASEmitterTokens.BLOCK_CLOSE);
+		    write(ASEmitterTokens.SEMICOLON);
+
+		    collectReflectionData(tnode);
+		    IMetaTagNode[] metadata = null;
+		    IMetaTagsNode metadataTags = tnode.getMetaTags();
+		    if (metadataTags != null)
+		    	metadata = metadataTags.getAllTags();
+	
+			String typeName = getEmitter().formatQualifiedName(tnode.getQualifiedName());
+	
+		    emitReflectionData(
+		    		typeName,
+					reflectionKind,
+		    		varData,
+		    		accessorData,
+		    		methodData,
+		    		metadata);
+		    
+		    emitExportProperties(typeName, exportProperties, exportSymbols);
 	    }
-	    write(ASEmitterTokens.SPACE);
-	    write(ASEmitterTokens.BLOCK_CLOSE);
-	    write(ASEmitterTokens.SEMICOLON);
-
-	    collectReflectionData(tnode);
-	    IMetaTagNode[] metadata = null;
-	    IMetaTagsNode metadataTags = tnode.getMetaTags();
-	    if (metadataTags != null)
-	    	metadata = metadataTags.getAllTags();
-
-		String typeName = getEmitter().formatQualifiedName(tnode.getQualifiedName());
-
-	    emitReflectionData(
-	    		typeName,
-				reflectionKind,
-	    		varData,
-	    		accessorData,
-	    		methodData,
-	    		metadata);
-	    
-	    emitExportProperties(typeName, exportProperties, exportSymbols);
     }
 
     public enum ReflectionKind{
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
index 172519e..acc7317 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
@@ -143,34 +143,60 @@ public class PackageHeaderEmitter extends JSSubEmitter implements
         writeNewline(" */");
         writeNewline();
 
-        /* goog.provide('x');\n\n */
-        write(JSGoogEmitterTokens.GOOG_PROVIDE);
-        write(ASEmitterTokens.PAREN_OPEN);
-        write(ASEmitterTokens.SINGLE_QUOTE);
-        write(((JSRoyaleEmitter)getEmitter()).formatQualifiedName(qname, true));
-        write(ASEmitterTokens.SINGLE_QUOTE);
-        write(ASEmitterTokens.PAREN_CLOSE);
-        writeNewline(ASEmitterTokens.SEMICOLON);
-        
-        HashMap<String, String> internalClasses = getEmitter().getModel().getInternalClasses();
-        if (internalClasses.size() > 0)
+        if (!isExterns)
         {
-        	ArrayList<String> classesInOrder = new ArrayList<String>();
-        	for (String internalClass : internalClasses.keySet())
-        	{
-        		classesInOrder.add(internalClass);
-        	}
-        	Collections.sort(classesInOrder);
-        	for (String internalClass : classesInOrder)
+	        /* goog.provide('x');\n\n */
+	        write(JSGoogEmitterTokens.GOOG_PROVIDE);
+	        write(ASEmitterTokens.PAREN_OPEN);
+	        write(ASEmitterTokens.SINGLE_QUOTE);
+	        write(((JSRoyaleEmitter)getEmitter()).formatQualifiedName(qname, true));
+	        write(ASEmitterTokens.SINGLE_QUOTE);
+	        write(ASEmitterTokens.PAREN_CLOSE);
+	        writeNewline(ASEmitterTokens.SEMICOLON);
+	        
+	        HashMap<String, String> internalClasses = getEmitter().getModel().getInternalClasses();
+	        if (internalClasses.size() > 0)
+	        {
+	        	ArrayList<String> classesInOrder = new ArrayList<String>();
+	        	for (String internalClass : internalClasses.keySet())
+	        	{
+	        		classesInOrder.add(internalClass);
+	        	}
+	        	Collections.sort(classesInOrder);
+	        	for (String internalClass : classesInOrder)
+	        	{
+	        	       /* goog.provide('x');\n\n */
+	                write(JSGoogEmitterTokens.GOOG_PROVIDE);
+	                write(ASEmitterTokens.PAREN_OPEN);
+	                write(ASEmitterTokens.SINGLE_QUOTE);
+	                write(((JSRoyaleEmitter)getEmitter()).formatQualifiedName(internalClass, true));
+	                write(ASEmitterTokens.SINGLE_QUOTE);
+	                write(ASEmitterTokens.PAREN_CLOSE);
+	                writeNewline(ASEmitterTokens.SEMICOLON);
+	        	}
+	        }
+        }
+        else
+        {
+        	String pkgName = definition.getQualifiedName();
+        	if (pkgName.length() > 0)
         	{
-        	       /* goog.provide('x');\n\n */
-                write(JSGoogEmitterTokens.GOOG_PROVIDE);
-                write(ASEmitterTokens.PAREN_OPEN);
-                write(ASEmitterTokens.SINGLE_QUOTE);
-                write(((JSRoyaleEmitter)getEmitter()).formatQualifiedName(internalClass, true));
-                write(ASEmitterTokens.SINGLE_QUOTE);
-                write(ASEmitterTokens.PAREN_CLOSE);
-                writeNewline(ASEmitterTokens.SEMICOLON);
+        		String[] parts = pkgName.split("\\.");
+        		String current = "";
+        		boolean firstOne = true;
+        		for (String part : parts)
+        		{
+        			current += part;
+        			if (firstOne)
+        			{
+        				write("var ");
+        				firstOne = false;
+        			}
+        			write(current);
+        			write(" = {}");
+	                writeNewline(ASEmitterTokens.SEMICOLON);
+	                current += ".";
+        		}
         	}
         }
         writeNewline();

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