Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 366275

Summary: ClassCastException in CompareEditorInput due to PhpMergeViewer not extending ContentMergeViewer
Product: z_Archived Reporter: Alexander Gurov <a.gurov>
Component: PDTAssignee: PHP UI <php.ui-inbox>
Status: CLOSED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: jurchiks101, kalin.a, Matthias.Striegl, zhaozhongwei
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: Windows XP   
Whiteboard:

Description Alexander Gurov CLA 2011-12-09 18:25:23 EST
PDT 3.0.0.v20110516-1100

What steps will reproduce the problem?
1. Do not remember actually, but the error seems simple enough.

There are about 30 similar errors in the log in the 1 minute period of time.

-- Error Details --
Date: Fri Dec 09 22:29:18 EET 2011
Message: Problems occurred when invoking code from plug-in: "org.eclipse.compare".
Severity: Error
Product: Eclipse SDK 3.7.1.v201109091335 (org.eclipse.sdk.ide)
Plugin: org.eclipse.compare
Session Data:
eclipse.buildId=M20110909-1335
java.version=1.6.0_22
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=ru_RU
Command-line arguments:  -os win32 -ws win32 -arch x86

Exception Stack Trace:
java.lang.ClassCastException: org.eclipse.php.internal.ui.compare.PhpMergeViewer cannot be cast to org.eclipse.compare.contentmergeviewer.ContentMergeViewer
	at org.eclipse.compare.CompareEditorInput.setDirty(CompareEditorInput.java:1177)
	at org.eclipse.compare.CompareEditorInput.access$1(CompareEditorInput.java:1174)
	at org.eclipse.compare.CompareEditorInput$1.propertyChange(CompareEditorInput.java:261)
	at org.eclipse.compare.internal.Utilities$2.run(Utilities.java:159)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.compare.internal.Utilities$1.run(Utilities.java:157)
	at org.eclipse.compare.internal.Utilities.firePropertyChange(Utilities.java:171)
	at org.eclipse.compare.internal.Utilities.firePropertyChange(Utilities.java:145)
	at org.eclipse.php.internal.ui.compare.ContentMergeViewer.fireDirtyState(ContentMergeViewer.java:1211)
	at org.eclipse.php.internal.ui.compare.ContentMergeViewer.setLeftDirty(ContentMergeViewer.java:1230)
	at org.eclipse.php.internal.ui.compare.TextMergeViewer.flushContent(TextMergeViewer.java:4677)
	at org.eclipse.php.internal.ui.compare.ContentMergeViewer.flush(ContentMergeViewer.java:1278)
	at org.eclipse.compare.CompareEditorInput.flushViewer(CompareEditorInput.java:1293)
	at org.eclipse.compare.CompareEditorInput.flushViewers(CompareEditorInput.java:1262)
	at org.eclipse.compare.CompareEditorInput.saveChanges(CompareEditorInput.java:1247)
	at org.eclipse.team.internal.ui.synchronize.LocalResourceSaveableComparison.flushViewers(LocalResourceSaveableComparison.java:158)
	at org.eclipse.team.internal.ui.synchronize.LocalResourceSaveableComparison.performSave(LocalResourceSaveableComparison.java:132)
	at org.eclipse.team.internal.ui.synchronize.LocalResourceSaveableComparison$1.contentChanged(LocalResourceSaveableComparison.java:88)
	at org.eclipse.compare.internal.ContentChangeNotifier$2.run(ContentChangeNotifier.java:67)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.compare.internal.ContentChangeNotifier$1.run(ContentChangeNotifier.java:65)
	at org.eclipse.compare.internal.ContentChangeNotifier.fireContentChanged(ContentChangeNotifier.java:79)
	at org.eclipse.compare.BufferedContent.fireContentChanged(BufferedContent.java:128)
	at org.eclipse.team.internal.ui.synchronize.LocalResourceTypedElement.fireContentChanged(LocalResourceTypedElement.java:298)
	at org.eclipse.team.internal.ui.synchronize.LocalResourceTypedElement$1.handleDocumentFlushed(LocalResourceTypedElement.java:149)
	at org.eclipse.team.internal.ui.synchronize.EditableSharedDocumentAdapter.flushDocument(EditableSharedDocumentAdapter.java:171)
	at org.eclipse.php.internal.ui.compare.TextMergeViewer$ContributorInfo.flush(TextMergeViewer.java:824)
	at org.eclipse.php.internal.ui.compare.TextMergeViewer.flush(TextMergeViewer.java:4697)
	at org.eclipse.php.internal.ui.compare.TextMergeViewer.flushContent(TextMergeViewer.java:4676)
	at org.eclipse.php.internal.ui.compare.ContentMergeViewer.flush(ContentMergeViewer.java:1278)
	at org.eclipse.php.internal.ui.compare.ContentMergeViewer$SaveAction.run(ContentMergeViewer.java:91)
	at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
	at org.eclipse.jface.commands.ActionHandler.execute(ActionHandler.java:119)
	at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476)
	at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
	at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:468)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:786)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:885)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:567)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:508)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:123)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1262)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1052)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1104)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1100)
	at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1509)
	at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:4640)
	at org.eclipse.swt.widgets.Canvas.WM_CHAR(Canvas.java:345)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:4528)
	at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4972)
	at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2531)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3752)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	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:344)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
Comment 1 Juris Sudmalis CLA 2012-02-17 16:32:11 EST
Bump for an annoying error that has been there since Eclipse 3.7 came out. Obviously PDT is not up to date with 3.7 builds yet nobody has bothered to fix this!
It is impossible to normally compare/merge files with this error because it doesn't allow saving the modified file most of the time (context menu is gone and Ctrl+S simple doesn't do anything, opening file separately reveals no changes have saved). I have no idea why but on very rare occasions this error doesn't pop up and the files can be saved. It is pure luck though, most of the time the ClassCastException jumps into your face.

Steps for reproducing:
1) install Eclipse 3.7+ and PDT from the `releases` update site (for 3.7 it's http://download.eclipse.org/releases/indigo).
2) make a simple project with at several PHP files (to compare obviously)
3) select 2 of them and choose `Compare to` > `Each other`.
For me it usually spits out the ClassCastException and only occasionally does it work like it should.
Naturally, the same thing happens when opening SVN or GIT synchronization views and trying to open a comparison between local and remote version.

To put it bluntly, this sucks big time. It has been there for at least 7 months and even now it isn't fixed.
Comment 2 Juris Sudmalis CLA 2012-02-17 16:34:12 EST
typo fix, by `context menu is gone` I meant `context menu entry 'Save' is gone`
Comment 3 Zhongwei Zhao CLA 2012-05-03 02:24:43 EDT
it has been fixed in the latest code.
Comment 4 Juris Sudmalis CLA 2012-05-03 13:07:36 EDT
By that you mean some released builds or latest in some repository? If it's the former one, when can we expect it to be rolled out to the main update site?
Comment 5 Juris Sudmalis CLA 2012-05-03 13:09:33 EDT
Edit: I meant "the latter one"...
Comment 6 Matthias Striegl CLA 2012-07-04 03:34:55 EDT
IMO the problem is caused by an API break in the platform / compare code. See also https://bugs.eclipse.org/bugs/show_bug.cgi?id=383893.
Comment 7 Kalin CLA 2012-07-04 10:01:54 EDT
Re-tested in PDT 3.0.1.v201206201546.
No longer reproduced.
Closing...

Kalin Yanev
kalin.a@zend.com