private void processDataTypes(RecoveredClass recoveredClass)
			throws CancelledException, Exception {

		if (!recoveredClass.hasVftable()) {
			Structure classStruct = createClassStructureUsingRTTI(recoveredClass, null);

			if (classStruct != null) {
				updateClassFunctionsNotUsingNewClassStructure(recoveredClass, classStruct);
			}
			// return in this case because if there is no vftable for a class the script cannot
			// identify any member functions so there is no need to process the rest of this method
			return;
		}

		// create pointers to empty vftable structs so they can be added to the class data type
		// then filled in later
		Map<Address, DataType> vfPointerDataTypes = createEmptyVfTableStructs(recoveredClass);

		// create current class structure and add pointer to vftable, all parent member data strutures, and class member data structure
		Structure classStruct = null;

		classStruct = createClassStructureUsingRTTI(recoveredClass, vfPointerDataTypes);

		applyVbtableStructure(recoveredClass);

		// Now that we have a class data type
		// name constructor and destructor functions and put into the class namespace
		// checks are internal for hasDebugSymbols since there
		// are also replace methods that need to be called either way
		addConstructorsToClassNamespace(recoveredClass, classStruct);
		addDestructorsToClassNamespace(recoveredClass, classStruct);
		addVbaseDestructorsToClassNamespace(recoveredClass, classStruct);

		if (!hasDebugSymbols) {
			addNonThisDestructorsToClassNamespace(recoveredClass);

			addVbtableToClassNamespace(recoveredClass);

			// add secondary label on functions with inlined constructors or destructors
			createInlinedConstructorComments(recoveredClass);
			createInlinedDestructorComments(recoveredClass);
			createIndeterminateInlineComments(recoveredClass);
		}

		// add label on constructor destructor functions that could not be determined which were which
		createIndeterminateLabels(recoveredClass, classStruct);

		// This is done after the class structure is created and added to the dtmanager
		// because if done before the class structures are created 
		// then empty classes will get auto-created in the wrong place
		// when the vfunctions are put in the class
		fillInAndApplyVftableStructAndNameVfunctions(recoveredClass, vfPointerDataTypes,
			classStruct);

		if (classStruct != null) {
			updateClassFunctionsNotUsingNewClassStructure(recoveredClass, classStruct);
		}

	}
Method to create all the class data types for the current class, name all the class functions, and put them all into the class namespace
@param recoveredClass current class
@throws CancelledException when cancelled
@throws Exception naming exception
Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/RTTIWindowsClassRecoverer.java