ClassFile cf = cdr.getClassFile();
ClassSignature classSig = null;
boolean displayGenerics = SystemFacade.getInstance().getPreferences().isSettingTrue(Settings.DISPLAY_GENERICS);
if (displayGenerics) {
SignatureAttribute signature = cf.getAttributes().getSignatureAttribute();
if (signature != null) {
classSig = Signatures.getClassSignature(signature.getSignatureString());
}
}
String access = cf.getAccessString();
if (access.length() > 0) {
sd.drawKeyword(access + " ");
}
if (AccessFlags.isEnum(cf.getAccessFlags())) {
sd.drawKeyword("enum ");
} else if (AccessFlags.isAnnotation(cf.getAccessFlags())) {
sd.drawKeyword("@interface ");
} else if (AccessFlags.isInterface(cf.getAccessFlags())) {
sd.drawKeyword("interface ");
} else {
sd.drawKeyword("class ");
}
sd.drawDefault(cf.getShortClassName());
String superClass = cf.getSuperClassName();
if (classSig != null) {
renderFormalTypeParameters(sd, ia, classSig.getFormalTypeParameters());
}
sd.drawDefault(" ");
if (superClass != null) {
boolean displayExtendsObject = SystemFacade.getInstance().getPreferences().isSettingTrue(Settings.DISPLAY_EXTENDS_OBJECT);
if (!superClass.equals("java.lang.Object") ||
displayExtendsObject) {
sd.drawKeyword("extends ");
if (classSig == null) {
sd.drawDefault(ia.getShortName(superClass));
} else {
renderGenericJavaType(sd, ia, classSig.getSuperClassSignature());
}
sd.drawDefault(" ");
}
}
List interfaces = cf.getInterfaces();
if (interfaces.size() > 0) {
if (AccessFlags.isInterface(cf.getAccessFlags())) {
sd.drawKeyword("extends ");
} else {
sd.drawKeyword("implements ");
}
if (classSig == null) {
for (int i = 0; i < interfaces.size(); i++) {
Interface interface0 = (Interface) interfaces.get(i);
if (i > 0) {
sd.drawDefault(", ");
}
sd.drawDefault(ia.getShortName(interface0.getName()));
}
} else {
boolean first = true;
for (GenericJavaType intf : classSig.getSuperInterfaceSignatures()) {
if (first) {
first = false;
} else {
sd.drawDefault(", ");
}
renderGenericJavaType(sd, ia, intf);
}
}
sd.drawDefault(" ");
}
sd.drawDefault("{");
}
} else if (er instanceof FieldDefRow) {
FieldDefRow fdr = (FieldDefRow)er;
Field f = fdr.getField();
FieldSignature fieldSig = null;
boolean displayGenerics = SystemFacade.getInstance().getPreferences().isSettingTrue(Settings.DISPLAY_GENERICS);
if (displayGenerics) {
SignatureAttribute signature = f.getAttributes().getSignatureAttribute();
if (signature != null) {
fieldSig = Signatures.getFieldSignature(signature.getSignatureString());
}
}
sd.drawIndent();
String access = f.getAccessString();
if (access.length() > 0) {
sd.drawKeyword(access + " ");
}
JavaType ret = f.getDescriptor().getReturn();
if (fieldSig == null) {
if (ret.isPrimitive()) {
sd.drawKeyword(ret.getType());
} else {
sd.drawDefault(ia.getShortName(ret.getType()));
}
sd.drawDefault(ret.getDimensions());
} else {
renderGenericJavaType(sd, ia, fieldSig.getType());
}
sd.drawDefault(" ");
sd.drawField(f.getName());
ConstantPoolInfo constant = f.getConstant();
if (constant != null) {
sd.drawDefault(" = ");
drawConstant(sd, constant);
}
sd.drawDefault(";");
} else if (er instanceof DeprecatedAnnotationDefRow) {
sd.drawIndent();
sd.drawAnnotation("@Deprecated");
} else if (er instanceof ClassAnnotationDefRow || er instanceof MethodAnnotationDefRow || er instanceof FieldAnnotationDefRow) {
Annotation ann = null;
if (er instanceof ClassAnnotationDefRow) {
ann = ((ClassAnnotationDefRow)er).getAnnotation();
} else if (er instanceof MethodAnnotationDefRow) {
sd.drawIndent();
ann = ((MethodAnnotationDefRow)er).getAnnotation();
} else {
sd.drawIndent();
ann = ((FieldAnnotationDefRow)er).getAnnotation();
}
sd.drawAnnotation("@" + ia.getShortName(ann.getName()));
if (ann.getElementValueCount() > 0) {
sd.drawDefault("(");
Map<String, ElementValue> elementValues = ann.getElementValues();
boolean first = true;
for (Entry<String, ElementValue> entry : elementValues.entrySet()) {
if (!first) {
sd.drawDefault(", ");
} else {
first = false;
}
if (entry.getKey().equals("value") && elementValues.size() == 1) {
// only one element, named "value", don't show the display name, just show the value
} else {
sd.drawDefault(entry.getKey() + "=");
}
ElementValue ev = entry.getValue();
drawElementValue(sd, ev, ia);
}
sd.drawDefault(")");
}
} else if (er instanceof MethodDefRow) {
MethodDefRow mdr = (MethodDefRow)er;
sd.drawIndent();
if (mdr.isClosing()) {
sd.drawDefault("}");
} else {
Method m = mdr.getMethod();
MethodSignature methodSig = null;
boolean displayGenerics = SystemFacade.getInstance().getPreferences().isSettingTrue(Settings.DISPLAY_GENERICS);
if (displayGenerics) {
SignatureAttribute signature = m.getAttributes().getSignatureAttribute();
if (signature != null) {
methodSig = Signatures.getMethodSignature(signature.getSignatureString());
}
}
String access = m.getAccessString();
if (access.length() > 0) {