This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository jaxx. See http://git.nuiton.org/jaxx.git commit 04f0f8123fbd4337dca7a82f0c677bfc6e75eb1b Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Jan 8 13:37:35 2015 +0100 fixes #3613: Can't inheritates handler when using handler generated by Jaxx --- .../src/main/java/jaxx/compiler/JAXXCompiler.java | 55 ++++++++++++++++++++-- .../src/main/java/jaxx/compiler/java/JavaFile.java | 25 ++++++++++ 2 files changed, 76 insertions(+), 4 deletions(-) diff --git a/jaxx-compiler/src/main/java/jaxx/compiler/JAXXCompiler.java b/jaxx-compiler/src/main/java/jaxx/compiler/JAXXCompiler.java index 7fe6f46..60656d2 100644 --- a/jaxx-compiler/src/main/java/jaxx/compiler/JAXXCompiler.java +++ b/jaxx-compiler/src/main/java/jaxx/compiler/JAXXCompiler.java @@ -40,6 +40,7 @@ import jaxx.compiler.tags.DefaultObjectHandler; import jaxx.compiler.tags.TagHandler; import jaxx.compiler.tags.TagManager; import jaxx.runtime.ComponentDescriptor; +import jaxx.runtime.JAXXObject; import jaxx.runtime.JAXXObjectDescriptor; import jaxx.runtime.css.Rule; import jaxx.runtime.css.Stylesheet; @@ -736,14 +737,60 @@ public class JAXXCompiler { String handler = getUiHandler(); + boolean addField = true; + try { + + boolean superclassIsJAXXObject = isSuperClassAware(JAXXObject.class); + + if (superclassIsJAXXObject) { + + CompiledObject rootObject = getRootObject(); + ClassDescriptor rootObjectClass = rootObject.getObjectClass(); + // test if there is a super handler + try { + rootObjectClass.getDeclaredFieldDescriptor("handler"); + addField = false; + } catch (NoSuchFieldException e) { + + // no field handler found + } + } + + } catch (ClassNotFoundException e) { + throw new RuntimeException("Coul not find class ",e); + } + + String methodName = "createHandler"; + JavaField field = JavaElementFactory.newField( Modifier.PROTECTED | Modifier.FINAL, handler, DefaultObjectHandler.HANDLER_ATTRIBUTE, - false, - "new " + getImportedType(handler) + "()" - ); - javaFile.addField(field, false); + !addField, + methodName + "()"); + + if (addField) { + + javaFile.addField(field, false); + + } else { + + // override getter + javaFile.addOverrideGetterMethod(field.getName(), + Modifier.PUBLIC, + field.getType(), + true); + } + + String handlerType = getImportedType(handler); + JavaMethod method = JavaElementFactory.newMethod( + Modifier.PROTECTED, + handlerType, + methodName, + "return new " + handlerType + "();", + !addField); + javaFile.addMethod(method); + } compileSecondPass(document.getDocumentElement()); } diff --git a/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaFile.java b/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaFile.java index 116632d..4fac1bb 100644 --- a/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaFile.java +++ b/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaFile.java @@ -338,6 +338,31 @@ public class JavaFile extends JavaElement { return method; } + public JavaMethod addOverrideGetterMethod(String id, + int modifiers, + String type, + boolean useOverride) { + + String capitalizedName = StringUtils.capitalize(id); + String methodName = "get" + capitalizedName; + String bodyCode; + if (useOverride) { + bodyCode = "super." + methodName + "()"; + } else { + bodyCode = id; + } + bodyCode = "(" + type + ")" + bodyCode; + String content = String.format(GETTER_PATTERN, bodyCode); + JavaMethod method = JavaElementFactory.newMethod(modifiers, + type, + methodName, + content, + true + ); + addMethod(method); + return method; + } + public void addField(JavaField field, boolean javaBean) { addSimpleField(field); String id = field.getName(); -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.