Skip to content
Snippets Groups Projects
Commit 30a17af9 authored by Rico Bergmann's avatar Rico Bergmann
Browse files

Merge branch 'experimental' into 'develop'

Move away from experimental changes

See merge request !1
parents 3557b6af 516f567d
No related branches found
No related tags found
2 merge requests!2Publish v0.1,!1Move away from experimental changes
package org.rosi_project.model_sync.generator.sync_model
import org.rosi_project.model_sync.generator.acr.{SType, STypedElement}
/**
* @author Rico Bergmann
*/
object STypeRegistry {
private var registeredTypes: Set[STypedElement] = Set()
registerDefaultTypes()
def addType(theType: STypedElement): STypedElement = {
if (!registeredTypes.contains(theType)) {
registeredTypes += theType
}
theType
}
def query(name: String, sPackage: String): Option[STypedElement] = {
registeredTypes.find(t => t.getName == name && t.getPackage == sPackage)
}
def queryForName(name: String): Option[STypedElement] = {
registeredTypes.find(_.getName == name)
}
def allTypes: Set[STypedElement] = registeredTypes
private def registerDefaultTypes(): Unit = {
registeredTypes ++= Seq(
SType("Boolean"),
SType("Byte"),
SType("Short"),
SType("Integer"),
SType("Long"),
SType("Float"),
SType("Double"),
SType("String"),
SType("Set"),
SType("List"),
SType("Map")
)
}
override def toString: String = s"Registry: $registeredTypes"
}
package org.rosi_project.model_sync.generator.sync_model
import org.rosi_project.model_sync.generator.acr.SClass
/**
* @author Rico Bergmann
*/
class SimpleSModel(val sPackage: String = "") extends SModel {
var sClasses: Set[SClass] = Set.empty
def addModelClass(mClass: SClass): Unit = sClasses += mClass
override def getPackageName: String = sPackage
override def getAllClasses: Set[SClass] = sClasses
override def accept(visitor: SModelVisitor): Unit = {
sClasses.foreach(_.accept(visitor))
visitor.visit(this)
}
}
package org.rosi_project.model_sync.generator.sync_model
import org.rosi_project.model_sync.generator.acr._
import org.rosi_project.model_sync.sync.PlayerSync
/**
* @author Rico Bergmann
*/
class SyncEnhancingVisitor extends SModelVisitor {
override def visit(sModel: SModel): Unit = {
// pass
}
override def visit(sClass: SClass): Unit = {
sClass.getInheritanceHierarchy.reverse.headOption.foreach{
case root: SClass => root.setParent(SyncEnhancingVisitor.PLAYER_SYNC_STYPE)
case tp => sys.error(s"May not enhance $tp as it is a type and not a class")
}
sClass.augmentConstructor(SyncEnhancingVisitor.PLAYER_SYNC_INIT)
}
override def visit(sAttr: SAttribute): Unit = {
// pass
}
override def visit(sMethod: SMethod): Unit = {
extractSetterAttr(sMethod).foreach(attr => sMethod.augmentImplementation(SMethodStatement(s"+this change$attr ()")))
}
override def visit(sType: SType): Unit = {
// pass
}
private def extractSetterAttr(sMethod: SMethod): Option[String] = {
sMethod.name match {
case SyncEnhancingVisitor.Setter(attrName) =>
Option(attrName)
case _ =>
None
}
}
}
object SyncEnhancingVisitor {
private val Setter = """set([A-Z][a-zA-z0-9]*)""".r
private val PLAYER_SYNC_CLASS = classOf[PlayerSync]
private val PLAYER_SYNC_STYPE = SType(PLAYER_SYNC_CLASS.getSimpleName, PLAYER_SYNC_CLASS.getPackage.getName)
private val PLAYER_SYNC_INIT = SMethodStatement("buildClass()")
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment