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 c7e850ec628d087ddbad3d32d03e4408fab063b0..5046e45cba3cd61f40bc6586309b5ff8bd23f384 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 230048131aebe2d78ea9dceec2b2544e3086ff8b..d53950616a86c558aeb2c4b7c3913c1121018b72 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 8a47bd261f5c988efded173791c393528c2e90ab..4fb658a655818e8b81ac8e5b9f53b344fe364149 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))