You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by gr...@apache.org on 2019/05/23 07:05:16 UTC

[royale-compiler] 01/04: Added 2 new doc directives for tuning js output: royalesuppressclosure and royalesuppressexport

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

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

commit cea3363e6b0c7220015ff423c14b708f320dd83a
Author: greg-dove <gr...@gmail.com>
AuthorDate: Wed May 22 13:35:20 2019 +1200

    Added 2 new doc directives for tuning js output: royalesuppressclosure and royalesuppressexport
---
 .../internal/codegen/js/jx/ClassEmitter.java         |  4 +++-
 .../internal/codegen/js/jx/MemberAccessEmitter.java  | 11 +++++++++++
 .../internal/codegen/js/jx/PackageFooterEmitter.java |  2 +-
 .../codegen/js/royale/JSRoyaleDocEmitter.java        | 20 ++++++++++++++++++++
 .../internal/codegen/js/royale/JSRoyaleEmitter.java  |  4 +++-
 .../codegen/js/royale/JSRoyaleEmitterTokens.java     |  2 ++
 .../internal/codegen/js/utils/DocEmitterUtils.java   |  9 +++++++++
 .../compiler/utils/JSClosureCompilerWrapper.java     |  2 +-
 .../main/java/org/apache/royale/maven/BaseMojo.java  |  4 +++-
 9 files changed, 53 insertions(+), 5 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 807e7ae..3f6e13e 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
@@ -67,6 +67,8 @@ public class ClassEmitter extends JSSubEmitter implements
         ASDocComment asDoc = (ASDocComment) node.getASDocComment();
         if (asDoc != null && keepASDoc)
             DocEmitterUtils.loadImportIgnores(fjs, asDoc.commentNoEnd());
+        
+        boolean suppressExport = (asDoc != null && DocEmitterUtils.hasSuppressExport(fjs, asDoc.commentNoEnd()));
 
         IClassDefinition definition = node.getDefinition();
 
@@ -131,7 +133,7 @@ public class ClassEmitter extends JSSubEmitter implements
             }
         }
 
-  	    if (!getEmitter().getModel().isExterns)
+  	    if (!getEmitter().getModel().isExterns && !suppressExport)
   	    {
   	        JSRoyaleDocEmitter doc = (JSRoyaleDocEmitter) getEmitter()
   	        .getDocEmitter();
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
index 968b78b..741affb 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
@@ -26,6 +26,7 @@ import org.apache.royale.compiler.definitions.IDefinition;
 import org.apache.royale.compiler.internal.codegen.as.ASEmitterTokens;
 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.codegen.js.goog.JSGoogEmitterTokens;
@@ -212,6 +213,11 @@ public class MemberAccessEmitter extends JSSubEmitter implements
 								parentNodeId != ASTNodeID.ArrayIndexExpressionID;
 				}
 			}
+			
+			if (needClosure
+					&& getEmitter().getDocEmitter() instanceof JSRoyaleDocEmitter
+					&& ((JSRoyaleDocEmitter)getEmitter().getDocEmitter()).getSuppressClosure())
+				needClosure = false;
         	if (needClosure)
         		getEmitter().emitClosureStart();
 
@@ -274,6 +280,11 @@ public class MemberAccessEmitter extends JSSubEmitter implements
 				needClosure = !isStatic && parentNodeId != ASTNodeID.FunctionCallID &&
 							parentNodeId != ASTNodeID.MemberAccessExpressionID &&
 							parentNodeId != ASTNodeID.ArrayIndexExpressionID;
+		
+				if (needClosure
+						&& getEmitter().getDocEmitter() instanceof JSRoyaleDocEmitter
+						&& ((JSRoyaleDocEmitter)getEmitter().getDocEmitter()).getSuppressClosure())
+					needClosure = false;
         		
         	}
         }
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 fec56eb..e0fd898 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,7 +76,7 @@ public class PackageFooterEmitter extends JSSubEmitter implements
         JSRoyaleDocEmitter doc = (JSRoyaleDocEmitter) getEmitter()
         .getDocEmitter();
 
