in src/main/java/org/apache/bcel/classfile/JavaClass.java [184:241]
public JavaClass(final int classNameIndex, final int superclassNameIndex, final String fileName, final int major, final int minor, final int accessFlags,
final ConstantPool constantPool, int[] interfaces, Field[] fields, Method[] methods, Attribute[] attributes, final byte source) {
super(accessFlags);
if (interfaces == null) {
interfaces = ArrayUtils.EMPTY_INT_ARRAY;
}
if (attributes == null) {
attributes = Attribute.EMPTY_ARRAY;
}
if (fields == null) {
fields = Field.EMPTY_FIELD_ARRAY;
}
if (methods == null) {
methods = Method.EMPTY_METHOD_ARRAY;
}
this.classNameIndex = classNameIndex;
this.superclassNameIndex = superclassNameIndex;
this.fileName = fileName;
this.major = major;
this.minor = minor;
this.constantPool = constantPool;
this.interfaces = interfaces;
this.fields = fields;
this.methods = methods;
this.attributes = attributes;
this.source = source;
// Get source file name if available
for (final Attribute attribute : attributes) {
if (attribute instanceof SourceFile) {
sourceFileName = ((SourceFile) attribute).getSourceFileName();
break;
}
}
/*
* According to the specification the following entries must be of type 'ConstantClass' but we check that anyway via the
* 'ConstPool.getConstant' method.
*/
className = constantPool.getConstantString(classNameIndex, Const.CONSTANT_Class);
className = Utility.compactClassName(className, false);
final int index = className.lastIndexOf('.');
if (index < 0) {
packageName = "";
} else {
packageName = className.substring(0, index);
}
if (superclassNameIndex > 0) {
// May be zero -> class is java.lang.Object
superclassName = constantPool.getConstantString(superclassNameIndex, Const.CONSTANT_Class);
superclassName = Utility.compactClassName(superclassName, false);
} else {
superclassName = "java.lang.Object";
}
interfaceNames = new String[interfaces.length];
for (int i = 0; i < interfaces.length; i++) {
final String str = constantPool.getConstantString(interfaces[i], Const.CONSTANT_Class);
interfaceNames[i] = Utility.compactClassName(str, false);
}
}