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

Bug 460552

Summary: Undiagnosed Failed to create injector for 1.8 editor extending 1.7 editor
Product: [Modeling] TMF Reporter: Ed Willink <ed>
Component: XtextAssignee: Project Inbox <tmf.xtext-inbox>
Status: VERIFIED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: Holger.Schill, sebastian.zarnekow, st.oehme, sven.efftinge
Version: unspecified   
Target Milestone: ---   
Hardware: All   
OS: All   
See Also: https://git.eclipse.org/r/42532
https://git.eclipse.org/c/tmf/org.eclipse.xtext.git/commit/?id=b6a857a0cf023c4cc2ee545debdce905e3a1184e
https://git.eclipse.org/r/42570
https://git.eclipse.org/c/tmf/org.eclipse.xtext.git/commit/?id=0ed19329a2f61b65461e2fff17365c7a232426b0
Whiteboard: v2.8

Description Ed Willink CLA 2015-02-22 16:00:55 EST
The incompatible plugin name changes mean that an editor such as QVTi rebuilt using Xtext 1.8 that extends an editor such as EssentialOCL built using Xtext 1.7 fails with:

NB. Why no compile time / build-time diagnostic?

Failed to create injector for org.eclipse.qvtd.xtext.qvtimperative.QVTimperative ExtensionFactory: org.eclipse.qvtd.xtext.qvtimperative.ui.QVTimperativeExecutableExtensionFactory

org.eclipse.core.runtime.CoreException: Failed to create injector for org.eclipse.qvtd.xtext.qvtimperative.QVTimperative ExtensionFactory: org.eclipse.qvtd.xtext.qvtimperative.ui.QVTimperativeExecutableExtensionFactory
	at org.eclipse.xtext.ui.guice.AbstractGuiceAwareExecutableExtensionFactory.create(AbstractGuiceAwareExecutableExtensionFactory.java:59)
	at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:262)
	at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
	at org.eclipse.ui.internal.WorkbenchPlugin$1.run(WorkbenchPlugin.java:293)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:288)
	at org.eclipse.ui.internal.registry.EditorDescriptor.createEditor(EditorDescriptor.java:235)
	at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:332)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPart(CompatibilityPart.java:273)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor.createPart(CompatibilityEditor.java:63)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:311)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
	at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:888)
	at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:869)
	at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:120)
	at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:337)
	at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:258)
	at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162)
	at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:104)
	at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:73)
	at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:55)
	at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:128)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:983)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:737)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:731)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715)
	at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1223)
	at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:98)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:678)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:737)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:731)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:71)
	at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:151)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:674)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:737)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:731)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:71)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:674)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$6.run(PartRenderingEngine.java:547)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531)
	at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:69)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:983)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:737)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:731)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:71)
	at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:151)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:674)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:737)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:731)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:71)
	at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:151)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:674)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:737)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:731)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:71)
	at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:151)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:674)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:737)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:731)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:71)
	at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:49)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:674)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:737)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:731)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715)
	at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82)
	at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:98)
	at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:63)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:678)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:737)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:731)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:71)
	at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:151)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:674)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:737)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:731)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:71)
	at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:662)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:674)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:737)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:731)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1078)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:156)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:648)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:592)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
	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:380)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1438)
Caused by: java.lang.RuntimeException: Failed to create injector for org.eclipse.qvtd.xtext.qvtimperative.QVTimperative
	at org.eclipse.qvtd.xtext.qvtimperative.ui.internal.QVTimperativeActivator.createInjector(QVTimperativeActivator.java:71)
	at org.eclipse.qvtd.xtext.qvtimperative.ui.internal.QVTimperativeActivator.getInjector(QVTimperativeActivator.java:55)
	at org.eclipse.qvtd.xtext.qvtimperative.ui.QVTimperativeExecutableExtensionFactory.getInjector(QVTimperativeExecutableExtensionFactory.java:26)
	at org.eclipse.xtext.ui.guice.AbstractGuiceAwareExecutableExtensionFactory.create(AbstractGuiceAwareExecutableExtensionFactory.java:51)
	... 140 more
