extractReferencedClassesFromSignature(referencedClassSet, className);
if (className.indexOf('[') >= 0) { extractReferencedClassesFromSignature(referencedClassSet, className); } else if (ClassName.isValidClassName(className)) { referencedClassSet.add(new ClassDescriptor(className)); }
	private ClassDescriptor[] extractReferencedClasses() throws InvalidClassFileFormatException {		TreeSet<ClassDescriptor> referencedClassSet = new TreeSet<ClassDescriptor>();		for (Constant constant : constantPool) {			if (constant == null) {				continue;			}			if (constant.tag == IClassConstants.CONSTANT_Class) {				String className = getUtf8String((Integer)constant.data[0]);				extractReferencedClassesFromSignature(referencedClassSet, className);			} else if (constant.tag == IClassConstants.CONSTANT_Methodref					|| constant.tag == IClassConstants.CONSTANT_Fieldref					|| constant.tag == IClassConstants.CONSTANT_InterfaceMethodref) {				// Get the target class name				String className = getClassName((Integer) constant.data[0]);				extractReferencedClassesFromSignature(referencedClassSet, className);								// Parse signature to extract class names				String signature = getSignatureFromNameAndType((Integer)constant.data[1]);				extractReferencedClassesFromSignature(referencedClassSet, signature);			}		}		ClassDescriptor[] referencedClassDescriptorList = 			referencedClassSet.toArray(new ClassDescriptor[referencedClassSet.size()]);		return referencedClassDescriptorList;	}