Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » TMF (Xtext) » Importing in a grammar an external metamodel depending on another metamodel
Importing in a grammar an external metamodel depending on another metamodel [message #636765] Tue, 02 November 2010 17:10 Go to next message
Steven Derrien is currently offline Steven DerrienFriend
Messages: 50
Registered: July 2009
Member
Hi,

After being able to import an external metamodel containing several EPackage in my grammar, I
am facing another problem, related to the fact that my metamodel definitions (A.ecore) uses
another metamodel (B.ecore) as some EClass in A extend some EClass in B.

To make sure that the MWE2 workflow can find the corresponding EPackages, I used the following
lines in my mwe2 workflow.

fragment = ecore.EcoreGeneratorFragment {
referencedGenModels = " platform:/resource/projectA/model/A.genmodel,platform:/resou rce/projectB/model/B.genmodel "
}

Which leads to the following error during the workflow execution

java.lang.NullPointerException
at org.eclipse.emf.codegen.ecore.genmodel.impl.GenModelImpl.set ImportManager(GenModelImpl.java:2136)
at org.eclipse.emf.codegen.ecore.genmodel.impl.GenModelImpl.set ImportManager(GenModelImpl.java:2136)

I also tried with

fragment = ecore.EcoreGeneratorFragment {
referencedGenModels = "platform:/resource/projectA/model/A.genmodel"
referencedGenModels = "platform:/resource/projectB/model/B.genmodel"
}

Which then leads to the following error during the workflow execution

java.lang.NullPointerException
at org.eclipse.emf.codegen.ecore.genmodel.impl.GenBaseImpl.find GenPackageHelper(GenBaseImpl.java:870)
at org.eclipse.emf.codegen.ecore.genmodel.impl.GenModelImpl.fin dGenPackage(GenModelImpl.java:1839)

PS: Because of some preexisting code base, I cannot generate a single genmodel implementing A and B as a
workaround.

Anybody has a clue on how to solve this problem ?

Thank you in advance,


Steven
Re: Importing in a grammar an external metamodel depending on another metamodel [message #636810 is a reply to message #636765] Tue, 02 November 2010 21:30 Go to previous messageGo to next message
Christian Dietrich is currently offline Christian DietrichFriend
Messages: 14669
Registered: July 2009
Senior Member
Hi

i guess this is cause project a references project b using platform plugin example. you can fix this using a uri mapping:
    bean = StandaloneSetup {
		platformUri = "${runtimeProject}/.."
		uriMap = { from = "platform:/plugin/projectB/model/B.genmodel"
         to = "platform:/resource/projectB/model/B.genmodel"
 }
uriMap = { from = "platform:/plugin/projectB/model/B.ecore"
         to = "platform:/resource/projectB/model/B.ecore"
 }
	}


~christian


Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
Re: Importing in a grammar an external metamodel depending on another metamodel [message #636883 is a reply to message #636810] Wed, 03 November 2010 08:25 Go to previous messageGo to next message
Steven Derrien is currently offline Steven DerrienFriend
Messages: 50
Registered: July 2009
Member
Hi Christian,

Thanks you for your help.

Unfortunately this didn't solve the problem (same errors in both cases).

Below is the complete mwe2 workflow.

My actual scenario is slightly more complicated than the one described in the
initial post as my Xtext needs gecos.dataflow.genmodel which itself depends
on 3 other ecore metamodels : dataflowAnalysis.genmodel, integerLinearAlgebra.genmodel and gecos.cdfg.genmodel.

Thank you again

Steven

module fr.irisa.cairn.model.S2S4HLS

import org.eclipse.emf.mwe.utils.*
import org.eclipse.xtext.generator.*
import org.eclipse.xtext.ui.generator.*

var grammarURI = "classpath:/fr/irisa/cairn/model/S2S4HLS.xtext"
var file.extensions = "s2s4hls"
var projectName = "fr.irisa.cairn.model.s2s4hls.xtext"
var runtimeProject = "../${projectName}"

Workflow {

bean = StandaloneSetup {
platformUri = "${runtimeProject}/.."

uriMap = {
from = " platform:/plugin/fr.irisa.cairn.model.integerlinearalgebra/m odel/integerLinearAlgebra.genmodel "
to = " platform:/resource/fr.irisa.cairn.model.integerlinearalgebra /model/integerLinearAlgebra.genmodel "
}

uriMap = {
from = " platform:/plugin/fr.irisa.cairn.model.polymodel.dataflowAnal ysis/model/dataflowAnalysis.genmodel "
to = " platform:/resource/fr.irisa.cairn.model.polymodel.dataflowAn alysis/model/dataflowAnalysis.genmodel "
}

uriMap = {
from = " platform:/plugin/fr.irisa.cairn.gecos.model/model/gecos.cdfg .genmodel "
to = " platform:/resource/fr.irisa.cairn.gecos.model/model/gecos.cd fg.genmodel "
}

uriMap = {
from = " platform:/plugin/fr.irisa.cairn.gecos.model.dataflow/model/g ecos.dataflow.genmodel "
to = " platform:/resource/fr.irisa.cairn.gecos.model.dataflow/model /gecos.dataflow.genmodel "
}

}
component = DirectoryCleaner {
directory = "${runtimeProject}/src-gen"
}

component = DirectoryCleaner {
directory = "${runtimeProject}.ui/src-gen"
}

component = Generator {
pathRtProject = runtimeProject
pathUiProject = "${runtimeProject}.ui"
projectNameRt = projectName
projectNameUi = "${projectName}.ui"
language = {
uri = grammarURI
fileExtensions = file.extensions

// Java API to access grammar elements (required by several other fragments)
fragment = grammarAccess.GrammarAccessFragment {}


fragment = ecore.EcoreGeneratorFragment {
// 1 to 3
referencedGenModels =
" platform:/resource/fr.irisa.cairn.model.polymodel.dataflowAn alysis/model/dataflowAnalysis.genmodel
,platform:/resource/fr.irisa.cairn.gecos.model/model/gecos.c dfg.genmodel
,platform:/resource/fr.irisa.cairn.model.integerlinearalgebr a/mode/integerLinearAlgebra.genmodel
,platform:/resource/fr.irisa.cairn.gecos.model.dataflow/mode l/gecos.dataflow.genmodel "

}


...


// scoping and exporting API
fragment = scoping.ImportURIScopingFragment {}
fragment = exporting.SimpleNamesFragment {}

// scoping and exporting API
//fragment = scoping.ImportNamespacesScopingFragment {}
//fragment = exporting.QualifiedNamesFragment {}
fragment = builder.BuilderIntegrationFragment {}

...

}



Le 02/11/2010 22:30, Christian Dietrich a écrit :
> bean = StandaloneSetup {
> platformUri = "${runtimeProject}/.."
> uriMap = { from = "platform:/plugin/projectB/model/B.genmodel"
> to = "platform:/resource/projectB/model/B.genmodel"
> }
> uriMap = { from = "platform:/plugin/projectB/model/B.ecore"
> to = "platform:/resource/projectB/model/B.ecore"
> }
> }
Re: Importing in a grammar an external metamodel depending on another metamodel [message #636893 is a reply to message #636883] Wed, 03 November 2010 09:15 Go to previous messageGo to next message
Christian Dietrich is currently offline Christian DietrichFriend
Messages: 14669
Registered: July 2009
Senior Member
Hi,

you have to do the mapping for the ecores too.

~Christian


Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
Re: Importing in a grammar an external metamodel depending on another metamodel [message #636985 is a reply to message #636893] Wed, 03 November 2010 16:32 Go to previous message
Steven Derrien is currently offline Steven DerrienFriend
Messages: 50
Registered: July 2009
Member
Hi,

OK, it now works like a charm, thank you very much.

Steven

Le 03/11/2010 10:15, Christian Dietrich a écrit :
> Hi,
>
> you have to do the mapping for the ecores too.
>
> ~Christian
Previous Topic:inspecting the EMF model of a grammar
Next Topic:createURI() problem on import rule.
Goto Forum:
  


Current Time: Sat Apr 27 00:30:16 GMT 2024

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

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

Back to the top