Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » TMF (Xtext) » Help with dot operator implementation
Help with dot operator implementation [message #671298] Tue, 17 May 2011 12:39
Rafael Angarita is currently offline Rafael AngaritaFriend
Messages: 94
Registered: November 2010
Member
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

Object1.Object2.member1


, 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!









Previous Topic:XText + DataInterchangeFormat + data structure
Next Topic:[Xtext] Problem : Cannot find compatible feature foo in sealed EClass
Goto Forum:
  


Current Time: Thu Apr 25 00:08:38 GMT 2024

Powered by FUDForum. Page generated in 0.02963 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top