boolean apply(AbstractCompositeMsType type) throws CancelledException, PdbException {

		RecordNumber recordNumber = type.getRecordNumber();

		AbstractMsType msType = applicator.getMappedTypeRecord(recordNumber);
		if (!(msType instanceof AbstractCompositeMsType)) {
			throw new PdbException("PDB processing error");
		}
		type = (AbstractCompositeMsType) msType;

		CppCompositeType myClassType = getClassType(type);
		ComboType combo;
		Composite composite;
		if (myClassType == null) {
			combo = create(type);
			composite = combo.dt();
			myClassType = combo.ct();
			applicator.putClassType(type, myClassType);
			// Since we are delaying resolve, we should be able to store this data type earlier...
			//  which is what I'm now doing before applyInternal().  This should save doing some
			//  fixups (e.g., where my ball of types wants a pointer to this particular type).
			// Composite is only type that we store before it is finished... this does cycle-break
			//  in two ways...
			//  1) from the data type perspective, a pointer can always find the underlying type
			//    if it is a composite, thus whatever cycles can be created from composites are
			//    taken care of
			//  2) from a processing perspective, we allow dependencies to get trickled up on the
			//    processing todo stack if they are not found in the applicator map.  This could
			//    cause processing oscillation because of dependencies, but since we push the
			//    type here, it will always be found in the map and never trickled upward
			applicator.putDataType(msType, composite);
		}
		else {
			composite = myClassType.getComposite();
			combo = new ComboType(composite, myClassType);
		}

		return applyInternal(combo, type);
	}
Uses {@link DefaultPdbApplicator#getDataTypeOrSchedule(RecordNumber)}) on all underlying
 types to ensure that the types get scheduled... and detects whether any types were not yet
 available so that this composite type is denoted as not done.
@param lists the lists of all underlying types
@return {@code true} if all underlying types are already available
@throws PdbException upon processing issue
@throws CancelledException upon user cancellation
Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CompositeTypeApplier.java