public void retrieveExistingClassStructures(List<RecoveredClass> recoveredClasses)
			throws CancelledException {

		for (RecoveredClass recoveredClass : recoveredClasses) {
			monitor.checkCancelled();

			// if class is non-virtual have to search for an existing class datatype

			DataType[] possibleExistingClassStructures =
				extendedFlatAPI.getDataTypes(recoveredClass.getName());
			if (possibleExistingClassStructures.length == 0) {
				continue;
			}
			for (DataType possibleExistingClassStructure : possibleExistingClassStructures) {
				monitor.checkCancelled();
				if (!(possibleExistingClassStructure instanceof Structure)) {
					continue;
				}
				if (possibleExistingClassStructure.isNotYetDefined()) {
					continue;
				}

				Structure existingClassStructure = (Structure) possibleExistingClassStructure;

				recoveredClass.addExistingClassStructure(existingClassStructure);
				break;
			}

			//Iterate over constructor/destructor functions
			List<Function> constructorOrDestructorFunctions =
				recoveredClass.getConstructorOrDestructorFunctions();
			for (Function constDestFunction : constructorOrDestructorFunctions) {
				monitor.checkCancelled();
				Namespace parentNamespace = constDestFunction.getParentNamespace();
				if (!parentNamespace.equals(recoveredClass.getClassNamespace())) {
					continue;
				}

				if (recoveredClass.hasExistingClassStructure()) {
					continue;
				}

				int parameterCount = constDestFunction.getParameterCount();

				if (parameterCount == 0) {
					continue;
				}

				DataType dataType = constDestFunction.getParameter(0).getDataType();

				CategoryPath dataTypePath = dataType.getDataTypePath().getCategoryPath();

				if (!(dataType instanceof Pointer)) {
					continue;
				}

				String dataTypeName = dataType.getName();
				dataTypeName = dataTypeName.replace(" *", "");

				if (!dataTypeName.equals(recoveredClass.getName())) {
					continue;
				}

				Structure existingClassStructure =
					(Structure) dataTypeManager.getDataType(dataTypePath, dataTypeName);

				if (existingClassStructure != null && !existingClassStructure.isNotYetDefined()) {
					recoveredClass.addExistingClassStructure(existingClassStructure);
					break;
				}

			}
		}
	}
Method to iterate over all the RecoveredClass objects and see if there is an existing class structure data type already
if so, add it to the RecoveredClass object
@param recoveredClasses List of RecoveredClass objects
@throws CancelledException when cancelled
Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/RTTIClassRecoverer.java