Author: tchemit Date: 2008-10-17 22:05:40 +0000 (Fri, 17 Oct 2008) New Revision: 959 Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/CompiledObject.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/JAXXCompiler.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/tags/validator/BeanValidatorHandler.java Log: add generic types on compiled object :) Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/CompiledObject.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/CompiledObject.java 2008-10-17 20:55:15 UTC (rev 958) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/CompiledObject.java 2008-10-17 22:05:40 UTC (rev 959) @@ -71,6 +71,8 @@ /** All properties that have been applied to this CompiledObject. */ private Map<String, String> properties = new HashMap<String, String>(); + /** generic types of the compiled object */ + private String[] genericTypes; /** * Creates a new <code>CompiledObject</code>. To be useful, the object should be registered with a @@ -475,7 +477,7 @@ } } - + @Override public String toString() { return getObjectClass().getName() + "[id='" + id + "']"; } @@ -484,4 +486,24 @@ public void registerDataBinding(String src, String property, String assignment, JAXXCompiler compiler) throws CompilerException { compiler.registerDataBinding(src, getId() + "." + property, assignment); } + + public ClassDescriptor[] getGenericTypes() { + if (genericTypes==null) { + return new ClassDescriptor[0]; + } + try { + ClassDescriptor[] result = new ClassDescriptor[genericTypes.length]; + for (int i = 0; i < result.length; i++) { + result[i] = ClassDescriptorLoader.getClassDescriptor(genericTypes[i], getObjectClass().getClassLoader()); + } + return result; + } + catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + + public void setGenericTypes(String[] genericTypes) { + this.genericTypes = genericTypes; + } } \ No newline at end of file Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/JAXXCompiler.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/JAXXCompiler.java 2008-10-17 20:55:15 UTC (rev 958) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/JAXXCompiler.java 2008-10-17 22:05:40 UTC (rev 959) @@ -584,17 +584,18 @@ code.append("allComponentsCreated = true;"); code.append(getLineSeparator()); for (CompiledObject object : objects.values()) { + //TC - 20081017 only generate the method if not empty ? if (object.getId().startsWith("$")) { - code.append(object.getAdditionCode()); + code.append(object.getAdditionCode()).append(getLineSeparator()); } else { - code.append(object.getAdditionMethodName()).append("();").append(getLineSeparator()); String additionCode = object.getAdditionCode(); if (additionCode.length() > 0) { + code.append(object.getAdditionMethodName()).append("();").append(getLineSeparator()); additionCode = "if (allComponentsCreated) {" + getLineSeparator() + additionCode + "}"; + javaFile.addMethod(new JavaMethod(Modifier.PROTECTED, "void", object.getAdditionMethodName(), null, null, additionCode)); } - javaFile.addMethod(new JavaMethod(Modifier.PROTECTED, "void", object.getAdditionMethodName(), null, null, additionCode)); } - code.append(getLineSeparator()); + //code.append(getLineSeparator()); } code.append(initDataBindings); @@ -678,7 +679,9 @@ if (object == root) { javaFile.addField(new JavaField(access, fullClassName, object.getId(), "this")); } else { - javaFile.addField(new JavaField(access, getCanonicalName(object.getObjectClass()), object.getId())); + //TC -20081017 can have generic on compiled Object + javaFile.addField(new JavaField(access, getCanonicalName(object), object.getId())); + //javaFile.addField(new JavaField(access, getCanonicalName(object.getObjectClass()), object.getId())); } } } @@ -1038,10 +1041,12 @@ result.append(" = "); String constructorParams = object.getConstructorParams(); if (constructorParams != null) { - result.append(" new ").append(getCanonicalName(object.getObjectClass())).append("(").append(constructorParams).append(");"); + //TC - 20081017 compiledObject can have generics + result.append(" new ").append(getCanonicalName(object)).append("(").append(constructorParams).append(");"); //result.append("(").append(getCanonicalName(object.getObjectClass())).append(") new ").append(getCanonicalName(object.getObjectClass())).append("(").append(constructorParams).append(");"); } else { - result.append("new ").append(getCanonicalName(object.getObjectClass())).append("();"); + //TC - 20081017 compiledObject can have generics + result.append("new ").append(getCanonicalName(object)).append("();"); } result.append(getLineSeparator()); String initCode = object.getInitializationCode(this); @@ -1206,6 +1211,45 @@ } + public static String getCanonicalName(CompiledObject compiled) { + ClassDescriptor clazz = compiled.getObjectClass(); + if (clazz.isArray()) { + String canonicalName = getCanonicalName(clazz.getComponentType()); + if (canonicalName != null) { + if (compiled.getGenericTypes().length > 0) { + canonicalName += "<"; + for (int i = 0; i < compiled.getGenericTypes().length; i++) { + ClassDescriptor classDescriptor = compiled.getGenericTypes()[i]; + if (i > 0) { + canonicalName += " ,"; + } + canonicalName += classDescriptor.getName(); + } + canonicalName += ">"; + + } + return canonicalName + "[]"; + } + return null; + } + + String canonicalName = clazz.getName().replace('$', '.'); + if (compiled.getGenericTypes().length > 0) { + canonicalName += "<"; + for (int i = 0; i < compiled.getGenericTypes().length; i++) { + ClassDescriptor classDescriptor = compiled.getGenericTypes()[i]; + if (i > 0) { + canonicalName += " ,"; + } + canonicalName += classDescriptor.getName(); + } + canonicalName += ">"; + + } + return canonicalName; + } + + public static String capitalize(String s) { if (s.length() == 0) { return s; Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/tags/validator/BeanValidatorHandler.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/tags/validator/BeanValidatorHandler.java 2008-10-17 20:55:15 UTC (rev 958) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/tags/validator/BeanValidatorHandler.java 2008-10-17 22:05:40 UTC (rev 959) @@ -102,6 +102,9 @@ if (compiler.checkReference(tag, bean, true, BEAN_ATTRIBUTE)) { String code = getSetPropertyCode(info.getJavaCode(), BEAN_ATTRIBUTE, bean, compiler); info.appendAdditionCode(code); + // add generic type to validator + JAXXBeanInfo beanInfo = info.getBeanDescriptor(compiler); + info.setGenericTypes(new String[]{beanInfo.getJAXXBeanDescriptor().getClassDescriptor().getName()}); } }
participants (1)
-
tchemit@users.labs.libre-entreprise.org