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

solve error with wrong construction attribute order

parent dd3491bd
Branches
No related tags found
No related merge requests found
package org.rosi_project.model_sync.generator.acr_model package org.rosi_project.model_sync.generator.acr_model
import java.util.Objects 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 /** Representation of Scala classes. Attributes, methods, etc. have their own wrappers which should
* be used to modify these individual parts of the class. * be used to modify these individual parts of the class.
...@@ -194,13 +195,9 @@ class SClass(_name: String, ...@@ -194,13 +195,9 @@ class SClass(_name: String,
/** Provides all types `this` classes accesses in some way. */ /** Provides all types `this` classes accesses in some way. */
def getUsedTypes: Set[STypedElement] = { def getUsedTypes: Set[STypedElement] = {
//println(this + " Parents: " + getAllParents) //parent constructor parameter types
val parentImport: Seq[STypedElement] = getAllParents()
val parentConstructorParamImports: Seq[STypedElement] = if (isRootClass) List() else getClassParent match { val parentConstructorParamImports: Seq[STypedElement] = if (isRootClass) List() else getClassParent match {
case parent: SClass => case parent: SClass =>
println(parent.getDeepStructuralFeatures)
println(parent.getDeepStructuralFeatures.map(_.sType))
parent.getDeepStructuralFeatures.map(_.sType) parent.getDeepStructuralFeatures.map(_.sType)
case _ => List() case _ => List()
} }
...@@ -218,14 +215,28 @@ class SClass(_name: String, ...@@ -218,14 +215,28 @@ class SClass(_name: String,
val methodImplImports: Seq[STypedElement] = methods.flatMap(_.getUsedTypes.toList) val methodImplImports: Seq[STypedElement] = methods.flatMap(_.getUsedTypes.toList)
// create a set to eliminate duplicates val allImports: Seq[STypedElement] = (getAllParents
(parentImport
++ parentConstructorParamImports ++ parentConstructorParamImports
++ attrTypeImports ++ attrTypeImports
++ refTypeImports ++ refTypeImports
++ methodResultImports ++ methodResultImports
++ methodParamImports ++ 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] = { override def getConstructorParameters: Seq[SMethodParameter] = {
...@@ -299,6 +310,7 @@ class SClass(_name: String, ...@@ -299,6 +310,7 @@ class SClass(_name: String,
* otherwise * otherwise
*/ */
private def includeImportIfNecessary(sPackage: String, sClass: String, list: List[SImport]): List[SImport] = { 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 if (sPackage != this.sPackage && sPackage != "") list :+ SImport(sPackage, sClass) else list
} }
...@@ -315,6 +327,6 @@ class SClass(_name: String, ...@@ -315,6 +327,6 @@ class SClass(_name: String,
state.map(_.hashCode()).foldLeft(0)((a, b) => 31 * a + b) 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)"
} }
...@@ -76,8 +76,8 @@ class SClassWriter(val modelClass: SClass) { ...@@ -76,8 +76,8 @@ class SClassWriter(val modelClass: SClass) {
* optionally a parent class. The parent constructor will be called correctly. * optionally a parent class. The parent constructor will be called correctly.
*/ */
protected def generateClassFixture: String = { protected def generateClassFixture: String = {
println("**************************************************") //println("**************************************************")
var params: List[String] = modelClass.getStructuralFeatures.map(attr => s"var ${attr.name}: ${attr.getType}").toList var params: Seq[String] = modelClass.getStructuralFeatures.map(attr => s"var ${attr.name}: ${attr.getType}").toList
var baseFixture: String = "" var baseFixture: String = ""
var parentConstructorParams: String = "" var parentConstructorParams: String = ""
var parentConstructor: String = "" var parentConstructor: String = ""
...@@ -94,17 +94,11 @@ class SClassWriter(val modelClass: SClass) { ...@@ -94,17 +94,11 @@ class SClassWriter(val modelClass: SClass) {
} }
if (parentConstructorParams != "") { if (parentConstructorParams != "") {
params ::= parentConstructorParams params = params :+ parentConstructorParams
} }
val constructor: String = s"(${params.mkString(", ")})" val constructor: String = s"(${params.mkString(", ")})"
/*println("params: " + params)
println("parentConstructorParams: " + parentConstructorParams)
println("parentConstructor: " + parentConstructor)
println("allInterfaces: " + allInterfaces)
println("constructor: " + constructor)*/
if (modelClass.isInterface) { if (modelClass.isInterface) {
baseFixture = s"trait ${modelClass.getName}" baseFixture = s"trait ${modelClass.getName}"
} else { } else {
...@@ -127,8 +121,8 @@ class SClassWriter(val modelClass: SClass) { ...@@ -127,8 +121,8 @@ class SClassWriter(val modelClass: SClass) {
} }
} }
println("baseFixture: " + baseFixture) //println("baseFixture: " + baseFixture)
println("**************************************************") //println("**************************************************")
baseFixture baseFixture
} }
......
...@@ -41,11 +41,6 @@ class ConstructorTemplate(modelClass: SClass) extends SClass(_name = s"${modelCl ...@@ -41,11 +41,6 @@ class ConstructorTemplate(modelClass: SClass) extends SClass(_name = s"${modelCl
) )
override def getNecessaryImports: Set[SImport] = { 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)) (modelClass.getUsedTypes.filter(_.getPackage != "").map(elem => SImport(elem.getPackage, elem.getName))
++ super.getNecessaryImports ++ super.getNecessaryImports
+ SImport(modelClass.getPackage, modelClass.getName)) + SImport(modelClass.getPackage, modelClass.getName))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment