Skip to main content



      Home
Home » Modeling » TMF (Xtext) » Serialization of xtext grammar models
Serialization of xtext grammar models [message #1407282] Tue, 12 August 2014 04:45 Go to next message
Eclipse UserFriend
Hi,

I want to perform some serializations of .xtext --> .xmi and wanted to know if it is
possible the way I want to do it:

1. Get the semantic model to a xtext grammar file (.xtext, not a xtext-DSL)
2. Save it in a XMI-Resource
3. Load the .xmi resource in an XextResourceSet
4. Save the content of the .xmi resource again back to an .xtext grammer file

1,2,3 are working without any problems, but when I want to do the serialization back to the .xtext file I'm getting the following exception:

org.eclipse.xtext.parsetree.reconstr.XtextSerializationException: Could not serialize cross reference from Grammar'org.xtext.example.mydsl.MyDsl'.metamodelDeclarations[0]->GeneratedMetamodel'myDsl'.ePackage to EPackage
	at org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor$AssignmentToken.serializeInternal(AbstractParseTreeConstructor.java:257)
	at org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor$AbstractToken.serialize(AbstractParseTreeConstructor.java:158)
	at org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor.write(AbstractParseTreeConstructor.java:771)
	at org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor.write(AbstractParseTreeConstructor.java:766)
	at org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor.write(AbstractParseTreeConstructor.java:766)
	at org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor.serializeSubtree(AbstractParseTreeConstructor.java:732)
	at org.eclipse.xtext.parsetree.reconstr.Serializer.serialize(Serializer.java:64)
	at org.eclipse.xtext.parsetree.reconstr.Serializer.serialize(Serializer.java:70)
	at org.eclipse.xtext.resource.XtextResource.doSave(XtextResource.java:342)
	at org.eclipse.emf.ecore.resource.impl.ResourceImpl.save(ResourceImpl.java:1430)
	at org.eclipse.emf.ecore.resource.impl.ResourceImpl.save(ResourceImpl.java:999)


Is it evep possible to handle .xtext files like other .dsl files?

~Alex



Re: Serialization of xtext grammar models [message #1407292 is a reply to message #1407282] Tue, 12 August 2014 05:18 Go to previous messageGo to next message
Eclipse UserFriend
hi,

did you load the epackages to the resourceset as well?
Re: Serialization of xtext grammar models [message #1407301 is a reply to message #1407292] Tue, 12 August 2014 05:37 Go to previous messageGo to next message
Eclipse UserFriend
Hi,

no I didn't load any epackages by hand. I just used EcoreUtil2.resolveAll(xtextResource); before serializing .xtext to .xmi
I wanted to implement this mechanism for every xtext-DSL and the xtext-grammar-dsl.

My code for saving the .xtext file to xmi looks like this:

	public void serializeXtext(URI modelURI) {
		// load the xtext model to an xtextresourceset
		XtextResourceSet resourceSet = new XtextResourceSet();
		Resource xtextResource = resourceSet.getResource(modelURI, true);

		EcoreUtil2.resolveAll(xtextResource, null);
		EObject newMod = xtextResource.getContents().get(0);
		// path to xmi model
		String xmiPath = EditorUtils.getActiveXtextEditor().getResource().getProject().getFolder("product").getFullPath() + "/"
				+ "xtextResourceSerialization.xmi";
		// store in a xmi-resoure
		Resource xmiResource = resourceSet.createResource(URI.createURI(xmiPath));
		xmiResource.getContents().add(newMod);

		try {
			xmiResource.save(null);
		} catch (IOException e) {
			e.printStackTrace();

		}

	}


And the code for loadnig the .xmi to .xtext looks like this:

   private void XMItoXtext(URI uri){
                XtextResourceSet xrs = new XtextResourceSet();
		xrs.addLoadOption(XtextResource.OPTION_RESOLVE_ALL, Boolean.TRUE);

		// load the xmi resource
		Resource xmiRes = xrs.getResource(uri, true);
		// load the model from the xmi-resource
		EObject model= xmiRes.getContents().get(0);

		/*
		 * save the xmi-model to the xtext-resource
		 */
		// xtext file path
		String xtextFile = "test.xtext";
				

		System.out.println(xtextFile);
		// create the resource
		XtextResource a = (XtextResource) xrs.createResource(URI.createURI(xtextFile, true));

		// add the model to the xtext resource
		a.getContents().add(model);

		// save the new resource with the model
		try {
			a.save(null);
		} catch (IOException e) {
			e.printStackTrace();

		}
}


Or do I have to handle the xtext-grammar file in a different, special way?
Re: Serialization of xtext grammar models [message #1407321 is a reply to message #1407301] Tue, 12 August 2014 06:21 Go to previous messageGo to next message
Eclipse UserFriend
Hi,

i think all relevant resources (incl the epackages) have to be in the xtext resourceset
Re: Serialization of xtext grammar models [message #1407353 is a reply to message #1407321] Tue, 12 August 2014 08:06 Go to previous messageGo to next message
Eclipse UserFriend
Hi,

you were right. I had to register all the packages of the referenced metamodels. So here my solution:

// loading the packages
		XtextPackage.eINSTANCE.eClass();
		EcorePackage.eINSTANCE.eClass();

		XtextResourceSet xrs = (XtextResourceSet) getGlobalXtextResource().getResourceSet();
		xrs.addLoadOption(XtextResource.OPTION_RESOLVE_ALL, Boolean.TRUE);

		// load the ecore resource
		Resource ecoreResource = xrs.getResource(URI.createURI(EcoreFactory.eINSTANCE.getEPackage().getNsURI()), true);
		ecoreResource.load(null);
		EcoreUtil2.resolveAll(ecoreResource);

		// load the xtext resource
		Resource xtextResource = xrs.getResource(URI.createURI(EcoreFactory.eINSTANCE.getEPackage().getNsURI()), true);
		xtextResource.load(null);
		EcoreUtil2.resolveAll(xtextResource);



Do you maybe know, how I can acces the metamodel (.ecore) of the Terminals.xtext file?

Thanks a lot!

Re: Serialization of xtext grammar models [message #1407360 is a reply to message #1407353] Tue, 12 August 2014 08:33 Go to previous messageGo to next message
Eclipse UserFriend
Terminals.xtext does not have a metamodel afaik
Re: Serialization of xtext grammar models [message #1407365 is a reply to message #1407360] Tue, 12 August 2014 08:53 Go to previous message
Eclipse UserFriend
Ok, thanks.
Previous Topic:Manually add errors to a resource
Next Topic:Cross-file references as in 15-min tutorial not working
Goto Forum:
  


Current Time: Sun Jul 06 16:19:13 EDT 2025

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

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

Back to the top