-	    if (!getEmitter().getModel().isExterns)
+	    if (!getEmitter().getModel().isExterns && doc.getEmitExports())
 	    {
 			boolean isInterface = tnode instanceof IInterfaceNode;
 			boolean isDynamic = tnode instanceof IClassNode && tnode.hasModifier(ASModifier.DYNAMIC);
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleDocEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleDocEmitter.java
index 1ab5268..bd0eb9b 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleDocEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleDocEmitter.java
@@ -57,6 +57,8 @@ public class JSRoyaleDocEmitter extends JSGoogDocEmitter
     public boolean emitStringConversions = true;
     private boolean emitExports = true;
     private boolean exportProtected = false;
+    
+    private boolean suppressClosure = false;
 
     public JSRoyaleDocEmitter(IJSEmitter emitter)
     {
@@ -72,6 +74,14 @@ public class JSRoyaleDocEmitter extends JSGoogDocEmitter
     {
         this.classIgnoreList = value;
     }
+    
+    public Boolean getSuppressClosure() {
+        return suppressClosure;
+    }
+    
+    public Boolean getEmitExports() {
+        return emitExports;
+    }
 
     @Override
     protected String convertASTypeToJS(String name, String pname)
@@ -131,6 +141,7 @@ public class JSRoyaleDocEmitter extends JSGoogDocEmitter
         ignoreList = null;
         localSettings = null;
         emitStringConversions = true;
+        suppressClosure = false;
 
         IClassDefinition classDefinition = resolveClassDefinition(node);
 
@@ -246,6 +257,15 @@ public class JSRoyaleDocEmitter extends JSGoogDocEmitter
                         if (docText.contains(suppressVectorIndexCheck))
                             loadLocalSettings(docText,suppressVectorIndexCheck, "true");
                         
+                        String suppressClosureToken = JSRoyaleEmitterTokens.SUPPRESS_CLOSURE.getToken();
+    
+                        if (docText.contains(suppressClosureToken))
+                            suppressClosure = true;
+                        
+                        String suppressExport = JSRoyaleEmitterTokens.SUPPRESS_EXPORT.getToken();
+                        if (docText.contains(suppressExport))
+                            emitExports = false;
+                        
                         write(changeAnnotations(asDoc.commentNoEnd()));
                     }
                     else
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java
index 38a7ccd..4daba89 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitter.java
@@ -1085,7 +1085,8 @@ public class JSRoyaleEmitter extends JSGoogEmitter implements IJSRoyaleEmitter
     @Override
 	public void emitClosureStart()
     {
-        ICompilerProject project = getWalker().getProject();;
+        if (getDocEmitter() instanceof JSRoyaleDocEmitter && ((JSRoyaleDocEmitter) getDocEmitter()).getSuppressClosure()) return;
+        ICompilerProject project = getWalker().getProject();
         if (project instanceof RoyaleJSProject)
         	((RoyaleJSProject)project).needLanguage = true;
         getModel().needLanguage = true;
@@ -1096,6 +1097,7 @@ public class JSRoyaleEmitter extends JSGoogEmitter implements IJSRoyaleEmitter
     @Override
 	public void emitClosureEnd(IASNode node, IDefinition nodeDef)
     {
+        if (getDocEmitter() instanceof JSRoyaleDocEmitter && ((JSRoyaleDocEmitter) getDocEmitter()).getSuppressClosure()) return;
     	write(ASEmitterTokens.COMMA);
     	write(ASEmitterTokens.SPACE);
     	write(ASEmitterTokens.SINGLE_QUOTE);
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitterTokens.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitterTokens.java
index 1c61fb3..d0ad79f 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitterTokens.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/royale/JSRoyaleEmitterTokens.java
@@ -50,6 +50,8 @@ public enum JSRoyaleEmitterTokens implements IEmitterTokens
     IGNORE_COERCION("@royaleignorecoercion"),
     IGNORE_IMPORT("@royaleignoreimport"),
     IGNORE_STRING_COERCION("@royalenoimplicitstringconversion"),
+    SUPPRESS_EXPORT("@royalesuppressexport"),
+    SUPPRESS_CLOSURE("@royalesuppressclosure"),
     SUPPRESS_PUBLIC_VAR_WARNING("@royalesuppresspublicvarwarning"),
     SUPPRESS_COMPLEX_IMPLICIT_COERCION("@royalesuppresscompleximplicitcoercion"),
     SUPPRESS_RESOLVE_UNCERTAIN("@royalesuppressresolveuncertain"),
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/DocEmitterUtils.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/DocEmitterUtils.java
index dd9ed44..2e03bb0 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/DocEmitterUtils.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/DocEmitterUtils.java
@@ -46,4 +46,13 @@ public class DocEmitterUtils
         // TODO (mschmalle)
         ((JSRoyaleDocEmitter)emitter.getDocEmitter()).setClassIgnoreList(ignoreList);
     }
+    
+    
+    public static Boolean hasSuppressExport(JSRoyaleEmitter emitter, String doc)
+    {
+
+        String ignoreToken = JSRoyaleEmitterTokens.SUPPRESS_EXPORT.getToken();
+        int index = doc.indexOf(ignoreToken);
+        return index != -1;
+    }
 }
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/utils/JSClosureCompilerWrapper.java b/compiler-jx/src/main/java/org/apache/royale/compiler/utils/JSClosureCompilerWrapper.java
index a305b4f..8d8ace0 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/utils/JSClosureCompilerWrapper.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/utils/JSClosureCompilerWrapper.java
@@ -357,7 +357,7 @@ public class JSClosureCompilerWrapper
         		"asparam", "asreturn", "asreturns", "asprivate",
         		"royaleignoreimport", "royaleignorecoercion", "royaleemitcoercion",
                 "royalesuppresscompleximplicitcoercion","royalesuppressresolveuncertain",
-                "royalesuppressvectorindexcheck",
+                "royalesuppressvectorindexcheck","royalesuppressexport", "royalesuppressclosure",
                 "royalenoimplicitstringconversion","royaledebug"};
         options_.setExtraAnnotationNames(Arrays.asList(asdocTags));
     }
diff --git a/royale-maven-plugin/src/main/java/org/apache/royale/maven/BaseMojo.java b/royale-maven-plugin/src/main/java/org/apache/royale/maven/BaseMojo.java
index d748ffa..ca1add1 100644
--- a/royale-maven-plugin/src/main/java/org/apache/royale/maven/BaseMojo.java
+++ b/royale-maven-plugin/src/main/java/org/apache/royale/maven/BaseMojo.java
@@ -236,7 +236,9 @@ public abstract class BaseMojo
         List<String> args = new LinkedList<String>();
         args.add("-load-config=" + configFile.getPath());
         if(additionalCompilerOptions != null) {
-            if (additionalCompilerOptions.contains("\n")) additionalCompilerOptions = additionalCompilerOptions.replace("\n", "");
+            if (additionalCompilerOptions.contains("\n")) {
+                additionalCompilerOptions = additionalCompilerOptions.replace("\n", "");
+            }
             if (additionalCompilerOptions.contains(";"))
             {
                 String[] options = additionalCompilerOptions.split(";");