diff --git a/src/main/scala/jacks/module.scala b/src/main/scala/jacks/module.scala index dd118ff..3d714ec 100644 --- a/src/main/scala/jacks/module.scala +++ b/src/main/scala/jacks/module.scala @@ -161,10 +161,12 @@ class ScalaTypeSig(val tf: TypeFactory, val `type`: JavaType, val sig: ScalaSig) import tools.scalap.scalax.rules.scalasig.{Method => _, _} import ScalaTypeSig.findClass + def path(c:ClassSymbol) = c.path.replaceFirst("^\\.", "") + val cls = { val name = `type`.getRawClass.getCanonicalName.replace('$', '.') sig.symbols.collectFirst { - case c:ClassSymbol if c.path == name => c + case c:ClassSymbol if path(c) == name && !c.isModule => c }.get } diff --git a/src/test/scala/jacks/test.scala b/src/test/scala/jacks/test.scala index 81a2169..3c0dacb 100644 --- a/src/test/scala/jacks/test.scala +++ b/src/test/scala/jacks/test.scala @@ -1,6 +1,8 @@ // Copyright (C) 2011 - Will Glozer. All rights reserved. -package com.lambdaworks.jacks +case class Point(x: Int, y: Int) + +package com.lambdaworks.jacks { import com.fasterxml.jackson.annotation._ import com.fasterxml.jackson.annotation.JsonInclude.Include @@ -89,6 +91,10 @@ case class NamingStrategy(camelCase: String, PascalCase: Int) case class WithAny(map: Map[String, Any]) +object ObjectBeforeCaseClass + +case class ObjectBeforeCaseClass(x: Int) + class CaseClassSuite extends JacksTestSuite { test("primitive types correct") { rw(Primitives(boolean = false)) should equal (Primitives(boolean = false)) @@ -215,6 +221,17 @@ class CaseClassSuite extends JacksTestSuite { val map = Map[String, Any]("foo" -> 1, "bar" -> "2") rw(WithAny(map)) should equal (WithAny(map)) } + + test("Works correctly when companion object is before the case class") { + val obcc = ObjectBeforeCaseClass(5) + rw(obcc) should equal (obcc) + } + + test("Works correctly when case class is in root package") { + val point = Point(5, 7) + rw(point) should equal (point) + } + } class InvalidJsonSuite extends JacksTestSuite { @@ -298,3 +315,6 @@ trait JacksTestSuite extends FunSuite with Matchers { def write[T: Manifest](v: T) = writeValueAsString(v) def read[T: Manifest](s: String) = readValue(s) } + +} +