Skip to content
This repository was archived by the owner on Apr 25, 2020. It is now read-only.

Commit aea16aa

Browse files
committed
Refactor, version bumps
1 parent 55bf447 commit aea16aa

17 files changed

+160
-220
lines changed

pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
</issueManagement>
6969

7070
<properties>
71-
<scala.version>2.10.3</scala.version>
71+
<scala.version>2.10.4</scala.version>
7272
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
7373
<project.reporting.outputEncoding>${project.build.sourceEncoding}</project.reporting.outputEncoding>
7474
</properties>
@@ -128,7 +128,7 @@
128128
<plugin>
129129
<groupId>net.alchim31.maven</groupId>
130130
<artifactId>scala-maven-plugin</artifactId>
131-
<version>3.1.6</version>
131+
<version>3.2.0</version>
132132
<configuration>
133133
<recompileMode>incremental</recompileMode>
134134
<scalaVersion>${scala.version}</scalaVersion>

project/build.properties

-24
This file was deleted.

project/build/Project.scala

-99
This file was deleted.

src/main/scala/typedkey/KeyType.scala

-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ package typedkey
2121
* @author Christos KK Loverdos <loverdos@gmail.com>
2222
*/
2323
final class KeyType(val tpe: AnyRef, val tpeName: CharSequence) extends Ordered[KeyType] {
24-
2524
if(tpe == null) {
2625
throw new IllegalArgumentException("null type")
2726
}
@@ -36,8 +35,6 @@ final class KeyType(val tpe: AnyRef, val tpeName: CharSequence) extends Ordered[
3635

3736
override def equals(o: Any) =
3837
o match {
39-
case null
40-
false
4138
case that: KeyType
4239
this.tpe == that.tpe && this.tpeName == that.tpeName
4340
case _

src/main/scala/typedkey/TKey.scala

+15-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,21 @@ package typedkey
2323
*
2424
* @author Christos KK Loverdos <loverdos@gmail.com>.
2525
*/
26-
trait TKey[T] extends Ordered[TKey[_]]{
26+
trait TKey[T] extends Ordered[TKey[_]] {
2727
def name: String
2828
def keyType: KeyType
29+
30+
override def hashCode = 31 * name.## + keyType.##
31+
32+
override def equals(obj: Any) = obj match {
33+
case that: TKey[_]
34+
this.name == that.name && this.keyType == that.keyType
35+
case _ false
36+
}
37+
38+
def compare(that: TKey[_]) = this.name compareTo that.name
39+
}
40+
41+
object TKey {
42+
def ofString(name: String)
2943
}

src/main/scala/typedkey/TKeyImpl.scala

-43
This file was deleted.

src/main/scala/typedkey/TypeProvider.java src/main/scala/typedkey/TypeProvider.scala

+2-3
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,11 @@
1414
* limitations under the License.
1515
*/
1616

17-
package typedkey;
17+
package typedkey
1818

1919
/**
2020
* A marker interface for type providers.
2121
*
2222
* @author Christos KK Loverdos <loverdos@gmail.com>
2323
*/
24-
public interface TypeProvider {
25-
}
24+
trait TypeProvider

src/main/scala/typedkey/env/Env.scala

+10-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package typedkey.env
1919
import typedkey.{TKey, KeyType}
2020

2121
/**
22+
* An environment of [[typedkey.TKey]]s.
2223
*
2324
* @author Christos KK Loverdos <loverdos@gmail.com>
2425
*/
@@ -57,13 +58,20 @@ trait Env {
5758

5859
def toJavaMapByName(fillMe: java.util.Map[String, AnyRef]): java.util.Map[String, AnyRef]
5960

60-
def +[T](key: TKey[T], value: T): Env
61+
def toImmutable: immutable.Env
6162

62-
def -[T](key: TKey[T]): Env
63+
def toMutable: mutable.Env
6364

6465
def ++(other: Env): Env
6566

6667
def getRemove[T](key: TKey[T]): (Option[TKey[T]], Env)
6768

6869
def keysOfType(keyType: KeyType): scala.collection.Set[TKey[_]]
70+
71+
def update[T](key: TKey[T], value: T): Env
72+
73+
def delete[T](key: TKey[T]): Env
74+
75+
def +[T](key: TKey[T], value: T): Env = update(key, value)
76+
def -[T](key: TKey[T]): Env = delete(key)
6977
}

src/main/scala/typedkey/env/immutable/Env.scala

+16-6
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,31 @@ package typedkey.env
1818
package immutable
1919

2020
import scala.collection.immutable.Map
21-
import typedkey.TKey
21+
import typedkey.{env, TKey}
2222
import typedkey.env.impl.MapBasedEnv
2323

24-
final class Env private[env](
25-
private[env] val map: Map[TKey[_], Any]
26-
) extends MapBasedEnv[Env, Map[TKey[_], Any]](map) {
27-
24+
final class Env(private[this] val map: Map[TKey[_], Any]) extends MapBasedEnv[Env, Map[TKey[_], Any]](map) {
2825
protected def newEnv(map: Map[TKey[_], Any]) = new Env(map)
2926

3027
protected def newMap(elems: (TKey[_], Any)*) = Map(elems: _*)
28+
29+
def toImmutable: Env = this
30+
31+
def toMutable: mutable.Env = new mutable.Env(scala.collection.mutable.Map() ++= map)
32+
33+
def update[T](key: TKey[T], value: T) = {
34+
val newMap = map.updated(key, value)
35+
new Env(newMap)
36+
}
37+
38+
def delete[T](key: TKey[T]) =
39+
if(contains(key)) newEnv(map - key)
40+
else this
3141
}
3242

3343
object Env {
3444
def apply(): Env = new Env(Map())
3545

36-
def apply(env: Env): Env = new Env(Map() ++ env.map)
46+
def ofOne[T](key: TKey[T], value: T): Env = new Env(Map(key value))
3747
}
3848

src/main/scala/typedkey/env/impl/MapBasedEnv.scala

+19-12
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,14 @@
1616

1717
package typedkey.env.impl
1818

19-
import typedkey.env.Env
20-
import typedkey.{TKey, KeyType}
19+
import typedkey.env.{immutable, mutable, Env}
20+
import typedkey.{env, KeyType, TKey}
2121

2222
/**
2323
*
2424
* @author Christos KK Loverdos <loverdos@gmail.com>
2525
*/
26-
abstract class MapBasedEnv[E <: Env, Map <: scala.collection.Map[TKey[_], Any]](
27-
map: Map
28-
) extends Env {
29-
26+
abstract class MapBasedEnv[E <: Env, Map <: scala.collection.Map[TKey[_], Any]](map: Map) extends Env {
3027
protected def newEnv(map: Map): E
3128

3229
protected def newMap(elems: (TKey[_], Any)*): Map
@@ -60,7 +57,7 @@ abstract class MapBasedEnv[E <: Env, Map <: scala.collection.Map[TKey[_], Any]](
6057

6158
def keysOfName(keyName: String) =
6259
for {
63-
typedKey <- map.keySet if typedKey.name == keyName
60+
typedKey map.keySet if typedKey.name == keyName
6461
} yield {
6562
typedKey
6663
}
@@ -79,10 +76,6 @@ abstract class MapBasedEnv[E <: Env, Map <: scala.collection.Map[TKey[_], Any]](
7976
(None, this)
8077
}
8178

82-
def -[T](key: TKey[T]) = newEnv((map - key).asInstanceOf[Map])
83-
84-
def +[T](key: TKey[T], value: T) = newEnv((map + (key -> value)).asInstanceOf[Map])
85-
8679
def ++(other: typedkey.env.Env) = newEnv((map ++ other.toMap).asInstanceOf[Map])
8780

8881
def keysOfType(keyType: KeyType): scala.collection.Set[TKey[_]] =
@@ -101,12 +94,26 @@ abstract class MapBasedEnv[E <: Env, Map <: scala.collection.Map[TKey[_], Any]](
10194
fillMe
10295
}
10396

104-
def valuesOfKeysByName(keyName: String) = {
97+
def valuesOfKeysByName(keyName: String): Seq[Any] = {
10598
val buf = new scala.collection.mutable.ListBuffer[Any]
10699
val keys = keysOfName(keyName)
107100
for(key keys) {
108101
buf += map(key)
109102
}
110103
buf.toList
111104
}
105+
106+
def toString(separator: String = ", ") = {
107+
val formattedPairs = map.map {
108+
case (key, null)
109+
s"${key.name}: null [${key.keyType.tpeName}]"
110+
111+
case (key, value)
112+
s"${key.name}: $value [${key.keyType.tpeName}]"
113+
}
114+
115+
val pairStr = formattedPairs.mkString(separator)
116+
117+
s"Env($pairStr)"
118+
}
112119
}

0 commit comments

Comments
 (0)