Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 347467 - Injecting the Index does not work in Standalone Mode
Summary: Injecting the Index does not work in Standalone Mode
Status: CLOSED WONTFIX
Alias: None
Product: TMF
Classification: Modeling
Component: Xtext (show other bugs)
Version: 2.0.0   Edit
Hardware: All All
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-05-27 11:08 EDT by Christian Dietrich CLA
Modified: 2011-09-29 04:40 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Christian Dietrich CLA 2011-05-27 11:08:53 EDT
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
Comment 1 Holger Schill CLA 2011-07-26 08:19:44 EDT
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.
Comment 2 Holger Schill CLA 2011-09-29 04:31:16 EDT
Is this still a problem.
Comment 3 Christian Dietrich CLA 2011-09-29 04:38:38 EDT
No it is ok to close the bug
Comment 4 Christian Dietrich CLA 2011-09-29 04:38:53 EDT
No it is ok to close the bug