branch develop updated (39f1f30 -> 04f0f81)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository jaxx. See http://git.nuiton.org/jaxx.git from 39f1f30 update libs new 04f0f81 fixes #3613: Can't inheritates handler when using handler generated by Jaxx The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: 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 Summary of changes: .../src/main/java/jaxx/compiler/JAXXCompiler.java | 55 ++++++++++++++++++++-- .../src/main/java/jaxx/compiler/java/JavaFile.java | 25 ++++++++++ 2 files changed, 76 insertions(+), 4 deletions(-) -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
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>.
participants (1)
-
nuiton.org scm