Caused by: com.google.inject.CreationException: Guice creation errors:

1) No implementation for org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer annotated with @com.google.inject.name.Named(value=org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer.CONTENT_ASSIST) was bound.
  while locating org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer annotated with @com.google.inject.name.Named(value=org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer.CONTENT_ASSIST)
    for field at org.eclipse.xtext.ui.editor.contentassist.antlr.ParserBasedContentAssistContextFactory$StatefulFactory.lexer(Unknown Source)
  at org.eclipse.xtext.service.MethodBasedModule.configure(MethodBasedModule.java:56)

2) No implementation for org.eclipse.xtext.ui.editor.contentassist.antlr.IContentAssistParser was bound.
  while locating org.eclipse.xtext.ui.editor.contentassist.antlr.IContentAssistParser
    for field at org.eclipse.xtext.ui.editor.contentassist.antlr.ParserBasedContentAssistContextFactory$StatefulFactory.parser(Unknown Source)
  at org.eclipse.xtext.service.MethodBasedModule.configure(MethodBasedModule.java:56)

2 errors
	at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:435)
	at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:154)
	at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:106)
	at com.google.inject.Guice.createInjector(Guice.java:95)
	at com.google.inject.Guice.createInjector(Guice.java:72)
	at com.google.inject.Guice.createInjector(Guice.java:62)
	at org.eclipse.qvtd.xtext.qvtimperative.ui.internal.QVTimperativeActivator.createInjector(QVTimperativeActivator.java:67)
	... 143 more
