public static DataType getComplexDataType(int size, DataTypeManager dtm) {
		if (size < 1) {
			return DefaultDataType.dataType;
		}
		if (size % 2 != 0) {
			return Undefined.getUndefinedDataType(size);
		}
		int floatSize = size / 2;
		if (dtm != null) {
			DataOrganization dataOrganization = dtm.getDataOrganization();
			if (dataOrganization != null) {
				if (floatSize == dataOrganization.getFloatSize()) {
					return FloatComplexDataType.dataType.clone(dtm);
				}
				if (floatSize == dataOrganization.getDoubleSize()) {
					return DoubleComplexDataType.dataType.clone(dtm);
				}
				if (floatSize == dataOrganization.getLongDoubleSize()) {
					return LongDoubleComplexDataType.dataType.clone(dtm);
				}
			}
		}
		DataType dt = getDefaultComplexDataType(size);
		if (dt == null) {
			return Undefined.getUndefinedDataType(size);
		}
		return dt;
	}
Base class for a variety of Complex data types of different sizes and types.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AbstractComplexDataType.java