Community
Participate
Working Groups
If a conflicting Java file is not in the Eclipse workspace and stage 2 is used as "current" input ("Last HEAD"), JDT UI logs a PartInitException. The merge editor comes up, but the content viewer is not fully initialized. User-visible effect is that "Show whitespace" doesn't work on the "current" side. Exception trace: !ENTRY org.eclipse.jdt.ui 4 10001 2021-04-28 22:55:44.922 !MESSAGE Internal Error !STACK 1 org.eclipse.ui.PartInitException: Cannot determine URI for '<full filesystem path to non-workspace file>'. at org.eclipse.ui.texteditor.AbstractTextEditor.internalInit(AbstractTextEditor.java:3186) at org.eclipse.ui.texteditor.AbstractTextEditor.init(AbstractTextEditor.java:3197) at org.eclipse.jdt.internal.ui.compare.JavaMergeViewer.getSourceViewerConfiguration(JavaMergeViewer.java:276) at org.eclipse.jdt.internal.ui.compare.JavaMergeViewer.configureTextViewer(JavaMergeViewer.java:215) at org.eclipse.compare.contentmergeviewer.TextMergeViewer.configureSourceViewer(TextMergeViewer.java:3114) at org.eclipse.compare.contentmergeviewer.TextMergeViewer.updateContent(TextMergeViewer.java:3062) at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.internalRefresh(ContentMergeViewer.java:811) at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.inputChanged(ContentMergeViewer.java:710) at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:286) at org.eclipse.jdt.internal.ui.compare.JavaMergeViewer.setInput(JavaMergeViewer.java:152) at org.eclipse.compare.CompareViewerSwitchingPane.setInput(CompareViewerSwitchingPane.java:277) at org.eclipse.compare.internal.CompareContentViewerSwitchingPane.setInput(CompareContentViewerSwitchingPane.java:191) at org.eclipse.compare.CompareEditorInput.internalSetContentPaneInput(CompareEditorInput.java:845) at org.eclipse.compare.CompareEditorInput.access$7(CompareEditorInput.java:843) at org.eclipse.compare.CompareEditorInput$10.run(CompareEditorInput.java:786) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.compare.CompareEditorInput.feed1(CompareEditorInput.java:773) at org.eclipse.compare.CompareEditorInput.access$2(CompareEditorInput.java:772) at org.eclipse.compare.CompareEditorInput$4.open(CompareEditorInput.java:658) at org.eclipse.compare.CompareViewerPane.open(CompareViewerPane.java:325) at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:855) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:50) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:173) at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:852) at org.eclipse.compare.structuremergeviewer.DiffTreeViewer.internalOpen(DiffTreeViewer.java:654) at org.eclipse.compare.structuremergeviewer.DiffTreeViewer.access$3(DiffTreeViewer.java:651) at org.eclipse.compare.structuremergeviewer.DiffTreeViewer$1.openSelectedChange(DiffTreeViewer.java:195) at org.eclipse.compare.internal.CompareEditorInputNavigator.openElement(CompareEditorInputNavigator.java:97) at org.eclipse.compare.internal.CompareEditorInputNavigator.selectChange(CompareEditorInputNavigator.java:66) at org.eclipse.egit.ui.internal.merge.GitMergeEditorInput.contentsCreated(GitMergeEditorInput.java:275) at org.eclipse.compare.CompareEditorInput.createContents(CompareEditorInput.java:585) at org.eclipse.compare.internal.CompareEditor.createCompareControl(CompareEditor.java:462) at org.eclipse.compare.internal.CompareEditor.access$6(CompareEditor.java:422) at org.eclipse.compare.internal.CompareEditor$1$1.run(CompareEditor.java:378) at org.eclipse.ui.internal.UILockListener.doPendingWork(UILockListener.java:162) at org.eclipse.ui.internal.UISynchronizer$3.run(UISynchronizer.java:154) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4032) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3708) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1121) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1022) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:150) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:693) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:610) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:138) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:673) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:610) at org.eclipse.equinox.launcher.Main.run(Main.java:1519) at org.eclipse.equinox.launcher.Main.main(Main.java:1492) Caused by: org.eclipse.core.runtime.CoreException: Cannot determine URI for '<full filesystem path to non-workspace file>'. at org.eclipse.core.internal.filebuffers.ResourceFileBuffer.create(ResourceFileBuffer.java:239) at org.eclipse.core.internal.filebuffers.TextFileBufferManager.connect(TextFileBufferManager.java:112) at org.eclipse.ui.editors.text.TextFileDocumentProvider.createFileInfo(TextFileDocumentProvider.java:560) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.createFileInfo(CompilationUnitDocumentProvider.java:1010) at org.eclipse.ui.editors.text.TextFileDocumentProvider.connect(TextFileDocumentProvider.java:478) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.connect(CompilationUnitDocumentProvider.java:1274) at org.eclipse.ui.texteditor.AbstractTextEditor.doSetInput(AbstractTextEditor.java:4178) at org.eclipse.ui.texteditor.StatusTextEditor.doSetInput(StatusTextEditor.java:229) at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.doSetInput(AbstractDecoratedTextEditor.java:1466) at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.internalDoSetInput(JavaEditor.java:2557) at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.doSetInput(JavaEditor.java:2544) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSetInput(CompilationUnitEditor.java:1417) at org.eclipse.jdt.internal.ui.compare.JavaMergeViewer$CompilationUnitEditorAdapter.doSetInput(JavaMergeViewer.java:613) at org.eclipse.ui.texteditor.AbstractTextEditor$5.run(AbstractTextEditor.java:3154) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:437) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:353) at org.eclipse.ui.internal.WorkbenchWindow$14.run(WorkbenchWindow.java:2184) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2180) at org.eclipse.ui.texteditor.AbstractTextEditor.internalInit(AbstractTextEditor.java:3172) ... 62 more
This is caused by the super-hacky way EGit handles non-workspace files in this case. LocationEditableRevision is just broken. A better way would be to create a hidden IResource linked via a file:// URI. That way we'd have a real IResource and wouldn't need to hack around that much. Of course such a hidden IResource would also need to be removed again. There's precedent for this in JDT's ExternalFolderManager and in CompareWithOtherResourceDialog from Compare UI.
New Gerrit change created: https://git.eclipse.org/r/c/egit/egit/+/180108
Gerrit change https://git.eclipse.org/r/c/egit/egit/+/180108 was merged to [master]. Commit: http://git.eclipse.org/c/egit/egit.git/commit/?id=2824d51899189f7fc5d4b799ef9efd33d2bbf361