diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/AbstractEditorTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/AbstractEditorTest.java index c432e89d2b..127e5f58a7 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/AbstractEditorTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/AbstractEditorTest.java @@ -372,6 +372,11 @@ public abstract class AbstractEditorTest extends AbstractGhidraHeadedIntegration return (dtc != null) ? dtc.getLength() : -1; } + protected DataType getDataType(Composite c, int index) { + DataTypeComponent dtc = c.getComponent(index); + return (dtc != null) ? dtc.getDataType() : null; + } + protected DataType getDataType(int index) { DataTypeComponent dtc = getComponent(index); return (dtc != null) ? dtc.getDataType() : null; diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/StructureEditorNotifiedTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/StructureEditorNotifiedTest.java index 67948baf38..024def9756 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/StructureEditorNotifiedTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/StructureEditorNotifiedTest.java @@ -89,7 +89,7 @@ public class StructureEditorNotifiedTest extends AbstractStructureEditorTest { programDTM.remove(complexStructure, TaskMonitor.DUMMY); programDTM.getCategory(pgmRootCat.getCategoryPath()) - .removeCategory("Temp", TaskMonitor.DUMMY); + .removeCategory("Temp", TaskMonitor.DUMMY); waitForSwing(); @@ -486,15 +486,17 @@ public class StructureEditorNotifiedTest extends AbstractStructureEditorTest { @Test public void testComponentDataTypeRemoved() { + + // Get the data types we want to hold onto for comparison later + DataType dt3 = getDataType(complexStructure, 3); + DataType dt5 = getDataType(complexStructure, 5); + DataType dt8 = getDataType(complexStructure, 8); + DataType dt10 = getDataType(complexStructure, 10); + init(complexStructure, pgmTestCat); DataType undef = DataType.DEFAULT; assertEquals(23, model.getNumComponents()); - // Clone the data types we want to hold onto for comparison later, since reload can close the viewDTM. - DataType dt3 = getDataType(3).clone(programDTM); - DataType dt5 = getDataType(5).clone(programDTM); - DataType dt8 = getDataType(8).clone(programDTM); - DataType dt10 = getDataType(10).clone(programDTM); runSwing( () -> complexStructure.getDataTypeManager().remove(simpleUnion, TaskMonitor.DUMMY)); @@ -521,9 +523,8 @@ public class StructureEditorNotifiedTest extends AbstractStructureEditorTest { waitForSwing(); assertTrue(simpleStructure.isEquivalent(getDataType(0))); - runSwing(() -> simpleStructure.getDataTypeManager() - .remove( - simpleStructure, TaskMonitor.DUMMY)); + runSwing( + () -> simpleStructure.getDataTypeManager().remove(simpleStructure, TaskMonitor.DUMMY)); waitForSwing(); assertEquals(29, model.getNumComponents());// becomes undefined bytes } @@ -581,18 +582,21 @@ public class StructureEditorNotifiedTest extends AbstractStructureEditorTest { @Test public void testComponentDataTypeReplaced() throws Exception { + + // Get the data types we want to hold onto for comparison later + DataType dt15 = getDataType(complexStructure, 15); + DataType dt16 = getDataType(complexStructure, 16); + DataType dt18 = getDataType(complexStructure, 18); + DataType dt19 = getDataType(complexStructure, 19); + DataType dt20 = getDataType(complexStructure, 20); + String dt21Name = getDataType(complexStructure, 21).getName(); + DataType dt22 = getDataType(complexStructure, 22); + init(complexStructure, pgmTestCat); int numComps = model.getNumComponents(); int len = model.getLength(); - // Clone the data types we want to hold onto for comparison later, since reload can close the viewDTM. - DataType dt15 = getDataType(15).clone(programDTM); - DataType dt16 = getDataType(16).clone(programDTM); - DataType dt18 = getDataType(18).clone(programDTM); - DataType dt19 = getDataType(19).clone(programDTM); - DataType dt20 = getDataType(20).clone(programDTM); - String dt21Name = getDataType(21).getName(); - DataType dt22 = getDataType(22).clone(programDTM); + assertEquals(87, complexStructure.getComponent(16).getDataType().getLength()); assertEquals(29, complexStructure.getComponent(19).getDataType().getLength()); assertEquals(24, complexStructure.getComponent(20).getDataType().getLength()); diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/StructureEditorProviderTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/StructureEditorProviderTest.java index 7cffdc6475..4d4cb788b3 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/StructureEditorProviderTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/StructureEditorProviderTest.java @@ -502,8 +502,9 @@ public class StructureEditorProviderTest extends AbstractStructureEditorTest { @Test public void testCloseEditorProviderAndSave() throws Exception { Window dialog; + DataType oldDt = complexStructure.clone(null); + init(complexStructure, pgmTestCat, false); - DataType oldDt = model.viewComposite.clone(null); // Change the structure runSwingLater(() -> { @@ -538,8 +539,9 @@ public class StructureEditorProviderTest extends AbstractStructureEditorTest { @Test public void testCloseEditorAndNoSave() throws Exception { + DataType oldDt = complexStructure.clone(null); + init(complexStructure, pgmTestCat, false); - DataType oldDt = model.viewComposite.clone(null); // Change the structure runSwing(() -> { diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/UnionEditorActions1Test.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/UnionEditorActions1Test.java index 10458306be..1d64e16d6e 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/UnionEditorActions1Test.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/UnionEditorActions1Test.java @@ -779,15 +779,18 @@ public class UnionEditorActions1Test extends AbstractUnionEditorTest { @Test public void testApplyNameChange() throws Exception { + + DataType viewCopy = complexUnion.clone(null); + init(complexUnion, pgmTestCat, false); model.setName("FooBarUnion"); - DataType viewCopy = model.viewComposite.clone(null); - assertTrue(complexUnion.isEquivalent(model.viewComposite)); + assertTrue(viewCopy.isEquivalent(complexUnion)); + assertEquals("FooBarUnion", model.getCompositeName()); assertEquals("complexUnion", complexUnion.getName()); - assertTrue(viewCopy.isEquivalent(model.viewComposite)); + invoke(applyAction); assertTrue(viewCopy.isEquivalent(complexUnion)); assertTrue(viewCopy.isEquivalent(model.viewComposite)); diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/UnionEditorProviderTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/UnionEditorProviderTest.java index c08c284da7..9b5e626a0e 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/UnionEditorProviderTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/compositeeditor/UnionEditorProviderTest.java @@ -200,8 +200,9 @@ public class UnionEditorProviderTest extends AbstractUnionEditorTest { @Test public void testCloseEditorProviderAndSave() throws Exception { Window dialog; + DataType oldDt = complexUnion.clone(null); + init(complexUnion, pgmTestCat, false); - DataType oldDt = model.viewComposite.clone(null); // Change the union. Swing.runLater(() -> { @@ -236,8 +237,9 @@ public class UnionEditorProviderTest extends AbstractUnionEditorTest { @Test public void testCloseEditorAndNoSave() throws Exception { Window dialog; + DataType oldDt = complexUnion.clone(null); + init(complexUnion, pgmTestCat, false); - DataType oldDt = model.viewComposite.clone(null); // Change the union. Swing.runLater(() -> { diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java index bac085064a..9dccb37130 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java @@ -1243,15 +1243,15 @@ abstract public class DataTypeManagerDB implements DataTypeManager { sourceArchive.getArchiveType() == ArchiveType.BUILT_IN) { resolvedDataType = resolveBuiltIn(dataType); } - else if (sourceArchive == null || dataType.getUniversalID() == null || - sourceArchive.getArchiveType() == ArchiveType.TEMPORARY) { + else if (sourceArchive == null || dataType.getUniversalID() == null) { // if the dataType has no source or it has no ID (datatypes with no ID are // always local i.e. pointers) resolvedDataType = resolveDataTypeNoSource(dataType); } else if (!sourceArchive.getSourceArchiveID().equals(getUniversalID()) && - sourceArchive.getArchiveType() == ArchiveType.PROGRAM) { - // dataTypes from a different program don't carry over their identity. + (sourceArchive.getArchiveType() == ArchiveType.PROGRAM || + sourceArchive.getArchiveType() == ArchiveType.TEMPORARY)) { + // dataTypes from a program or temporary archive don't carry over their identity resolvedDataType = resolveDataTypeNoSource(dataType); } else {