You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2016/08/30 07:30:28 UTC
[05/12] git commit: [flex-falcon] [refs/heads/develop] - [FIX]
Reverted to more traditional implementation of IEventDispatcher in JS to one
error at runtime.
[FIX] Reverted to more traditional implementation of IEventDispatcher in JS to one error at runtime.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/687c654a
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/687c654a
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/687c654a
Branch: refs/heads/develop
Commit: 687c654a2c7c8ccaf83e5221d1defbef3ce4dbd3
Parents: dbd3487
Author: greg-dove <gr...@gmail.com>
Authored: Fri Aug 26 16:29:26 2016 +1200
Committer: greg-dove <gr...@gmail.com>
Committed: Fri Aug 26 16:29:26 2016 +1200
----------------------------------------------------------------------
.../internal/codegen/js/jx/BindableEmitter.java | 266 ++++++++++---------
1 file changed, 136 insertions(+), 130 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/687c654a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
index edf54b6..1818867 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
@@ -19,7 +19,6 @@
package org.apache.flex.compiler.internal.codegen.js.jx;
-import org.apache.flex.compiler.codegen.IASGlobalFunctionConstants;
import org.apache.flex.compiler.codegen.ISubEmitter;
import org.apache.flex.compiler.codegen.js.IJSEmitter;
import org.apache.flex.compiler.constants.IASLanguageConstants;
@@ -30,7 +29,7 @@ import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.BindableVarIn
import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
-import org.apache.flex.compiler.internal.definitions.ClassDefinition;
+
import java.util.Map.Entry;
@@ -76,13 +75,6 @@ public class BindableEmitter extends JSSubEmitter implements
public void emitBindableConstructorCode(boolean popIndent) {
writeNewline("// Compiler generated Binding support implementation:");
String dispatcherClass = getEmitter().formatQualifiedName(DISPATCHER_CLASS_QNAME);
- String tempVar = "d";
- write(ASEmitterTokens.VAR);
- write(ASEmitterTokens.SPACE);
- write(tempVar);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.EQUAL);
- write(ASEmitterTokens.SPACE);
write(ASEmitterTokens.THIS);
write(ASEmitterTokens.MEMBER_ACCESS);
write(BINDABLE_DISPATCHER_NAME);
@@ -96,28 +88,11 @@ public class BindableEmitter extends JSSubEmitter implements
write(ASEmitterTokens.THIS);
write(ASEmitterTokens.PAREN_CLOSE);
writeNewline(ASEmitterTokens.SEMICOLON);
-
- writeAssignDispatcherProxyMethod("dispatchEvent", tempVar);
- writeAssignDispatcherProxyMethod("addEventListener", tempVar);
- writeAssignDispatcherProxyMethod("removeEventListener", tempVar);
- writeAssignDispatcherProxyMethod("hasEventListener", tempVar);
if (popIndent) writeNewline("",false);
else writeNewline();
}
- private void writeAssignDispatcherProxyMethod(String methodName, String tempVarName) {
- write(ASEmitterTokens.THIS);
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(methodName);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.EQUAL);
- write(ASEmitterTokens.SPACE);
- write(tempVarName);
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(methodName);
- writeNewline(ASEmitterTokens.SEMICOLON);
- }
private void emitBindableInterfaceMethods(IClassDefinition definition) {
writeNewline();
@@ -140,30 +115,50 @@ public class BindableEmitter extends JSSubEmitter implements
writeNewline(BINDABLE_DISPATCHER_NAME);
writeNewline();
- emitDefineBindableInterfaceMethod(qname,
- new String[]{ "/**",
- " * @export",
- " * @type {function(string , function(Object):void , boolean=, Object=):void}",
- " */"},
- "addEventListener");
- emitDefineBindableInterfaceMethod(qname,
- new String[]{ "/**",
- " * @export",
- " * @type {function(string , function(Object):void , boolean=, Object=):void}",
- " */"},
- "removeEventListener");
- emitDefineBindableInterfaceMethod(qname,
- new String[]{ "/**",
- " * @export",
- " * @type {function(Object):boolean}",
- " */"},
- "dispatchEvent");
- emitDefineBindableInterfaceMethod(qname,
- new String[]{ "/**",
- " * @export",
- " * @type {function(string):boolean}",
- " */"},
- "hasEventListener");
+ emitBindableInterfaceMethod(qname,
+ new String[]{ "/**",
+ " * @export",
+ " * @private",
+ " * @param {string} type",
+ " * @param {function(?):?}",
+ " * @param {boolean=} opt_capture",
+ " * @param {Object=} opt_handlerScope",
+ " */"},
+ "addEventListener",
+ "type , handler , opt_capture , opt_handlerScope",
+ "this."+BINDABLE_DISPATCHER_NAME+".addEventListener(type , handler , opt_capture , opt_handlerScope);");
+ emitBindableInterfaceMethod(qname,
+ new String[]{ "/**",
+ " * @export",
+ " * @private",
+ " * @param {string} type",
+ " * @param {function(?):?}",
+ " * @param {boolean=} opt_capture",
+ " * @param {Object=} opt_handlerScope",
+ " */"},
+ "removeEventListener",
+ "type , handler , opt_capture , opt_handlerScope",
+ "this."+BINDABLE_DISPATCHER_NAME+".removeEventListener(type , handler , opt_capture , opt_handlerScope);");
+ emitBindableInterfaceMethod(qname,
+ new String[]{ "/**",
+ " * @export",
+ " * @private",
+ " * @param {"+EVENT_QNAME+"} e",
+ " * @return {boolean}",
+ " */"},
+ "dispatchEvent",
+ "e",
+ "return this."+BINDABLE_DISPATCHER_NAME+".dispatchEvent(e);");
+ emitBindableInterfaceMethod(qname,
+ new String[]{ "/**",
+ " * @export",
+ " * @private",
+ " * @param {string} type",
+ " * @return {boolean}",
+ " */"},
+ "hasEventListener",
+ "type",
+ "return this."+BINDABLE_DISPATCHER_NAME+".hasEventListener(type);");
writeNewline("/**");
writeNewline(" * End of Binding support implementation of "+DISPATCHER_INTERFACE_QNAME);
@@ -171,7 +166,7 @@ public class BindableEmitter extends JSSubEmitter implements
writeNewline();
}
- private void emitDefineBindableInterfaceMethod(String qualifiedClassName, String[] docLines, String methodName) {
+ private void emitBindableInterfaceMethod(String qualifiedClassName, String[] docLines, String methodName, String methodArgs, String methodBody) {
for (String line : docLines)
{
@@ -183,11 +178,22 @@ public class BindableEmitter extends JSSubEmitter implements
write(JSEmitterTokens.PROTOTYPE);
write(ASEmitterTokens.MEMBER_ACCESS);
write(methodName);
- write(ASEmitterTokens.SEMICOLON);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.FUNCTION);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(methodArgs);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.SPACE);
+ writeNewline(ASEmitterTokens.BLOCK_OPEN,true);
+ writeNewline(methodBody,false);
+ writeNewline(ASEmitterTokens.BLOCK_CLOSE);
writeNewline();
}
+
private void emitInstanceBindableVars(IClassDefinition definition) {
if (definition.needsEventDispatcher(getProject())) {
@@ -230,81 +236,81 @@ public class BindableEmitter extends JSSubEmitter implements
private int emitStaticBindableVars(IClassDefinition definition) {
String qname = definition.getQualifiedName();
int outputCount = 0;
- writeNewline();
- writeNewline("/**");
- writeNewline(" * Compiler generated");
- writeNewline(" * Static Binding support");
- writeNewline(" * @private");
- writeNewline(" * @type {"+DISPATCHER_CLASS_QNAME+"}");
- writeNewline("*/");
- write(getEmitter().formatQualifiedName(qname));
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(BINDABLE_DISPATCHER_NAME);
- writeNewline(ASEmitterTokens.SEMICOLON);
- writeNewline();
- write(JSGoogEmitterTokens.OBJECT);
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSEmitterTokens.DEFINE_PROPERTIES);
- write(ASEmitterTokens.PAREN_OPEN);
-
- write(getEmitter().formatQualifiedName(qname));
- write(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.SPACE);
- write("/** @lends {" + getEmitter().formatQualifiedName(qname)
- + "} */ ");
- writeNewline(ASEmitterTokens.BLOCK_OPEN);
-
- //writeNewline("/** @export */");
- // export above did not work in the release build for the static getter/setter bindables,
- // solution below:
- //Commented by JT, in AccessorEmitter:
- // @expose is supposed to be deprecated, so this isn't ideal,
- // but @export and/or @nocollapse were not working in a release
- // build with ADVANCED_OPTIMIZATIONS, so I don't know what else
- // to do. maybe it's a bug in closure compiler... -JT
- writeNewline("/** @expose");
- writeNewline(" * @type {"+DISPATCHER_CLASS_QNAME+"} */");
- write(STATIC_DISPATCHER_GETTER);
- write(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SPACE);
- writeNewline(ASEmitterTokens.BLOCK_OPEN, true);
-
- write(ASEmitterTokens.GET);
- write(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.FUNCTION);
- write(ASEmitterTokens.PAREN_OPEN);
- write(ASEmitterTokens.PAREN_CLOSE);
- write(ASEmitterTokens.SPACE);
- writeNewline(ASEmitterTokens.BLOCK_OPEN);
-
- indentPush();
- write(ASEmitterTokens.INDENT);
- write(ASEmitterTokens.INDENT);
- write(ASEmitterTokens.RETURN);
- write(ASEmitterTokens.SPACE);
- write(getEmitter().formatQualifiedName(qname));
- write(ASEmitterTokens.MEMBER_ACCESS);
- writeNewline(BINDABLE_DISPATCHER_NAME);
- write(ASEmitterTokens.INDENT);
- write(ASEmitterTokens.LOGICAL_OR);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.PAREN_OPEN);
- write(getEmitter().formatQualifiedName(qname));
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(BINDABLE_DISPATCHER_NAME);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.EQUAL);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.NEW);
- write(ASEmitterTokens.SPACE);
- write(getEmitter().formatQualifiedName(DISPATCHER_CLASS_QNAME));
- write(ASEmitterTokens.PAREN_OPEN);
- write(ASEmitterTokens.PAREN_CLOSE);
- write(ASEmitterTokens.PAREN_CLOSE);
- writeNewline(ASEmitterTokens.SEMICOLON);
- indentPop();
- writeNewline(ASEmitterTokens.BLOCK_CLOSE);
+ writeNewline();
+ writeNewline("/**");
+ writeNewline(" * Compiler generated");
+ writeNewline(" * Static Binding support");
+ writeNewline(" * @private");
+ writeNewline(" * @type {"+DISPATCHER_CLASS_QNAME+"}");
+ writeNewline("*/");
+ write(getEmitter().formatQualifiedName(qname));
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(BINDABLE_DISPATCHER_NAME);
+ writeNewline(ASEmitterTokens.SEMICOLON);
+ writeNewline();
+ write(JSGoogEmitterTokens.OBJECT);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.DEFINE_PROPERTIES);
+ write(ASEmitterTokens.PAREN_OPEN);
+
+ write(getEmitter().formatQualifiedName(qname));
+ write(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SPACE);
+ write("/** @lends {" + getEmitter().formatQualifiedName(qname)
+ + "} */ ");
+ writeNewline(ASEmitterTokens.BLOCK_OPEN);
+
+ //writeNewline("/** @export */");
+ // export above did not work in the release build for the static getter/setter bindables,
+ // solution below:
+ //Commented by JT, in AccessorEmitter:
+ // @expose is supposed to be deprecated, so this isn't ideal,
+ // but @export and/or @nocollapse were not working in a release
+ // build with ADVANCED_OPTIMIZATIONS, so I don't know what else
+ // to do. maybe it's a bug in closure compiler... -JT
+ writeNewline("/** @expose");
+ writeNewline(" * @type {"+DISPATCHER_CLASS_QNAME+"} */");
+ write(STATIC_DISPATCHER_GETTER);
+ write(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SPACE);
+ writeNewline(ASEmitterTokens.BLOCK_OPEN, true);
+
+ write(ASEmitterTokens.GET);
+ write(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.FUNCTION);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.SPACE);
+ writeNewline(ASEmitterTokens.BLOCK_OPEN);
+
+ indentPush();
+ write(ASEmitterTokens.INDENT);
+ write(ASEmitterTokens.INDENT);
+ write(ASEmitterTokens.RETURN);
+ write(ASEmitterTokens.SPACE);
+ write(getEmitter().formatQualifiedName(qname));
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ writeNewline(BINDABLE_DISPATCHER_NAME);
+ write(ASEmitterTokens.INDENT);
+ write(ASEmitterTokens.LOGICAL_OR);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(getEmitter().formatQualifiedName(qname));
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(BINDABLE_DISPATCHER_NAME);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.NEW);
+ write(ASEmitterTokens.SPACE);
+ write(getEmitter().formatQualifiedName(DISPATCHER_CLASS_QNAME));
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ writeNewline(ASEmitterTokens.SEMICOLON);
+ indentPop();
+ writeNewline(ASEmitterTokens.BLOCK_CLOSE);
indentPop();
write(ASEmitterTokens.BLOCK_CLOSE);
@@ -316,7 +322,7 @@ public class BindableEmitter extends JSSubEmitter implements
writeNewline(ASEmitterTokens.COMMA);
firstTime = false;
} else
- writeNewline(ASEmitterTokens.COMMA, false);
+ writeNewline(ASEmitterTokens.COMMA, false);
emitBindableStaticVarDefineProperty(var.getKey(), var.getValue() , definition);
outputCount++;
@@ -333,7 +339,7 @@ public class BindableEmitter extends JSSubEmitter implements
private void emitBindableStaticVarDefineProperty(String name, BindableVarInfo info,
- IClassDefinition cdef)
+ IClassDefinition cdef)
{
// TODO (mschmalle) will remove this cast as more things get abstracted
JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
@@ -421,7 +427,7 @@ public class BindableEmitter extends JSSubEmitter implements
private void emitBindableInstanceVarDefineProperty(String name, BindableVarInfo info,
- IClassDefinition cdef)
+ IClassDefinition cdef)
{
// TODO (mschmalle) will remove this cast as more things get abstracted
JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();