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 4558918945..7546a4cbaa 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,7 +17,6 @@ package ghidra.app.plugin.core.datamgr.archive; import java.awt.Component; import java.io.IOException; -import java.util.Objects; import javax.swing.Icon; @@ -30,18 +29,19 @@ public class ProjectArchive implements DomainFileArchive { private static Icon CLOSED_ICON = new GIcon("icon.plugin.datatypes.archive.project.closed"); private static Icon OPEN_ICON = new GIcon("icon.plugin.datatypes.archive.project.open"); + private DataTypeArchive dataTypeArchive; - private DomainFile originalDomainFile; - DataTypeManagerChangeListener categoryListener; // hold on to since it is stored in a weak set + private DomainFile sourceDomainFile; + private DataTypeManagerChangeListener categoryListener; // hold on to since it is stored in a weak set private DataTypeManagerHandler archiveManager; private DataTypeManager dataTypeManager; ProjectArchive(DataTypeManagerHandler archiveManager, DataTypeArchive dataTypeArchive, - DomainFile originalDomainFile) { + DomainFile sourceDomainFile) { this.archiveManager = archiveManager; this.dataTypeArchive = dataTypeArchive; this.dataTypeManager = dataTypeArchive.getDataTypeManager(); - this.originalDomainFile = originalDomainFile; + this.sourceDomainFile = sourceDomainFile; categoryListener = new ArchiveCategoryChangeListener(); dataTypeManager.addDataTypeManagerListener(categoryListener); } @@ -67,39 +67,19 @@ 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()); - } - public boolean hasExclusiveAccess() { return dataTypeArchive.hasExclusiveAccess(); } @Override public boolean isModifiable() { - DomainFile domainFile = getDomainObject().getDomainFile(); - return domainFile.canSave(); + DomainFile df = getDomainObject().getDomainFile(); + return df.canSave(); } @Override public DomainFile getDomainFile() { - return originalDomainFile; + return sourceDomainFile; } @Override @@ -109,8 +89,8 @@ public class ProjectArchive implements DomainFileArchive { @Override public boolean isChanged() { - DomainFile domainFile = dataTypeArchive.getDomainFile(); - long lastModifiedTime = domainFile.getLastModifiedTime(); + DomainFile df = dataTypeArchive.getDomainFile(); + long lastModifiedTime = df.getLastModifiedTime(); return (lastModifiedTime == 0) || dataTypeArchive.isChanged(); } @@ -134,7 +114,7 @@ public class ProjectArchive implements DomainFileArchive { @Override public void saveAs(Component component) throws IOException { archiveManager.saveAs(dataTypeArchive); - originalDomainFile = dataTypeArchive.getDomainFile(); + sourceDomainFile = dataTypeArchive.getDomainFile(); // update with new domain file dataTypeArchive.updateID(); } diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java index 29b3d70f0c..21be6cf89b 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java @@ -218,8 +218,8 @@ public class GhidraFileData { } /** - * Returns a unique file-ID - * @return the ID + * Returns a unique file-ID if one has been established or null + * @return the file-ID or null if failed to obtain ID */ String getFileID() { return fileID; diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/model/DomainFile.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/model/DomainFile.java index 0c75bea23e..3f590db7c3 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/model/DomainFile.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/model/DomainFile.java @@ -65,8 +65,13 @@ public interface DomainFile extends Comparable { public boolean exists(); /** - * Returns a unique file-ID - * @return the ID + * Returns a unique file-ID if one has been established or null. Examples which may result in + * null ID: + * + * @return the file-ID or null if failed to obtain ID. */ public String getFileID();