@Override
	protected void setProgramArchitecture(ProgramArchitecture programArchitecture,
			VariableStorageManager variableStorageMgr, boolean store, TaskMonitor monitor)
			throws IOException, CancelledException {

		// TODO: Determine if cancelling can leave in bad state

		if (programArchitecture == null) {
			throw new IllegalArgumentException("ProgramArchitecture must be specified");
		}
		if (variableStorageMgr != null) {
			throw new IllegalArgumentException("VariableStorageManager may not be specified");
		}

		if (getProgramArchitecture() != null || isProgramArchitectureUpgradeRequired() ||
			isProgramArchitectureMissing()) {
			throw new UnsupportedOperationException(
				"Program-architecture change not permitted with this method");
		}

		if (store) {
			variableStorageMgr = createProgramArchitectureData(programArchitecture, null);
		}

		// super handles possible change to data organization and update if store is true
		super.setProgramArchitecture(programArchitecture, variableStorageMgr, store, monitor);
	}
Set the architecture-specific details associated with a new datatype manager.
This method is intended to be used during instantiation of derived implementations.
@param programArchitecture program architecture details (required)
@param variableStorageMgr variable storage manager.  Must be null.
@param store if true database update will occur and datatypes will be updated if
any change to the data organization is detected (a stored copy may be used to
detect this condition).  This should never be passed as true if opened read-only.
If true and no variable storage is specified it will be created.
@param monitor task monitor
@throws IOException if IO error occurs
@throws CancelledException  if task cancelled
@throws UnsupportedOperationException if language was previously set
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StandAloneDataTypeManager.java