Skip to content
Snippets Groups Projects
Commit 925e88e2 authored by Chrissi's avatar Chrissi
Browse files

remove last errors in code generation for emf reading

parent 9184fac0
No related branches found
No related tags found
No related merge requests found
......@@ -32,6 +32,22 @@ case class SReference(_name: String, /*val stype: STypedElement,*/ _ttype: SType
this
}
def getMinimalConnection: SReference = {
if (lowerBound == 0 && upperBound == 1) {
return this
}
if (hasOpposite && oppositeRef.lowerBound == 0 && oppositeRef.upperBound == 1) {
return oppositeRef
}
if (lowerBound == 1 && upperBound == 1) {
return this
}
if (hasOpposite && oppositeRef.lowerBound == 1 && oppositeRef.upperBound == 1) {
return oppositeRef
}
return null
}
override def accept(visitor: SModelVisitor): Unit = visitor.visit(this)
override def toString: String = s"$getName: ${getTypeElement.getName} $containment $lowerBound $upperBound"
......
......@@ -61,6 +61,7 @@ class SumModelReadingVisitor(config: GeneratorConfig) extends SModelVisitor {
result = PredefTypes.Unit,
params = Seq(SMethodParameter("obj", PredefEcoreTypes.EcoreObject), SMethodParameter("creator", creatorInterface)),
implementation = Seq.empty)
createObj.setVisibility(MethodVisibility.privateVis)
var createObjImpl = Seq(SMethodStatement(content = s"var objName = obj.eClass.getName"),
SMethodStatement(content = s"objName match {"))
......@@ -69,9 +70,9 @@ class SumModelReadingVisitor(config: GeneratorConfig) extends SModelVisitor {
result = PredefTypes.Unit,
params = Seq(SMethodParameter("o1", PredefEcoreTypes.EcoreObject), SMethodParameter("creator", creatorInterface)),
implementation = Seq.empty)
var createRefImpl = Seq(SMethodStatement(content = s"o1.eClass().getEAllReferences.forEach(sf => {"),
SMethodStatement(content = s"val sfName = sf.getName"),
SMethodStatement(content = s"val o2 = o1.eGet(sf).asInstanceOf[EObject]"),
createRef.setVisibility(MethodVisibility.privateVis)
var stringList: Set[String] = Set.empty
var createRefImpl = Seq(SMethodStatement(content = s"val o2 = o1.eGet(sf).asInstanceOf[EObject]"),
SMethodStatement(content = s"val o1Name = o1.eClass().getName"),
SMethodStatement(content = s"val o2Name = o2.eClass().getName"))
......@@ -145,7 +146,7 @@ class SumModelReadingVisitor(config: GeneratorConfig) extends SModelVisitor {
params = Seq(SMethodParameter("s", PredefEcoreTypes.EcoreObject), SMethodParameter("t", PredefEcoreTypes.EcoreObject)),
implementation = Seq.empty,
overrides = true)
var implMethodSync = Seq(SMethodStatement(content = s"val s1 = mapping.get(s).get.asInstanceOf[${rc.sClass.getName}]", usedTypes = Set(rc, rc.sClass, rc.tClass)),
var implMethodSync = Seq(SMethodStatement(content = s"val s1 = mapping.get(s).get.asInstanceOf[${rc.sClass.getName}]", usedTypes = Set(rc.sClass, rc.tClass)),
SMethodStatement(content = s"val t1 = mapping.get(t).get.asInstanceOf[${rc.tClass.getName}]"))
if (rc.connectedRef.getTypeElement.isInstanceOf[GenericSequence]) {
//add -> add method
......@@ -166,9 +167,20 @@ class SumModelReadingVisitor(config: GeneratorConfig) extends SModelVisitor {
methodSync.implementation = implMethodSync
creatorSync.addMethod(methodSync)
createRefImpl = createRefImpl :+ SMethodStatement(content = s"""if (o1Name.contains("${rc.sClass.getName}") && sfName == "${rc.connectedRef.getName}" && o2Name.contains("${rc.tClass.getName}")) {""")
//TODO: anpassen
val reference = rc.connectedRef.getMinimalConnection
if (reference != null) {
if (reference == rc.connectedRef) {
createRefImpl = createRefImpl :+ SMethodStatement(content = s"""if (o1Name.contains("${rc.sClass.getName}") && sfName == "${reference.getName}" && o2Name.contains("${rc.tClass.getName}")) {""")
createRefImpl = createRefImpl :+ SMethodStatement(content = s"creator.create${rc.getName}(o1, o2)")
createRefImpl = createRefImpl :+ SMethodStatement(content = "}")
} else {
createRefImpl = createRefImpl :+ SMethodStatement(content = s"""if (o1Name.contains("${rc.tClass.getName}") && sfName == "${reference.getName}" && o2Name.contains("${rc.sClass.getName}")) {""")
createRefImpl = createRefImpl :+ SMethodStatement(content = s"creator.create${rc.getName}(o2, o1)")
createRefImpl = createRefImpl :+ SMethodStatement(content = "}")
}
stringList += reference.getName
}
})
createObjImpl = createObjImpl :+ SMethodStatement(content = "case _ =>")
......@@ -176,7 +188,10 @@ class SumModelReadingVisitor(config: GeneratorConfig) extends SModelVisitor {
createObj.implementation = createObjImpl
loader.addMethod(createObj)
createRefImpl = createRefImpl :+ SMethodStatement(content = "})")
createRefImpl = createRefImpl :+ SMethodStatement(content = "}})")
createRefImpl = Seq(SMethodStatement(content = s"o1.eClass().getEAllReferences.forEach(sf => {"),
SMethodStatement(content = s"val sfName = sf.getName"),
SMethodStatement(content = s"""if(${stringList.map(str => s"""sfName == "${str}" """).mkString(" || ")}) {""")) ++ createRefImpl
createRef.implementation = createRefImpl
loader.addMethod(createRef)
......
......@@ -13,8 +13,8 @@ object ApplicationTest extends App {
//runTestAML(Creation.rolesum)
//TTC Case examples
//runTTC2019(Creation.rolecomb)
runTTC2019(Creation.rolesync)
runTTC2019(Creation.rolecomb)
//runTTC2019(Creation.rolesync)
//runTTCLive2019(Creation.rolesync)
//Run all tests
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment