diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/FileArchive.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/FileArchive.java index 2bd2685b94..f30fef276a 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/FileArchive.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/FileArchive.java @@ -18,6 +18,7 @@ package ghidra.app.plugin.core.datamgr.archive; import java.awt.Component; import java.io.File; import java.io.IOException; +import java.util.Objects; import javax.swing.Icon; @@ -167,6 +168,26 @@ public class FileArchive implements Archive { return archiveManager; } + @Override + public int hashCode() { + return Objects.hash(archiveFile); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + FileArchive other = (FileArchive) obj; + return Objects.equals(archiveFile, other.archiveFile); + } + private void fireStateChanged() { archiveManager.fireArchiveStateChanged(this); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/ProgramArchive.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/ProgramArchive.java index b07baf6cea..830a3eb9f7 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/ProgramArchive.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/ProgramArchive.java @@ -17,6 +17,7 @@ package ghidra.app.plugin.core.datamgr.archive; import java.awt.Component; import java.io.IOException; +import java.util.Objects; import javax.swing.Icon; @@ -54,6 +55,26 @@ public class ProgramArchive implements DomainFileArchive { return dataTypeManager.getName(); } + @Override + public int hashCode() { + return program.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + ProgramArchive other = (ProgramArchive) obj; + return Objects.equals(program, other.program); + } + @Override public int compareTo(Archive archive) { if (archive instanceof BuiltInArchive) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/ProjectArchive.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/ProjectArchive.java index 8dd3531961..d7f8940c5e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/ProjectArchive.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/ProjectArchive.java @@ -17,6 +17,7 @@ package ghidra.app.plugin.core.datamgr.archive; import java.awt.Component; import java.io.IOException; +import java.util.Objects; import javax.swing.Icon; @@ -66,6 +67,26 @@ public class ProjectArchive implements DomainFileArchive { return -1; // Project Archives appear between the ProgramArchive and FileArchives. } + @Override + public int hashCode() { + return originalDomainFile.getFileID().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + ProjectArchive other = (ProjectArchive) obj; + return Objects.equals(originalDomainFile.getFileID(), other.originalDomainFile.getFileID()); + } + @Override public boolean isModifiable() { DomainFile domainFile = getDomainObject().getDomainFile(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/FileArchiveNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/FileArchiveNode.java index 1a6f2ed809..1cdc46e0e0 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/FileArchiveNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/FileArchiveNode.java @@ -30,12 +30,10 @@ public class FileArchiveNode extends ArchiveNode { new GIcon("icon.plugin.datatypes.tree.node.archive.file.checked.out.exclusive"); FileArchive fileArchive; // casted reference for easy access - String fullName; public FileArchiveNode(FileArchive archive, ArrayPointerFilterState filterState) { super(archive, filterState); this.fileArchive = archive; - fullName = archive.getName() + ": " + archive.getFile().getAbsolutePath(); } @Override @@ -60,40 +58,7 @@ public class FileArchiveNode extends ArchiveNode { return "[Unsaved New Archive]"; } - @Override - public String getName() { - return fullName; - } - - @Override - public String getDisplayText() { - return archive.getName(); - } - public boolean hasWriteLock() { return fileArchive.hasWriteLock(); } - - /** - * Overridden to avoid path conflicts that arise in CategoryNode.equals() - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (getClass() != o.getClass()) { - return false; - } - - if (super.equals(o)) { - ResourceFile myFile = fileArchive.getFile(); - ResourceFile otherFile = ((FileArchiveNode) o).fileArchive.getFile(); - return myFile.equals(otherFile); - } - return false; - } - }