Bug 299410 Keybinding is interfering with character input
To Reproduce: Runt the contacts demo, select a person and try adding an '(' to any field in the Details view. I'm getting the following stack (and no character): java.lang.IllegalArgumentException: unexpected InvalidSyntaxException: Invalid value at "()" at org.osgi.util.tracker.ServiceTracker.<init>(ServiceTracker.java:207) at org.eclipse.e4.internal.core.services.osgi.OSGiContextStrategy.lookup(OSGiContextStrategy.java:121) at org.eclipse.e4.core.services.internal.context.EclipseContext.internalGet(EclipseContext.java:347) at org.eclipse.e4.core.services.internal.context.EclipseContext.internalGet(EclipseContext.java:371) at org.eclipse.e4.core.services.internal.context.EclipseContext.internalGet(EclipseContext.java:371) at org.eclipse.e4.core.services.internal.context.EclipseContext.internalGet(EclipseContext.java:371) at org.eclipse.e4.core.services.internal.context.EclipseContext.internalGet(EclipseContext.java:371) at org.eclipse.e4.core.services.internal.context.EclipseContext.get(EclipseContext.java:316) at org.eclipse.e4.ui.bindings.internal.BindingPrefixLookupFunction.compute(BindingPrefixLookupFunction.java:42) at org.eclipse.e4.core.services.internal.context.ValueComputation.get(ValueComputation.java:134) at org.eclipse.e4.core.services.internal.context.EclipseContext.internalGet(EclipseContext.java:339) at org.eclipse.e4.core.services.internal.context.EclipseContext.get(EclipseContext.java:320) at org.eclipse.e4.ui.bindings.internal.BindingServiceImpl.isPartialMatch(BindingServiceImpl.java:274) at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.isPartialMatch(KeyBindingDispatcher.java:420) at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.press(KeyBindingDispatcher.java:442) at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.processKeyEvent(KeyBindingDispatcher.java:499) at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.filterKeySequenceBindings(KeyBindingDispatcher.java:333) at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.access$0(KeyBindingDispatcher.java:279) at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher$KeyDownFilter.handleEvent(KeyBindingDispatcher.java:68) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1240) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1049) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1074) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1059) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1100) at org.eclipse.swt.widgets.Text.sendKeyEvent(Text.java:1427) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1096) at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1505) at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:4060) at org.eclipse.swt.widgets.Text.WM_CHAR(Text.java:2175) at org.eclipse.swt.widgets.Control.windowProc(Control.java:3952) at org.eclipse.swt.widgets.Text.windowProc(Text.java:2170) at org.eclipse.swt.widgets.Display.windowProc(Display.java:4678) at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2437) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3522) at org.eclipse.e4.ui.workbench.swt.internal.PartRenderingEngine$4.run(PartRenderingEngine.java:555) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.e4.ui.workbench.swt.internal.PartRenderingEngine.run(PartRenderingEngine.java:478) at org.eclipse.e4.workbench.ui.internal.E4Workbench.createAndRunUI(E4Workbench.java:81) at org.eclipse.e4.ui.workbench.swt.internal.E4Application.start(E4Application.java:103) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:367) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:615) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:611) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:566) at org.eclipse.equinox.launcher.Main.run(Main.java:1363) at org.eclipse.equinox.launcher.Main.main(Main.java:1339) Caused by: org.osgi.framework.InvalidSyntaxException: Invalid value at "()" at org.eclipse.osgi.framework.internal.core.FilterImpl$Parser.parse_substring(FilterImpl.java:1560) at org.eclipse.osgi.framework.internal.core.FilterImpl$Parser.parse_item(FilterImpl.java:1467) at org.eclipse.osgi.framework.internal.core.FilterImpl$Parser.parse_filtercomp(FilterImpl.java:1373) at org.eclipse.osgi.framework.internal.core.FilterImpl$Parser.parse_filter(FilterImpl.java:1339) at org.eclipse.osgi.framework.internal.core.FilterImpl$Parser.parse(FilterImpl.java:1318) at org.eclipse.osgi.framework.internal.core.FilterImpl.newInstance(FilterImpl.java:142) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.createFilter(BundleContextImpl.java:991) at org.osgi.util.tracker.ServiceTracker.<init>(ServiceTracker.java:200) ... 53 more
tests/org.eclipse.e4.ui.bindings.tests/src/org/eclipse/e4/ui/bindings/tests/KeyDispatcherTest.java
((IDisposable) workbenchContext).dispose();
		}
		workbenchContext = null;
		display.dispose();
		display = null;
	}
	public void testExecuteOneCommand() throws Exception {
		KeyBindingDispatcher dispatcher = new KeyBindingDispatcher();
		ContextInjectionFactory.inject(dispatcher, workbenchContext);
		final Listener listener = dispatcher.getKeyDownFilter();
		display.addFilter(SWT.KeyDown, listener);
		display.addFilter(SWT.Traverse, listener);
		
		assertFalse(handler.q2);
		
		Shell shell = new Shell(display, SWT.NONE);
		
		Event event = new Event();
		event.type = SWT.KeyDown;
		event.keyCode = SWT.CTRL;
		shell.notifyListeners(SWT.KeyDown, event);
		event = new Event();
		event.type = SWT.KeyDown;
		event.stateMask = SWT.CTRL; 
		event.keyCode = 'A';
		shell.notifyListeners(SWT.KeyDown, event);
		
		assertTrue(handler.q2);
	}