Hello everybody,
I'm having problems implementing the infix dot operator in order to access inner members of objects. For example, I would like to do something like
, where Object1 has a Object2 and Object2 has a member1.
I did it only for one level:
MemberReference:
object=ObjectReference'.'value=ObjectReference
;
ObjectReference returns MemberReference:
object=[ecore::EObject]
;
And implemented the method in the scope provider:
public IScope scope_MemberReference_value(MemberReference i, EReference r)
, so I could show the objects that I wanted.
Right now, I'm trying
MemberReference:
ObjectReference (({Dot.left=current}'.')right=ObjectReference)+
;
ObjectReference returns MemberReference:
object=[ecore::EObject]
;
and the scoping method
public IScope scope_MemberReference_object(MemberReference i, EReference r)
, but I get this exception after I write the first dot:
java.lang.AssertionError: Cyclic resolution of lazy links : MemberReference.object->MemberReference.object
at org.eclipse.xtext.linking.lazy.LazyLinkingResource.getEObject(LazyLinkingResource.java:84)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getEObject(ResourceSetImpl.java:219)
at org.eclipse.emf.ecore.util.EcoreUtil.resolve(EcoreUtil.java:202)
at org.eclipse.emf.ecore.util.EcoreUtil.resolve(EcoreUtil.java:262)
at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eResolveProxy(BasicEObjectImpl.java:1483)
at org.xtext.altagracia.procedure.impl.MemberReferenceImpl.getObject(MemberReferenceImpl.java:77)
at org.xtext.altagracia.scoping.ProcedureScopeProvider.scope_MemberReference_object(ProcedureScopeProvider.java:39)
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:616)
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:272)
at org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider.polymorphicFindScopeForReferenceName(AbstractDeclarativeScopeProvider.java:136)
at org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider.getScope(AbstractDeclarativeScopeProvider.java:98)
at org.eclipse.xtext.linking.impl.DefaultLinkingService.getScope(DefaultLinkingService.java:49)
at org.eclipse.xtext.linking.impl.DefaultLinkingService.getLinkedObjects(DefaultLinkingService.java:103)
at org.eclipse.xtext.linking.lazy.LazyLinkingResource.getEObject(LazyLinkingResource.java:94)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getEObject(ResourceSetImpl.java:219)
at org.eclipse.emf.ecore.util.EcoreUtil.resolve(EcoreUtil.java:202)
at org.eclipse.emf.ecore.util.EcoreUtil.resolve(EcoreUtil.java:262)
at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eResolveProxy(BasicEObjectImpl.java:1483)
at org.xtext.altagracia.procedure.impl.MemberReferenceImpl.getObject(MemberReferenceImpl.java:77)
at org.xtext.altagracia.procedure.impl.MemberReferenceImpl.eGet(MemberReferenceImpl.java:121)
at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1021)
at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1013)
at org.eclipse.emf.ecore.util.EContentsEList$FeatureIteratorImpl.hasNext(EContentsEList.java:409)
at org.eclipse.xtext.EcoreUtil2.resolveCrossReferences(EcoreUtil2.java:489)
at org.eclipse.xtext.EcoreUtil2.resolveAll(EcoreUtil2.java:473)
at org.eclipse.xtext.validation.ResourceValidatorImpl.resolveProxies(ResourceValidatorImpl.java:122)
at org.eclipse.xtext.validation.ResourceValidatorImpl.validate(ResourceValidatorImpl.java:60)
at org.eclipse.xtext.ui.editor.validation.ValidationJob$1.exec(ValidationJob.java:79)
at org.eclipse.xtext.ui.editor.validation.ValidationJob$1.exec(ValidationJob.java:1)
at org.eclipse.xtext.util.concurrent.IStateAccess$AbstractImpl.readOnly(IStateAccess.java:40)
at org.eclipse.xtext.ui.editor.model.XtextDocument.readOnly(XtextDocument.java:70)
at org.eclipse.xtext.ui.editor.validation.ValidationJob.createIssues(ValidationJob.java:75)
at org.eclipse.xtext.ui.editor.validation.ValidationJob.run(ValidationJob.java:64)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Anyway, I was just looking for a way to do this. Even though I hadn't got that exception, I think I would not have know how to get the correct elements for the scope.
I would appreciate any help.
Thank you very much!