private void parseFieldDescriptors(SwiftSection section, BinaryReader reader)
			throws CancelledException {
		monitor.setMessage("Parsing Swift field descriptors...");
		monitor.setIndeterminate(true);
		try {
			for (MemoryBlock block : SwiftUtils.getSwiftBlocks(section, program)) {
				Address blockStart = block.getStart();
				reader.setPointerIndex(blockStart.getOffset());
				int i = skipZeroEntries(reader, 0, block.getSize());
				while (i + FieldDescriptor.SIZE <= block.getSize()) {
					monitor.checkCancelled();
					FieldDescriptor descriptor = new FieldDescriptor(reader);
					fieldDescriptors.put(descriptor.getBase(), descriptor);
					markupList.add(new SwiftStructureInfo(descriptor,
						new SwiftStructureAddress(blockStart.add(i), null)));
					List<FieldRecord> records = descriptor.getFieldRecords();
					i += FieldDescriptor.SIZE;
					for (int j = 0; j < records.size(); j++) {
						FieldRecord record = records.get(j);
						markupList.add(new SwiftStructureInfo(record,
							new SwiftStructureAddress(blockStart.add(i + j * FieldRecord.SIZE),
								null)));
					}
					i += descriptor.getNumFields() * FieldRecord.SIZE;
					i = skipZeroEntries(reader, i, block.getSize());
				}
			}
		}
		catch (IOException e) {
			log("Failed to parse field descriptors from section '" + section + "'");
		}
	}
Parses the {@link FieldDescriptor}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