1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Sun Jan 20 13:05:02 2013 +0100
1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Sun Jan 20 14:29:10 2013 +0100
1.3 @@ -22,6 +22,7 @@
1.4 import java.io.OutputStreamWriter;
1.5 import java.io.Writer;
1.6 import java.util.ArrayList;
1.7 +import java.util.Collection;
1.8 import java.util.Collections;
1.9 import java.util.List;
1.10 import java.util.Locale;
1.11 @@ -34,15 +35,18 @@
1.12 import javax.annotation.processing.SupportedAnnotationTypes;
1.13 import javax.lang.model.element.AnnotationMirror;
1.14 import javax.lang.model.element.Element;
1.15 +import javax.lang.model.element.ElementKind;
1.16 import javax.lang.model.element.ExecutableElement;
1.17 import javax.lang.model.element.Modifier;
1.18 import javax.lang.model.element.PackageElement;
1.19 import javax.lang.model.element.TypeElement;
1.20 +import javax.lang.model.element.VariableElement;
1.21 import javax.lang.model.type.MirroredTypeException;
1.22 import javax.lang.model.type.TypeMirror;
1.23 import javax.tools.Diagnostic;
1.24 import javax.tools.FileObject;
1.25 import javax.tools.StandardLocation;
1.26 +import org.apidesign.bck2brwsr.htmlpage.api.ComputedProperty;
1.27 import org.apidesign.bck2brwsr.htmlpage.api.On;
1.28 import org.apidesign.bck2brwsr.htmlpage.api.Page;
1.29 import org.apidesign.bck2brwsr.htmlpage.api.Property;
1.30 @@ -101,6 +105,7 @@
1.31 }
1.32 w.append(" }\n");
1.33 generateProperties(w, p.properties());
1.34 + generateComputedProperties(w, e.getEnclosedElements());
1.35 w.append("}\n");
1.36 } finally {
1.37 w.close();
1.38 @@ -234,7 +239,7 @@
1.39
1.40 private static void generateProperties(Writer w, Property[] properties) throws IOException {
1.41 for (Property p : properties) {
1.42 - String[] gs = toGetSet(p);
1.43 + String[] gs = toGetSet(p.name(), null);
1.44
1.45 final String tn = typeName(p);
1.46 w.write("private static " + tn + " prop_" + p.name() + ";\n");
1.47 @@ -247,8 +252,34 @@
1.48 }
1.49 }
1.50
1.51 - private static String[] toGetSet(Property p) {
1.52 - String n = Character.toUpperCase(p.name().charAt(0)) + p.name().substring(1);
1.53 + private void generateComputedProperties(Writer w, Collection<? extends Element> arr) throws IOException {
1.54 + for (Element e : arr) {
1.55 + if (e.getKind() != ElementKind.METHOD) {
1.56 + continue;
1.57 + }
1.58 + if (e.getAnnotation(ComputedProperty.class) == null) {
1.59 + continue;
1.60 + }
1.61 + ExecutableElement ee = (ExecutableElement)e;
1.62 + String[] gs = toGetSet(ee.getSimpleName().toString(), null);
1.63 +
1.64 + final String tn = ee.getReturnType().toString();
1.65 + w.write("public static " + tn + " " + gs[0] + "() {\n");
1.66 + w.write(" return " + e.getEnclosingElement().getSimpleName() + '.' + e.getSimpleName() + "(");
1.67 + String sep = "";
1.68 + for (VariableElement pe : ee.getParameters()) {
1.69 + String[] call = toGetSet(pe.getSimpleName().toString(), null);
1.70 + w.write(sep);
1.71 + w.write(call[0] + "()");
1.72 + sep = ", ";
1.73 + }
1.74 + w.write(");\n");
1.75 + w.write("}\n");
1.76 + }
1.77 + }
1.78 +
1.79 + private static String[] toGetSet(String name, Object type) {
1.80 + String n = Character.toUpperCase(name.charAt(0)) + name.substring(1);
1.81 // if (p.type() == boolean.class) {
1.82 // return new String[] { "is" + n, "set" + n };
1.83 // } else {