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.