branch develop updated (f06bfa0 -> 1504175)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository jaxx. See https://gitlab.nuiton.org/nuiton/jaxx.git from f06bfa0 [jgitflow-maven-plugin]Updating develop poms back to pre merge state new 1504175 Improve initialization of generated UI (fixes #4101) 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 1504175f6152a4171f65b9ed9ce7bea018017344 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Dec 30 08:34:06 2016 +0100 Improve initialization of generated UI (fixes #4101) Summary of changes: .../src/main/java/jaxx/compiler/JAXXCompiler.java | 15 +- .../decorators/DefaultCompiledObjectDecorator.java | 5 +- .../jaxx/compiler/finalizers/DefaultFinalizer.java | 660 +++++++++------------ .../main/java/jaxx/compiler/java/JavaField.java | 4 +- .../main/java/jaxx/compiler/java/JavaMethod.java | 12 +- 5 files changed, 281 insertions(+), 415 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 https://gitlab.nuiton.org/nuiton/jaxx.git commit 1504175f6152a4171f65b9ed9ce7bea018017344 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Dec 30 08:34:06 2016 +0100 Improve initialization of generated UI (fixes #4101) --- .../src/main/java/jaxx/compiler/JAXXCompiler.java | 15 +- .../decorators/DefaultCompiledObjectDecorator.java | 5 +- .../jaxx/compiler/finalizers/DefaultFinalizer.java | 660 +++++++++------------ .../main/java/jaxx/compiler/java/JavaField.java | 4 +- .../main/java/jaxx/compiler/java/JavaMethod.java | 12 +- 5 files changed, 281 insertions(+), 415 deletions(-) diff --git a/jaxx-compiler/src/main/java/jaxx/compiler/JAXXCompiler.java b/jaxx-compiler/src/main/java/jaxx/compiler/JAXXCompiler.java index 3c9ef45..b12e9a1 100644 --- a/jaxx-compiler/src/main/java/jaxx/compiler/JAXXCompiler.java +++ b/jaxx-compiler/src/main/java/jaxx/compiler/JAXXCompiler.java @@ -764,14 +764,12 @@ public class JAXXCompiler { throw new RuntimeException("Coul not find class ",e); } - String methodName = "createHandler"; - JavaField field = JavaElementFactory.newField( - Modifier.PROTECTED | Modifier.FINAL, + Modifier.PROTECTED, handler, DefaultObjectHandler.HANDLER_ATTRIBUTE, !addField, - methodName + "()"); + null); if (addField) { @@ -786,15 +784,6 @@ public class JAXXCompiler { 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/decorators/DefaultCompiledObjectDecorator.java b/jaxx-compiler/src/main/java/jaxx/compiler/decorators/DefaultCompiledObjectDecorator.java index 81861ff..86f2fb8 100644 --- a/jaxx-compiler/src/main/java/jaxx/compiler/decorators/DefaultCompiledObjectDecorator.java +++ b/jaxx-compiler/src/main/java/jaxx/compiler/decorators/DefaultCompiledObjectDecorator.java @@ -120,7 +120,7 @@ public class DefaultCompiledObjectDecorator implements CompiledObjectDecorator { type, id, false, - "this" + null ); javaFile.addSimpleField(field); @@ -277,8 +277,7 @@ public class DefaultCompiledObjectDecorator implements CompiledObjectDecorator { String additionCode = object.getAdditionCode(); if (additionCode.length() > 0) { code.append(object.getAdditionMethodName()).append("();").append(eol); - additionCode = "if (!allComponentsCreated) {" + eol + - " return;" + eol + "}" + eol + additionCode; +// additionCode = "if (!allComponentsCreated) {" + eol + " return;" + eol + "}" + eol + additionCode; javaFile.addMethod(JavaElementFactory.newMethod( Modifier.PROTECTED, JAXXCompilerFinalizer.TYPE_VOID, diff --git a/jaxx-compiler/src/main/java/jaxx/compiler/finalizers/DefaultFinalizer.java b/jaxx-compiler/src/main/java/jaxx/compiler/finalizers/DefaultFinalizer.java index 50f1a54..afcc93f 100644 --- a/jaxx-compiler/src/main/java/jaxx/compiler/finalizers/DefaultFinalizer.java +++ b/jaxx-compiler/src/main/java/jaxx/compiler/finalizers/DefaultFinalizer.java @@ -48,7 +48,6 @@ import jaxx.runtime.JAXXObject; import jaxx.runtime.JAXXObjectDescriptor; import jaxx.runtime.JAXXUtil; import jaxx.runtime.SwingUtil; -import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -96,10 +95,6 @@ public class DefaultFinalizer extends AbstractFinalizer { public static final String FIELD_NAME_$ACTIVE_BINDINGS = "$activeBindings"; - public static final String FIELD_NAME_ALL_COMPONENTS_CREATED = "allComponentsCreated"; - - public static final String FIELD_NAME_CONTEXT_INITIALIZED = "contextInitialized"; - public static final String FIELD_NAME_$PREVIOUS_VALUES = "$previousValues"; public static final String FIELD_NAME_$BINDINGS = "$bindings"; @@ -114,8 +109,6 @@ public class DefaultFinalizer extends AbstractFinalizer { public static final String METHOD_NAME_$GET_JAXXOBJECT_DESCRIPTOR = "$getJAXXObjectDescriptor"; - public static final String METHOD_NAME_$REGISTER_DEFAULT_BINDINGS = "$registerDefaultBindings"; - public static final String METHOD_NAME_REGISTER_DATA_BINDING = "registerDataBinding"; public static final String METHOD_NAME_REMOVE_DATA_BINDING = "removeDataBinding"; @@ -129,10 +122,12 @@ public class DefaultFinalizer extends AbstractFinalizer { public static final String METHOD_NAME_$GET_PROPERTY_CHANGE_SUPPORT = "$getPropertyChangeSupport"; public static final String METHOD_NAME_$INITIALIZE = "$initialize"; - - public static final String METHOD_NAME_$COMPLETE_SETUP = "$completeSetup"; - - public static final String METHOD_NAME_$AFTER_COMPLETE_SETUP = "$afterCompleteSetup"; + public static final String METHOD_NAME_$INITIALIZE_01_CREATE_COMPONENTS = "$initialize_01_createComponents"; + public static final String METHOD_NAME_$INITIALIZE_02_REGISTER_DATA_BINDINGS = "$initialize_02_registerDataBindings"; + public static final String METHOD_NAME_$INITIALIZE_03_FINALIZE_CREATE_COMPONENTS = "$initialize_03_finalizeCreateComponents"; + public static final String METHOD_NAME_$INITIALIZE_04_APPLY_DATA_BINDINGS = "$initialize_04_applyDataBindings"; + public static final String METHOD_NAME_$INITIALIZE_05_SET_PROPERTIES = "$initialize_05_setProperties"; + public static final String METHOD_NAME_$INITIALIZE_06_FINALIZE_INITIALIZE = "$initialize_06_finalizeInitialize"; /** serialVersionUID field */ @@ -183,27 +178,6 @@ public class DefaultFinalizer extends AbstractFinalizer { /** * */ - protected static final JavaField ALL_COMPONENTS_CREATED_FIELD = newField( - PRIVATE, - TYPE_BOOLEAN, - FIELD_NAME_ALL_COMPONENTS_CREATED, - false - ); - - /** - * - */ - protected static final JavaField CONTEXT_INITIALIZED = newField( - PRIVATE, - TYPE_BOOLEAN, - FIELD_NAME_CONTEXT_INITIALIZED, - false, - "true" - ); - - /** - * - */ protected static final JavaField PREVIOUS_VALUES_FIELD = newField( PROTECTED, Map.class.getName() + "<?,?>", FIELD_NAME_$PREVIOUS_VALUES, @@ -350,7 +324,7 @@ public class DefaultFinalizer extends AbstractFinalizer { JAXXObjectDescriptor.class.getName(), METHOD_NAME_$GET_JAXXOBJECT_DESCRIPTOR, "return %s.decodeCompressedJAXXObjectDescriptor(" + - FIELD_NAME_$JAXX_OBJECT_DESCRIPTOR + ");", + FIELD_NAME_$JAXX_OBJECT_DESCRIPTOR + ");", false ); @@ -438,8 +412,8 @@ public class DefaultFinalizer extends AbstractFinalizer { PropertyChangeSupport.class.getName(), METHOD_NAME_$GET_PROPERTY_CHANGE_SUPPORT, "if (" + FIELD_NAME_$PROPERTY_CHANGE_SUPPORT + " == null)\n" + - " " + FIELD_NAME_$PROPERTY_CHANGE_SUPPORT + " = new PropertyChangeSupport(this);\n" + - "return " + FIELD_NAME_$PROPERTY_CHANGE_SUPPORT + ";", + " " + FIELD_NAME_$PROPERTY_CHANGE_SUPPORT + " = new PropertyChangeSupport(this);\n" + + "return " + FIELD_NAME_$PROPERTY_CHANGE_SUPPORT + ";", false ); @@ -493,8 +467,6 @@ public class DefaultFinalizer extends AbstractFinalizer { newArgument(PropertyChangeListener.class.getName(), "listener") ); - private static final String PARAMETER_NAME_PARENT_CONTEXT = "parentContext"; - public static final String METHOD_NAME$BEFORE_INIT = "beforeInit"; private static final String METHOD_NAME$AFTER_INIT = "afterInit"; @@ -514,7 +486,7 @@ public class DefaultFinalizer extends AbstractFinalizer { String className) throws ClassNotFoundException { String fullClassName = packageName != null ? - packageName + "." + className : className; + packageName + "." + className : className; if (root == null) { throw new CompilerException("root tag can not be null"); } @@ -552,28 +524,25 @@ public class DefaultFinalizer extends AbstractFinalizer { addJAXXObjectSupport(compiler, root, javaFile); addSimpleField(javaFile, SERIAL_VERSION_UID_FIELD); - addSimpleField(javaFile, ALL_COMPONENTS_CREATED_FIELD); addJAXXObjectDescriptorField(compiler, javaFile); - addMethod(javaFile, - GET_JAXX_OBJECT_DESCRIPTOR_METHOD, - JAXXUtil.class.getName() - ); + addMethod(javaFile, GET_JAXX_OBJECT_DESCRIPTOR_METHOD, JAXXUtil.class.getName()); addPreviousValuesField(compiler, javaFile, root); -// addConstructors(compiler, javaFile, className); - DataBinding[] bindings = compiler.getBindingHelper().getDataBindings(); - addInitializerMethod(compiler, javaFile, bindings.length); + addInitializerMethod(compiler, javaFile); + addInitialize_01_createComponents(compiler, javaFile); + addInitialize_02_registerDataBindings(compiler, javaFile); + addInitialize_03_finalizeCreateComponents(compiler, javaFile); + addInitialize_04_applyDataBindings(compiler, javaFile); + addInitialize_05_setProperties(compiler, javaFile); + addInitialize_06_finalizeInitialize(compiler, javaFile); javaFile.addBodyCode(compiler.getBodyCode().toString()); addDataBindings(compiler, javaFile, bindings); - - addCompleteSetupMethod(compiler, javaFile); - addEventHandlers(compiler, javaFile); } @@ -586,18 +555,10 @@ public class DefaultFinalizer extends AbstractFinalizer { return; } - // create the $registerDefaultBindings method - - for (JAXXBindingWriter<?> writer : bindingWriters) { - writer.reset(); - } - addRegisteredDefaultBindingsMethod(compiler, javaFile); - // add import on each type of JAXXBinding used - for (JAXXBindingWriter<?> writer : bindingWriters) { if (writer.isUsed()) { - compiler.getJavaFile().addImport(writer.getType()); + javaFile.addImport(writer.getType()); } } @@ -610,53 +571,15 @@ public class DefaultFinalizer extends AbstractFinalizer { // add the data binding constant Id compiler.addSimpleField(newField( - (constantId.startsWith("BINDING_$") ? PRIVATE : PUBLIC) | FINAL | STATIC, - TYPE_STRING, - constantId, - false, - TypeManager.getJavaCode(binding.getRealId())) + (constantId.startsWith("BINDING_$") ? PRIVATE : PUBLIC) | FINAL | STATIC, + TYPE_STRING, + constantId, + false, + TypeManager.getJavaCode(binding.getRealId())) ); } } - protected void addConstructors(JAXXCompiler compiler, - JavaFile javaFile, - String className) { - - boolean superclassIsJAXXObject = javaFile.isSuperclassIsJAXXObject(); - - //TC 20090228 - only generate constructors if not done in scripts - boolean constructorDetected = false; - MethodDescriptor[] methods = compiler.getScriptMethods(); - for (MethodDescriptor m : methods) { - try { - m.getReturnType(); - if (className.equals(m.getName())) { - constructorDetected = true; - break; - } - } catch (Exception e) { - log.warn("could not find return type " + m); - } - } - if (!constructorDetected) { - - //creates default constructors - - JavaMethod constructor = createConstructor(compiler, - className, - superclassIsJAXXObject - ); - javaFile.addMethod(constructor); - constructor = createConstructorWithInitialContext( - compiler, - className, - superclassIsJAXXObject - ); - javaFile.addMethod(constructor); - } - } - protected void addJAXXObjectSupport(JAXXCompiler compiler, CompiledObject root, JavaFile javaFile) { @@ -694,11 +617,11 @@ public class DefaultFinalizer extends AbstractFinalizer { javaFile.getImportedType(jaxxContextImplementorClass); javaFile.addField(newField( - PROTECTED | FINAL, - JAXXContext.class.getName(), - FIELD_NAME_DELEGATE_CONTEXT, - true, - "new " + type + "()") + PROTECTED | FINAL, + JAXXContext.class.getName(), + FIELD_NAME_DELEGATE_CONTEXT, + true, + "new " + type + "()") ); javaFile.addImport(Container.class); @@ -711,8 +634,6 @@ public class DefaultFinalizer extends AbstractFinalizer { javaFile.addMethod(REMOVE_CONTEXT_VALUE_NAMED_METHOD); addMethod(javaFile, GET_PARENT_CONTAINER_METHOD, SwingUtil.class.getName()); addMethod(javaFile, GET_PARENT_CONTAINER_MORE_METHOD, SwingUtil.class.getName()); -// javaFile.addMethod(GET_PARENT_CONTAINER_METHOD); -// javaFile.addMethod(GET_PARENT_CONTAINER_MORE_METHOD); // PropertyChangeSupport addPropertyChangeSupport(root, javaFile); @@ -725,15 +646,13 @@ public class DefaultFinalizer extends AbstractFinalizer { protected void addLoggerSupport(JAXXCompiler compiler, JavaFile javaFile, String className) { if (compiler.getConfiguration().isAddLogger()) { -// javaFile.addImport(LogFactory.class); - javaFile.addSimpleField(newField( - PRIVATE | STATIC | FINAL, - Log.class.getName(), - "log", - false, - "%s.getLog(" + className + ".class)", - LogFactory.class.getName() + PRIVATE | STATIC | FINAL, + Log.class.getName(), + "log", + false, + "%s.getLog(" + className + ".class)", + LogFactory.class.getName() ) ); } @@ -741,7 +660,7 @@ public class DefaultFinalizer extends AbstractFinalizer { protected final JAXXBindingWriter<?>[] bindingWriters = new JAXXBindingWriter[]{new SimpleJAXXObjectBindingWriter(), - new DefaultJAXXBindingWriter() + new DefaultJAXXBindingWriter() }; /*---------------------------------------------------------------------------------*/ @@ -779,11 +698,11 @@ public class DefaultFinalizer extends AbstractFinalizer { for (int i = 0; i < data.length(); i += sizeLimit) { String name = FIELD_NAME_$JAXX_OBJECT_DESCRIPTOR + i; javaFile.addField(newField( - PRIVATE | STATIC, - TYPE_STRING, - name, - false, - TypeManager.getJavaCode(data.substring(i, Math.min(i + sizeLimit, data.length())))) + PRIVATE | STATIC, + TYPE_STRING, + name, + false, + TypeManager.getJavaCode(data.substring(i, Math.min(i + sizeLimit, data.length())))) ); if (initializer.length() > 0) { initializer.append(" + "); @@ -837,7 +756,7 @@ public class DefaultFinalizer extends AbstractFinalizer { } if (needField && log.isDebugEnabled()) { log.debug("no " + PREVIOUS_VALUES_FIELD.getName() + - " field in super class"); + " field in super class"); } } if (needField) { @@ -868,7 +787,7 @@ public class DefaultFinalizer extends AbstractFinalizer { } int modifiers = firePropertyChange != null ? - firePropertyChange.getModifiers() : 0; + firePropertyChange.getModifiers() : 0; if (isPublic(modifiers)) { // we have all the support we need return; @@ -890,37 +809,212 @@ public class DefaultFinalizer extends AbstractFinalizer { } } - protected JavaMethod addRegisteredDefaultBindingsMethod(JAXXCompiler compiler, - JavaFile javaFile) { - DataBinding[] bindings = compiler.getBindingHelper().getDataBindings(); - StringBuilder initCode = new StringBuilder(); + protected void addInitialize_01_createComponents(JAXXCompiler compiler, JavaFile javaFile) { + StringBuilder body = new StringBuilder(); + body.append(JavaFileGenerator.addDebugLoggerInvocation(compiler, "this")); + String eol = JAXXCompiler.getLineSeparator(); + if (javaFile.isSuperclassIsJAXXObject()) { + body.append(String.format("super.%s();", METHOD_NAME_$INITIALIZE_01_CREATE_COMPONENTS)).append(eol); + } + + CompiledObject root = compiler.getRootObject(); + + String rootId = root.getId(); + body.append(FIELD_NAME_$OBJECT_MAP + ".put(").append(TypeManager.getJavaCode(rootId)).append(", ").append(rootId).append(");").append(eol); + + Iterator<CompiledObject> i = compiler.getObjectCreationOrder(); + boolean lastWasMethodCall = false; + //TODO-TC20091025 should do init of root first ? +// root.getDecorator().createInitializer(compiler, root, root, code, lastWasMethodCall); + while (i.hasNext()) { + CompiledObject object = i.next(); + if (object == root) { + continue; + } + CompiledObjectDecorator decorator = object.getDecorator(); + lastWasMethodCall = decorator.createInitializer(compiler, + root, + object, + body, + lastWasMethodCall + ); + } + root.getDecorator().createInitializer(compiler, + root, + root, + body, + lastWasMethodCall + ); + if (compiler.getInitializer().length() > 0) { + body.append(compiler.getInitializer()); + } + JavaMethod method = newMethod(PROTECTED, + TYPE_VOID, + METHOD_NAME_$INITIALIZE_01_CREATE_COMPONENTS, + body.toString(), + javaFile.isSuperclassIsJAXXObject() + ); + javaFile.addMethod(method); + } + protected void addInitialize_02_registerDataBindings(JAXXCompiler compiler, JavaFile javaFile) { + StringBuilder body = new StringBuilder(); + body.append(JavaFileGenerator.addDebugLoggerInvocation(compiler, "this")); String eol = JAXXCompiler.getLineSeparator(); + if (javaFile.isSuperclassIsJAXXObject()) { + body.append(String.format("super.%s();", METHOD_NAME_$INITIALIZE_02_REGISTER_DATA_BINDINGS)).append(eol); + } JavaFileGenerator generator = new JavaFileGenerator(eol, true); //TODO use optimized writer for simple cases - initCode.append("// register "); - initCode.append(bindings.length); - initCode.append(" data bindings"); - initCode.append(eol); + for (JAXXBindingWriter<?> writer : bindingWriters) { + writer.reset(); + } + + // add import on each type of JAXXBinding used + + for (JAXXBindingWriter<?> writer : bindingWriters) { + if (writer.isUsed()) { + compiler.getJavaFile().addImport(writer.getType()); + } + } + + DataBinding[] bindings = compiler.getBindingHelper().getDataBindings(); + body.append("// register "); + body.append(bindings.length); + body.append(" data bindings"); + body.append(eol); for (DataBinding binding : bindings) { for (JAXXBindingWriter<?> writer : bindingWriters) { if (writer.accept(binding)) { - writer.write(binding, generator, initCode); + writer.write(binding, generator, body); break; } } } - JavaMethod method = newMethod(PRIVATE, + JavaMethod method = newMethod(PROTECTED, TYPE_VOID, - METHOD_NAME_$REGISTER_DEFAULT_BINDINGS, - initCode.toString(), - false + METHOD_NAME_$INITIALIZE_02_REGISTER_DATA_BINDINGS, + body.toString(), + javaFile.isSuperclassIsJAXXObject() + ); + javaFile.addMethod(method); + } + + protected void addInitialize_03_finalizeCreateComponents(JAXXCompiler compiler, JavaFile javaFile) { + + StringBuilder body = new StringBuilder(); + body.append(JavaFileGenerator.addDebugLoggerInvocation(compiler, "this")); + String eol = JAXXCompiler.getLineSeparator(); + if (javaFile.isSuperclassIsJAXXObject()) { + body.append(String.format("super.%s();", METHOD_NAME_$INITIALIZE_03_FINALIZE_CREATE_COMPONENTS)).append(eol); + } + for (CompiledObject object : compiler.getObjects().values()) { + CompiledObjectDecorator decorator = object.getDecorator(); + body.append(decorator.createCompleteSetupMethod(compiler, + object, + javaFile) + ); + } + JavaMethod method = newMethod(PROTECTED, + TYPE_VOID, + METHOD_NAME_$INITIALIZE_03_FINALIZE_CREATE_COMPONENTS, + body.toString(), + javaFile.isSuperclassIsJAXXObject() + ); + javaFile.addMethod(method); + } + + protected void addInitialize_04_applyDataBindings(JAXXCompiler compiler, JavaFile javaFile) { + StringBuilder body = new StringBuilder(); + String eol = JAXXCompiler.getLineSeparator(); + body.append(JavaFileGenerator.addDebugLoggerInvocation(compiler, "this")); + if (javaFile.isSuperclassIsJAXXObject()) { + body.append(String.format("super.%s();", METHOD_NAME_$INITIALIZE_04_APPLY_DATA_BINDINGS)).append(eol); + } + DataBinding[] bindings = compiler.getBindingHelper().getDataBindings(); + if (bindings.length > 0) { + + body.append(eol); + body.append("// apply "); + body.append(bindings.length); + body.append(" data bindings"); + body.append(eol); + body.append(JAXXUtil.class.getSimpleName()); + body.append("." + METHOD_NAME_APPLY_DATA_BINDING + "(this, " + FIELD_NAME_$BINDINGS + ".keySet());"); + body.append(eol); + + } + JavaMethod method = newMethod(PROTECTED, + TYPE_VOID, + METHOD_NAME_$INITIALIZE_04_APPLY_DATA_BINDINGS, + body.toString(), + javaFile.isSuperclassIsJAXXObject() + ); + javaFile.addMethod(method); + } + + protected void addInitialize_05_setProperties(JAXXCompiler compiler, JavaFile javaFile) { + StringBuilder body = new StringBuilder(); + String eol = JAXXCompiler.getLineSeparator(); + body.append(JavaFileGenerator.addDebugLoggerInvocation(compiler, "this")); + if (javaFile.isSuperclassIsJAXXObject()) { + body.append(String.format("super.%s();", METHOD_NAME_$INITIALIZE_05_SET_PROPERTIES)).append(eol); + } + DataBinding[] bindings = compiler.getBindingHelper().getSimpleBindings(); + if (bindings.length > 0) { + + StringBuilder initCode = new StringBuilder(); + + for (DataBinding binding : bindings) { + + String binding1 = binding.getInitDataBinding(); + if (binding1 != null && !binding1.trim().isEmpty()) { + initCode.append(binding1); + } + } + + if (initCode.length() > 0) { + + body.append(eol); + body.append("// apply "); + body.append(bindings.length); + body.append(" property setters"); + body.append(eol); + body.append(initCode.toString().trim()); + + } + } + + if (compiler.getLateInitializer().length() > 0) { + body.append("// late initializer").append(eol); + body.append(compiler.getLateInitializer()).append(eol); + } + JavaMethod method = newMethod(PROTECTED, + TYPE_VOID, + METHOD_NAME_$INITIALIZE_05_SET_PROPERTIES, + body.toString(), + javaFile.isSuperclassIsJAXXObject() + ); + javaFile.addMethod(method); + } + + protected void addInitialize_06_finalizeInitialize(JAXXCompiler compiler, JavaFile javaFile) { + StringBuilder body = new StringBuilder(); + body.append(JavaFileGenerator.addDebugLoggerInvocation(compiler, "this")); + String eol = JAXXCompiler.getLineSeparator(); + if (javaFile.isSuperclassIsJAXXObject()) { + body.append(String.format("super.%s();", METHOD_NAME_$INITIALIZE_06_FINALIZE_INITIALIZE)).append(eol); + } + JavaMethod method = newMethod(PROTECTED, + TYPE_VOID, + METHOD_NAME_$INITIALIZE_06_FINALIZE_INITIALIZE, + body.toString(), + javaFile.isSuperclassIsJAXXObject() ); javaFile.addMethod(method); - return method; } protected void addEventHandlers(JAXXCompiler compiler, @@ -940,9 +1034,9 @@ public class DefaultFinalizer extends AbstractFinalizer { if (listenerMethod.getParameterTypes().length != 1) { throw new CompilerException( "Expected event handler " + - listenerMethod.getName() + " of class " + - handler.getListenerClass() + - " to have exactly one argument" + listenerMethod.getName() + " of class " + + handler.getListenerClass() + + " to have exactly one argument" ); } @@ -958,290 +1052,72 @@ public class DefaultFinalizer extends AbstractFinalizer { String body = JavaFileGenerator.addDebugLoggerInvocation(compiler, "event"); body += handler.getJavaCode(); javaFile.addMethod(JavaElementFactory.newMethod( - PUBLIC, - TYPE_VOID, - methodName, - body, - false, - argument) + PUBLIC, + TYPE_VOID, + methodName, + body, + false, + argument) ); } } } } - protected JavaMethod createConstructor(JAXXCompiler compiler, - String className, - boolean superclassIsJAXXObject) throws CompilerException { - StringBuilder code = new StringBuilder(); - String constructorParams = compiler.getRootObject().getConstructorParams(); - String eol = JAXXCompiler.getLineSeparator(); - if (constructorParams != null) { - code.append(" super("); - code.append(constructorParams); - code.append(");"); - code.append(eol); - } else { -// if (superclassIsJAXXObject) { -// code.append(" super();").append(eol); -// } - } - code.append(METHOD_NAME_$INITIALIZE + "();"); - code.append(eol); - return JavaElementFactory.newMethod(PUBLIC, - null, - className, - code.toString(), - false - ); - } - - protected JavaMethod createConstructorWithInitialContext(JAXXCompiler compiler, - String className, - boolean superclassIsJAXXObject) throws CompilerException { - StringBuilder code = new StringBuilder(); - String constructorParams = compiler.getRootObject().getConstructorParams(); - String eol = JAXXCompiler.getLineSeparator(); - String realConstructorParams = ""; - if (superclassIsJAXXObject) { - realConstructorParams = PARAMETER_NAME_PARENT_CONTEXT; - } - if (constructorParams != null) { - - if (superclassIsJAXXObject) { - realConstructorParams += " ,"; - } - realConstructorParams += constructorParams; - } - - realConstructorParams = realConstructorParams.trim(); - - if (StringUtils.isNotEmpty(realConstructorParams)) { - - // add a super invocation - code.append(" super("); - code.append(realConstructorParams); - code.append(");"); - code.append(eol); - } - - -// if (constructorParams != null) { -// if (superclassIsJAXXObject) { -// //TODO-TC20091127 This MUST be a convention in JAXX : all specialized constructor must a second -// //TODO constructor with extra first parameter as parentContext -// constructorParams = PARAMETER_NAME_PARENT_CONTEXT + ", " + constructorParams; -// } -// code.append(" super("); -// code.append(constructorParams); -// code.append(");"); -// code.append(eol); -// } else { -// if (superclassIsJAXXObject) { -// code.append(" super(" + PARAMETER_NAME_PARENT_CONTEXT); -// code.append(");"); -// code.append(eol); -// } -// } - if (!superclassIsJAXXObject) { - String prefix = compiler.getImportedType(JAXXUtil.class); - code.append(prefix); - code.append(".initContext(this, " + PARAMETER_NAME_PARENT_CONTEXT + ");"); - code.append(eol); - } - code.append(METHOD_NAME_$INITIALIZE + "();"); - code.append(eol); - JavaArgument argument = JavaElementFactory.newArgument( - JAXXContext.class.getName(), - PARAMETER_NAME_PARENT_CONTEXT - ); - return JavaElementFactory.newMethod(PUBLIC, - null, - className, - code.toString(), - false, - argument - ); - } - - public JavaMethod addInitializerMethod(JAXXCompiler compiler, - JavaFile javaFile, - int nbBindings) throws CompilerException { - - boolean overrideContextInitialized = - compiler.containsScriptField(FIELD_NAME_CONTEXT_INITIALIZED); + public JavaMethod addInitializerMethod(JAXXCompiler compiler, JavaFile javaFile) { String eol = JAXXCompiler.getLineSeparator(); StringBuilder code = new StringBuilder(); - CompiledObject root = compiler.getRootObject(); - code.append("if (" + FIELD_NAME_ALL_COMPONENTS_CREATED); - if (overrideContextInitialized) { - code.append("|| !" + FIELD_NAME_CONTEXT_INITIALIZED); - } - code.append(") {"); - code.append(eol); - code.append(" return;").append(eol); - code.append("}").append(eol); code.append(JavaFileGenerator.addDebugLoggerInvocation(compiler, "this")); + code.append(compiler.getRootObject().getId()).append(" = this;").append(eol); + boolean useHandler = compiler.isUseHandler(); if (useHandler) { + String handler = compiler.getUiHandler(); + String handlerType = compiler.getImportedType(handler); + code.append("handler = new ").append(handlerType).append("();").append(eol); code.append("handler." + METHOD_NAME$BEFORE_INIT + "(this);").append(eol); } - code.append(FIELD_NAME_$OBJECT_MAP + ".put("); - String rootId = root.getId(); - code.append(TypeManager.getJavaCode(rootId)); -// code.append(", this);"); - code.append(", ").append(rootId).append(");").append(eol); - Iterator<CompiledObject> i = compiler.getObjectCreationOrder(); - boolean lastWasMethodCall = false; - //TODO-TC20091025 should do init of root first ? -// root.getDecorator().createInitializer(compiler, root, root, code, lastWasMethodCall); - while (i.hasNext()) { - CompiledObject object = i.next(); - if (object == root) { - continue; - } - CompiledObjectDecorator decorator = object.getDecorator(); - lastWasMethodCall = decorator.createInitializer(compiler, - root, - object, - code, - lastWasMethodCall - ); - } - root.getDecorator().createInitializer(compiler, - root, - root, - code, - lastWasMethodCall - ); - if (compiler.getInitializer().length() > 0) { - code.append(compiler.getInitializer()); - } - // register bindings before anything else - if (nbBindings > 0) { - // ajout invocation a la methode d'enregistrement des bindings - code.append("// registers "); - code.append(nbBindings); - code.append(" data bindings"); + if (javaFile.isSuperclassIsJAXXObject()) { + code.append("super." + METHOD_NAME_$INITIALIZE + "();").append(eol); + } else { + code.append(METHOD_NAME_$INITIALIZE_01_CREATE_COMPONENTS + "();"); + code.append(eol); + + code.append(METHOD_NAME_$INITIALIZE_02_REGISTER_DATA_BINDINGS + "();"); + code.append(eol); + + code.append(METHOD_NAME_$INITIALIZE_03_FINALIZE_CREATE_COMPONENTS + "();"); + code.append(eol); + + code.append(METHOD_NAME_$INITIALIZE_04_APPLY_DATA_BINDINGS + "();"); + code.append(eol); + code.append(METHOD_NAME_$INITIALIZE_05_SET_PROPERTIES + "();"); code.append(eol); - code.append(METHOD_NAME_$REGISTER_DEFAULT_BINDINGS + "();"); + code.append(METHOD_NAME_$INITIALIZE_06_FINALIZE_INITIALIZE + "();"); code.append(eol); } - code.append(METHOD_NAME_$COMPLETE_SETUP + "();"); - code.append(eol); if (useHandler) { code.append("handler." + METHOD_NAME$AFTER_INIT + "(this);").append(eol); } - JavaMethod method = JavaElementFactory.newMethod(PRIVATE, + JavaMethod method = JavaElementFactory.newMethod(PROTECTED, TYPE_VOID, METHOD_NAME_$INITIALIZE, code.toString(), - false + javaFile.isSuperclassIsJAXXObject() ); javaFile.addMethod(method); return method; } - protected JavaMethod addCompleteSetupMethod(JAXXCompiler compiler, - JavaFile javaFile) { - StringBuilder code = new StringBuilder(); - code.append(FIELD_NAME_ALL_COMPONENTS_CREATED + " = true;"); - String eol = JAXXCompiler.getLineSeparator(); - code.append(eol); - code.append(JavaFileGenerator.addDebugLoggerInvocation(compiler, "this")); - for (CompiledObject object : compiler.getObjects().values()) { - CompiledObjectDecorator decorator = object.getDecorator(); - code.append(decorator.createCompleteSetupMethod(compiler, - object, - javaFile) - ); - } - String simpleBindingsCode = createInitBindingsCode(compiler); - if (simpleBindingsCode != null && !simpleBindingsCode.isEmpty()) { - code.append(simpleBindingsCode).append(eol); - } - - if (compiler.getLateInitializer().length() > 0) { - code.append("// late initializer").append(eol); - code.append(compiler.getLateInitializer()).append(eol); - } - //TC-20090313 add an extra method after complete setup - MethodDescriptor method = - compiler.getScriptMethod(METHOD_NAME_$AFTER_COMPLETE_SETUP); - - if (method != null) { - if (compiler.isUseHandler()) { - - compiler.reportWarning("Should not use deprecated api $afterCompleteSetup, prefer declare a 'handler' attribute on root object."); - - } - code.append(METHOD_NAME_$AFTER_COMPLETE_SETUP + "();").append(eol); - } - JavaMethod javaMethod = JavaElementFactory.newMethod(PRIVATE, - TYPE_VOID, - METHOD_NAME_$COMPLETE_SETUP, - code.toString(), - false - ); - javaFile.addMethod(javaMethod); - return javaMethod; - } - - protected String createInitBindingsCode(JAXXCompiler compiler) { - String eol = JAXXCompiler.getLineSeparator(); - DataBinding[] bindings; - - StringBuilder result = new StringBuilder(); - - bindings = compiler.getBindingHelper().getDataBindings(); - if (bindings.length > 0) { - - result.append(eol); - result.append("// apply "); - result.append(bindings.length); - result.append(" data bindings"); - result.append(eol); - result.append(JAXXUtil.class.getSimpleName()); - result.append("." + METHOD_NAME_APPLY_DATA_BINDING + "(this, " + FIELD_NAME_$BINDINGS + ".keySet());"); - result.append(eol); - - } - bindings = compiler.getBindingHelper().getSimpleBindings(); - if (bindings.length > 0) { - - StringBuilder initCode = new StringBuilder(); - - for (DataBinding binding : bindings) { - - String binding1 = binding.getInitDataBinding(); - if (binding1 != null && !binding1.trim().isEmpty()) { - initCode.append(binding1); - } - } - - if (initCode.length() > 0) { - - result.append(eol); - result.append("// apply "); - result.append(bindings.length); - result.append(" property setters"); - result.append(eol); - result.append(initCode.toString().trim()); - - } - } - return result.toString(); - } - protected JavaMethod createApplyDataBindingMethod() { StringBuilder buffer = new StringBuilder(); String eol = JAXXCompiler.getLineSeparator(); - buffer.append("if (" + FIELD_NAME_ALL_COMPONENTS_CREATED + " && " + FIELD_NAME_$BINDINGS + ".containsKey(" + PARAMETER_NAME_$BINDING + ")) {"); + buffer.append("if (" + FIELD_NAME_$BINDINGS + ".containsKey(" + PARAMETER_NAME_$BINDING + ")) {"); buffer.append(eol); buffer.append(" getDataBinding(" + PARAMETER_NAME_$BINDING + ")." + METHOD_NAME_APPLY_DATA_BINDING + "();"); buffer.append(eol); @@ -1262,7 +1138,7 @@ public class DefaultFinalizer extends AbstractFinalizer { StringBuilder buffer = new StringBuilder(); String eol = JAXXCompiler.getLineSeparator(); - buffer.append("if (" + FIELD_NAME_ALL_COMPONENTS_CREATED + " && " + FIELD_NAME_$BINDINGS + ".containsKey(" + PARAMETER_NAME_$BINDING + ")) {"); + buffer.append("if (" + FIELD_NAME_$BINDINGS + ".containsKey(" + PARAMETER_NAME_$BINDING + ")) {"); buffer.append(eol); buffer.append(" getDataBinding(" + PARAMETER_NAME_$BINDING + ")." + METHOD_NAME_REMOVE_DATA_BINDING + "();"); buffer.append(eol); @@ -1293,7 +1169,7 @@ public class DefaultFinalizer extends AbstractFinalizer { code.append(FIELD_NAME_$ACTIVE_BINDINGS + ".add(" + PARAMETER_NAME_$BINDING + ");"); code.append(eol); code.append("try {").append(eol); - code.append(" if (" + FIELD_NAME_ALL_COMPONENTS_CREATED + " && " + FIELD_NAME_$BINDINGS + ".containsKey(" + PARAMETER_NAME_$BINDING + ")) {"); + code.append(" if (" + FIELD_NAME_$BINDINGS + ".containsKey(" + PARAMETER_NAME_$BINDING + ")) {"); code.append(eol); code.append(" getDataBinding(" + PARAMETER_NAME_$BINDING + ")." + METHOD_NAME_PROCESS_DATA_BINDING + "();"); code.append(eol); diff --git a/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaField.java b/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaField.java index 54eea64..3c64027 100644 --- a/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaField.java +++ b/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaField.java @@ -182,9 +182,7 @@ public class JavaField extends JavaElement implements Comparable<JavaField> { "$objectMap", "$activeBindings", "$bindings", - "$propertyChangeSupport", - "allComponentsCreated", - "contextInitialized"); + "$propertyChangeSupport"); @Override public boolean accept(JavaField field) { diff --git a/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaMethod.java b/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaMethod.java index ef3583b..4896759 100644 --- a/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaMethod.java +++ b/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaMethod.java @@ -232,11 +232,15 @@ public class JavaMethod extends JavaElement implements Comparable<JavaMethod> { method.getName().startsWith("add"); } }, - internalMethod(Modifier.PRIVATE, "Internal jaxx methods") { + internalMethod(Modifier.PROTECTED, "Internal jaxx methods") { private final List<String> methods = Arrays.asList( - "$completeSetup", - "$registerDefaultBindings", - "$initialize"); + "$initialize", + "$initialize_01_createComponents", + "$initialize_02_registerDataBindings", + "$initialize_03_finalizeCreateComponents", + "$initialize_04_applyDataBindings", + "$initialize_05_setProperties", + "$initialize_06_finalizeInitialize"); @Override public boolean accept(JavaMethod method) { -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
participants (1)
-
nuiton.org scm