Community
Participate
Working Groups
Editing in the plugin extension editor sometimes corrupts the plugin.xml file. The attached SWTBot UI test reproduces the issue by creating a new plug-in project and adding new extension elements and saving the document at random. Steps to reproduce: - Use Eclipse for RCP or RAP developers - Download SWTBot from http://www.eclipse.org/swtbot/downloads.php and add it as folder to the Running target platform - Import the attached project - Run using the included ExtensionEditorTest.launch config - Let the test run a while. After a short time, you will see "Error: Could not parse XML contribution for ".../com.example.plugin/plugin.xml" messages" appearing in the log. Any contributed extensions and extension points will be ignored." because the XML document was corrupted. - Check the plugin.xml document in the workspace. You will find something like "</extension>nsion point="org.eclipse.core.runtime.contentTypes">" in the document. In some (but not all) runs I'm also seeing these exceptions: !ENTRY org.eclipse.jdt.core 4 2 2011-04-14 17:08:05.379 !MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jdt.core". !STACK 0 java.util.EmptyStackException at java.util.Stack.peek(Stack.java:85) at org.eclipse.pde.internal.core.plugin.PluginHandler.startElement(PluginHandler.java:60) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1363) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2755) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) at javax.xml.parsers.SAXParser.parse(SAXParser.java:395) at javax.xml.parsers.SAXParser.parse(SAXParser.java:198) at org.eclipse.pde.internal.core.plugin.AbstractExtensionsModel.load(AbstractExtensionsModel.java:85) at org.eclipse.pde.internal.core.plugin.AbstractExtensionsModel.reload(AbstractExtensionsModel.java:106) at org.eclipse.pde.internal.core.WorkspaceModelManager.loadModel(WorkspaceModelManager.java:245) at org.eclipse.pde.internal.core.WorkspacePluginModelManager.handleExtensionFileDelta(WorkspacePluginModelManager.java:256) at org.eclipse.pde.internal.core.WorkspacePluginModelManager.handleFileDelta(WorkspacePluginModelManager.java:131) at org.eclipse.pde.internal.core.WorkspaceModelManager.visit(WorkspaceModelManager.java:160) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:68) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:48) at org.eclipse.pde.internal.core.WorkspaceModelManager.handleResourceDelta(WorkspaceModelManager.java:125) at org.eclipse.pde.internal.core.WorkspaceModelManager.resourceChanged(WorkspaceModelManager.java:113) at org.eclipse.jdt.internal.core.DeltaProcessingState$1.run(DeltaProcessingState.java:465) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.jdt.internal.core.DeltaProcessingState.resourceChanged(DeltaProcessingState.java:460) at org.eclipse.core.internal.events.NotificationManager$2.run(NotificationManager.java:291) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:285) at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:149) at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:327) at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1181) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1984) at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118) at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:75) at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:65) at org.eclipse.ui.editors.text.TextFileDocumentProvider.executeOperation(TextFileDocumentProvider.java:456) at org.eclipse.ui.editors.text.TextFileDocumentProvider.saveDocument(TextFileDocumentProvider.java:772) at org.eclipse.ui.editors.text.ForwardingDocumentProvider.saveDocument(ForwardingDocumentProvider.java:148) at org.eclipse.pde.internal.ui.editor.context.InputContext.doSave(InputContext.java:188) at org.eclipse.pde.internal.ui.editor.context.InputContextManager.save(InputContextManager.java:78) at org.eclipse.pde.internal.ui.editor.PDEFormEditor.doSave(PDEFormEditor.java:350) at org.eclipse.ui.internal.SaveableHelper$2.run(SaveableHelper.java:151) at org.eclipse.ui.internal.SaveableHelper$5.run(SaveableHelper.java:277) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) at org.eclipse.jface.window.ApplicationWindow$1.run(ApplicationWindow.java:759) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.java:756) at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2606) at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:285) at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:264) at org.eclipse.ui.internal.SaveableHelper.savePart(SaveableHelper.java:156) at org.eclipse.ui.internal.EditorManager.savePart(EditorManager.java:1369) at org.eclipse.ui.internal.WorkbenchPage.savePart(WorkbenchPage.java:3334) at org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:3347) at org.eclipse.ui.internal.SaveAction.run(SaveAction.java:76) at de.loskutov.anyedit.actions.internal.SpecialSaveAction.run(SpecialSaveAction.java:77) at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3783) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1375) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1398) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1383) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1195) at org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot$2.run(AbstractSWTBot.java:159) at org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$5.doRun(UIThreadRunnable.java:221) at org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$1.run(UIThreadRunnable.java:89) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3593) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3286) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115) at org.eclipse.pde.internal.junit.runtime.UITestApplication.start(UITestApplication.java:47) 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:369) 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:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) at org.eclipse.equinox.launcher.Main.run(Main.java:1408) at org.eclipse.equinox.launcher.Main.main(Main.java:1384)
Created attachment 193265 [details] org.eclipse.pde.extensioneditorbug.zip
*** This bug has been marked as a duplicate of bug 331485 ***
Nice work, Ralf!
Reopening as the fix does not solve this issue. Maybe it's related to bug 340640 which also talks about saving.
Ralf, I don't have SWTBot installed and no time right now to do this. Could you check whether the following patch: https://bugs.eclipse.org/bugs/attachment.cgi?id=195062 fixes the issue? Thanks.
Sorry, I only tested on 3.6.2 so far, the test passes on 3.7M7 already.
(In reply to comment #6) > Sorry, I only tested on 3.6.2 so far, the test passes on 3.7M7 already. OK, in that case it's not related bug 340640.