@Test
public void complexMethodDescriptors() {
TypeRegistry registry = getTypeRegistry("data.ComplexClass");
byte[] bytes = loadBytesForClass("data.ComplexClass");
TypeDescriptor typeDescriptor = new TypeDescriptorExtractor(registry).extract(bytes, true);
assertEquals("data/ComplexClass", typeDescriptor.getName());
assertEquals("data/SimpleClass", typeDescriptor.getSupertypeName());
assertEquals(1, typeDescriptor.getSuperinterfacesName().length);
assertEquals("java/io/Serializable", typeDescriptor.getSuperinterfacesName()[0]);
assertEquals(0x20, typeDescriptor.getModifiers());
assertEquals(3, typeDescriptor.getFields().length);
assertEquals(9, typeDescriptor.getMethods().length);
assertEquals("0x2 privateMethod()I", typeDescriptor.getMethods()[0].toString());
assertEquals("0x1 publicMethod()Ljava/lang/String;", typeDescriptor.getMethods()[1].toString());
assertEquals("0x0 defaultMethod()Ljava/util/List;", typeDescriptor.getMethods()[2].toString());
assertEquals("0x0 thrower()V throws java/lang/Exception java/lang/IllegalStateException",
typeDescriptor.getMethods()[3].toString());
}