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(";");