diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java index 82fe0cd0dfec..47915f6d5f09 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java @@ -105,6 +105,7 @@ public class IpnbFilePanel extends JPanel implements Scrollable, DataProvider, D try { IpnbFile file = IpnbParser.parseIpnbFile(myDocument, myVirtualFile); if (file.equals(myIpnbFile)) return; + removeAll(); myIpnbFile = file; myIpnbPanels.clear(); mySelectedCell = null; @@ -348,7 +349,6 @@ public class IpnbFilePanel extends JPanel implements Scrollable, DataProvider, D final IpnbEditablePanel selectedCell = getSelectedCell(); final int index = myIpnbPanels.indexOf(selectedCell); myInitialSelection = index >= 0 && index < myIpnbPanels.size() ? index : myIpnbPanels.size() - 1; - removeAll(); readFromFile(false); } } diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbFile.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbFile.java index 856319716fb0..2e743b23f3bf 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbFile.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbFile.java @@ -10,9 +10,9 @@ public class IpnbFile { private final Map myMetadata; private final int myNbformat; private final List myCells; - private final String myPath; + @NotNull private final String myPath; - public IpnbFile(Map metadata, int nbformat, List cells, String path) { + public IpnbFile(Map metadata, int nbformat, List cells, @NotNull String path) { myMetadata = metadata; myNbformat = nbformat; myCells = cells; @@ -31,6 +31,7 @@ public class IpnbFile { myCells.remove(index); } + @NotNull public String getPath() { return myPath; } @@ -43,4 +44,27 @@ public class IpnbFile { return myNbformat; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + IpnbFile file = (IpnbFile)o; + + if (myNbformat != file.myNbformat) return false; + if (myMetadata != null ? !myMetadata.equals(file.myMetadata) : file.myMetadata != null) return false; + if (myCells != null ? !myCells.equals(file.myCells) : file.myCells != null) return false; + if (!myPath.equals(file.myPath)) return false; + + return true; + } + + @Override + public int hashCode() { + int result = myMetadata != null ? myMetadata.hashCode() : 0; + result = 31 * result + myNbformat; + result = 31 * result + (myCells != null ? myCells.hashCode() : 0); + result = 31 * result + (myPath.hashCode()); + return result; + } } \ No newline at end of file diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/cells/IpnbEditableCell.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/cells/IpnbEditableCell.java index cf62f52810b3..52914fa2c61c 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/cells/IpnbEditableCell.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/cells/IpnbEditableCell.java @@ -34,4 +34,24 @@ public abstract class IpnbEditableCell implements IpnbCell { public Map getMetadata() { return myMetadata; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + IpnbEditableCell cell = (IpnbEditableCell)o; + + if (!mySource.equals(cell.mySource)) return false; + if (myMetadata != null ? !myMetadata.equals(cell.myMetadata) : cell.myMetadata != null) return false; + + return true; + } + + @Override + public int hashCode() { + int result = mySource.hashCode(); + result = 31 * result + (myMetadata != null ? myMetadata.hashCode() : 0); + return result; + } } diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/cells/output/IpnbOutputCell.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/cells/output/IpnbOutputCell.java index 487d762c55b0..85d64911a3c9 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/cells/output/IpnbOutputCell.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/cells/output/IpnbOutputCell.java @@ -37,4 +37,26 @@ public class IpnbOutputCell implements IpnbCell { public Map getMetadata() { return myMetadata; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + IpnbOutputCell cell = (IpnbOutputCell)o; + + if (myPromptNumber != null ? !myPromptNumber.equals(cell.myPromptNumber) : cell.myPromptNumber != null) return false; + if (myText != null ? !myText.equals(cell.myText) : cell.myText != null) return false; + if (myMetadata != null ? !myMetadata.equals(cell.myMetadata) : cell.myMetadata != null) return false; + + return true; + } + + @Override + public int hashCode() { + int result = myPromptNumber != null ? myPromptNumber.hashCode() : 0; + result = 31 * result + (myText != null ? myText.hashCode() : 0); + result = 31 * result + (myMetadata != null ? myMetadata.hashCode() : 0); + return result; + } }