OW2 Consortium
Search OW2 Mail Archive: 

Advanced Search - Powered by Google


Mail Archive Home | fractal-commits List | June 2008 Index

<--  Date Index  --> <--  Thread Index  -->

[fractal-commits] [8003] sandbox/merle/fractal-generics/java/src/main/java/org/objectweb/ fractal/java/JavaClass.java: Corrected the constructor, newJavaClass,and forName methods to support recursive generic parameters.


Title: [8003] sandbox/merle/fractal-generics/java/src/main/java/org/objectweb/fractal/java/JavaClass.java: Corrected the constructor, newJavaClass, and forName methods to support recursive generic parameters.
Revision
8003
Author
merle
Date
2008-06-30 17:54:14 +0200 (Mon, 30 Jun 2008)

Log Message

Corrected the constructor, newJavaClass, and forName methods to support recursive generic parameters.

Thanks to Denis Conan for pointing this bug out.

Modified Paths

Diff

Modified: sandbox/merle/fractal-generics/java/src/main/java/org/objectweb/fractal/java/JavaClass.java (8002 => 8003)


--- sandbox/merle/fractal-generics/java/src/main/java/org/objectweb/fractal/java/JavaClass.java	2008-06-30 15:43:51 UTC (rev 8002)
+++ sandbox/merle/fractal-generics/java/src/main/java/org/objectweb/fractal/java/JavaClass.java	2008-06-30 15:54:14 UTC (rev 8003)
@@ -80,7 +80,9 @@
 	genericParameterList = new JavaClass[classTypeParameters.length];
     int i = 0;
     for(TypeVariable ctp : classTypeParameters) {
-      genericParameterList[i] = new JavaClass((Class)ctp.getBounds()[0], map);
+// Next line replaced to correct a bug reported by Denis Conan.
+//      genericParameterList[i] = new JavaClass((Class)ctp.getBounds()[0], map);
+      genericParameterList[i] = newJavaClass(ctp.getBounds()[0], new HashMap<String, JavaClass>(), map);
       i++;
     }
     initSuperTypes(map);
@@ -147,7 +149,7 @@
     }
   }
 
-  private JavaClass newJavaClass (Type type, Map<String, JavaClass> parameters, final HashMap<Class, JavaClass> map) {
+  private static JavaClass newJavaClass (Type type, Map<String, JavaClass> parameters, final HashMap<Class, JavaClass> map) {
     if(type instanceof Class) {
       JavaClass jc = map.get((Class)type);
       if(jc != null) return jc;
@@ -159,6 +161,7 @@
       for(Type t: types) {
         if(t instanceof TypeVariable) {
           jcs[j] = parameters.get(((TypeVariable)t).getName());
+          if(jcs[j] == null) jcs[j] = new JavaClass(Object.class);
         } else if(t instanceof Class) {
           jcs[j] = map.get((Class)t);
           if(jcs[j] == null) {
@@ -216,7 +219,7 @@
   public String toString () {
     StringBuffer sb = new StringBuffer();
     toStringBuffer(sb);
-    return sb.toString();		
+    return sb.toString();
   }
 
   /**
@@ -285,7 +288,9 @@
   public static JavaClass forName (final String name, final ClassLoader classLoader)
     throws ClassNotFoundException
   {
-	// Search the first character before generic parameters.
+// System.out.println("JavaClass.forName(name=" + name + ")");
+
+    // Search the first character before generic parameters.
     int index = name.indexOf(characterBeforeGenericParameters);
     if(index == -1) {
       // When name does not denote a class without generic parameters.
@@ -339,13 +344,20 @@
       throw new ClassNotFoundException("Bad number of generic parameters for '" + name + "'");
     }
     for(int i=0, m=genericParameterList.size(); i<m; i++) {
+/*
+ * Next lines replaced to correct a bug reported by Denis Conan.
+ *
       Class<?> c = (Class<?>)javaClass.getTypeParameters()[i].getBounds()[0];
-// TODO : Replace isAssignable by isFcSubTypeOf
+      // TODO : Replace isAssignable by isFcSubTypeOf
       if(!c.isAssignableFrom(((JavaClass)genericParameterList.get(i)).getClazz())) {
         throw new ClassNotFoundException("Bad generic parameter for '" + name + "'");
       }
+*/
+     JavaClass c = newJavaClass(javaClass.getTypeParameters()[i].getBounds()[0], new HashMap<String, JavaClass>(), new HashMap<Class, JavaClass>());
+     if(!c.isFcSubTypeOf(genericParameterList.get(i))) {
+       throw new ClassNotFoundException("Bad generic parameter for '" + name + "'");
+     }
     }
-
     return new JavaClass(javaClass, genericParameterList.toArray(new JavaClass[genericParameterList.size()]));
   }
 


<--  Date Index  --> <--  Thread Index  -->

Reply via email to:

Powered by MHonArc.

Copyright © 2006-2007, OW2 Consortium | contact | webmaster.