Other |
---|
5.0 b48Fixed |
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
Name: siR10004 Date: 02/26/2004 The following classes - ------------------------------------------------------------- java.util.concurrent.FutureTask java.util.concurrent.ConcurrentHashMap$EntryIterator java.util.concurrent.ConcurrentHashMap$KeyIterator java.util.concurrent.ConcurrentHashMap$ValueIterator java.util.AbstractList$ListItr java.util.EnumMap$EntryIterator java.util.EnumMap$KeyIterator java.util.EnumMap$ValueIterator java.util.IdentityHashMap$EntryIterator java.util.IdentityHashMap$KeyIterator java.util.IdentityHashMap$ValueIterator java.util.WeakHashMap$EntryIterator java.util.WeakHashMap$KeyIterator java.util.WeakHashMap$ValueIterator java.util.TreeMap$EntryIterator java.util.TreeMap$KeyIterator java.util.TreeMap$SubMapEntryIterator java.util.TreeMap$ValueIterator java.util.HashMap$EntryIterator java.util.HashMap$KeyIterator java.util.HashMap$ValueIterator java.util.LinkedHashMap$EntryIterator java.util.LinkedHashMap$KeyIterator java.util.LinkedHashMap$ValueIterator ------------------------------------------------------------- cause 'java.lang.reflect.GenericSignatureFormatError' thrown when calling some of reflection methods to get generic types. The following program can be used to reproduce the bug ------------------------------------------------------------- import java.lang.reflect.*; public class Probe { public static void main (String[] args) throws Throwable { String name = args[0]; System.out.println("\nCLASS " + name); Class c = Class.forName(name, false, null); int errs = probe(c); System.out.println(errs == 0 ? " ok" : " errors:" + errs); } static int probe (Class c) { int errs = 0; try { c.getTypeParameters(); c.getGenericSuperclass(); c.getGenericInterfaces(); } catch (Throwable t) { errs++; System.err.println(t); //t.printStackTrace(); } Field[] fields = c.getDeclaredFields(); if (fields != null) for (int i = 0; i < fields.length; i++) { try { fields[i].getGenericType(); } catch (Throwable t) { errs++; System.err.println("FIELD " + fields[i]); System.err.println(t); //t.printStackTrace(); } } Method[] methods = c.getDeclaredMethods(); if (methods != null) for (int i = 0; i < methods.length; i++) { try { methods[i].getTypeParameters(); methods[i].getGenericReturnType(); methods[i].getGenericParameterTypes(); methods[i].getGenericExceptionTypes(); } catch (Throwable t) { errs++; System.err.println("METHOD " + methods[i]); System.err.println(t); //t.printStackTrace(); } } Constructor[] ctors = c.getDeclaredConstructors(); if (ctors != null) for (int i = 0; i < ctors.length; i++) { try { ctors[i].getTypeParameters(); ctors[i].getGenericParameterTypes(); ctors[i].getGenericExceptionTypes(); } catch (Throwable t) { errs++; System.err.println("CONSTRUCTOR " + ctors[i]); System.err.println(t); //t.printStackTrace(); } } return errs; } } ------------------------------------------------------------- This bug causes failure of JCK signature test on b40. Not reproducible on b39. It seems that root of the problem is in invalid 'Signature' attributes. For example, field java.util.concurrent.FutureTask.sync has the following attribute Ljava/util/concurrent/FutureTask<TV;>.Sync; (note that '.Sync' violates the signature attribute syntax). ======================================================================
|