Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » TMF (Xtext) » Serialize extended Model with its parent language serializer.
Serialize extended Model with its parent language serializer. [message #1699774] Fri, 26 June 2015 13:41 Go to next message
Aleksandar Toshovski is currently offline Aleksandar ToshovskiFriend
Messages: 78
Registered: December 2011
Member
I have defined two languages(project and project2). Project2 extends the grammar of Project. I tried to load a file with the second language and serialize it with the StandAloneSetup of the first language, but I receive the error below.

My question is, is it even possible to achieve that? If yes, how can I solve the problem?

I use the following Snipet for the Serialization:
	public void generate(Model data, IFileSystemAccess fsa) {
		StandaloneSetup setup = new org.eclipse.emf.mwe.utils.StandaloneSetup();
		setup.setPlatformUri("/temp/share/tff");
		setup.setScanClassPath(true);

		this.injector = new Fop2StandaloneSetup()
				.createInjectorAndDoEMFRegistration();

		XtextResourceSet resourceSet = injector
				.getInstance(XtextResourceSet.class);
		resourceSet.addLoadOption(XtextResource.OPTION_RESOLVE_ALL,
				Boolean.FALSE);
		resourceSet.addLoadOption(XtextResource.OPTION_ENCODING, "UTF-8");
		attachModelsToResourceSet(resourceSet, data);

		Resource res = resourceSet.createResource(URI.createURI("/temp/share/test.fo2"));
		res.getContents().add(data);
		resourceSet.getResources().add(res);
		String s = injector.getInstance(Serializer.class).serialize(data);
		fsa.generateFile(data.getMetainformation().getName() + ".str", s);

	}




29414 [Worker-5] ERROR org.eclipse.xtext.builder.BuilderParticipant  - Error during compilation of 'platform:/resource/tff/sk/intran.format'.
java.lang.RuntimeException: The context 'Model' is not valid for type 'Model'
Recommended contexts for type 'Model': 
The context 'Model' is valid for types: Model

Semantic Object: Model
	at org.eclipse.xtext.serializer.diagnostic.ISerializationDiagnostic$ExceptionThrowingAcceptor.accept(ISerializationDiagnostic.java:77)
	at project.serializer.Project2SemanticSequencer.createSequence(Project2SemanticSequencer.java:318)
	at org.eclipse.xtext.serializer.impl.Serializer.serialize(Serializer.java:100)
	at org.eclipse.xtext.serializer.impl.Serializer.serializeToRegions(Serializer.java:132)
	at org.eclipse.xtext.serializer.impl.Serializer.serialize(Serializer.java:138)
	at org.eclipse.xtext.serializer.impl.Serializer.serialize(Serializer.java:159)
	at org.eclipse.xtext.serializer.impl.Serializer.serialize(Serializer.java:57)
	at project2.generator.Project2FileGenerator.generate(Project2FileGenerator.java:47)
	at project2.generator.ETFGenerator.lambda$0(ETFGenerator.java:28)
	at project2.generator.ETFGenerator$$Lambda$1/111885596.apply(Unknown Source)
	at org.eclipse.xtext.xbase.lib.IteratorExtensions.forEach(IteratorExtensions.java:363)
	at project2.generator.ETFGenerator.doGenerate(ETFGenerator.java:30)
	at org.eclipse.xtext.builder.BuilderParticipant.handleChangedContents(BuilderParticipant.java:527)
	at org.eclipse.xtext.builder.BuilderParticipant.handleChangedContents(BuilderParticipant.java:516)
	at org.eclipse.xtext.builder.BuilderParticipant.doGenerate(BuilderParticipant.java:501)
	at org.eclipse.xtext.builder.BuilderParticipant.doBuild(BuilderParticipant.java:264)
	at org.eclipse.xtext.builder.BuilderParticipant.build(BuilderParticipant.java:222)
	at org.eclipse.xtext.builder.impl.RegistryBuilderParticipant$DeferredBuilderParticipant.build(RegistryBuilderParticipant.java:161)
	at org.eclipse.xtext.builder.impl.RegistryBuilderParticipant.build(RegistryBuilderParticipant.java:69)
	at org.eclipse.xtext.builder.impl.XtextBuilder.doBuild(XtextBuilder.java:244)
	at org.eclipse.xtext.builder.impl.XtextBuilder.incrementalBuild(XtextBuilder.java:222)
	at org.eclipse.xtext.builder.impl.XtextBuilder.build(XtextBuilder.java:117)
	at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246)
	at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:299)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:302)
	at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:358)
	at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:381)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Re: Serialize extended Model with its parent language serializer. [message #1699776 is a reply to message #1699774] Fri, 26 June 2015 13:47 Go to previous messageGo to next message
Christian Dietrich is currently offline Christian DietrichFriend
Messages: 14665
Registered: July 2009
Senior Member
Can you share two minimal grammars

Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
Re: Serialize extended Model with its parent language serializer. [message #1699793 is a reply to message #1699776] Fri, 26 June 2015 15:57 Go to previous messageGo to next message
Aleksandar Toshovski is currently offline Aleksandar ToshovskiFriend
Messages: 78
Registered: December 2011
Member
I tried to reproduce the problem in a simple file, but I got a different error. I think this error is also part of the problem. I'll try to investigate further and try to reproduce the first error in my post.


In my grammar I defined optional references, but when I try to serialize the object, they aren't considered at all. The error states, that the objects are not transient, but they are optional in the grammar, so they should be ignored. Is it possible to set the serializer to ignore such errors and serialize the rest of the objects?

0    [Worker-4] ERROR org.eclipse.xtext.builder.BuilderParticipant  - Error during compilation of 'platform:/resource/test/bla.mydsl2'.
org.eclipse.xtext.validation.IConcreteSyntaxValidator$InvalidConcreteSyntaxException: These errors need to be fixed before the model can be serialized.
Model: An object of type Model is needed instead of Model for serialization with rule Model.
Model.properties[0]->Property'tests': An object of type Property is needed instead of Property for serialization with rule Property.

	at org.eclipse.xtext.serializer.impl.Serializer.serialize(Serializer.java:111)
	at org.eclipse.xtext.serializer.impl.Serializer.serialize(Serializer.java:163)
	at org.eclipse.xtext.serializer.impl.Serializer.serialize(Serializer.java:57)
	at org.xtext.example.mydsl2.generator.Fop2FileGenerator.generate(Fop2FileGenerator.java:39)
	at org.xtext.example.mydsl2.generator.MyDslGenerator.lambda$0(MyDslGenerator.java:28)
	at org.xtext.example.mydsl2.generator.MyDslGenerator$$Lambda$1/341752801.apply(Unknown Source)
	at org.eclipse.xtext.xbase.lib.IteratorExtensions.forEach(IteratorExtensions.java:363)
	at org.xtext.example.mydsl2.generator.MyDslGenerator.doGenerate(MyDslGenerator.java:30)
	at org.eclipse.xtext.generator.GeneratorDelegate.doGenerate(GeneratorDelegate.java:35)
	at org.eclipse.xtext.generator.GeneratorDelegate.generate(GeneratorDelegate.java:56)
	at org.eclipse.xtext.builder.BuilderParticipant.handleChangedContents(BuilderParticipant.java:536)
	at org.eclipse.xtext.builder.BuilderParticipant.handleChangedContents(BuilderParticipant.java:524)
	at org.eclipse.xtext.builder.BuilderParticipant.doGenerate(BuilderParticipant.java:509)
	at org.eclipse.xtext.builder.BuilderParticipant.doBuild(BuilderParticipant.java:274)
	at org.eclipse.xtext.builder.BuilderParticipant.build(BuilderParticipant.java:232)
	at org.eclipse.xtext.builder.impl.RegistryBuilderParticipant$DeferredBuilderParticipant.build(RegistryBuilderParticipant.java:161)
	at org.eclipse.xtext.builder.impl.RegistryBuilderParticipant.build(RegistryBuilderParticipant.java:69)
	at org.eclipse.xtext.builder.impl.XtextBuilder.doBuild(XtextBuilder.java:252)
	at org.eclipse.xtext.builder.impl.XtextBuilder.incrementalBuild(XtextBuilder.java:228)
	at org.eclipse.xtext.builder.impl.XtextBuilder.build(XtextBuilder.java:123)
	at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246)
	at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:299)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:302)
	at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:358)
	at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:381)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
  • Attachment: example.zip
    (Size: 431.83KB, Downloaded 114 times)
