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
Branches
No related tags found
No related merge requests found
......@@ -31,6 +31,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)
......
......@@ -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"))
......@@ -103,7 +104,7 @@ class SumModelReadingVisitor(config: GeneratorConfig) extends SModelVisitor {
result = PredefTypes.Unit,
params = c.getAttributeConstructorParameters :+ SMethodParameter("id", PredefEcoreTypes.EcoreObject),
implementation = Seq(
SMethodStatement(content = s"mapping += (id -> new ${c.getName}(${c.getAllConstructorParameters.map(m => if(m.getType.isInstanceOf[GenericSequence]) "Set.empty" else if (m.getType.isInstanceOf[SClass]) "null" else m.getName).mkString(", ")}))", usedTypes = Set(c))), //TODO
SMethodStatement(content = s"mapping += (id -> new ${c.getName}(${c.getAllConstructorParameters.map(m => if (m.getType.isInstanceOf[GenericSequence]) "Set.empty" else if (m.getType.isInstanceOf[SClass]) "null" else m.getName).mkString(", ")}))", usedTypes = Set(c))), //TODO
overrides = true)
creatorSync.addMethod(methodSync)
......@@ -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,17 +167,31 @@ 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}")) {""")
createRefImpl = createRefImpl :+ SMethodStatement(content = s"creator.create${rc.getName}(o1, o2)")
createRefImpl = createRefImpl :+ SMethodStatement(content = "}")
//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 _ =>")
createObjImpl = createObjImpl :+ SMethodStatement(content = "}")
createObj.implementation = createObjImpl
loader.addMethod(createObj)
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