| Summary: | Injecting the Index does not work in Standalone Mode | ||
|---|---|---|---|
| Product: | [Modeling] TMF | Reporter: | Christian Dietrich <christian.dietrich.opensource> |
| Component: | Xtext | Assignee: | Project Inbox <tmf.xtext-inbox> |
| Status: | CLOSED WONTFIX | QA Contact: | |
| Severity: | normal | ||
| Priority: | P3 | CC: | Holger.Schill |
| Version: | 2.0.0 | ||
| Target Milestone: | --- | ||
| Hardware: | All | ||
| OS: | All | ||
| Whiteboard: | |||
If you use: @Inject private ResourceDescriptionsProvider provider; IResourceDescriptions index = provider.getResourceDescriptions(Resource resource) everything is fine. The direct use of: @Inject IResourceDescriptions index; is only valid if the instance of IResourceDescriptions does not implement org.eclipse.xtext.resource.IResourceDescriptions.IContextAware. The valid way is to always use the first method. Is this still a problem. No it is ok to close the bug No it is ok to close the bug |
Lets asume i have following validator public class MyDsl1JavaValidator extends AbstractMyDsl1JavaValidator { @Inject IResourceDescriptions index; @Check public void checkElement(Element e) { Set<String> elemensWithSimilarName = new HashSet<String>(); for (IEObjectDescription eod : index.getExportedObjectsByType(MyDsl1Package.Literals.ELEMENT)) { if (eod.getName().toString().equalsIgnoreCase(e.getName().toString())) { elemensWithSimilarName.add(eod.getName().toString()); } } if (elemensWithSimilarName.size() > 1) { error("Names are too similar", MyDsl1Package.Literals.ELEMENT__NAME); } } } and i call it in standalone mode (e.g. by calling the generated Main class for the Generator) then (if i catch for NPEs when querying the index) i get. java.lang.NullPointerException at org.eclipse.xtext.resource.impl.ResourceSetBasedResourceDescriptions.getAllResourceDescriptions(ResourceSetBasedResourceDescriptions.java:45) at org.eclipse.xtext.resource.impl.ResourceSetBasedResourceDescriptions.getSelectables(ResourceSetBasedResourceDescriptions.java:54) at org.eclipse.xtext.resource.impl.AbstractCompoundSelectable.getExportedObjectsByType(AbstractCompoundSelectable.java:43) at org.xtext.example.mydsl1.validation.MyDsl1JavaValidator.checkElement(MyDsl1JavaValidator.java:24) 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.xtext.validation.AbstractDeclarativeValidator$MethodWrapper.invoke(AbstractDeclarativeValidator.java:106) at org.eclipse.xtext.validation.AbstractDeclarativeValidator.internalValidate(AbstractDeclarativeValidator.java:288) at org.eclipse.xtext.validation.AbstractInjectableValidator.validate(AbstractInjectableValidator.java:62) at org.eclipse.xtext.validation.CompositeEValidator.validate(CompositeEValidator.java:126) at org.eclipse.emf.ecore.util.Diagnostician.validate(Diagnostician.java:165) at org.eclipse.emf.ecore.util.Diagnostician.validate(Diagnostician.java:143) at org.eclipse.xtext.validation.CancelableDiagnostician.validate(CancelableDiagnostician.java:36) at org.eclipse.emf.ecore.util.Diagnostician.doValidateContents(Diagnostician.java:180) at org.eclipse.xtext.validation.CancelableDiagnostician.doValidateContents(CancelableDiagnostician.java:48) at org.eclipse.emf.ecore.util.Diagnostician.validate(Diagnostician.java:168) at org.eclipse.emf.ecore.util.Diagnostician.validate(Diagnostician.java:143) at org.eclipse.xtext.validation.CancelableDiagnostician.validate(CancelableDiagnostician.java:36) at org.eclipse.emf.ecore.util.Diagnostician.validate(Diagnostician.java:126) at org.eclipse.xtext.validation.ResourceValidatorImpl.validate(ResourceValidatorImpl.java:108) at org.xtext.example.mydsl1.generator.Main.runGenerator(Main.java:53) at org.xtext.example.mydsl1.generator.Main.main(Main.java:32) java.lang.NullPointerException at org.eclipse.xtext.resource.impl.ResourceSetBasedResourceDescriptions.getAllResourceDescriptions(ResourceSetBasedResourceDescriptions.java:45) at org.eclipse.xtext.resource.impl.ResourceSetBasedResourceDescriptions.getSelectables(ResourceSetBasedResourceDescriptions.java:54) at org.eclipse.xtext.resource.impl.AbstractCompoundSelectable.getExportedObjectsByType(AbstractCompoundSelectable.java:43) at org.xtext.example.mydsl1.validation.MyDsl1JavaValidator.checkElement(MyDsl1JavaValidator.java:24) 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.xtext.validation.AbstractDeclarativeValidator$MethodWrapper.invoke(AbstractDeclarativeValidator.java:106) at org.eclipse.xtext.validation.AbstractDeclarativeValidator.internalValidate(AbstractDeclarativeValidator.java:288) at org.eclipse.xtext.validation.AbstractInjectableValidator.validate(AbstractInjectableValidator.java:62) at org.eclipse.xtext.validation.CompositeEValidator.validate(CompositeEValidator.java:126) at org.eclipse.emf.ecore.util.Diagnostician.validate(Diagnostician.java:165) at org.eclipse.emf.ecore.util.Diagnostician.validate(Diagnostician.java:143) at org.eclipse.xtext.validation.CancelableDiagnostician.validate(CancelableDiagnostician.java:36) at org.eclipse.emf.ecore.util.Diagnostician.doValidateContents(Diagnostician.java:184) at org.eclipse.xtext.validation.CancelableDiagnostician.doValidateContents(CancelableDiagnostician.java:48) at org.eclipse.emf.ecore.util.Diagnostician.validate(Diagnostician.java:168) at org.eclipse.emf.ecore.util.Diagnostician.validate(Diagnostician.java:143) at org.eclipse.xtext.validation.CancelableDiagnostician.validate(CancelableDiagnostician.java:36) at org.eclipse.emf.ecore.util.Diagnostician.validate(Diagnostician.java:126) at org.eclipse.xtext.validation.ResourceValidatorImpl.validate(ResourceValidatorImpl.java:108) at org.xtext.example.mydsl1.generator.Main.runGenerator(Main.java:53) at org.xtext.example.mydsl1.generator.Main.main(Main.java:32) If i "manually" provide the resourceset to the index it works fine. Set<String> elemensWithSimilarName = new HashSet<String>(); ((IResourceDescriptions.IContextAware)index).setContext(e); for (IEObjectDescription eod : index.getExportedObjectsByType(MyDsl1Package.Literals.ELEMENT)) { ~Christian