1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Mon Jan 21 16:04:25 2013 +0100
1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Mon Jan 21 16:16:30 2013 +0100
1.3 @@ -96,11 +96,9 @@
1.4 w.append("import org.apidesign.bck2brwsr.htmlpage.api.*;\n");
1.5 w.append("final class ").append(className).append(" {\n");
1.6 w.append(" private static boolean locked;\n");
1.7 - w.append(" public ").append(className).append("() {\n");
1.8 if (!initializeOnClick(className, (TypeElement) e, w, pp)) {
1.9 return false;
1.10 }
1.11 - w.append(" }\n");
1.12 for (String id : pp.ids()) {
1.13 String tag = pp.tagNameForId(id);
1.14 String type = type(tag);
1.15 @@ -177,6 +175,9 @@
1.16 // if (clazz.getKind() != ElementKind.CLASS) {
1.17 // continue;
1.18 // }
1.19 + w.append(" public ").append(className).append("() {\n");
1.20 + StringBuilder dispatch = new StringBuilder();
1.21 + int dispatchCnt = 0;
1.22 for (Element method : type.getEnclosedElements()) {
1.23 On oc = method.getAnnotation(On.class);
1.24 if (oc != null) {
1.25 @@ -218,15 +219,33 @@
1.26 return false;
1.27 }
1.28 w.append(" OnEvent." + oc.event()).append(".of(").append(cnstnt(id)).
1.29 - append(").perform(new Runnable() { public void run() {\n");
1.30 - w.append(" ").append(type.getSimpleName().toString()).
1.31 - append('.').append(ee.getSimpleName()).append("(");
1.32 - w.append(params);
1.33 - w.append(");\n");
1.34 - w.append(" }});\n");
1.35 - }
1.36 + append(").perform(new OnDispatch(" + dispatchCnt + "));\n");
1.37 +
1.38 + dispatch.
1.39 + append(" case ").append(dispatchCnt).append(": ").
1.40 + append(type.getSimpleName().toString()).
1.41 + append('.').append(ee.getSimpleName()).append("(").
1.42 + append(params).
1.43 + append("); break;\n");
1.44 +
1.45 + dispatchCnt++;
1.46 + }
1.47 }
1.48 }
1.49 + w.append(" }\n");
1.50 + if (dispatchCnt > 0) {
1.51 + w.append("class OnDispatch implements Runnable {\n");
1.52 + w.append(" private final int dispatch;\n");
1.53 + w.append(" OnDispatch(int d) { dispatch = d; }\n");
1.54 + w.append(" public void run() {\n");
1.55 + w.append(" switch (dispatch) {\n");
1.56 + w.append(dispatch);
1.57 + w.append(" }\n");
1.58 + w.append(" }\n");
1.59 + w.append("}\n");
1.60 + }
1.61 +
1.62 +
1.63 }
1.64 return true;
1.65 }