Re: Serialize extended Model with its parent language serializer. [message #1699861 is a reply to message #1699774] Sat, 27 June 2015 17:55 Go to previous messageGo to next message
Sebastian Zarnekow is currently offline Sebastian ZarnekowFriend
Messages: 3118
Registered: July 2009
Senior Member
Most (if not all) of the problems that you see are caused by the invalid
usage of the StandaloneSetup in an Eclipse environment.

I don't know what you're really trying to do semantically, but using the
StandaloneSetup from within Eclipse is a no-go. That's why it's called
standalone. You language infrastructure is already initialized in
Eclipse so no need to do any additional setup anyway.

Best,
Sebastian
--
Looking for professional support for Xtext, Xtend or Eclipse Modeling?
Find help at http://xtext.itemis.com or xtext(@)itemis.com
Blog: zarnekow.blogspot.com
Twitter: @szarnekow
Google+: https://www.google.com/+SebastianZarnekow
Re: Serialize extended Model with its parent language serializer. [message #1699957 is a reply to message #1699861] Mon, 29 June 2015 13:09 Go to previous messageGo to next message
Aleksandar Toshovski is currently offline Aleksandar ToshovskiFriend
Messages: 78
Registered: December 2011
Member
I changed the example using the initialized Injector instance, but I'm still experiencing the same errors like before. In this case the problem isn't the usage of the standalone setup.
Re: Serialize extended Model with its parent language serializer. [message #1699960 is a reply to message #1699957] Mon, 29 June 2015 13:15 Go to previous messageGo to next message
Christian Dietrich is currently offline Christian DietrichFriend
Messages: 14665
Registered: July 2009
Senior Member
Hi,

the model of the first and second dsl have nothing todo with each other. you do nowhere refer to the parent metamodel


Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
Re: Serialize extended Model with its parent language serializer. [message #1699965 is a reply to message #1699960] Mon, 29 June 2015 13:40 Go to previous messageGo to next message
Aleksandar Toshovski is currently offline Aleksandar ToshovskiFriend
Messages: 78
Registered: December 2011
Member
They do. See MyDsl.xtext: grammar org.xtext.example.mydsl2.MyDsl with org.xtext.example.firstdsl.FirstDSL
Then in the generator package of mydsl2 Fop2FileGenerator I use the Serializer of firstdsl.
Re: Serialize extended Model with its parent language serializer. [message #1699968 is a reply to message #1699965] Mon, 29 June 2015 13:43 Go to previous messageGo to next message
Christian Dietrich is currently offline Christian DietrichFriend
Messages: 14665
Registered: July 2009
Senior Member
no!!!

if you write Model: in your subdsl this model has ZERO todo with the model in the supergrammar

import "inserthere" as supermetamodel

Model returns supermetamodel::Model:
....


Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
Re: Serialize extended Model with its parent language serializer. [message #1699973 is a reply to message #1699968] Mon, 29 June 2015 13:50 Go to previous messageGo to next message
Aleksandar Toshovski is currently offline Aleksandar ToshovskiFriend
Messages: 78
Registered: December 2011
Member
but this model extends the first model.. See the generated from xtext ecore file.
  • Attachment: bla.png
    (Size: 42.07KB, Downloaded 88 times)
Re: Serialize extended Model with its parent language serializer. [message #1699976 is a reply to message #1699973] Mon, 29 June 2015 13:56 Go to previous messageGo to next message
Christian Dietrich is currently offline Christian DietrichFriend
Messages: 14665
Registered: July 2009
Senior Member
hmmm strange

Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
Re: Serialize extended Model with its parent language serializer. [message #1699977 is a reply to message #1699976] Mon, 29 June 2015 13:56 Go to previous messageGo to next message
Christian Dietrich is currently offline Christian DietrichFriend
Messages: 14665
Registered: July 2009
Senior Member
can you share a java main as well

Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
Re: Serialize extended Model with its parent language serializer. [message #1699979 is a reply to message #1699977] Mon, 29 June 2015 14:04 Go to previous messageGo to next message
Aleksandar Toshovski is currently offline Aleksandar ToshovskiFriend
Messages: 78
Registered: December 2011
Member
There is no java main program. I start the the code as an eclipse application. Then I create a mydsl2 file and save it (There is a dummy file in org.xtext.example.mydsl2/example.mydsl2 ). The generator is called automatically from xtext.

I updated the example. This one doesn't use the StandaloneSetup


  • Attachment: example.zip
    (Size: 431.69KB, Downloaded 92 times)
Re: Serialize extended Model with its parent language serializer. [message #1699982 is a reply to message #1699979] Mon, 29 June 2015 14:14 Go to previous messageGo to next message
Christian Dietrich is currently offline Christian DietrichFriend
Messages: 14665
Registered: July 2009
Senior Member
hi,

i created a java main myself. it seems your usecase is not supported currently.
please file a ticket


Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
Re: Serialize extended Model with its parent language serializer. [message #1699986 is a reply to message #1699982] Mon, 29 June 2015 14:20 Go to previous messageGo to next message
Aleksandar Toshovski is currently offline Aleksandar ToshovskiFriend
Messages: 78
Registered: December 2011
Member
I'll file a ticket. Thank you

Can you suggest me a workaround to the problem? I see two possible workarounds:
1. use a common external ecore model for the both languages
2. convert manual the the models

What do you think?
Re: Serialize extended Model with its parent language serializer. [message #1699987 is a reply to message #1699986] Mon, 29 June 2015 14:22 Go to previous message
Christian Dietrich is currently offline Christian DietrichFriend
Messages: 14665
Registered: July 2009
Senior Member
i'd try to use a common metamodel

Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
Previous Topic:Xtext Unit tests with JUnitParam
Next Topic:How to customize hint in language editor?
Goto Forum:
  


Current Time: Fri Apr 19 22:04:51 GMT 2024

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

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

Back to the top