diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/MouseShortcut.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/MouseShortcut.java index ca092c7d7227..f203dabcb4c5 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/MouseShortcut.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/MouseShortcut.java @@ -43,6 +43,11 @@ public class MouseShortcut extends Shortcut { return event.getButton(); } + /** + * @param button Mouse buttons MouseEvent.BUTTON_LEFT, MouseEvent.BUTTON2, etc... + * @param modifiers modifiersEx masks like InputEvent.ALT_DOWN_MASK and so on... + * @param clickCount click count from the MouseEvent that caused the MouseShortcut creation + */ public MouseShortcut(int button, @JdkConstants.InputEventMask int modifiers, int clickCount) { myButton = button; // TODO[vova] check modifiers? @@ -67,12 +72,14 @@ public class MouseShortcut extends Shortcut { } public boolean equals(Object obj) { - if (!(obj instanceof MouseShortcut)) { - return false; - } - MouseShortcut shortcut = (MouseShortcut)obj; - return myButton == shortcut.myButton && myModifiers == shortcut.myModifiers && myClickCount == - shortcut.myClickCount; + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + + MouseShortcut other = (MouseShortcut) obj; + + return myButton == other.myButton + && myModifiers == other.myModifiers + && myClickCount == other.myClickCount; } public int hashCode() { diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/PressureShortcut.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/PressureShortcut.java index fbdce7ab69a3..12cb3f9602c6 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/PressureShortcut.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/PressureShortcut.java @@ -21,11 +21,11 @@ import java.awt.event.MouseEvent; public class PressureShortcut extends MouseShortcut { - private double stage; + private double myStage; public PressureShortcut(double stage) { super(MouseEvent.BUTTON1, 0, 1); - this.stage = stage; + this.myStage = stage; } public int getButton() { @@ -42,11 +42,16 @@ public class PressureShortcut extends MouseShortcut { } public boolean equals(Object obj) { - return obj instanceof PressureShortcut; + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + + PressureShortcut other = (PressureShortcut) obj; + + return myStage == other.myStage; } public int hashCode() { - return super.hashCode() + (int)stage; + return super.hashCode() + (int)myStage; } @Override diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/keymap/impl/MouseShortcutEqualityTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/keymap/impl/MouseShortcutEqualityTest.java new file mode 100644 index 000000000000..d5e4b9758b00 --- /dev/null +++ b/platform/platform-tests/testSrc/com/intellij/openapi/keymap/impl/MouseShortcutEqualityTest.java @@ -0,0 +1,75 @@ +/* + * Copyright 2000-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.openapi.keymap.impl; + +import com.intellij.openapi.actionSystem.MouseShortcut; +import com.intellij.openapi.actionSystem.PressureShortcut; +import com.intellij.testFramework.LightPlatformTestCase; + +import java.awt.event.InputEvent; +import java.awt.event.MouseEvent; + +public class MouseShortcutEqualityTest extends LightPlatformTestCase { + public void testTheSameMouseShortcutIsEqual () { + MouseShortcut mouseShortcut = new MouseShortcut(MouseEvent.BUTTON1, 0, 1); + + assertEquals("The same MouseShortcut should be equals to itself", mouseShortcut, mouseShortcut); + + mouseShortcut = new MouseShortcut(MouseEvent.BUTTON2, 0, 1); + + assertEquals("The same MouseShortcut should be equals to itself", mouseShortcut, mouseShortcut); + + mouseShortcut = new MouseShortcut(MouseEvent.BUTTON1, InputEvent.ALT_DOWN_MASK, 1); + + assertEquals("The same MouseShortcut should be equals to itself", mouseShortcut, mouseShortcut); + + mouseShortcut = new MouseShortcut(MouseEvent.BUTTON1, InputEvent.CTRL_DOWN_MASK, 2); + + assertEquals("The same MouseShortcut should be equals to itself", mouseShortcut, mouseShortcut); + } + + public void testEqualMouseShortcutsAreEqual () { + assertEquals("Mouse shortcuts with equal data are equal", + new MouseShortcut(MouseEvent.BUTTON1, 0, 1), + new MouseShortcut(MouseEvent.BUTTON1, 0, 1)); + + assertEquals("Mouse shortcuts with equal data are equal", + new MouseShortcut(MouseEvent.BUTTON2, InputEvent.ALT_DOWN_MASK, 2), + new MouseShortcut(MouseEvent.BUTTON2, InputEvent.ALT_DOWN_MASK, 2)); + } + + public void testSubclassesOfMouseEventsAreNotEqualToMouseEvents () { + MouseShortcut mouseShortcut = new MouseShortcut(MouseEvent.BUTTON2, InputEvent.ALT_DOWN_MASK, 2); + PressureShortcut pressureShortcut = new PressureShortcut(1); + assertFalse("MouseShortcut is not equal to PressureShortcut", mouseShortcut.equals(pressureShortcut)); + assertFalse("MouseShortcut is not equal to PressureShortcut", pressureShortcut.equals(mouseShortcut)); + } + + public void testPressureShortcutsWithTheSameDataAreEqual () { + PressureShortcut pressureShortcut = new PressureShortcut(1); + PressureShortcut anotherPressureShortcut = new PressureShortcut(1); + + assertEquals("Pressure shortcuts with the same data are equal", pressureShortcut, anotherPressureShortcut); + } + + public void testUnequalPressureShortcuts () { + PressureShortcut pressureShortcut = new PressureShortcut(1); + PressureShortcut anotherPressureShortcut = new PressureShortcut(2); + + assertFalse("Pressure shortcuts with different data are not equal", pressureShortcut.equals(anotherPressureShortcut)); + assertFalse("Pressure shortcuts with different data are not equal", anotherPressureShortcut.equals(pressureShortcut)); + } +}