@@ -47,6 +47,7 @@ public final class ClassInfo {
4747 private final String classId ;
4848 private final Collection <ClassInfo > supertypes = new LinkedList <>();
4949 private final ClassCache cache ;
50+ private boolean isInterface = false ;
5051
5152 ClassInfo (ClassCache cache , Class clz ) {
5253 this .cache = cache ;
@@ -62,13 +63,14 @@ public final class ClassInfo {
6263 supertypes .add (cache .get (itfc ));
6364 }
6465 }
66+ this .isInterface = clz .isInterface ();
6567 }
6668
6769 ClassInfo (ClassCache cache , ClassLoader cl , String className ) {
6870 this .cache = cache ;
6971 cLoaderId = (cl != null ? cl .toString () : "<null>" );
7072 classId = className .replace ("/" , "." );
71- supertypes . addAll ( resolveSupertypes ( cl , className ) );
73+ loadExternalClass ( cl , className );
7274 }
7375
7476 /**
@@ -108,31 +110,35 @@ public String getJavaClassName() {
108110 return classId ;
109111 }
110112
111- private Collection <ClassInfo > resolveSupertypes (final ClassLoader cl , final String className ) {
112- final Collection <ClassInfo > supers = new LinkedList <>();
113+ public boolean isInterface () {
114+ return isInterface ;
115+ }
116+
117+ private void loadExternalClass (final ClassLoader cl , final String className ) {
113118 String rsrcName = className .replace ("." , "/" ) + ".class" ;
114119 InputStream typeIs = cl == null ? SYS_CL .getResourceAsStream (rsrcName ) : cl .getResourceAsStream (rsrcName );
115120 if (typeIs != null ) {
116121 try {
117122 BTraceClassReader cr = new BTraceClassReader (cl , typeIs );
123+
124+ this .isInterface = cr .isInterface ();
118125 String [] info = cr .readClassSupers ();
119126 String superName = info [0 ];
120127 if (superName != null ) {
121- supers .add (cache .get (inferClassLoader (cl , superName ), superName ));
128+ supertypes .add (cache .get (inferClassLoader (cl , superName ), superName ));
122129 }
123130 if (info .length > 1 ) {
124131 for (int i = 1 ; i < info .length ; i ++) {
125132 String ifc = info [i ];
126133 if (ifc != null ) {
127- supers .add (cache .get (inferClassLoader (cl , ifc ), ifc ));
134+ supertypes .add (cache .get (inferClassLoader (cl , ifc ), ifc ));
128135 }
129136 }
130137 }
131138 } catch (IOException e ) {
132139 DebugSupport .warning (e );
133140 }
134141 }
135- return supers ;
136142 }
137143
138144 private static ClassLoader inferClassLoader (ClassLoader initiating , String className ) {
@@ -207,10 +213,12 @@ public boolean equals(Object obj) {
207213 if (!Objects .equals (this .cLoaderId , other .cLoaderId )) {
208214 return false ;
209215 }
210- if (!Objects .equals (this .classId , other .classId )) {
211- return false ;
212- }
213- return true ;
216+ return Objects .equals (this .classId , other .classId );
217+ }
218+
219+ @ Override
220+ public String toString () {
221+ return "ClassInfo{" + "cLoaderId=" + cLoaderId + ", classId=" + classId + ", supertypes=" + supertypes + '}' ;
214222 }
215223
216224}
0 commit comments