From b3daf65de7c520b07a40481da179b48fc6348143 Mon Sep 17 00:00:00 2001
From: Samuel Pastva <daemontus@gmail.com>
Date: Sat, 10 Oct 2015 22:17:14 +0200
Subject: [PATCH] Migrate to Kotlin M14

---
 build.gradle                                  | 17 ++++++-----
 src/main/kotlin/cz/muni/fi/ctl/Formulas.kt    | 25 +++++++++--------
 src/main/kotlin/cz/muni/fi/ctl/Parser.kt      | 28 +++++++++++--------
 .../kotlin/cz/muni/fi/ctl/FormulasTest.kt     |  2 +-
 4 files changed, 41 insertions(+), 31 deletions(-)

diff --git a/build.gradle b/build.gradle
index a1686fd..c93133a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,6 +1,11 @@
-//include antlr plugin
+apply plugin: 'java'
+apply plugin: 'kotlin'
+apply plugin: 'me.champeau.gradle.antlr4'
+
+//include antlr and kotlin plugin
 buildscript {
-    ext.kotlin_version = '0.13.1513'
+    ext.kotlin_version = '0.14.451'
+
     repositories {
         maven {
             name 'JFrog OSS snapshot repo'
@@ -16,11 +21,9 @@ buildscript {
     }
 }
 
-apply plugin: 'java'
-apply plugin: 'kotlin'
-apply plugin: 'me.champeau.gradle.antlr4'
-
-version = '1.0'
+group = "com.github.sybila"
+archivesBaseName = "ctlParser"
+version = '1.0.0'
 
 //antlr config
 antlr4 {
diff --git a/src/main/kotlin/cz/muni/fi/ctl/Formulas.kt b/src/main/kotlin/cz/muni/fi/ctl/Formulas.kt
index b4eb52a..7fdfdf8 100644
--- a/src/main/kotlin/cz/muni/fi/ctl/Formulas.kt
+++ b/src/main/kotlin/cz/muni/fi/ctl/Formulas.kt
@@ -5,7 +5,7 @@ public interface Formula {
     val operator: Op
     val subFormulas: List<Formula>
 
-    public fun get(i: Int): Formula = subFormulas[i]
+    operator public fun get(i: Int): Formula = subFormulas[i]
 }
 
 data class FormulaImpl (
@@ -31,17 +31,18 @@ data class FormulaImpl (
 
 }
 
-public open class Atom : Formula {
-    final override val operator = Op.ATOM
-    final override val subFormulas = listOf<Formula>()
-}
+public interface Atom : Formula
 
 //Boolean Atoms
-public val True: Formula = object : Atom() {
+public val True: Formula = object : Atom {
+    final override val operator = Op.ATOM
+    final override val subFormulas = listOf<Formula>()
     override fun toString():String = "True"
 }
 
-public val False: Formula = object : Atom() {
+public val False: Formula = object : Atom {
+    final override val operator = Op.ATOM
+    final override val subFormulas = listOf<Formula>()
     override fun toString():String = "False"
 }
 
@@ -50,7 +51,9 @@ public data class FloatProposition (
         val variable: String,
         val floatOp: FloatOp,
         val value: Double
-) : Atom() {
+) : Atom {
+    final override val operator = Op.ATOM
+    final override val subFormulas = listOf<Formula>()
     override fun toString(): String = "$variable $floatOp $value"
 }
 
@@ -59,10 +62,10 @@ public data class DirectionProposition (
         val variable: String,
         val direction: Direction,
         val facet: Facet
-) : Atom() {
-
+) : Atom {
+    final override val operator = Op.ATOM
+    final override val subFormulas = listOf<Formula>()
     override fun toString(): String = "$variable:$direction$facet"
-
 }
 
 
diff --git a/src/main/kotlin/cz/muni/fi/ctl/Parser.kt b/src/main/kotlin/cz/muni/fi/ctl/Parser.kt
index c5e4720..bf90c5e 100644
--- a/src/main/kotlin/cz/muni/fi/ctl/Parser.kt
+++ b/src/main/kotlin/cz/muni/fi/ctl/Parser.kt
@@ -118,7 +118,7 @@ data class ParserContext(
         }
     }
 
-    fun plus(ctx: ParserContext): ParserContext {
+    operator fun plus(ctx: ParserContext): ParserContext {
         return ParserContext(assignments + ctx.assignments)
     }
 
@@ -141,7 +141,7 @@ class FileContext(val location: String) : CTLBaseListener() {
     override fun exitAssign(ctx: CTLParser.AssignContext) {
         assignments.add(Assignment(
                 ctx.VAR_NAME().text!!,
-                formulas[ctx.formula()]!!,
+                formulas[ctx.formula()],
                 location+":"+ctx.start.line
         ))
     }
@@ -173,41 +173,44 @@ class FileContext(val location: String) : CTLBaseListener() {
     }
 
     override fun exitParenthesis(ctx: CTLParser.ParenthesisContext) {
-        formulas[ctx] = formulas[ctx.formula()]!!
+        formulas[ctx] = formulas[ctx.formula()]
     }
 
     override fun exitUnary(ctx: CTLParser.UnaryContext) {
-        formulas[ctx] = FormulaImpl(ctx.unaryOp().toOperator(), formulas[ctx.formula()]!!)
+        formulas[ctx] = FormulaImpl(ctx.unaryOp().toOperator(), formulas[ctx.formula()])
     }
 
     override fun exitOr(ctx: CTLParser.OrContext) {
-        formulas[ctx] = formulas[ctx.formula(0)]!! or formulas[ctx.formula(1)]!!
+        formulas[ctx] = formulas[ctx.formula(0)] or formulas[ctx.formula(1)]
     }
 
     override fun exitAnd(ctx: CTLParser.AndContext) {
-        formulas[ctx] = formulas[ctx.formula(0)]!! and formulas[ctx.formula(1)]!!
+        formulas[ctx] = formulas[ctx.formula(0)] and formulas[ctx.formula(1)]
     }
 
     override fun exitImplies(ctx: CTLParser.ImpliesContext) {
-        formulas[ctx] = formulas[ctx.formula(0)]!! implies formulas[ctx.formula(1)]!!
+        formulas[ctx] = formulas[ctx.formula(0)] implies formulas[ctx.formula(1)]
     }
 
     override fun exitEqual(ctx: CTLParser.EqualContext) {
-        formulas[ctx] = formulas[ctx.formula(0)]!! equal  formulas[ctx.formula(1)]!!
+        formulas[ctx] = formulas[ctx.formula(0)] equal  formulas[ctx.formula(1)]
     }
 
     override fun exitEU(ctx: CTLParser.EUContext) {
-        formulas[ctx] = formulas[ctx.formula(0)]!! EU formulas[ctx.formula(1)]!!
+        formulas[ctx] = formulas[ctx.formula(0)] EU formulas[ctx.formula(1)]
     }
 
     override fun exitAU(ctx: CTLParser.AUContext) {
-        formulas[ctx] = formulas[ctx.formula(0)]!! AU formulas[ctx.formula(1)]!!
+        formulas[ctx] = formulas[ctx.formula(0)] AU formulas[ctx.formula(1)]
     }
 }
 
 data class Assignment(val name: String, val formula: Formula, val location: String)
 
-data class Reference(val name: String) : Atom()
+data class Reference(val name: String) : Atom {
+    final override val operator = Op.ATOM
+    final override val subFormulas = listOf<Formula>()
+}
 
 //convenience methods
 
@@ -230,4 +233,5 @@ fun CTLParser.FloatOpContext.toOperator(): FloatOp = when {
     else -> FloatOp.EQ
 }
 
-fun <T> ParseTreeProperty<T>.set(k: ParseTree, v: T) = this.put(k, v)
+operator fun <T> ParseTreeProperty<T>.set(k: ParseTree, v: T) = this.put(k, v)
+operator fun <T> ParseTreeProperty<T>.get(k: ParseTree): T = this.get(k)
diff --git a/src/test/kotlin/cz/muni/fi/ctl/FormulasTest.kt b/src/test/kotlin/cz/muni/fi/ctl/FormulasTest.kt
index a1ea973..ae661f8 100644
--- a/src/test/kotlin/cz/muni/fi/ctl/FormulasTest.kt
+++ b/src/test/kotlin/cz/muni/fi/ctl/FormulasTest.kt
@@ -79,7 +79,7 @@ class Misc {
 
     @Test fun tooManyFormulas() {
         assertFailsWith(IllegalArgumentException::class) {
-            FormulaImpl(Op.ALL_UNTIL, True, False, Atom())
+            FormulaImpl(Op.ALL_UNTIL, True, False, Reference("nothing"))
         }
     }