From adbe0b27492f2a30be2be2ace98db53bcd55980a Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Tue, 13 Jun 2017 18:41:18 +0300 Subject: [PATCH] Do not modify hashCode() and equals() and log warnings in debug mode --- .../ide/util/treeView/AbstractTreeNode.java | 40 ++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/platform/editor-ui-api/src/com/intellij/ide/util/treeView/AbstractTreeNode.java b/platform/editor-ui-api/src/com/intellij/ide/util/treeView/AbstractTreeNode.java index 473518cf6e68..6a0bb3ee8eb8 100644 --- a/platform/editor-ui-api/src/com/intellij/ide/util/treeView/AbstractTreeNode.java +++ b/platform/editor-ui-api/src/com/intellij/ide/util/treeView/AbstractTreeNode.java @@ -17,6 +17,7 @@ package com.intellij.ide.util.treeView; import com.intellij.ide.projectView.PresentationData; import com.intellij.navigation.NavigationItem; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.colors.CodeInsightColors; import com.intellij.openapi.editor.colors.TextAttributesKey; import com.intellij.openapi.ide.CopyPasteManager; @@ -35,13 +36,17 @@ import java.util.Collection; import java.util.Map; public abstract class AbstractTreeNode extends PresentableNodeDescriptor> implements NavigationItem, Queryable.Contributor { + private static final Logger LOG = Logger.getInstance(AbstractTreeNode.class); private AbstractTreeNode myParent; private Object myValue; + private boolean myNullValueSet; + private final boolean myNodeWrapper; private NodeDescriptor myParentDescriptor; protected AbstractTreeNode(Project project, T value) { super(project, null); - setValue(value); + // assume that null value used for AbstractTreeNodeWrapper only + myNodeWrapper = setInternalValue(value); } @NotNull @@ -93,7 +98,7 @@ public abstract class AbstractTreeNode extends PresentableNodeDescriptor extends PresentableNodeDescriptor getElement() { - return myValue != null ? this : null; + return getEqualityObject() != null ? this : null; } public boolean equals(Object object) { + // we should not change this behaviour if value is set to null return object instanceof AbstractTreeNode && Comparing.equal(myValue, ((AbstractTreeNode)object).myValue); } public int hashCode() { + // we should not change hash code if value is set to null Object value = myValue; return value == null ? 0 : value.hashCode(); } @@ -138,18 +145,33 @@ public abstract class AbstractTreeNode extends PresentableNodeDescriptor