Jaxx-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- 3898 discussions
r2223 - in trunk/jaxx-compiler/src: main/java/jaxx/compiler/java main/java/jaxx/compiler/reflect main/java/jaxx/compiler/reflect/resolvers test/java/jaxx/compiler/reflect
by tchemit@users.nuiton.org 18 Feb '11
by tchemit@users.nuiton.org 18 Feb '11
18 Feb '11
Author: tchemit
Date: 2011-02-18 11:10:44 +0100 (Fri, 18 Feb 2011)
New Revision: 2223
Url: http://nuiton.org/repositories/revision/jaxx/2223
Log:
Anomalie #1346: Java file parsing is done twice
Evolution #1347: Improve classDescriptor loading (try also to obtain constructors if possible)
Modified:
trunk/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaFile.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/ClassDescriptor.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/ClassDescriptorHelper.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/ClassDescriptorResolver.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/resolvers/ClassDescriptorResolverFromJavaClass.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/resolvers/ClassDescriptorResolverFromJaxxFile.java
trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/ClassDescriptorTest.java
trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/MyClass.java
Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaFile.java
===================================================================
--- trunk/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaFile.java 2011-02-18 10:09:07 UTC (rev 2222)
+++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaFile.java 2011-02-18 10:10:44 UTC (rev 2223)
@@ -62,6 +62,8 @@
private List<JavaMethod> methods = new ArrayList<JavaMethod>();
+ private List<JavaMethod> constructors = new ArrayList<JavaMethod>();
+
private List<JavaFile> innerClasses = new ArrayList<JavaFile>();
private String superClass;
@@ -284,8 +286,15 @@
}
+ if (returnType == null) {
- methods.add(method);
+ // this is a constructor
+ constructors.add(method);
+ } else {
+
+ // this is a mreal method
+ methods.add(method);
+ }
}
public void addField(JavaField field) {
@@ -385,7 +394,7 @@
if (field.hasInitializerTypes()) {
String code = simplifyCode(field.getInitializer(), field.getInitializerTypes());
if (log.isDebugEnabled()) {
- log.debug("Use simplify text : "+code);
+ log.debug("Use simplify text : " + code);
}
field.setInitializer(code);
}
@@ -455,4 +464,7 @@
}
}
+ public List<JavaMethod> getConstructors() {
+ return constructors;
+ }
}
Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/ClassDescriptor.java
===================================================================
--- trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/ClassDescriptor.java 2011-02-18 10:09:07 UTC (rev 2222)
+++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/ClassDescriptor.java 2011-02-18 10:10:44 UTC (rev 2223)
@@ -55,12 +55,16 @@
private ClassLoader classLoader;
+ private MethodDescriptor[] constructorDescriptors;
+
private MethodDescriptor[] methodDescriptors;
private FieldDescriptor[] fieldDescriptors;
protected FieldDescriptor[] declaredFieldDescriptors;
+ protected final ClassDescriptorHelper.ResolverType resolverType;
+
public abstract MethodDescriptor getDeclaredMethodDescriptor(
String name,
ClassDescriptor... parameterTypes) throws NoSuchMethodException;
@@ -68,7 +72,8 @@
public abstract FieldDescriptor getDeclaredFieldDescriptor(
String name) throws NoSuchFieldException;
- protected ClassDescriptor(String name,
+ protected ClassDescriptor(ClassDescriptorHelper.ResolverType resolverType,
+ String name,
String packageName,
String superclass,
String[] interfaces,
@@ -77,10 +82,11 @@
String componentType,
JAXXObjectDescriptor jaxxObjectDescriptor,
ClassLoader classLoader,
+ MethodDescriptor[] constructorDescriptors,
MethodDescriptor[] methodDescriptors,
FieldDescriptor[] fieldDescriptors) {
this(
- name,
+ resolverType, name,
packageName,
superclass,
interfaces,
@@ -89,6 +95,7 @@
componentType,
jaxxObjectDescriptor,
classLoader,
+ constructorDescriptors,
methodDescriptors,
fieldDescriptors,
null
@@ -96,6 +103,7 @@
}
protected ClassDescriptor(
+ ClassDescriptorHelper.ResolverType resolverType,
String name,
String packageName,
String superclass,
@@ -105,9 +113,11 @@
String componentType,
JAXXObjectDescriptor jaxxObjectDescriptor,
ClassLoader classLoader,
+ MethodDescriptor[] constructorDescriptors,
MethodDescriptor[] methodDescriptors,
FieldDescriptor[] fieldDescriptors,
FieldDescriptor[] declaredFieldDescriptors) {
+ this.resolverType = resolverType;
this.name = name;
this.packageName = packageName;
this.superclass = superclass;
@@ -117,11 +127,17 @@
this.componentType = componentType;
this.jaxxObjectDescriptor = jaxxObjectDescriptor;
this.classLoader = classLoader;
+ this.constructorDescriptors= constructorDescriptors;
this.methodDescriptors = methodDescriptors;
this.fieldDescriptors = fieldDescriptors;
this.declaredFieldDescriptors = declaredFieldDescriptors;
}
+
+ public ClassDescriptorHelper.ResolverType getResolverType() {
+ return resolverType;
+ }
+
public String getName() {
return name;
}
@@ -164,6 +180,10 @@
return classLoader;
}
+ public MethodDescriptor[] getConstructorDescriptors() {
+ return constructorDescriptors;
+ }
+
public MethodDescriptor[] getMethodDescriptors() {
return methodDescriptors;
}
Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/ClassDescriptorHelper.java
===================================================================
--- trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/ClassDescriptorHelper.java 2011-02-18 10:09:07 UTC (rev 2222)
+++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/ClassDescriptorHelper.java 2011-02-18 10:10:44 UTC (rev 2223)
@@ -38,13 +38,14 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URL;
+import java.util.EnumMap;
import java.util.HashMap;
import java.util.Map;
-import java.util.TreeMap;
/**
* Mirrors the class <code>java.lang.ClassLoader</code>. JAXX uses <code>ClassDescriptor</code> instead of <code>Class</code>
@@ -62,19 +63,33 @@
/** Logger */
private static final Log log = LogFactory.getLog(ClassDescriptorHelper.class);
+ /**
+ * Constants to define who load a {@link ClassDescriptor}.
+ * <p/>
+ * This will be usefull in some case (for consturctor for example when some
+ * descriptors are not fully loaded...
+ *
+ * @since 2.4
+ */
+ public enum ResolverType {
+ JAVA_CLASS,
+ JAVA_FILE,
+ JAXX_FILE
+ }
+
private static boolean SHOW_LOADING = log.isDebugEnabled();
private static Map<String, ClassDescriptor> descriptors =
new HashMap<String, ClassDescriptor>();
- private static Map<String, ClassDescriptorResolver> descriptorResolvers;
+ private static Map<ResolverType, ClassDescriptorResolver> descriptorResolvers;
- protected static Map<String, ClassDescriptorResolver> getDescriptorResolvers() {
+ protected static Map<ResolverType, ClassDescriptorResolver> getDescriptorResolvers() {
if (descriptorResolvers == null) {
- descriptorResolvers = new TreeMap<String, ClassDescriptorResolver>();
- descriptorResolvers.put(ClassDescriptorResolverFromJaxxFile.class.getSimpleName(), new ClassDescriptorResolverFromJaxxFile());
- descriptorResolvers.put(ClassDescriptorResolverFromJavaFile.class.getSimpleName(), new ClassDescriptorResolverFromJavaFile());
- descriptorResolvers.put(ClassDescriptorResolverFromJavaClass.class.getSimpleName(), new ClassDescriptorResolverFromJavaClass());
+ descriptorResolvers = new EnumMap<ResolverType, ClassDescriptorResolver>(ResolverType.class);
+ descriptorResolvers.put(ResolverType.JAVA_CLASS, new ClassDescriptorResolverFromJavaClass());
+ descriptorResolvers.put(ResolverType.JAVA_FILE, new ClassDescriptorResolverFromJavaFile());
+ descriptorResolvers.put(ResolverType.JAXX_FILE, new ClassDescriptorResolverFromJaxxFile());
}
return descriptorResolvers;
}
@@ -151,7 +166,7 @@
log.info("from JAXXFile " + file.getJaxxFile());
}
result = getClassDescriptor0(
- ClassDescriptorResolverFromJaxxFile.class,
+ ResolverType.JAXX_FILE,
className,
file.getJAXXFileURL(),
classLoader
@@ -201,7 +216,7 @@
}
result = getClassDescriptor0(
- ClassDescriptorResolverFromJavaFile.class,
+ ResolverType.JAVA_FILE,
className,
javaFile,
classLoader
@@ -220,7 +235,7 @@
}
result = getClassDescriptor0(
- ClassDescriptorResolverFromJavaClass.class,
+ ResolverType.JAVA_CLASS,
className,
classFile,
classLoader
@@ -241,21 +256,20 @@
}
protected static ClassDescriptor getClassDescriptor0(
- Class<? extends ClassDescriptorResolver> resolverType,
+ ResolverType resolverType,
String className,
URL source,
ClassLoader classLoader) throws ClassNotFoundException {
if (log.isDebugEnabled()) {
log.debug("Loading class descriptor for [" + className +
- "] with " + resolverType.getSimpleName());
+ "] with " + resolverType);
}
- Map<String, ClassDescriptorResolver> resolvers =
+ Map<ResolverType, ClassDescriptorResolver> resolvers =
getDescriptorResolvers();
- ClassDescriptorResolver resolver =
- resolvers.get(resolverType.getSimpleName());
+ ClassDescriptorResolver resolver = resolvers.get(resolverType);
resolver.setClassLoader(classLoader);
@@ -475,6 +489,24 @@
);
}
+ public static MethodDescriptor createMethodDescriptor(Constructor<?> javaMethod,
+ ClassLoader classLoader) {
+ String methodName = javaMethod.getName();
+ int modifiers = javaMethod.getModifiers();
+ String returnType = null;
+ Class<?>[] javaParameters = javaMethod.getParameterTypes();
+ String[] parameters = new String[javaParameters.length];
+ for (int i = 0; i < parameters.length; i++) {
+ parameters[i] = javaParameters[i].getName();
+ }
+ return new MethodDescriptor(methodName,
+ modifiers,
+ returnType,
+ parameters,
+ classLoader
+ );
+ }
+
public static FieldDescriptor createFieldDescriptor(Field javaField,
ClassLoader classLoader) {
String fieldName = javaField.getName();
Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/ClassDescriptorResolver.java
===================================================================
--- trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/ClassDescriptorResolver.java 2011-02-18 10:09:07 UTC (rev 2222)
+++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/ClassDescriptorResolver.java 2011-02-18 10:10:44 UTC (rev 2223)
@@ -29,7 +29,7 @@
/**
* Contract of a resolver of class descriptor.
* <p/>
- * The unique method {@link #resolvDescriptor(String,URL)} will returns the
+ * The unique method {@link #resolvDescriptor(String, URL)} will returns the
* descriptor if can be found.
*
* @author tchemit <chemit(a)codelutin.com>
@@ -39,6 +39,16 @@
private ClassLoader classLoader;
+ private ClassDescriptorHelper.ResolverType resolverType;
+
+ protected ClassDescriptorResolver(ClassDescriptorHelper.ResolverType resolverType) {
+ this.resolverType = resolverType;
+ }
+
+ public ClassDescriptorHelper.ResolverType getResolverType() {
+ return resolverType;
+ }
+
public ClassLoader getClassLoader() {
return classLoader;
}
Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/resolvers/ClassDescriptorResolverFromJavaClass.java
===================================================================
--- trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/resolvers/ClassDescriptorResolverFromJavaClass.java 2011-02-18 10:09:07 UTC (rev 2222)
+++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/resolvers/ClassDescriptorResolverFromJavaClass.java 2011-02-18 10:10:44 UTC (rev 2223)
@@ -33,6 +33,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URL;
@@ -49,6 +50,10 @@
private static final Log log =
LogFactory.getLog(ClassDescriptorResolverFromJavaClass.class);
+ public ClassDescriptorResolverFromJavaClass() {
+ super(ClassDescriptorHelper.ResolverType.JAVA_CLASS);
+ }
+
@Override
public ClassDescriptor resolvDescriptor(String className,
URL source) throws ClassNotFoundException {
@@ -74,6 +79,14 @@
boolean isArray = javaClass.isArray();
String componentTypeName = isArray ? javaClass.getComponentType().getName() : null;
ClassLoader classLoader = javaClass.getClassLoader();
+ Constructor<?>[] javaConstructors = javaClass.getConstructors();
+ MethodDescriptor[] constructors = new MethodDescriptor[javaConstructors.length];
+ for (int i = 0; i < constructors.length; i++) {
+ constructors[i] = ClassDescriptorHelper.createMethodDescriptor(
+ javaConstructors[i],
+ javaClass.getClassLoader()
+ );
+ }
Method[] javaMethods = javaClass.getMethods();
MethodDescriptor[] methods = new MethodDescriptor[javaMethods.length];
for (int i = 0; i < methods.length; i++) {
@@ -106,13 +119,14 @@
componentTypeName,
jaxxObjectDescriptor,
classLoader,
+ constructors,
methods,
fields
);
}
- private static class JavaClassClassDescriptor extends ClassDescriptor {
+ private class JavaClassClassDescriptor extends ClassDescriptor {
private final Class<?> javaClass;
@@ -127,9 +141,11 @@
String componentTypeName,
JAXXObjectDescriptor jaxxObjectDescriptor,
ClassLoader classLoader,
+ MethodDescriptor[] constructors,
MethodDescriptor[] methods,
FieldDescriptor[] fields) {
super(
+ ClassDescriptorResolverFromJavaClass.this.getResolverType(),
name,
packageName,
superclassName,
@@ -139,6 +155,7 @@
componentTypeName,
jaxxObjectDescriptor,
classLoader,
+ constructors,
methods,
fields
);
Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/resolvers/ClassDescriptorResolverFromJaxxFile.java
===================================================================
--- trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/resolvers/ClassDescriptorResolverFromJaxxFile.java 2011-02-18 10:09:07 UTC (rev 2222)
+++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/resolvers/ClassDescriptorResolverFromJaxxFile.java 2011-02-18 10:10:44 UTC (rev 2223)
@@ -41,6 +41,7 @@
import java.lang.reflect.Modifier;
import java.net.URL;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
@@ -59,6 +60,10 @@
private static final Log log =
LogFactory.getLog(ClassDescriptorResolverFromJaxxFile.class);
+ public ClassDescriptorResolverFromJaxxFile() {
+ super(ClassDescriptorHelper.ResolverType.JAXX_FILE);
+ }
+
@Override
public ClassDescriptor resolvDescriptor(String className, URL source) throws ClassNotFoundException {
@@ -67,7 +72,7 @@
JAXXCompiler compiler = engine.getJAXXCompiler(className);
SymbolTable symbolTable = compiler.getSymbolTable();
-
+
if (symbolTable == null) {
throw new CompilerException("Internal error: no symbol table was generated for class '" + className + "'");
}
@@ -78,7 +83,16 @@
ClassLoader classLoader = getClassLoader();
- ClassDescriptor superclass = ClassDescriptorHelper.getClassDescriptor(symbolTable.getSuperclassName(), classLoader);
+ ClassDescriptor superclass =
+ ClassDescriptorHelper.getClassDescriptor(
+ symbolTable.getSuperclassName(), classLoader);
+ // tchemit 2011-02-18 Be ware!!!
+ // this is nearly impossible to obtain consturctors from symbol table.
+ // let says for the moment this data is not available here and must be found in other places...
+ // Anyway, the only reason of finding constructor is when we want to generate a jaxx file
+ // If it inheritate from another jaxx file, we will mkae sure order is ok for this...
+
+ List<MethodDescriptor> constructors = new ArrayList<MethodDescriptor>();
List<MethodDescriptor> publicMethods = symbolTable.getScriptMethods();
List<FieldDescriptor> publicFields = symbolTable.getScriptFields();
//List<MethodDescriptor> declaredMethods = new ArrayList<MethodDescriptor>(publicMethods);
@@ -131,23 +145,26 @@
packageName,
interfaces,
classLoader,
+ constructors.toArray(new MethodDescriptor[constructors.size()]),
publicMethods.toArray(new MethodDescriptor[publicMethods.size()]),
publicFields.toArray(new FieldDescriptor[publicFields.size()])
);
}
- private static class JaxxFileClassDescriptor extends ClassDescriptor {
+ private class JaxxFileClassDescriptor extends ClassDescriptor {
private final JAXXCompiler compiler;
public JaxxFileClassDescriptor(JAXXCompiler compiler,
- String className,
- String packageName,
- Set<String> interfaces,
- ClassLoader classLoader,
- MethodDescriptor[] publicMethods,
- FieldDescriptor[] publicFields) {
- super(className,
+ String className,
+ String packageName,
+ Set<String> interfaces,
+ ClassLoader classLoader,
+ MethodDescriptor[] constructors,
+ MethodDescriptor[] publicMethods,
+ FieldDescriptor[] publicFields) {
+ super(ClassDescriptorResolverFromJaxxFile.this.getResolverType(),
+ className,
packageName,
compiler.getSymbolTable().getSuperclassName(),
interfaces.toArray(new String[interfaces.size()]),
@@ -156,6 +173,7 @@
null,
null,
classLoader,
+ constructors,
publicMethods,
publicFields
);
Modified: trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/ClassDescriptorTest.java
===================================================================
--- trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/ClassDescriptorTest.java 2011-02-18 10:09:07 UTC (rev 2222)
+++ trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/ClassDescriptorTest.java 2011-02-18 10:10:44 UTC (rev 2223)
@@ -25,12 +25,30 @@
package jaxx.compiler.reflect;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
-import org.junit.Test;
public class ClassDescriptorTest {
+ @BeforeClass
+ public static void before() {
+ ClassDescriptorHelper.setShowLoading(true);
+ }
+
+ @AfterClass
+ public static void after() {
+ ClassDescriptorHelper.setShowLoading(true);
+ }
+
/*@Test
public void testGetClassDescriptor() throws Exception {
ClassDescriptorHelper.getClassDescriptor("jaxx.runtime.swing.navigation.tree.NavigationTreeModel.NavigationTreeNode");
@@ -65,13 +83,7 @@
@Test(expected = ClassNotFoundException.class)
public void testWrongCase() throws ClassNotFoundException {
- //try {
- //ClassDescriptor object =
ClassDescriptorHelper.getClassDescriptor("jaxx.junit.classdescriptortest", getClass().getClassLoader());
- // fail("Found descriptor using wrong case: " + object);
- //}
- //catch (ClassNotFoundException e) {
- //}
}
@Test
@@ -81,4 +93,57 @@
ClassDescriptor objectArray = ClassDescriptorHelper.getClassDescriptor(Object[].class);
assertNotNull(objectArray);
}
+
+ @Test
+ public void testConstructorFromClass() throws ClassNotFoundException, MalformedURLException {
+ String className = MyClass.class.getName();
+ ClassDescriptor descriptor = ClassDescriptorHelper.getClassDescriptor(className);
+ ClassLoader classLoader = getClass().getClassLoader();
+ assertNotNull(descriptor);
+ assertEquals(ClassDescriptorHelper.ResolverType.JAVA_CLASS, descriptor.getResolverType());
+ MethodDescriptor[] constructorDescriptors = descriptor.getConstructorDescriptors();
+ assertNotNull(constructorDescriptors);
+ assertEquals(2, constructorDescriptors.length);
+ }
+
+ @Test
+ public void testConstructorFromJavaFile() throws ClassNotFoundException, MalformedURLException {
+ String className = MyClass.class.getName();
+ ClassLoader classLoader = getClass().getClassLoader();
+
+
+ File testSourceDir = new File(getBasedir(), "src" + File.separator + "test" + File.separator + "java");
+
+ ClassLoader myClassLoader = new URLClassLoader(new URL[]{testSourceDir.toURI().toURL()}, classLoader);
+
+ URL javaFileUrl = ClassDescriptorHelper.getURL(myClassLoader, className, "java");
+ assertNotNull(javaFileUrl);
+
+ ClassDescriptor descriptorFromFile = ClassDescriptorHelper.getClassDescriptor0(
+ ClassDescriptorHelper.ResolverType.JAVA_FILE,
+ className,
+ javaFileUrl,
+ myClassLoader
+ );
+ assertNotNull(descriptorFromFile);
+ MethodDescriptor[] constructorDescriptorsfromFile = descriptorFromFile.getConstructorDescriptors();
+ assertNotNull(constructorDescriptorsfromFile);
+ assertEquals(2, constructorDescriptorsfromFile.length);
+ }
+
+
+ static File basedir;
+
+ public static File getBasedir() {
+ if (basedir == null) {
+ String tmp = System.getProperty("basedir");
+ if (tmp == null) {
+ tmp = new File("").getAbsolutePath();
+ }
+ basedir = new File(tmp);
+
+ }
+ return basedir;
+ }
+
}
Modified: trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/MyClass.java
===================================================================
--- trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/MyClass.java 2011-02-18 10:09:07 UTC (rev 2222)
+++ trunk/jaxx-compiler/src/test/java/jaxx/compiler/reflect/MyClass.java 2011-02-18 10:10:44 UTC (rev 2223)
@@ -42,6 +42,14 @@
public String myPublicStringField;
+ public MyClass() {
+ }
+
+ public MyClass(String myProtectedStringField, String myPublicStringField) {
+ this.myProtectedStringField = myProtectedStringField;
+ this.myPublicStringField = myPublicStringField;
+ }
+
@Override
public void myMethod() {
}
1
0
r2222 - trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect
by tchemit@users.nuiton.org 18 Feb '11
by tchemit@users.nuiton.org 18 Feb '11
18 Feb '11
Author: tchemit
Date: 2011-02-18 11:09:07 +0100 (Fri, 18 Feb 2011)
New Revision: 2222
Url: http://nuiton.org/repositories/revision/jaxx/2222
Log:
reformat
Modified:
trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/MethodDescriptor.java
Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/MethodDescriptor.java
===================================================================
--- trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/MethodDescriptor.java 2011-02-16 21:27:27 UTC (rev 2221)
+++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/reflect/MethodDescriptor.java 2011-02-18 10:09:07 UTC (rev 2222)
@@ -27,6 +27,8 @@
import jaxx.compiler.JAXXCompiler;
+import java.util.Arrays;
+
/**
* Mirrors the class <code>java.lang.ref.Method</code>. JAXX uses <code>ClassDescriptor</code> instead of <code>Class</code>
* almost everywhere so that it can handle circular dependencies (there can't be a <code>Class</code> object for an uncompiled
@@ -42,7 +44,7 @@
super(name, modifiers, classLoader);
this.returnType = returnType;
this.parameterTypes = parameterTypes;
- if (JAXXCompiler.STRICT_CHECKS && java.util.Arrays.asList(parameterTypes).contains(null)) {
+ if (JAXXCompiler.STRICT_CHECKS && Arrays.asList(parameterTypes).contains(null)) {
throw new NullPointerException(name);
}
}
@@ -69,7 +71,7 @@
}
return result;
} catch (ClassNotFoundException e) {
- throw new RuntimeException("could not find the parameter types " + java.util.Arrays.toString(parameterTypes), e);
+ throw new RuntimeException("could not find the parameter types " + Arrays.toString(parameterTypes), e);
}
}
}
1
0
r2221 - in trunk: jaxx-compiler jaxx-compiler/src/main/java/jaxx/compiler/finalizers jaxx-compiler/src/main/java/jaxx/compiler/java jaxx-compiler/src/main/java/jaxx/compiler/tags/swing jaxx-widgets/src/main/java/jaxx/runtime/swing jaxx-widgets/src/main/java/jaxx/runtime/swing/editor
by tchemit@users.nuiton.org 16 Feb '11
by tchemit@users.nuiton.org 16 Feb '11
16 Feb '11
Author: tchemit
Date: 2011-02-16 22:27:27 +0100 (Wed, 16 Feb 2011)
New Revision: 2221
Url: http://nuiton.org/repositories/revision/jaxx/2221
Log:
add svn-keywords
add file headers
optimize dependencies
Modified:
trunk/jaxx-compiler/pom.xml
trunk/jaxx-compiler/src/main/java/jaxx/compiler/finalizers/AbstractFinalizer.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaElementFactory.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/tags/swing/JXLayerHandler.java
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/AboutPanelHandler.java
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ErrorDialogUIHandler.java
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/FontSizorHandler.java
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/HidorButtonHandler.java
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/MemoryStatusWidgetHandler.java
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/I18nEditorHandler.java
Modified: trunk/jaxx-compiler/pom.xml
===================================================================
--- trunk/jaxx-compiler/pom.xml 2011-02-16 21:21:44 UTC (rev 2220)
+++ trunk/jaxx-compiler/pom.xml 2011-02-16 21:27:27 UTC (rev 2221)
@@ -72,6 +72,11 @@
</dependency>
<dependency>
+ <groupId>org.swinglabs</groupId>
+ <artifactId>jxlayer</artifactId>
+ </dependency>
+
+ <dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
@@ -85,7 +90,7 @@
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</dependency>
-
+
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/finalizers/AbstractFinalizer.java
===================================================================
--- trunk/jaxx-compiler/src/main/java/jaxx/compiler/finalizers/AbstractFinalizer.java 2011-02-16 21:21:44 UTC (rev 2220)
+++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/finalizers/AbstractFinalizer.java 2011-02-16 21:27:27 UTC (rev 2221)
@@ -1,3 +1,27 @@
+/*
+ * #%L
+ * JAXX :: Compiler
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2008 - 2011 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
package jaxx.compiler.finalizers;
import jaxx.compiler.java.JavaElementFactory;
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/finalizers/AbstractFinalizer.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision
+ Author Date Id Revision HeadURL
Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaElementFactory.java
===================================================================
--- trunk/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaElementFactory.java 2011-02-16 21:21:44 UTC (rev 2220)
+++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaElementFactory.java 2011-02-16 21:27:27 UTC (rev 2221)
@@ -1,3 +1,27 @@
+/*
+ * #%L
+ * JAXX :: Compiler
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2008 - 2011 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
package jaxx.compiler.java;
import org.apache.commons.logging.Log;
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/java/JavaElementFactory.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision
+ Author Date Id Revision HeadURL
Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/tags/swing/JXLayerHandler.java
===================================================================
--- trunk/jaxx-compiler/src/main/java/jaxx/compiler/tags/swing/JXLayerHandler.java 2011-02-16 21:21:44 UTC (rev 2220)
+++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/tags/swing/JXLayerHandler.java 2011-02-16 21:27:27 UTC (rev 2221)
@@ -1,3 +1,27 @@
+/*
+ * #%L
+ * JAXX :: Compiler
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2008 - 2011 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
package jaxx.compiler.tags.swing;
import jaxx.compiler.CompiledObject;
Property changes on: trunk/jaxx-compiler/src/main/java/jaxx/compiler/tags/swing/JXLayerHandler.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision
+ Author Date Id Revision HeadURL
Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/AboutPanelHandler.java
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/AboutPanelHandler.java 2011-02-16 21:21:44 UTC (rev 2220)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/AboutPanelHandler.java 2011-02-16 21:27:27 UTC (rev 2221)
@@ -1,3 +1,27 @@
+/*
+ * #%L
+ * JAXX :: Widgets
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2008 - 2011 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
package jaxx.runtime.swing;
import jaxx.runtime.JAXXUtil;
Property changes on: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/AboutPanelHandler.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision
+ Author Date Id Revision HeadURL
Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ErrorDialogUIHandler.java
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ErrorDialogUIHandler.java 2011-02-16 21:21:44 UTC (rev 2220)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ErrorDialogUIHandler.java 2011-02-16 21:27:27 UTC (rev 2221)
@@ -1,3 +1,27 @@
+/*
+ * #%L
+ * JAXX :: Widgets
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2008 - 2011 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
package jaxx.runtime.swing;
import jaxx.runtime.JAXXUtil;
Property changes on: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ErrorDialogUIHandler.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision
+ Author Date Id Revision HeadURL
Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/FontSizorHandler.java
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/FontSizorHandler.java 2011-02-16 21:21:44 UTC (rev 2220)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/FontSizorHandler.java 2011-02-16 21:27:27 UTC (rev 2221)
@@ -1,3 +1,27 @@
+/*
+ * #%L
+ * JAXX :: Widgets
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2008 - 2011 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
package jaxx.runtime.swing;
import jaxx.runtime.binding.SimpleJAXXObjectBinding;
Property changes on: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/FontSizorHandler.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision
+ Author Date Id Revision HeadURL
Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/HidorButtonHandler.java
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/HidorButtonHandler.java 2011-02-16 21:21:44 UTC (rev 2220)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/HidorButtonHandler.java 2011-02-16 21:27:27 UTC (rev 2221)
@@ -1,3 +1,27 @@
+/*
+ * #%L
+ * JAXX :: Widgets
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2008 - 2011 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
package jaxx.runtime.swing;
import org.apache.commons.logging.Log;
Property changes on: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/HidorButtonHandler.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision
+ Author Date Id Revision HeadURL
Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/MemoryStatusWidgetHandler.java
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/MemoryStatusWidgetHandler.java 2011-02-16 21:21:44 UTC (rev 2220)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/MemoryStatusWidgetHandler.java 2011-02-16 21:27:27 UTC (rev 2221)
@@ -1,3 +1,27 @@
+/*
+ * #%L
+ * JAXX :: Widgets
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2008 - 2011 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
package jaxx.runtime.swing;
import javax.swing.JLabel;
Property changes on: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/MemoryStatusWidgetHandler.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision
+ Author Date Id Revision HeadURL
Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/I18nEditorHandler.java
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/I18nEditorHandler.java 2011-02-16 21:21:44 UTC (rev 2220)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/I18nEditorHandler.java 2011-02-16 21:27:27 UTC (rev 2221)
@@ -1,3 +1,27 @@
+/*
+ * #%L
+ * JAXX :: Widgets
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2008 - 2011 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
package jaxx.runtime.swing.editor;
import jaxx.runtime.swing.JAXXButtonGroup;
Property changes on: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/I18nEditorHandler.java
___________________________________________________________________
Modified: svn:keywords
- Author Date Id Revision
+ Author Date Id Revision HeadURL
1
0
r2220 - trunk/jaxx-compiler/src/main/java/jaxx/compiler/finalizers
by tchemit@users.nuiton.org 16 Feb '11
by tchemit@users.nuiton.org 16 Feb '11
16 Feb '11
Author: tchemit
Date: 2011-02-16 22:21:44 +0100 (Wed, 16 Feb 2011)
New Revision: 2220
Url: http://nuiton.org/repositories/revision/jaxx/2220
Log:
Evolution #1344: Improve DefaultFinalizer code
Modified:
trunk/jaxx-compiler/src/main/java/jaxx/compiler/finalizers/DefaultFinalizer.java
Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/finalizers/DefaultFinalizer.java
===================================================================
--- trunk/jaxx-compiler/src/main/java/jaxx/compiler/finalizers/DefaultFinalizer.java 2011-02-16 21:18:47 UTC (rev 2219)
+++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/finalizers/DefaultFinalizer.java 2011-02-16 21:21:44 UTC (rev 2220)
@@ -42,7 +42,6 @@
import jaxx.compiler.java.JavaMethod;
import jaxx.compiler.reflect.ClassDescriptor;
import jaxx.compiler.reflect.ClassDescriptorHelper;
-import jaxx.compiler.reflect.FieldDescriptor;
import jaxx.compiler.reflect.MethodDescriptor;
import jaxx.compiler.types.TypeManager;
import jaxx.runtime.Base64Coder;
@@ -51,6 +50,7 @@
import jaxx.runtime.JAXXObject;
import jaxx.runtime.JAXXObjectDescriptor;
import jaxx.runtime.JAXXUtil;
+import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -529,126 +529,83 @@
String packageName,
String className) throws ClassNotFoundException {
- String jaxxContextImplementorClass =
- compiler.getConfiguration().getJaxxContextClass().getName();
- boolean superclassIsJAXXObject = javaFile.isSuperclassIsJAXXObject();
+ // add logger support if required
+ addLoggerSupport(compiler, javaFile, className);
- // add logger support
- if (compiler.getConfiguration().isAddLogger()) {
+ // add JAXXObject support if required
+ addJAXXObjectSupport(compiler, root, javaFile);
- javaFile.addImport(LogFactory.class);
+ addSimpleField(javaFile, SERIAL_VERSION_UID_FIELD);
+ addSimpleField(javaFile, ALL_COMPONENTS_CREATED_FIELD);
- javaFile.addSimpleField(newField(
- PRIVATE | STATIC | FINAL,
- Log.class.getName(),
- "log",
- false,
- "LogFactory.getLog(" + className + ".class)")
- );
- }
+ addJAXXObjectDescriptorField(compiler, javaFile);
+ addMethod(javaFile, GET_JAXX_OBJECT_DESCRIPTOR_METHOD);
- if (!superclassIsJAXXObject) {
+ addPreviousValuesField(compiler, javaFile, root);
- // add JAXXObject support
- addField(javaFile, OBJECT_MAP_FIELD);
- addSimpleField(javaFile, BINDING_SOURCES_FIELD);
- addSimpleField(javaFile, ACTIVE_BINDINGS_FIELD);
- addSimpleField(javaFile, BINDINGS_FIELD);
- javaFile.addMethod(GET_OBJECT_BY_ID_METHOD);
- javaFile.addMethod(REGISTER_DATA_BINDING_METHOD);
- javaFile.addMethod(GET_DATA_BINDING_METHOD);
+ addConstructors(compiler, javaFile, className);
- javaFile.addMethod(createApplyDataBindingMethod());
- javaFile.addMethod(createProcessDataBindingMethod());
- javaFile.addMethod(createRemoveDataBindingMethod());
+ DataBinding[] bindings = compiler.getBindingHelper().getDataBindings();
- // JAXXContext
+ addInitializerMethod(compiler, javaFile, bindings.length);
- String type =
- javaFile.getImportManager().getType(jaxxContextImplementorClass);
+ javaFile.addBodyCode(compiler.getBodyCode().toString());
- javaFile.addField(newField(
- PROTECTED | FINAL,
- JAXXContext.class.getName(),
- FIELD_NAME_DELEGATE_CONTEXT,
- true,
- "new " + type + "()")
- );
+ addDataBindings(compiler, javaFile, bindings);
- javaFile.addImport(Container.class);
+ addCompleteSetupMethod(compiler, javaFile);
- javaFile.addMethod(SET_CONTEXT_VALUE_METHOD);
- javaFile.addMethod(SET_CONTEXT_VALUE_NAMED_METHOD);
- javaFile.addMethod(GET_CONTEXT_VALUE_METHOD);
- javaFile.addMethod(GET_CONTEXT_VALUE_NAMED_METHOD);
- javaFile.addMethod(REMOVE_CONTEXT_VALUE_METHOD);
- javaFile.addMethod(REMOVE_CONTEXT_VALUE_NAMED_METHOD);
- javaFile.addMethod(GET_PARENT_CONTAINER_METHOD);
- javaFile.addMethod(GET_PARENT_CONTAINER_MORE_METHOD);
+ addEventHandlers(compiler, javaFile);
+ }
- // PropertyChangeSupport
- addPropertyChangeSupport(root, javaFile);
+ protected void addDataBindings(JAXXCompiler compiler,
+ JavaFile javaFile,
+ DataBinding[] bindings) {
- // DataBinding
- javaFile.addMethod(PROCESS_DATA_BINDING_METHOD);
- } else {
+ if (bindings.length < 1) {
+ // no data bindings
+ return;
+ }
- //FIXME tchemit 2011-01-30 : We should not add it (if user want to use it in script it must add the correct import
- // Will be removed in version 3.0 with strict imports features
- javaFile.addImport(JAXXContext.class);
+ // create the $registerDefaultBindings method
+
+ for (JAXXBindingWriter<?> writer : bindingWriters) {
+ writer.reset();
}
+ addRegisteredDefaultBindingsMethod(compiler, javaFile);
- addSimpleField(javaFile, SERIAL_VERSION_UID_FIELD);
- addSimpleField(javaFile, ALL_COMPONENTS_CREATED_FIELD);
- boolean overrideContextInitialized = false;
- FieldDescriptor[] scriptFields = compiler.getScriptFields();
- for (FieldDescriptor f : scriptFields) {
- if (FIELD_NAME_CONTEXT_INITIALIZED.equals(f.getName())) {
- overrideContextInitialized = true;
- break;
+ // add import on each type of JAXXBinding used
+
+ for (JAXXBindingWriter<?> writer : bindingWriters) {
+ if (writer.isUsed()) {
+ compiler.getJavaFile().addImport(writer.getType());
}
}
- if (!overrideContextInitialized) {
- //addSimpleField(javaFile, CONTEXT_INITIALIZED);
- }
- JavaField descriptorField =
- createJAXXObjectDescriptorField(compiler, javaFile);
- javaFile.addSimpleField(descriptorField);
- if (compiler.getStylesheet() != null) {
- boolean needField = true;
- if (superclassIsJAXXObject) {
- // check alreay exists on parent
- ClassDescriptor superclass = root.getObjectClass();
- if (log.isDebugEnabled()) {
- log.debug("superclass : " + superclass);
- }
- JAXXCompiler parentCompiler =
- compiler.getEngine().getJAXXCompiler(
- superclass.getName()
- );
+ // for each binding declare the constant Id
- if (parentCompiler != null) {
- needField = parentCompiler.getStylesheet() == null;
- } else {
- try {
- superclass.getDeclaredFieldDescriptor(
- PREVIOUS_VALUES_FIELD.getName());
- needField = false;
- } catch (NoSuchFieldException ex) {
- // field not found
- }
- }
- if (needField && log.isDebugEnabled()) {
- log.debug("no " + PREVIOUS_VALUES_FIELD.getName() +
- " field in super class");
- }
- }
- if (needField) {
- addSimpleField(javaFile, PREVIOUS_VALUES_FIELD);
- }
+ for (DataBinding binding : bindings) {
+
+ String constantId = binding.getConstantId();
+
+ // add the data binding constant Id
+
+ compiler.addSimpleField(newField(
+ (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();
@@ -679,56 +636,83 @@
);
javaFile.addMethod(constructor);
}
+ }
- DataBinding[] bindings = compiler.getBindingHelper().getDataBindings();
+ protected void addJAXXObjectSupport(JAXXCompiler compiler,
+ CompiledObject root,
+ JavaFile javaFile) {
- int nbBindings = bindings.length;
- boolean hasDataBindings = nbBindings > 0;
+ String jaxxContextImplementorClass =
+ compiler.getConfiguration().getJaxxContextClass().getName();
- javaFile.addMethod(createInitializer(compiler, nbBindings, overrideContextInitialized));
+ boolean superclassIsJAXXObject = javaFile.isSuperclassIsJAXXObject();
- addMethod(javaFile, GET_JAXX_OBJECT_DESCRIPTOR_METHOD);
+ if (superclassIsJAXXObject) {
- javaFile.addBodyCode(compiler.getBodyCode().toString());
+ //FIXME tchemit 2011-01-30 : We should not add it (if user want to use it in script it must add the correct import
+ // Will be removed in version 3.0 with strict imports features
+ javaFile.addImport(JAXXContext.class);
- if (hasDataBindings) {
+ } else {
- // create the $registerDefaultBindings method
+ // add JAXXObject support
+ addField(javaFile, OBJECT_MAP_FIELD);
+ addSimpleField(javaFile, BINDING_SOURCES_FIELD);
+ addSimpleField(javaFile, ACTIVE_BINDINGS_FIELD);
+ addSimpleField(javaFile, BINDINGS_FIELD);
+ javaFile.addMethod(GET_OBJECT_BY_ID_METHOD);
+ javaFile.addMethod(REGISTER_DATA_BINDING_METHOD);
+ javaFile.addMethod(GET_DATA_BINDING_METHOD);
- for (JAXXBindingWriter<?> writer : bindingWriters) {
- writer.reset();
- }
- javaFile.addMethod(createRegisterDefaultBindingsMethod(compiler));
+ javaFile.addMethod(createApplyDataBindingMethod());
+ javaFile.addMethod(createProcessDataBindingMethod());
+ javaFile.addMethod(createRemoveDataBindingMethod());
- // add import on each type of JAXXBinding used
+ // JAXXContext
- for (JAXXBindingWriter<?> writer : bindingWriters) {
- if (writer.isUsed()) {
- compiler.getJavaFile().addImport(writer.getType());
- }
- }
+ String type =
+ javaFile.getImportManager().getType(jaxxContextImplementorClass);
- // for each binding declare the constant Id
+ javaFile.addField(newField(
+ PROTECTED | FINAL,
+ JAXXContext.class.getName(),
+ FIELD_NAME_DELEGATE_CONTEXT,
+ true,
+ "new " + type + "()")
+ );
- for (DataBinding binding : bindings) {
+ javaFile.addImport(Container.class);
- String constantId = binding.getConstantId();
+ javaFile.addMethod(SET_CONTEXT_VALUE_METHOD);
+ javaFile.addMethod(SET_CONTEXT_VALUE_NAMED_METHOD);
+ javaFile.addMethod(GET_CONTEXT_VALUE_METHOD);
+ javaFile.addMethod(GET_CONTEXT_VALUE_NAMED_METHOD);
+ javaFile.addMethod(REMOVE_CONTEXT_VALUE_METHOD);
+ javaFile.addMethod(REMOVE_CONTEXT_VALUE_NAMED_METHOD);
+ javaFile.addMethod(GET_PARENT_CONTAINER_METHOD);
+ javaFile.addMethod(GET_PARENT_CONTAINER_MORE_METHOD);
- // add the data binding constant Id
+ // PropertyChangeSupport
+ addPropertyChangeSupport(root, javaFile);
- compiler.addSimpleField(newField(
- (constantId.startsWith("BINDING_$") ? PRIVATE : PUBLIC) | FINAL | STATIC,
- TYPE_STRING,
- constantId,
- false,
- TypeManager.getJavaCode(binding.getRealId()))
- );
- }
+ // DataBinding
+ javaFile.addMethod(PROCESS_DATA_BINDING_METHOD);
}
+ }
- javaFile.addMethod(createCompleteSetupMethod(compiler, javaFile));
+ protected void addLoggerSupport(JAXXCompiler compiler, JavaFile javaFile, String className) {
+ if (compiler.getConfiguration().isAddLogger()) {
- addEventHandlers(compiler, javaFile);
+ javaFile.addImport(LogFactory.class);
+
+ javaFile.addSimpleField(newField(
+ PRIVATE | STATIC | FINAL,
+ Log.class.getName(),
+ "log",
+ false,
+ "LogFactory.getLog(" + className + ".class)")
+ );
+ }
}
protected final JAXXBindingWriter<?>[] bindingWriters = new
@@ -736,41 +720,12 @@
new DefaultJAXXBindingWriter()
};
- protected JavaMethod createRegisterDefaultBindingsMethod(JAXXCompiler compiler) {
- DataBinding[] bindings = compiler.getBindingHelper().getDataBindings();
- StringBuilder initCode = new StringBuilder();
-
- String eol = JAXXCompiler.getLineSeparator();
- 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 (DataBinding binding : bindings) {
-
- for (JAXXBindingWriter<?> writer : bindingWriters) {
- if (writer.accept(binding)) {
- writer.write(binding, generator, initCode);
- break;
- }
- }
- }
- return newMethod(PRIVATE,
- TYPE_VOID,
- METHOD_NAME_$REGISTER_DEFAULT_BINDINGS,
- initCode.toString(),
- false
- );
- }
-
/*---------------------------------------------------------------------------------*/
/*-- Create fields ----------------------------------------------------------------*/
/*---------------------------------------------------------------------------------*/
- protected JavaField createJAXXObjectDescriptorField(JAXXCompiler compiler,
- JavaFile javaFile) {
+ protected JavaField addJAXXObjectDescriptorField(JAXXCompiler compiler,
+ JavaFile javaFile) {
+ JavaField field;
try {
JAXXObjectDescriptor descriptor = compiler.getJAXXObjectDescriptor();
String data = Base64Coder.serialize(descriptor, true);
@@ -788,12 +743,13 @@
int sizeLimit = 65000; // constant strings are limited to 64K, and I'm not brave enough to push right up to the limit
if (data.length() < sizeLimit) {
- return newField(PRIVATE | STATIC | FINAL,
- TYPE_STRING,
- FIELD_NAME_$JAXX_OBJECT_DESCRIPTOR,
- false,
- TypeManager.getJavaCode(data)
+ field = newField(PRIVATE | STATIC | FINAL,
+ TYPE_STRING,
+ FIELD_NAME_$JAXX_OBJECT_DESCRIPTOR,
+ false,
+ TypeManager.getJavaCode(data)
);
+
} else {
StringBuffer initializer = new StringBuffer();
for (int i = 0; i < data.length(); i += sizeLimit) {
@@ -812,18 +768,60 @@
initializer.append(name);
initializer.append(")");
}
- return newField(PRIVATE | STATIC | FINAL,
- TYPE_STRING,
- FIELD_NAME_$JAXX_OBJECT_DESCRIPTOR,
- false,
- initializer.toString()
+ field = newField(PRIVATE | STATIC | FINAL,
+ TYPE_STRING,
+ FIELD_NAME_$JAXX_OBJECT_DESCRIPTOR,
+ false,
+ initializer.toString()
);
}
} catch (IOException e) {
throw new RuntimeException("Internal error: can't-happen error", e);
}
+ javaFile.addSimpleField(field);
+ return field;
}
+ protected void addPreviousValuesField(JAXXCompiler compiler,
+ JavaFile javaFile, CompiledObject root) {
+
+ boolean superclassIsJAXXObject = javaFile.isSuperclassIsJAXXObject();
+
+ if (compiler.getStylesheet() != null) {
+ boolean needField = true;
+ if (superclassIsJAXXObject) {
+ // check alreay exists on parent
+ ClassDescriptor superclass = root.getObjectClass();
+ if (log.isDebugEnabled()) {
+ log.debug("superclass : " + superclass);
+ }
+ JAXXCompiler parentCompiler =
+ compiler.getEngine().getJAXXCompiler(
+ superclass.getName()
+ );
+
+ if (parentCompiler != null) {
+ needField = parentCompiler.getStylesheet() == null;
+ } else {
+ try {
+ superclass.getDeclaredFieldDescriptor(
+ PREVIOUS_VALUES_FIELD.getName());
+ needField = false;
+ } catch (NoSuchFieldException ex) {
+ // field not found
+ }
+ }
+ if (needField && log.isDebugEnabled()) {
+ log.debug("no " + PREVIOUS_VALUES_FIELD.getName() +
+ " field in super class");
+ }
+ }
+ if (needField) {
+ addSimpleField(javaFile, PREVIOUS_VALUES_FIELD);
+ }
+ }
+ }
+
/*---------------------------------------------------------------------------------*/
/*-- Create methods ---------------------------------------------------------------*/
/*---------------------------------------------------------------------------------*/
@@ -856,9 +854,6 @@
// there is property change support but the firePropertyChange method is protected
javaFile.addMethod(FIRE_PROPERTY_CHANGE_METHOD);
} else {
- // either no support at all or firePropertyChange isn't accessible
-// javaFile.addImport(PropertyChangeListener.class);
-// javaFile.addImport(PropertyChangeSupport.class);
addField(javaFile, PROPERTY_CHANGE_SUPPORT_FIELD);
javaFile.addMethod(GET_PROPERTY_CHANGE_SUPPORT_METHOD);
@@ -870,6 +865,39 @@
}
}
+ protected JavaMethod addRegisteredDefaultBindingsMethod(JAXXCompiler compiler,
+ JavaFile javaFile) {
+ DataBinding[] bindings = compiler.getBindingHelper().getDataBindings();
+ StringBuilder initCode = new StringBuilder();
+
+ String eol = JAXXCompiler.getLineSeparator();
+ 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 (DataBinding binding : bindings) {
+
+ for (JAXXBindingWriter<?> writer : bindingWriters) {
+ if (writer.accept(binding)) {
+ writer.write(binding, generator, initCode);
+ break;
+ }
+ }
+ }
+ JavaMethod method = newMethod(PRIVATE,
+ TYPE_VOID,
+ METHOD_NAME_$REGISTER_DEFAULT_BINDINGS,
+ initCode.toString(),
+ false
+ );
+ javaFile.addMethod(method);
+ return method;
+ }
+
protected void addEventHandlers(JAXXCompiler compiler,
JavaFile javaFile) {
@@ -946,25 +974,50 @@
protected JavaMethod createConstructorWithInitialContext(JAXXCompiler compiler,
String className,
boolean superclassIsJAXXObject) throws CompilerException {
- StringBuffer code = new StringBuffer();
+ 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) {
- //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;
+ realConstructorParams += " ,";
}
+ realConstructorParams += constructorParams;
+ }
+
+ realConstructorParams = realConstructorParams.trim();
+
+ if (StringUtils.isNotEmpty(realConstructorParams)) {
+
+ // add a super invocation
code.append(" super(");
- code.append(constructorParams);
+ code.append(realConstructorParams);
code.append(");");
code.append(eol);
- } else {
- if (superclassIsJAXXObject) {
- code.append(" super(" + PARAMETER_NAME_PARENT_CONTEXT + ");");
- 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.getImportManager().getType(JAXXUtil.class);
code.append(prefix);
@@ -986,9 +1039,13 @@
);
}
- public JavaMethod createInitializer(JAXXCompiler compiler,
- int nbBindings,
- boolean overrideContextInitialized) throws CompilerException {
+ public JavaMethod addInitializerMethod(JAXXCompiler compiler,
+ JavaFile javaFile,
+ int nbBindings) throws CompilerException {
+
+ boolean overrideContextInitialized =
+ compiler.containsScriptField(FIELD_NAME_CONTEXT_INITIALIZED);
+
String eol = JAXXCompiler.getLineSeparator();
StringBuffer code = new StringBuffer();
CompiledObject root = compiler.getRootObject();
@@ -1046,16 +1103,18 @@
}
code.append(METHOD_NAME_$COMPLETE_SETUP + "();");
code.append(eol);
- return JavaElementFactory.newMethod(PRIVATE,
- TYPE_VOID,
- METHOD_NAME_$INITIALIZE,
- code.toString(),
- false
+ JavaMethod method = JavaElementFactory.newMethod(PRIVATE,
+ TYPE_VOID,
+ METHOD_NAME_$INITIALIZE,
+ code.toString(),
+ false
);
+ javaFile.addMethod(method);
+ return method;
}
- protected JavaMethod createCompleteSetupMethod(JAXXCompiler compiler,
- JavaFile javaFile) {
+ protected JavaMethod addCompleteSetupMethod(JAXXCompiler compiler,
+ JavaFile javaFile) {
StringBuffer code = new StringBuffer();
code.append(FIELD_NAME_ALL_COMPONENTS_CREATED + " = true;");
String eol = JAXXCompiler.getLineSeparator();
@@ -1083,12 +1142,14 @@
if (method != null) {
code.append(METHOD_NAME_$AFTER_COMPLETE_SETUP + "();").append(eol);
}
- return JavaElementFactory.newMethod(PRIVATE,
- TYPE_VOID,
- METHOD_NAME_$COMPLETE_SETUP,
- code.toString(),
- false
+ JavaMethod javaMethod = JavaElementFactory.newMethod(PRIVATE,
+ TYPE_VOID,
+ METHOD_NAME_$COMPLETE_SETUP,
+ code.toString(),
+ false
);
+ javaFile.addMethod(javaMethod);
+ return javaMethod;
}
protected String createInitBindingsCode(JAXXCompiler compiler) {
1
0
r2219 - trunk/jaxx-compiler/src/main/java/jaxx/compiler/script
by tchemit@users.nuiton.org 16 Feb '11
by tchemit@users.nuiton.org 16 Feb '11
16 Feb '11
Author: tchemit
Date: 2011-02-16 22:18:47 +0100 (Wed, 16 Feb 2011)
New Revision: 2219
Url: http://nuiton.org/repositories/revision/jaxx/2219
Log:
Anomalie #1129: call constructors other than default ones (part one : register constructor from script)
Modified:
trunk/jaxx-compiler/src/main/java/jaxx/compiler/script/ScriptManager.java
Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/script/ScriptManager.java
===================================================================
--- trunk/jaxx-compiler/src/main/java/jaxx/compiler/script/ScriptManager.java 2011-02-16 21:15:29 UTC (rev 2218)
+++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/script/ScriptManager.java 2011-02-16 21:18:47 UTC (rev 2219)
@@ -27,13 +27,16 @@
import jaxx.compiler.CompilerException;
import jaxx.compiler.JAXXCompiler;
+import jaxx.compiler.java.JavaArgument;
+import jaxx.compiler.java.JavaElementFactory;
+import jaxx.compiler.java.JavaMethod;
import jaxx.compiler.java.parser.JavaParser;
import jaxx.compiler.java.parser.JavaParserTreeConstants;
import jaxx.compiler.java.parser.SimpleNode;
+import jaxx.compiler.reflect.ClassDescriptor;
import jaxx.compiler.reflect.FieldDescriptor;
import jaxx.compiler.reflect.MethodDescriptor;
import jaxx.compiler.tags.TagManager;
-import jaxx.runtime.JAXXUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -226,7 +229,12 @@
compiler.appendBodyCode(modifiers + " " + node.getText().substring(0, node.getText().length() - 1) + code + "}");
}
+ private void processConstructor(SimpleNode mainNode) {
+ compiler.registerInitializer(new RegisterConstructor(mainNode));
+ }
+
+
/** Logger */
static private final Log log = LogFactory.getLog(ScriptManager.class);
@@ -290,7 +298,8 @@
}
compiler.appendBodyCode(str);
} else if (nodeType == JavaParserTreeConstants.JJTCONSTRUCTORDECLARATION) {
- processConstructor(node.getChild(0).getChild(0).getText(), node.getChild(0).getChild(1));
+ processConstructor(node);
+// processConstructor(node.getChild(0).getChild(0).getText(), node.getChild(0).getChild(1));
} else if (nodeType == JavaParserTreeConstants.JJTLOCALVARIABLEDECLARATION || nodeType == JavaParserTreeConstants.JJTFIELDDECLARATION) {
// the "local" variable declarations in this expression aren't actually local -- they are flagged local
// just because there isn't an enclosing class scope visible to the parser. "Real" local variable
@@ -395,4 +404,86 @@
}
}
}
+
+ class RegisterConstructor implements Runnable {
+
+ final SimpleNode mainNode;
+
+ public RegisterConstructor(SimpleNode mainNode) {
+ this.mainNode = mainNode;
+ }
+
+ @Override
+ public void run() {
+
+ String className = mainNode.getChild(0).getChild(1).firstToken.image;
+ String modifiers = mainNode.getChild(0).getChild(0).getText();
+
+ SimpleNode node = mainNode.getChild(0).getChild(1);
+ int nbArguments = node.getChild(0).jjtGetNumChildren();
+ if (log.isInfoEnabled()) {
+ log.info("Constructor found with " + nbArguments + " arguments : " + node.getText());
+ }
+ assert node.getId() == JavaParserTreeConstants.JJTCONSTRUCTORDECLARATION : "expected node to be ConstructorDeclaration, found " + JavaParserTreeConstants.jjtNodeName[node.getId()] + " instead";
+ assert node.getChild(0).getId() == JavaParserTreeConstants.JJTFORMALPARAMETERS : "expected node 0 to be FormalParameters, found " + JavaParserTreeConstants.jjtNodeName[node.getChild(1).getId()] + " instead";
+ SimpleNode params = node.getChild(0);
+ StringBuilder bodyC = new StringBuilder();
+ for (int i = 1; i < node.jjtGetNumChildren(); i++) {
+ bodyC.append(node.getChild(i).getText());
+ }
+ String bodyContent = bodyC.toString().trim();
+ JavaArgument[] arguments = new JavaArgument[nbArguments];
+ for (int i = 0; i < nbArguments; i++) {
+ SimpleNode param = params.getChild(i);
+ String paramType = param.getChild(0).firstToken.image;
+ ClassDescriptor type = TagManager.resolveClass(paramType, compiler);
+ String paramName = param.getChild(2).firstToken.image;
+ if (log.isDebugEnabled()) {
+ log.debug("Parameter n°" + i + " --> [" + type + " : " + paramName + "]");
+ }
+ JavaArgument arg = JavaElementFactory.newArgument(type.getName(), paramName);
+ arguments[i] = arg;
+ }
+ String[] modifierSplit = modifiers.trim().split("\\s");
+ if (log.isDebugEnabled()) {
+ log.debug("Modifiers = " + Arrays.toString(modifierSplit));
+ }
+ int finalModifiers = 0;
+ for (String mod : modifierSplit) {
+ mod = mod.trim();
+ if ("public".equals(mod)) {
+ finalModifiers = Modifier.PUBLIC;
+ break;
+ }
+ if ("protected".equals(mod)) {
+ finalModifiers = Modifier.PROTECTED;
+ break;
+ }
+ if ("private".equals(mod)) {
+ finalModifiers = Modifier.PRIVATE;
+ break;
+ }
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("Final modifier to use : " + Modifier.toString(finalModifiers));
+ }
+ if (!bodyContent.endsWith("$initialize();")) {
+ bodyContent += JAXXCompiler.getLineSeparator() + " $initialize();";
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("Constructor body :\n" + bodyContent);
+ }
+ JavaMethod constructorMethod = JavaElementFactory.newMethod(
+ finalModifiers,
+ null,
+ className,
+ bodyContent,
+ false,
+ arguments
+ );
+
+ compiler.getJavaFile().addMethod(constructorMethod);
+ }
+ }
}
1
0
r2218 - in trunk/jaxx-compiler/src/main/java/jaxx/compiler: tags/swing tasks
by tchemit@users.nuiton.org 16 Feb '11
by tchemit@users.nuiton.org 16 Feb '11
16 Feb '11
Author: tchemit
Date: 2011-02-16 22:15:29 +0100 (Wed, 16 Feb 2011)
New Revision: 2218
Url: http://nuiton.org/repositories/revision/jaxx/2218
Log:
remove old comment code + reformat
Modified:
trunk/jaxx-compiler/src/main/java/jaxx/compiler/tags/swing/JSplitPaneHandler.java
trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/GenerateTask.java
Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/tags/swing/JSplitPaneHandler.java
===================================================================
--- trunk/jaxx-compiler/src/main/java/jaxx/compiler/tags/swing/JSplitPaneHandler.java 2011-02-16 21:14:13 UTC (rev 2217)
+++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/tags/swing/JSplitPaneHandler.java 2011-02-16 21:15:29 UTC (rev 2218)
@@ -64,10 +64,12 @@
protected int constantValue(String key, String value) {
if (key.equals(ATTRIBUTE_ORIENTATION)) {
value = value.trim().toLowerCase();
- if (value.equals(ORIENTATION_VALUE_HORIZONTAL) || value.equals(ORIENTATION_VALUE_HORIZONTAL_SPLIT)) {
+ if (value.equals(ORIENTATION_VALUE_HORIZONTAL) ||
+ value.equals(ORIENTATION_VALUE_HORIZONTAL_SPLIT)) {
return JSplitPane.HORIZONTAL_SPLIT;
}
- if (value.equals(ORIENTATION_VALUE_VERTICAL) || value.equals(ORIENTATION_VALUE_VERTICAL_SPLIT)) {
+ if (value.equals(ORIENTATION_VALUE_VERTICAL) ||
+ value.equals(ORIENTATION_VALUE_VERTICAL_SPLIT)) {
return JSplitPane.VERTICAL_SPLIT;
}
throw new IllegalArgumentException("orientation must be 'horizontal' or 'vertical', found '" + value + "'");
Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/GenerateTask.java
===================================================================
--- trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/GenerateTask.java 2011-02-16 21:14:13 UTC (rev 2217)
+++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/tasks/GenerateTask.java 2011-02-16 21:15:29 UTC (rev 2218)
@@ -131,13 +131,6 @@
ImportsManager importsManager = f.getImportManager();
- // all jaxx files needs it
-// importsManager.addImport(Container.class);
-// importsManager.addImport(JAXXUtil.class);
-// importsManager.addImport(SwingUtil.class);
-// importsManager.addImport(List.class);
-// importsManager.addImport(Map.class);
-
List<String> result;
for (String importFQN : f.getImports()) {
@@ -174,8 +167,6 @@
}
f.setInterfaces(interfaces2);
- // make sure this imports where done
-// importsManager.addImport(Container.class);
importsManager.addImport(JAXXUtil.class);
if (!f.isSuperclassIsJAXXObject() || needSwingUtil) {
@@ -183,9 +174,6 @@
// SwingUtil class
importsManager.addImport(SwingUtil.class);
}
-// importsManager.addImport(List.class);
-// importsManager.addImport(Map.class);
-
result = importsManager.getImports(packageName);
result.remove(packageName + ".*");
if (log.isDebugEnabled()) {
@@ -194,10 +182,6 @@
for (String s : result) {
log.debug(" " + s);
}
-// log.info("[" + f.getName() + "] Registred classnames " + compiler.getResolvedClassNames().size() + ".");
-// for (String s : compiler.getResolvedClassNames().values()) {
-// log.info(" " + s);
-// }
}
if (log.isDebugEnabled()) {
1
0
16 Feb '11
Author: tchemit
Date: 2011-02-16 22:14:13 +0100 (Wed, 16 Feb 2011)
New Revision: 2217
Url: http://nuiton.org/repositories/revision/jaxx/2217
Log:
Evolution #1343: Introduce a JXLayerHandler to deal with new api of JXLayer
Modified:
trunk/jaxx-compiler/src/main/java/jaxx/compiler/spi/DefaultInitializer.java
Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/spi/DefaultInitializer.java
===================================================================
--- trunk/jaxx-compiler/src/main/java/jaxx/compiler/spi/DefaultInitializer.java 2011-02-16 21:13:07 UTC (rev 2216)
+++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/spi/DefaultInitializer.java 2011-02-16 21:14:13 UTC (rev 2217)
@@ -61,6 +61,7 @@
import jaxx.compiler.tags.swing.JToolBarHandler;
import jaxx.compiler.tags.swing.JTreeHandler;
import jaxx.compiler.tags.swing.JWindowHandler;
+import jaxx.compiler.tags.swing.JXLayerHandler;
import jaxx.compiler.tags.swing.RowHandler;
import jaxx.compiler.tags.swing.TabHandler;
import jaxx.compiler.tags.swing.TableHandler;
@@ -77,6 +78,7 @@
import jaxx.runtime.swing.editor.EnumEditor;
import jaxx.runtime.swing.editor.LocaleEditor;
import jaxx.runtime.validator.swing.SwingValidator;
+import org.jdesktop.jxlayer.JXLayer;
import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
@@ -186,6 +188,9 @@
registerBean(JFrame.class, JWindowHandler.class);
registerBean(JWindow.class, JWindowHandler.class);
+ // JXLayer
+ registerBean(JXLayer.class, JXLayerHandler.class);
+
registerBean(Application.class, ApplicationHandler.class);
registerBean(JInternalFrame.class, JInternalFrameHandler.class);
1
0
16 Feb '11
Author: tchemit
Date: 2011-02-16 22:13:07 +0100 (Wed, 16 Feb 2011)
New Revision: 2216
Url: http://nuiton.org/repositories/revision/jaxx/2216
Log:
add convinient method to know if a compiler contains a script field
Modified:
trunk/jaxx-compiler/src/main/java/jaxx/compiler/JAXXCompiler.java
Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/JAXXCompiler.java
===================================================================
--- trunk/jaxx-compiler/src/main/java/jaxx/compiler/JAXXCompiler.java 2011-02-16 21:11:00 UTC (rev 2215)
+++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/JAXXCompiler.java 2011-02-16 21:13:07 UTC (rev 2216)
@@ -1933,4 +1933,14 @@
public void setNeedSwingUtil(boolean needSwingUtil) {
this.needSwingUtil = needSwingUtil;
}
+
+ public boolean containsScriptField(String fieldName) {
+ FieldDescriptor[] scriptFields = getScriptFields();
+ for (FieldDescriptor f : scriptFields) {
+ if (fieldName.equals(f.getName())) {
+ return true;
+ }
+ }
+ return false;
+ }
}
1
0
16 Feb '11
Author: tchemit
Date: 2011-02-16 22:11:00 +0100 (Wed, 16 Feb 2011)
New Revision: 2215
Url: http://nuiton.org/repositories/revision/jaxx/2215
Log:
open api to make possible to change ChildRef creation
Modified:
trunk/jaxx-compiler/src/main/java/jaxx/compiler/CompiledObject.java
Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/CompiledObject.java
===================================================================
--- trunk/jaxx-compiler/src/main/java/jaxx/compiler/CompiledObject.java 2011-02-16 21:09:42 UTC (rev 2214)
+++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/CompiledObject.java 2011-02-16 21:11:00 UTC (rev 2215)
@@ -151,6 +151,15 @@
this.delegateCode = delegateCode;
}
+
+ public String getConstraints() {
+ return constraints;
+ }
+
+ public String getDelegateCode() {
+ return delegateCode;
+ }
+
public CompiledObject getChild() {
return child;
}
@@ -684,15 +693,19 @@
child.setParent(this);
- ChildRef ref = new ChildRef(child,
- constraints,
- child.getJavaCode(),
- delegateCode
- );
+ ChildRef ref = newChildRef(child, constraints, delegateCode);
childs.add(ref);
}
}
+ protected ChildRef newChildRef(CompiledObject child, String constraints, String delegateCode) {
+ return new ChildRef(child,
+ constraints,
+ child.getJavaCode(),
+ delegateCode
+ );
+ }
+
@Override
public String toString() {
return getObjectClass().getName() + "[id='" + id + "']";
1
0
r2214 - trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing
by tchemit@users.nuiton.org 16 Feb '11
by tchemit@users.nuiton.org 16 Feb '11
16 Feb '11
Author: tchemit
Date: 2011-02-16 22:09:42 +0100 (Wed, 16 Feb 2011)
New Revision: 2214
Url: http://nuiton.org/repositories/revision/jaxx/2214
Log:
Evolution #1339: Updates to JXLayer 3.0.4
Modified:
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidator.java
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidator.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidator.java 2011-02-16 21:01:10 UTC (rev 2213)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidator.java 2011-02-16 21:09:42 UTC (rev 2214)
@@ -350,7 +350,8 @@
Constructor<? extends AbstractBeanValidatorUI> cons =
uiClass.getConstructor(String.class);
AbstractBeanValidatorUI ui = cons.newInstance(fieldname);
- ui.setEnabled(true);
+
+// ui.setEnabled(true);
addBeanValidatorListener(ui);
jx.setUI(ui);
}
1
0