Community
Participate
Working Groups
With the Hastable IType do getTypes(). One of these memberTypes is Hashtable$1. With the Hashtable$1 IType do getDeclaringType. The result is null.
I see this problem with rt.jar of jdk 1.4 or 1.3.1
For the JDK1.4, I disassemble the java/util/Hashtable.class using our disassembler and I got: Inner classes attributes: [inner class info name: #92 java/util/Hashtable$1 outer class info name: #50 java/util/Hashtable inner name: #0 accessflags: 0 ], [inner class info name: #87 java/util/Hashtable$EmptyIterator outer class info name: #50 java/util/Hashtable inner name: #95 EmptyIterator accessflags: 10 private static ], [inner class info name: #85 java/util/Hashtable$EmptyEnumerator outer class info name: #50 java/util/Hashtable inner name: #96 EmptyEnumerator accessflags: 10 private static ], [inner class info name: #64 java/util/Hashtable$Enumerator outer class info name: #50 java/util/Hashtable inner name: #97 Enumerator accessflags: 2 private ], [inner class info name: #21 java/util/Hashtable$Entry outer class info name: #50 java/util/Hashtable inner name: #98 Entry accessflags: 10 private static ], [inner class info name: #72 java/util/Hashtable$ValueCollection outer class info name: #50 java/util/Hashtable inner name: #99 ValueCollection accessflags: 2 private ], [inner class info name: #70 java/util/Hashtable$EntrySet outer class info name: #50 java/util/Hashtable inner name: #100 EntrySet accessflags: 2 private ], [inner class info name: #67 java/util/Hashtable$KeySet outer class info name: #50 java/util/Hashtable inner name: #101 KeySet accessflags: 2 private ], [inner class info name: #44 java/util/Map$Entry outer class info name: #75 java/util/Map inner name: #98 Entry accessflags: 1545 public static abstract ] The first entry should not have a outer class info name. This index is supposed to be equals to 0 is the inner class is not a member. This means the inner attribute in the .class file is incorrect and doesn't follow the JVM specifications. I added an extra check in the getMembers() methods of the ClassFileReader. Now I get the following list of members for java.util.Hashtable: java/util/Hashtable$EmptyIterator java/util/Hashtable$EmptyEnumerator java/util/Hashtable$Enumerator java/util/Hashtable$Entry java/util/Hashtable$ValueCollection java/util/Hashtable$EntrySet java/util/Hashtable$KeySet java/util/Hashtable$1 is not in the list anymore. The problem is exactly the same with the rt.jar from the jdk 1.3.1. So I will keep the extra check in the getMembers() methods. Fixed and released in HEAD.