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 <[email protected]> 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 [email protected].
