public String toString(DexHeader header, int index, TaskMonitor monitor)
			throws CancelledException {
		StringBuilder builder = new StringBuilder();
		if (index != -1) {
			builder.append("Class Index: 0x" + Integer.toHexString(index) + "\n");
		}
		builder.append(
			"Class: " + DexUtil.convertTypeIndexToString(header, getClassIndex()) + "\n");
		builder.append("Class Access Flags:\n" + AccessFlags.toString(getAccessFlags()) + "\n");
		builder.append(
			"Superclass: " + DexUtil.convertTypeIndexToString(header, getSuperClassIndex()) + "\n");

		if (getInterfacesOffset() > 0) {
			builder.append("Interfaces: " + "\n");
			TypeList interfaces = getInterfaces();
			if (interfaces != null) {
				for (TypeItem type : interfaces.getItems()) {
					monitor.checkCancelled();
					builder.append(
						"\t" + DexUtil.convertTypeIndexToString(header, type.getType()) + "\n");
				}
			}
		}

		if (getSourceFileIndex() > 0) {
			builder.append(
				"Source File: " + DexUtil.convertToString(header, getSourceFileIndex()) + "\n");
		}

		return builder.toString();
	}
NOTE: For CDEX files, this value is relative to DataOffset in DexHeader
@return the relative offset to annotations
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/dex/format/ClassDefItem.java