eclipse-wildwebdeveloper / eclipse-wildwebdeveloper/wildwebdeveloper

ST4 saving javascript changes from compare editor fails

Aperta
#1,092 4 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
Java
Stelle
201
Fork
76
Merge medio
4g 7h
PR unite (30g)
21

Descrizione

Saving changes in javascript file after comparing projects and editing fails with IllegalStateException. Uninstalled Wild Web Developer plugin avoids the issue.

Steps to reproduce

  1. STS4 4.17.2 macos arm_64 (fresh install)
  2. Create project comp1 and comp2
  3. Create file comp1/hello.js with console.log("Hello Foo");
  4. Create file comp2/hello.js with console.log("Hello Bar");
  5. Select comp1 and comp2 projects and select Compare With->Each Other
  6. In compare editor, double click on hello.js and make change(s) to either side
  7. Try to save

Result:

Changes are not saved and exception found in the error log

!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.IllegalStateException
    at org.eclipse.jface.text.TextViewer.setHyperlinkPresenter(TextViewer.java:5639)
    at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:529)
    at org.eclipse.ui.internal.genericeditor.compare.GenericEditorMergeViewer.configureTextViewer(GenericEditorMergeViewer.java:68)
    at org.eclipse.ui.internal.genericeditor.compare.GenericEditorMergeViewer$1.inputDocumentChanged(GenericEditorMergeViewer.java:50)
    at org.eclipse.jface.text.TextViewer.fireInputDocumentChanged(TextViewer.java:2849)
    at org.eclipse.jface.text.TextViewer.setDocument(TextViewer.java:2890)
    at org.eclipse.jface.text.source.SourceViewer.setDocument(SourceViewer.java:663)
    at org.eclipse.jface.text.source.SourceViewer.setDocument(SourceViewer.java:603)
    at org.eclipse.compare.contentmergeviewer.TextMergeViewer$ContributorInfo.updateViewerDocument(TextMergeViewer.java:807)
    at org.eclipse.compare.contentmergeviewer.TextMergeViewer$ContributorInfo.internalSetDocument(TextMergeViewer.java:762)
    at org.eclipse.compare.contentmergeviewer.TextMergeViewer$ContributorInfo.setDocument(TextMergeViewer.java:679)
    at org.eclipse.compare.contentmergeviewer.TextMergeViewer.updateContent(TextMergeViewer.java:3029)
    at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.internalRefresh(ContentMergeViewer.java:793)
    at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.refresh(ContentMergeViewer.java:769)
    at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.handleCompareInputChange(ContentMergeViewer.java:1389)
    at org.eclipse.compare.contentmergeviewer.TextMergeViewer.handleCompareInputChange(TextMergeViewer.java:5345)
    at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.lambda$1(ContentMergeViewer.java:390)
    at org.eclipse.compare.structuremergeviewer.DiffNode.fireChange(DiffNode.java:140)
    at org.eclipse.compare.internal.ResourceCompareInput$MyDiffNode.fireChange(ResourceCompareInput.java:90)
    at org.eclipse.compare.internal.MergeViewerContentProvider.saveLeftContent(MergeViewerContentProvider.java:152)
    at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.flushLeftSide(ContentMergeViewer.java:1272)
    at org.eclipse.compare.contentmergeviewer.TextMergeViewer.flushLeftSide(TextMergeViewer.java:5235)
    at org.eclipse.compare.contentmergeviewer.TextMergeViewer.flushContent(TextMergeViewer.java:5258)
    at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.flush(ContentMergeViewer.java:1243)
    at org.eclipse.compare.CompareEditorInput.flushViewer(CompareEditorInput.java:1220)
    at org.eclipse.compare.CompareEditorInput.flushViewers(CompareEditorInput.java:1189)
    at org.eclipse.compare.internal.ResourceCompareInput.getAdapter(ResourceCompareInput.java:508)
    at org.eclipse.core.runtime.Adapters.adapt(Adapters.java:67)
    at org.eclipse.core.runtime.Adapters.adapt(Adapters.java:116)
    at org.eclipse.ui.ide.ResourceUtil.getFile(ResourceUtil.java:61)
    at org.eclipse.ui.internal.ide.actions.BuildUtilities.findSelectedProjects(BuildUtilities.java:108)
    at org.eclipse.ui.actions.BuildAction.isEnabled(BuildAction.java:231)
    at org.eclipse.ui.actions.RetargetAction.setActionHandler(RetargetAction.java:268)
    at org.eclipse.ui.internal.ide.actions.RetargetActionWithDefault.setActionHandler(RetargetActionWithDefault.java:51)
    at org.eclipse.ui.actions.RetargetAction.propagateChange(RetargetAction.java:204)
    at org.eclipse.ui.SubActionBars.firePropertyChange(SubActionBars.java:289)
    at org.eclipse.ui.SubActionBars.fireActionHandlersChanged(SubActionBars.java:273)
    at org.eclipse.ui.SubActionBars.updateActionBars(SubActionBars.java:603)
    at org.eclipse.compare.internal.CompareHandlerService.updateActionBars(CompareHandlerService.java:131)
    at org.eclipse.compare.internal.CompareHandlerService.updatePaneActionHandlers(CompareHandlerService.java:161)
    at org.eclipse.compare.contentmergeviewer.TextMergeViewer.connectGlobalActions(TextMergeViewer.java:2784)
    at org.eclipse.compare.contentmergeviewer.TextMergeViewer.setActiveViewer(TextMergeViewer.java:2719)
    at org.eclipse.compare.contentmergeviewer.TextMergeViewer$22.focusLost(TextMergeViewer.java:2682)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:147)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4646)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1524)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1547)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1528)
    at org.eclipse.swt.widgets.Control.sendFocusEvent(Control.java:3433)
    at org.eclipse.swt.widgets.Canvas.sendFocusEvent(Canvas.java:80)
    at org.eclipse.swt.widgets.Display.checkFocus(Display.java:744)
    at org.eclipse.swt.widgets.Shell.makeFirstResponder(Shell.java:1317)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:6522)
    at org.eclipse.swt.internal.cocoa.OS.objc_msgSend_bool(Native Method)
    at org.eclipse.swt.internal.cocoa.NSWindow.makeFirstResponder(NSWindow.java:197)
    at org.eclipse.swt.widgets.Control.forceFocus(Control.java:1472)
    at org.eclipse.swt.widgets.Control.forceFocus(Control.java:1452)
    at org.eclipse.swt.widgets.Control.setFocus(Control.java:3880)
    at org.eclipse.swt.widgets.Composite.setFocus(Composite.java:1129)
    at org.eclipse.swt.widgets.Composite.setFocus(Composite.java:1127)
    at org.eclipse.swt.widgets.Composite.setFocus(Composite.java:1127)
    at org.eclipse.swt.widgets.Composite.setFocus(Composite.java:1127)
    at org.eclipse.swt.widgets.Composite.setFocus(Composite.java:1127)
    at org.eclipse.swt.widgets.Control.fixFocus(Control.java:1377)
    at org.eclipse.swt.widgets.Control.setEnabled(Control.java:3860)
    at org.eclipse.ui.internal.WorkbenchWindow.disableControl(WorkbenchWindow.java:2278)
    at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2324)
    at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:278)
    at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:260)
    at org.eclipse.ui.internal.SaveableHelper.saveModels(SaveableHelper.java:207)
    at org.eclipse.ui.internal.SaveableHelper.savePart(SaveableHelper.java:150)
    at org.eclipse.ui.internal.WorkbenchPage.saveSaveable(WorkbenchPage.java:3802)
    at org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:3815)
    at org.eclipse.ui.internal.handlers.SaveHandler.execute(SaveHandler.java:82)
    at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:283)
    at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:97)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:317)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:251)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:173)
    at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:156)
    at org.eclipse.core.commands.Command.executeWithChecks(Command.java:488)
    at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:485)
    at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213)
    at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.executeCommand(KeyBindingDispatcher.java:308)
    at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.press(KeyBindingDispatcher.java:580)
    at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.processKeyEvent(KeyBindingDispatcher.java:647)
    at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.filterKeySequenceBindings(KeyBindingDispatcher.java:439)
    at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher$KeyDownFilter.handleEvent(KeyBindingDispatcher.java:96)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
    at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1217)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4641)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1524)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1547)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1532)
    at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1561)
    at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1557)
    at org.eclipse.swt.widgets.Canvas.sendKeyEvent(Canvas.java:522)
    at org.eclipse.swt.widgets.Control.doCommandBySelector(Control.java:1085)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:6492)
    at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method)
    at org.eclipse.swt.internal.cocoa.NSResponder.interpretKeyEvents(NSResponder.java:59)
    at org.eclipse.swt.widgets.Composite.keyDown(Composite.java:607)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:6324)
    at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
    at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:236)
    at org.eclipse.swt.widgets.Widget.windowSendEvent(Widget.java:2264)
    at org.eclipse.swt.widgets.Shell.windowSendEvent(Shell.java:2511)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:6444)
    at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
    at org.eclipse.swt.widgets.Display.applicationSendEvent(Display.java:5692)
    at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5831)
    at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method)
    at org.eclipse.swt.internal.cocoa.NSApplication.sendEvent(NSApplication.java:117)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3986)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
    at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:643)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:550)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:171)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1467)

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci il problema di salvataggio del compare editor seguendo i passaggi indicati per STS4 4.17.2 su macOS ARM, quindi parti da GenericEditorMergeViewer.configureTextViewer e dalla voce dello stack TextViewer.setHyperlinkPresenter. Il lavoro è completato quando le modifiche JavaScript apportate su entrambi i lati del compare editor vengono salvate correttamente senza l’IllegalStateException.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
java, javascript
Ambito
desktop, devtools
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
25/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.