Comment 1 Ed Willink CLA 2015-02-22 18:03:42 EST
Workaround: after generating with Xtext 2.8, apply the following replacements to the ...ui/src-gen tree *.g/*.java.

org.eclipse.xtext.ide.LexerIdeBindings => org.eclipse.xtext.ui.LexerUIBindings
org.eclipse.xtext.ide => org.eclipse.xtext.ui
org.eclipse.xtext.ui.editor.contentassist.antlr.DelegatingContentAssistContextFactory => org.eclipse.xtext.ui.editor.contentassist.antlr.ParserBasedContentAssistContextFactory

The org.eclipse.ocl.examples.build.utilities.BackportToXtext_2_7.java MWE2 component can be appended to a MWE2 editor generate script to do this automatically. See org.eclipse.ocl.examples.build.GenerateEssentialOCLEditor.mwe2 for an  example.
Comment 2 Sebastian Zarnekow CLA 2015-02-23 02:48:42 EST
I oomphed both the ocl and qvtd repo. What do I have to do to observe the problem?
Comment 3 Ed Willink CLA 2015-02-23 04:57:23 EST
The problem arose after I installed

http://www.eclipse.org/modeling/download.php?file=/modeling/mdt/ocl/downloads/drops/6.0.0/N201502230001/mdt-ocl-Update-N201502230001.zip

and 

http://www.eclipse.org/downloads/download.php?file=/mmt/qvtd/downloads/drops/1.0.0/N201502221230/mmt-qvtd-incubation-Update-N201502221230.zip

Opening a *.qvtc, *.qvti, *.qvtr file will give the start failure. (There are Examples projects if you want real files.)

After arranging the backport to 2.7

http://www.eclipse.org/downloads/download.php?file=/mmt/qvtd/downloads/drops/1.0.0/N201502221740/mmt-qvtd-incubation-Update-N201502221740.zip

works fine.

A specific but surprising problem is that the new DelegatingContentAssistContextFactory does not play well (Guice errors) with an old ParserBasedContentAssistContextFactory in the extended grammar.

More generally, and I don't understand Guice magic, I'm not clear how one grammar that binds the ui and another the ide version of ...editor.contentassist.antlr.internal.Lexer,
....editor.contentassist.antlr.IContentAssistParser etc can co-exist in derived/extended plugins.

The changes, mainly in the UIModule from 2.8-generated to backported are shown below. See the full commit for all the changes.

(Again) It really seems to me that the purely aesthetic change from "ui" to "ide" is a needless and irresponsible source of major trouble to your users. It has certainly cost me a couple of days work so far, and I'm just the forerunner of other users. As a minimum IMHO it mandates a major version change.

commit c07ca22274115e34ff9364d022345cc2cc0b9470
Author: Ed Willink <ed@willink.me.uk> 2015-02-22 22:30:19
Committer: Ed Willink <ed@willink.me.uk> 2015-02-22 22:36:13
Parent: 4fe0082dbbdcf5487d15b39a32a635f39bb9ca1c ([releng] Move obsolete qvtd.license to archive)
Branches: origin/master

[456506] Retain pre-Xtext 2.8 compatibility.
diff --git a/plugins/org.eclipse.qvtd.xtext.qvtrelation.ui/src-gen/org/eclipse/qvtd/xtext/qvtrelation/ui/AbstractQVTrelationUiModule.java b/plugins/org.eclipse.qvtd.xtext.qvtrelation.ui/src-gen/org/eclipse/qvtd/xtext/qvtrelation/ui/AbstractQVTrelationUiModule.java
index 8478e73..65fb193 100644
--- a/plugins/org.eclipse.qvtd.xtext.qvtrelation.ui/src-gen/org/eclipse/qvtd/xtext/qvtrelation/ui/AbstractQVTrelationUiModule.java
+++ b/plugins/org.eclipse.qvtd.xtext.qvtrelation.ui/src-gen/org/eclipse/qvtd/xtext/qvtrelation/ui/AbstractQVTrelationUiModule.java
@@ -29,12 +29,12 @@
 
 	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
 	public void configureHighlightingLexer(com.google.inject.Binder binder) {
-		binder.bind(org.eclipse.xtext.parser.antlr.Lexer.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.ide.LexerIdeBindings.HIGHLIGHTING)).to(org.eclipse.qvtd.xtext.qvtrelation.parser.antlr.internal.InternalQVTrelationLexer.class);
+		binder.bind(org.eclipse.xtext.parser.antlr.Lexer.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.ui.LexerUIBindings.HIGHLIGHTING)).to(org.eclipse.qvtd.xtext.qvtrelation.parser.antlr.internal.InternalQVTrelationLexer.class);
 	}
 
 	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
 	public void configureHighlightingTokenDefProvider(com.google.inject.Binder binder) {
-		binder.bind(org.eclipse.xtext.parser.antlr.ITokenDefProvider.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.ide.LexerIdeBindings.HIGHLIGHTING)).to(org.eclipse.xtext.parser.antlr.AntlrTokenDefProvider.class);
+		binder.bind(org.eclipse.xtext.parser.antlr.ITokenDefProvider.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.ui.LexerUIBindings.HIGHLIGHTING)).to(org.eclipse.xtext.parser.antlr.AntlrTokenDefProvider.class);
 	}
 
 	// contributed by org.eclipse.xtext.generator.exporting.QualifiedNamesFragment
@@ -74,11 +74,11 @@
 
 	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrUiGeneratorFragment
 	public Class<? extends org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext.Factory> bindContentAssistContext$Factory() {
-		return org.eclipse.xtext.ui.editor.contentassist.antlr.DelegatingContentAssistContextFactory.class;
+		return org.eclipse.xtext.ui.editor.contentassist.antlr.ParserBasedContentAssistContextFactory.class;
 	}
 
 	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrUiGeneratorFragment
-	public Class<? extends org.eclipse.xtext.ide.editor.contentassist.antlr.IContentAssistParser> bindIContentAssistParser() {
+	public Class<? extends org.eclipse.xtext.ui.editor.contentassist.antlr.IContentAssistParser> bindIContentAssistParser() {
 		return org.eclipse.qvtd.xtext.qvtrelation.ui.contentassist.antlr.QVTrelationParser.class;
 	}
 
@@ -89,7 +89,7 @@
 
 	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrUiGeneratorFragment
 	public void configureContentAssistLexer(com.google.inject.Binder binder) {
-		binder.bind(org.eclipse.xtext.ide.editor.contentassist.antlr.internal.Lexer.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.ide.LexerIdeBindings.CONTENT_ASSIST)).to(org.eclipse.qvtd.xtext.qvtrelation.ui.contentassist.antlr.internal.InternalQVTrelationLexer.class);
+		binder.bind(org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.ui.LexerUIBindings.CONTENT_ASSIST)).to(org.eclipse.qvtd.xtext.qvtrelation.ui.contentassist.antlr.internal.InternalQVTrelationLexer.class);
 	}
 
 	// contributed by org.eclipse.xtext.generator.builder.BuilderIntegrationFragment
Comment 4 Sebastian Zarnekow CLA 2015-02-23 05:16:10 EST
Hi Ed,

are there specific steps that I can do to observe the behavior, e.g. checkout git-id XXXX from source, run some workflow and launch an editor?
Comment 5 Ed Willink CLA 2015-02-23 05:54:19 EST
The problem should be really solid. But when I do the trivial install from repo everything's fine.

I'm reverting my machine which failed in both installed configuration and nested Eclipse. Maybe there's a third party involved....
Comment 6 Ed Willink CLA 2015-02-23 06:08:16 EST
(In reply to Ed Willink from comment #5)
> The problem should be really solid. But when I do the trivial install from
> repo everything's fine.

It is solid, so long as you use the 'right' ZIPs.

Unzip eclipse-SDK-4.5M5a-win32-x86_64.zip

Install mdt-ocl-Update-N201502220920.zip

(which pulls in EMF, UML2, MWE2, Xtend, Xtext etc from releases/mars)

Install mmt-qvtd-incubation-Update-N201502221230.zip

Restart

File->New->Example...->QVT->Relations to Core Example

Open editor for qvtrsrc/RelToCore.qvtr

Editor shows Guice injector failure

---

Install mmt-qvtd-incubation-Update-N201502221740.zip

Restart

Editor opens fine

---

https://hudson.eclipse.org/ocl/job/qvtd-mars-master/changes

shows the one commit difference to provide the 2.7 compatible backport.

If you need to investigate the source, setting GIT before/after the commit should show the same effect.
Comment 7 Sebastian Zarnekow CLA 2015-02-23 07:46:45 EST
I checked out commit 4fe0082dbbdcf5487d15b39a32a635f39bb9ca1c of the qvtd git repo, opened a runtime eclipse, created a qvt project and a qvt file. I didn't get any exception. 

Please provide easy to reproduce steps starting from a successfully cloned qvtd and ocl repo.

offtopic: I had to close all test and many example projects because of missing deps in the manifest after I used oomph to create a combined qvt/ocl eclipse. Is that a known issue?
Comment 8 Ed Willink CLA 2015-02-23 09:45:51 EST
[I'm afraid that I don't find OOMPH useful for maintaining my workspaces, so it is a work in progress from one of my colleagues].

I'm able to reproduce in a nested Eclipse.

As before:

Unzip eclipse-SDK-4.5M5a-win32-x86_64.zip

Install mdt-ocl-Update-N201502220920.zip

(which pulls in EMF, UML2, MWE2, Xtend, Xtext etc from releases/mars)

Install mmt-qvtd-incubation-Update-N201502221230.zip

Install EGIT.

Clone https://git.eclipse.org/r/ocl/org.eclipse.ocl (without importing any projects)

Import the following from plugins

org.eclipse.ocl.jdt.annotation7
org.eclipse.ocl.pivot
org.eclipse.ocl.xtext.base
org.eclipse.ocl.xtext.base.ui
org.eclipse.ocl.xtext.essentialocl
org.eclipse.ocl.xtext.essentialocl.ui
org.eclipse.ocl.xtext.markup
org.eclipse.ocl.xtext.markup.ui

Clone https://git.eclipse.org/r/mmt/org.eclipse.qvtd (without importing any projects)

Import the following from plugins

org.eclipse.qvtd.pivot.qvtbase
org.eclipse.qvtd.pivot.qvtrelation
org.eclipse.qvtd.pivot.qvttemplate
org.eclipse.qvtd.xtext.qvtbase.ui
org.eclipse.qvtd.xtext.qvtrelation
org.eclipse.qvtd.xtext.qvtrelation.ui

Set OCL to commit 901389bc5bb718bc78143a9da227bc01f98fd9e3
Set QVTd to commit 4fe0082dbbdcf5487d15b39a32a635f39bb9ca1c

Start nested Eclipse

File->New->Example...->QVT->Relations to Core Example

Open editor for qvtrsrc/RelToCore.qvtr

Editor shows Guice injector failure
Comment 9 Stefan Oehme CLA 2015-02-23 10:47:41 EST
Looking at QVTimperativeUiModule, I see that you manually bound "Bug382088Workaround ", which is a subclass of the deprecated ParserBasedContentAssistContextFactory.StatefulFactory. It is this class that causes your missing bindings and has nothing to do with inheritance etc. 

To fix it, make Bug382088Workaround extend the new base class "org.eclipse.xtext.ide.editor.contentassist.antlr.ContentAssistContextFactory". Just remove your backport component, it is not needed.

Meanwhile, we need to actually mark these classes as deprecated (they are only in a "deprecated" folder, but miss the annotation).
Comment 10 Sebastian Zarnekow CLA 2015-02-23 11:18:47 EST
(In reply to Stefan Oehme from comment #9)
> Looking at QVTimperativeUiModule, I see that you manually bound
> "Bug382088Workaround ", which is a subclass of the deprecated
> ParserBasedContentAssistContextFactory.StatefulFactory. It is this class
> that causes your missing bindings and has nothing to do with inheritance
> etc. 

This looks like a backwards compatibiliy issue on our side. Clients that customized the StatefulFactory do no longer work. Let's double check if we can adress that in a better way.
Comment 11 Stefan Oehme CLA 2015-02-23 11:26:11 EST
(In reply to Sebastian Zarnekow from comment #10)

> This looks like a backwards compatibiliy issue on our side. Clients that
> customized the StatefulFactory do no longer work. Let's double check if we
> can adress that in a better way.

*Only* if the regenerate, in which case I would say this is fine. They don't break if they just update to Xtext 2.8.
Comment 12 Ed Willink CLA 2015-02-23 12:24:05 EST
(In reply to Stefan Oehme from comment #9)
> To fix it, make Bug382088Workaround extend the new base class
> "org.eclipse.xtext.ide.editor.contentassist.antlr.
> ContentAssistContextFactory". Just remove your backport component, it is not
> needed.

But there is no org.eclipse.xtext.ide.editor.contentassist.antlr in Xtext 2.7.

However checking the dates on Bug 382088 it looks like the bug was in Juno and Xtext 2.3.0, but got fixed/fixable in Xtext 2.3.1. Looks like Bug 415232 is overdue for some attention.
Comment 13 Stefan Oehme CLA 2015-02-23 12:49:44 EST
(In reply to Ed Willink from comment #12)
> (In reply to Stefan Oehme from comment #9)
> > To fix it, make Bug382088Workaround extend the new base class
> > "org.eclipse.xtext.ide.editor.contentassist.antlr.
> > ContentAssistContextFactory". Just remove your backport component, it is not
> > needed.
> 
> But there is no org.eclipse.xtext.ide.editor.contentassist.antlr in Xtext
> 2.7.

The problematic class is in QVTi, which uses 2.8.
Comment 14 Sven Efftinge CLA 2015-02-24 03:26:54 EST
We've decided to roll-back the change for 2.8, such that after regeneration there aren't any changes. That means the old API should not be deprecated and the new one should be provisional. Xtend however should still use the new stuff, so we need two fragments or a configurable one.
Comment 15 Ed Willink CLA 2015-02-24 07:49:46 EST
(In reply to Sven Efftinge from comment #14)
> We've decided to roll-back the change for 2.8, such that after regeneration
> there aren't any changes. 

Thanks.
Comment 16 Eclipse Genie CLA 2015-02-24 10:15:23 EST
New Gerrit change created: https://git.eclipse.org/r/42532
Comment 18 Eclipse Genie CLA 2015-02-24 14:43:23 EST
New Gerrit change created: https://git.eclipse.org/r/42570

WARNING: this patchset contains 11329 new lines of code and may require a Contribution Questionnaire (CQ) if the author is not a committer on the project. Please see:https://wiki.eclipse.org/Project_Management_Infrastructure/Creating_A_Contribution_Questionnaire
Comment 19 Eclipse Genie CLA 2015-02-24 15:57:25 EST
Gerrit change https://git.eclipse.org/r/42570 was merged to [master].
Commit: http://git.eclipse.org/c/tmf/org.eclipse.xtext.git/commit/?id=0ed19329a2f61b65461e2fff17365c7a232426b0

WARNING: this patchset contains 11329 new lines of code and may require a Contribution Questionnaire (CQ) if the author is not a committer on the project. Please see:https://wiki.eclipse.org/Project_Management_Infrastructure/Creating_A_Contribution_Questionnaire
Comment 20 Holger Schill CLA 2015-02-25 02:14:30 EST
Merged to master.
Ed, could you please take the latest build when its through and try to verify if it works for you now.
Comment 21 Ed Willink CLA 2015-02-25 06:36:19 EST
(In reply to Holger Schill from comment #20)
> Merged to master.
> Ed, could you please take the latest build when its through and try to
> verify if it works for you now.

Downloading now. I hope I can remove my backporting. Unfortunately you cannot fix the incompatibility of featureIds in *.xtextbin (Bug 460677), so I have to continue with my Java serialized grammar models; surprisingly the *.class is less than three times the size of the *.xtextbin so as well as portability, there is a win in re-use and probably in load-time too.
Comment 22 Ed Willink CLA 2015-02-25 16:13:24 EST
(In reply to Ed Willink from comment #21)
> Downloading now. I hope I can remove my backporting.

Looks promising. Thanks. Regenerating gives no package/class reference changes. There are minor changes; some trivial formatting, the semantic sequencer has evolved and the parser changes slightly. Probably for the better. I'll open separate bugs if anything shows up.

(Even my multi-editor MWE2 generate script works again.)
Comment 23 Holger Schill CLA 2015-02-26 03:05:09 EST
Ed said thumbs up.
Comment 24 Ed Willink CLA 2015-03-03 10:03:39 EST
I don't understand why this is no longer a critical bug.

The fact that you decided to revert changes (thank you again) surely conforms that it was critical and so remains so.

Surely to move away from critical requires a better impartial assessment of the severity. Fixing a bug does not change its severity.
Comment 25 Sebastian Zarnekow CLA 2015-03-03 11:03:30 EST
(In reply to Ed Willink from comment #24)
> I don't understand why this is no longer a critical bug.
> 
> The fact that you decided to revert changes (thank you again) surely
> conforms that it was critical and so remains so.
> 
> Surely to move away from critical requires a better impartial assessment of
> the severity. Fixing a bug does not change its severity.

In general we don't use the severity to indicate any kind of critical-ness. In fact it is used within the committer team to announce that a particular bug is important in the end game of a planed release. Even documentation bugs are in that period often marked as critical. Afterwards we reset it to avoid confusion - which coincidentally in turn caused confusion. Sorry about that.
Comment 26 Ed Willink CLA 2015-03-03 11:14:22 EST
Except that when you come to do the 2.8.0 release review you want to see all the bugs fixed in the 2.8.0 release cycle and all the bugs still outstanding. You will find that you fixed only 'normal' bugs. One would expect/hope that a release fixed all blocker/critical and perhaps major bugs. Equally one would hope to see few high severity bugs. Changing everything to normal once done undermines the statistics and ignores the use of RESOLVED as an AND gate on outstanding important work.