@Override
	protected DataTypeComponent[] getAllComponents(MemBuffer buf) {
		Memory memory = buf.getMemory();

		DataTypeComponent[] comps = new DataTypeComponent[components.size()];
		int offset = 0;
		MemoryBufferImpl newBuf = new MemoryBufferImpl(memory, buf.getAddress());
		try {
			for (int i = 0; i < components.size(); i++) {
				DataTypeInstance dti =
					DataTypeInstance.getDataTypeInstance(components.get(i), newBuf, false);
				if (dti == null) {
					Msg.error(this, "Invalid data at " + newBuf.getAddress());
					return null;
				}
				int len = dti.getLength();
				comps[i] =
					new ReadOnlyDataTypeComponent(dti.getDataType(), this, len, i, offset,
						componentNames.get(i) + "_" + newBuf.getAddress(), componentDescs.get(i));
				offset += len;
				newBuf.advance(len);
			}
		}
		catch (AddressOverflowException e) {
			Msg.error(this, "Invalid data at " + newBuf.getAddress());
			return null;
		}
		return comps;
	}
Set the components of the dynamic structure all at once.
This does not add the components in, it replaces any existing ones.

@param components      list of components to add
@param componentNames  list of field names of each component
@param componentDescs  list of descriptions of each component
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructuredDynamicDataType.java