private void parseTypeDescriptors(SwiftSection section, BinaryReader reader)
			throws CancelledException {
		monitor.setMessage("Parsing Swift type descriptors...");
		monitor.setIndeterminate(true);
		try {
			List<SwiftStructureAddress> addrPairs = parsePointerTable(section, reader);
			for (SwiftStructureAddress addrPair : addrPairs) {
				reader.setPointerIndex(addrPair.structAddr().getOffset());
				long origIndex = reader.getPointerIndex();
				TargetTypeContextDescriptor descriptor = new TargetTypeContextDescriptor(reader);
				reader.setPointerIndex(origIndex);
				int contextDescriptorKind = ContextDescriptorKind.getKind(descriptor.getFlags());
				descriptor = switch (contextDescriptorKind) {
					case ContextDescriptorKind.CLASS:
						yield new TargetClassDescriptor(reader);
					case ContextDescriptorKind.STRUCT:
						yield new TargetStructDescriptor(reader);
					case ContextDescriptorKind.ENUM:
						yield new TargetEnumDescriptor(reader);
					default:
						log("Unrecognized type descriptor %d at index: 0x%x"
								.formatted(contextDescriptorKind, origIndex));
						yield null;
				};
				if (descriptor != null) {
					typeDescriptors.put(descriptor.getName(), descriptor);
					markupList.add(new SwiftStructureInfo(descriptor,
						new SwiftStructureAddress(addrPair.structAddr(), addrPair.pointerAddr())));
				}
			}
		}
		catch (IOException e) {
			log("Failed to parse type descriptors from section '" + section + "'");
		}
	}
Parses the {@link TargetTypeContextDescriptor}s

@param section The {@link SwiftSection} that contains the descriptors
@param reader A {@link BinaryReader}
@throws CancelledException if the user cancelled the operation
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/swift/SwiftTypeMetadata.java