From e1f4d1e69ebdc46f61f15957c49a923a1b40a53d Mon Sep 17 00:00:00 2001 From: Chrissi <christopher@hbsc-werner.de> Date: Wed, 17 Apr 2019 20:08:25 +0200 Subject: [PATCH] solve error with wrong construction attribute order --- .../generator/acr_model/SClass.scala | 32 +++++++++++++------ .../generator/io/SClassWriter.scala | 16 +++------- .../generator/sync/ConstructorTemplate.scala | 5 --- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SClass.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SClass.scala index c7e850e..5046e45 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SClass.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SClass.scala @@ -1,6 +1,7 @@ package org.rosi_project.model_sync.generator.acr_model import java.util.Objects +import org.rosi_project.model_sync.generator.acr_model.types.SSeq /** Representation of Scala classes. Attributes, methods, etc. have their own wrappers which should * be used to modify these individual parts of the class. @@ -194,13 +195,9 @@ class SClass(_name: String, /** Provides all types `this` classes accesses in some way. */ def getUsedTypes: Set[STypedElement] = { - //println(this + " Parents: " + getAllParents) - val parentImport: Seq[STypedElement] = getAllParents() - + //parent constructor parameter types val parentConstructorParamImports: Seq[STypedElement] = if (isRootClass) List() else getClassParent match { case parent: SClass => - println(parent.getDeepStructuralFeatures) - println(parent.getDeepStructuralFeatures.map(_.sType)) parent.getDeepStructuralFeatures.map(_.sType) case _ => List() } @@ -217,15 +214,29 @@ class SClass(_name: String, val methodParamImports: Seq[STypedElement] = methods.flatMap(_.params).map(_.paramType) val methodImplImports: Seq[STypedElement] = methods.flatMap(_.getUsedTypes.toList) - - // create a set to eliminate duplicates - (parentImport + + val allImports: Seq[STypedElement] = (getAllParents ++ parentConstructorParamImports ++ attrTypeImports ++ refTypeImports ++ methodResultImports ++ methodParamImports - ++ methodImplImports).toSet + ++ methodImplImports) + + var allCleanImports: Seq[STypedElement] = Seq.empty + + allImports.foreach(i => { + i match { + case seq: SSeq => + allCleanImports = allCleanImports :+ seq.elemType + case t: STypedElement => + allCleanImports = allCleanImports :+ t + //case _ => + } + }) + + // create a set to eliminate duplicates + allCleanImports.toSet } override def getConstructorParameters: Seq[SMethodParameter] = { @@ -299,6 +310,7 @@ class SClass(_name: String, * otherwise */ private def includeImportIfNecessary(sPackage: String, sClass: String, list: List[SImport]): List[SImport] = { + //TODO: normally we must somehow catch SList and SSeq to get the internal types if (sPackage != this.sPackage && sPackage != "") list :+ SImport(sPackage, sClass) else list } @@ -315,6 +327,6 @@ class SClass(_name: String, state.map(_.hashCode()).foldLeft(0)((a, b) => 31 * a + b) } - override def toString: String = s"SC: $name(${attributes.map(_.name).mkString(", ")}, $isAbstract, $isInterface)" + override def toString: String = s"SC: $name($sPackage, ${attributes.map(_.name).mkString(", ")}, $isAbstract, $isInterface)" } diff --git a/src/main/scala/org/rosi_project/model_sync/generator/io/SClassWriter.scala b/src/main/scala/org/rosi_project/model_sync/generator/io/SClassWriter.scala index 2300481..d539506 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/io/SClassWriter.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/io/SClassWriter.scala @@ -76,8 +76,8 @@ class SClassWriter(val modelClass: SClass) { * optionally a parent class. The parent constructor will be called correctly. */ protected def generateClassFixture: String = { - println("**************************************************") - var params: List[String] = modelClass.getStructuralFeatures.map(attr => s"var ${attr.name}: ${attr.getType}").toList + //println("**************************************************") + var params: Seq[String] = modelClass.getStructuralFeatures.map(attr => s"var ${attr.name}: ${attr.getType}").toList var baseFixture: String = "" var parentConstructorParams: String = "" var parentConstructor: String = "" @@ -94,17 +94,11 @@ class SClassWriter(val modelClass: SClass) { } if (parentConstructorParams != "") { - params ::= parentConstructorParams + params = params :+ parentConstructorParams } val constructor: String = s"(${params.mkString(", ")})" - /*println("params: " + params) - println("parentConstructorParams: " + parentConstructorParams) - println("parentConstructor: " + parentConstructor) - println("allInterfaces: " + allInterfaces) - println("constructor: " + constructor)*/ - if (modelClass.isInterface) { baseFixture = s"trait ${modelClass.getName}" } else { @@ -127,8 +121,8 @@ class SClassWriter(val modelClass: SClass) { } } - println("baseFixture: " + baseFixture) - println("**************************************************") + //println("baseFixture: " + baseFixture) + //println("**************************************************") baseFixture } diff --git a/src/main/scala/org/rosi_project/model_sync/generator/sync/ConstructorTemplate.scala b/src/main/scala/org/rosi_project/model_sync/generator/sync/ConstructorTemplate.scala index 8a47bd2..4fb658a 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/sync/ConstructorTemplate.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/sync/ConstructorTemplate.scala @@ -41,11 +41,6 @@ class ConstructorTemplate(modelClass: SClass) extends SClass(_name = s"${modelCl ) override def getNecessaryImports: Set[SImport] = { - println("+++++++++++++++++++++++++") - println(modelClass.getUsedTypes.filter(_.getPackage != "").map(elem => SImport(elem.getPackage, elem.getName))) - println(super.getNecessaryImports) - println(SImport(modelClass.getPackage, modelClass.getName)) - println("+++++++++++++++++++++++++") (modelClass.getUsedTypes.filter(_.getPackage != "").map(elem => SImport(elem.getPackage, elem.getName)) ++ super.getNecessaryImports + SImport(modelClass.getPackage, modelClass.getName)) -- GitLab