Skip to main content



      Home
Home » Modeling » TMF (Xtext) » entity cross references in domainmodel
entity cross references in domainmodel [message #756794] Tue, 15 November 2011 02:08 Go to next message
Eclipse UserFriend
hi,

I modify the org.eclipse.xtext.examples.domainmodel grammar from:
 'entity' name=ValidID ('extends' superType=JvmParameterizedTypeReference)? '{' 


to:
'entity' name=ValidID ('extends' superType=[Entity])? '{'...


I also modify the related code of DomainmodelJvmModelInferrer.xtend form:
 if (e.superType != null)
	superTypes += e.superType.cloneWithProxies 

to:
	
if (e.superType != null)
   //superTypes += e.superType.jvmElements.filter(typeof(JvmType)).head.createTypeRef()
   superTypes += typeReferences.findDeclaredType(e.superType.fullyQualifiedName.toString,e).createTypeRef()


First reason of this modification is I want the supertype of entity must be another entity. Another reason is each entity will generate a java interface and an implementation.


The problem is, the entity must defined in the right sequence, otherwise will cause NullPointerException during source generation dur to typeReferences.findDeclaredType returns null.

following model is ok in editor, but cann't generate java source.
package a{
	entity A extends B{
		
	}
	entity B{
		
	}
}


I think the real problem is, if any generated java source will be referenced via TypeReferences.findDeclaredType or IJvmModelAssociations.getJvmElements(), success or not depends on the definition sequence.
For a large model, especially attribute/operation are introduced,it is difficult to arrange sequence of type definitions , so are there some way to fix this problem systematically? I noticed that there is a parameter named prelinkingPhase in IJvmModelInferrer.infer(...), is it for this problem?

Thanks.

Tiange Zhang
Re: entity cross references in domainmodel [message #757271 is a reply to message #756794] Thu, 17 November 2011 07:33 Go to previous message
Eclipse UserFriend
I found a way to partially fix the problem. Add an infer method for root model element:

def dispatch infer(DomainModel domainModel, IAcceptor<JvmDeclaredType> acceptor, boolean prelinkingPhase){
	domainModel.eContents.forEach[ e|
		infer(e,acceptor,prelinkingPhase)
	]

	inferLinkedElements(domainModel)

	return
	}


infer(..) generate jvm types only, all other model elements which cross link to others are generated in inferLinkedElements(...)

It seems working well if all model elements are defined in one file. I am still trying to find a way to fix the errors when there are several model files.
Previous Topic:Add new file
Next Topic:[xtend2] import static inner Java classes
Goto Forum:
  


Current Time: Wed Jul 23 16:36:10 EDT 2025

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

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

Back to the top