private void addClassTypeBaseClasses(Composite composite, CppCompositeType myClassType,
			List<AbstractMsType> msBases, AbstractMsType type)
			throws PdbException, CancelledException {

		AbstractCompositeMsType cType = (AbstractCompositeMsType) type;
		Access defaultAccess = myClassType.getDefaultAccess();

		for (AbstractMsType baseType : msBases) {
			applicator.checkCancelled();
			MsTypeApplier baseApplier = applicator.getTypeApplier(baseType);
			if (!(baseApplier instanceof BaseClassTypeApplier baseTypeApplier)) {
				applicator.appendLogMsg(baseApplier.getClass().getSimpleName() +
					" seen where BaseClassTypeApplier expected for " + cType.getName());
				continue;
			}

			if (baseType instanceof AbstractBaseClassMsType baseClassType) {
				applyDirectBaseClass(baseClassType, myClassType, defaultAccess);
			}
			else if (baseType instanceof AbstractVirtualBaseClassMsType virtualBaseClassType) {
				applyDirectVirtualBaseClass(virtualBaseClassType, myClassType, defaultAccess);
			}
			else if (baseType instanceof AbstractIndirectVirtualBaseClassMsType indirectVirtualBaseClassType) {
				applyIndirectVirtualBaseClass(indirectVirtualBaseClassType, myClassType,
					defaultAccess);
			}
			else {
				throw new AssertException(
					"Unknown base class type: " + baseType.getClass().getSimpleName());
			}
		}
	}
Constructor for composite type applier, for transforming a composite into a Ghidra DataType
@param applicator {@link DefaultPdbApplicator} for which this class is working
Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CompositeTypeApplier.java