From 9b6176d312318d6c9fa071656b488f26ff53611c Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Fri, 2 Jul 2010 19:29:59 +0400 Subject: [PATCH] project leak --- .../keymap/impl/IdeKeyEventDispatcher.java | 34 ++++++++++++------- .../keymap/impl/KeyProcessorContext.java | 8 +++++ 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java index 1c9f1972473e..db85cb8683be 100644 --- a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java +++ b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java @@ -183,18 +183,28 @@ public final class IdeKeyEventDispatcher implements Disposable { myContext.setModalContext(isModalContext); myContext.setInputEvent(e); - if (getState() == KeyState.STATE_INIT) { - return inInitState(); - } else if (getState() == KeyState.STATE_PROCESSED) { - return inProcessedState(); - } else if (getState() == KeyState.STATE_WAIT_FOR_SECOND_KEYSTROKE) { - return inWaitForSecondStrokeState(); - } else if (getState() == KeyState.STATE_SECOND_STROKE_IN_PROGRESS) { - return inSecondStrokeInProgressState(); - } else if (getState() == KeyState.STATE_KEY_GESTURE_PROCESSOR) { - return myKeyGestureProcessor.process(); - } else { - throw new IllegalStateException("state = " + getState()); + try { + if (getState() == KeyState.STATE_INIT) { + return inInitState(); + } + else if (getState() == KeyState.STATE_PROCESSED) { + return inProcessedState(); + } + else if (getState() == KeyState.STATE_WAIT_FOR_SECOND_KEYSTROKE) { + return inWaitForSecondStrokeState(); + } + else if (getState() == KeyState.STATE_SECOND_STROKE_IN_PROGRESS) { + return inSecondStrokeInProgressState(); + } + else if (getState() == KeyState.STATE_KEY_GESTURE_PROCESSOR) { + return myKeyGestureProcessor.process(); + } + else { + throw new IllegalStateException("state = " + getState()); + } + } + finally { + myContext.clear(); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/KeyProcessorContext.java b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/KeyProcessorContext.java index 956ed343e116..3c0fd028fd08 100644 --- a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/KeyProcessorContext.java +++ b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/KeyProcessorContext.java @@ -88,4 +88,12 @@ public class KeyProcessorContext { public KeyEvent getInputEvent() { return myInputEvent; } + + public void clear() { + myInputEvent = null; + myActions.clear(); + myFocusOwner = null; + myDataContext = null; + myFoundComponent = null; + } } \ No newline at end of file