@Test
	public void testComplexResolveWithConflictReplacement() {

		// FIXME: Add typedef to struct1 pointer used as struct2 component
		// FIXME: Add add array of struct1 pointers used as struct1 component

		Structure struct1a = new StructureDataType("s1", 0, dataMgr);
		struct1a.setPackingEnabled(true);
		Structure struct2a = new StructureDataType("s2", 0, dataMgr);
		struct2a.add(ByteDataType.dataType);
		struct2a.add(new PointerDataType(struct1a, dataMgr));

		struct1a.add(new PointerDataType(struct1a, dataMgr));
		struct1a.add(new PointerDataType(struct2a, dataMgr));
		struct1a.add(new ArrayDataType(struct2a, 2, -1, dataMgr));
		struct1a.add(new TypedefDataType("S2TD", struct2a));

		struct1a = (Structure) dataMgr.resolve(struct1a,
			DataTypeConflictHandler.REPLACE_EMPTY_STRUCTS_OR_RENAME_AND_ADD_HANDLER);

		Structure struct1b = new StructureDataType("s1", 0, dataMgr);
		struct1b.setPackingEnabled(true);
		Structure struct2b = new StructureDataType("s2", 0, dataMgr); // not-yet-defined - will get replaced by struct2a

		struct1b.add(new PointerDataType(struct1b, dataMgr));
		struct1b.add(new PointerDataType(struct2b, dataMgr));
		struct1b.add(new ArrayDataType(struct2b, 2, -1, dataMgr));
		struct1b.add(new TypedefDataType("S2TD", struct2b));

		struct1b = (Structure) dataMgr.resolve(struct1b,
			DataTypeConflictHandler.REPLACE_EMPTY_STRUCTS_OR_RENAME_AND_ADD_HANDLER);

		assertTrue(struct1a == struct1b);

		assertNoConflict("s1");
		assertNoConflict("s2");
	}
Tests the
{@link DataTypeConflictHandler#REPLACE_EMPTY_STRUCTS_OR_RENAME_AND_ADD_HANDLER}
conflict handler to be sure that and empty local structure will be replaced by
a structure with source.
<p>
Success is the source version is chosen over the empty local version.
Ghidra/Features/Base/src/test.slow/java/ghidra/program/database/data/ConflictHandlerTest.java