diff --git a/scala/pom.xml b/scala/pom.xml
index c53b99d0..9a5c003f 100644
--- a/scala/pom.xml
+++ b/scala/pom.xml
@@ -2,7 +2,7 @@
4.0.0
org.msgpack
scala-msgpack
- 0.0.1-devel
+ 0.0.1-SNAPSHOT
${project.artifactId}
My wonderfull scala app
2010
diff --git a/scala/src/main/scala/org/msgpack/JavassistTypeScalaTemplateBuilder.scala b/scala/src/main/scala/org/msgpack/JavassistTypeScalaTemplateBuilder.scala
index eb565eac..d9efff4f 100644
--- a/scala/src/main/scala/org/msgpack/JavassistTypeScalaTemplateBuilder.scala
+++ b/scala/src/main/scala/org/msgpack/JavassistTypeScalaTemplateBuilder.scala
@@ -3,12 +3,12 @@ package org.msgpack
import _root_.javassist.{CtClass, CtNewConstructor}
import annotation._
import template._
+import builder.JavassistTemplateBuilder.JavassistTemplate
+import builder.{BuildContextBase, JavassistTemplateBuilder}
import java.lang.Class
import collection.immutable.{ListMap, TreeMap}
import java.lang.reflect.{Type, Modifier, Method, Field}
import java.lang.annotation.{Annotation => JavaAnnotation}
-import builder.{JavassistTemplateBuilder, BuildContextBase, BuildContext}
-import builder.JavassistTemplateBuilder.JavassistTemplate
import scala.collection.JavaConverters._
;
/*
@@ -378,7 +378,7 @@ class ScalaFieldEntryReader extends IFieldEntryReader{
def sameType_?( getter : Method,setter : Method) = {
getter.getReturnType == setter.getParameterTypes()(0)
}
-
+ /*
for(g <- getters){
setters.get(g._1).map( s => {
if(sameType_?(g._2,s)){
@@ -393,6 +393,22 @@ class ScalaFieldEntryReader extends IFieldEntryReader{
props +=( name -> (g._2,s,f))
}
})
+ }*/
+ // In some situation, reflection returns wrong ordered getter methods compare with declaration order.
+ // So to avoid such situation, list up props with setter methods
+ for(s <- setters){
+ getters.get(s._1).map( g => {
+ if(sameType_?(g,s._2)){
+ val name = s._1
+ val f = try{
+ targetClass.getDeclaredField(name)
+ }catch{
+ case e : NoSuchFieldException => null
+ }
+
+ props +=(name -> (g,s._2,f))
+ }
+ })
}
props
}
diff --git a/scala/src/test/scala/org/msgpack/SampleClass.scala b/scala/src/test/scala/org/msgpack/SampleClass.scala
index 4979ec61..acaf7b3f 100644
--- a/scala/src/test/scala/org/msgpack/SampleClass.scala
+++ b/scala/src/test/scala/org/msgpack/SampleClass.scala
@@ -74,4 +74,28 @@ class BasicalTypes{
+}
+
+object FieldOrder{
+ val None = 0
+ val Offering = 11
+ val BeOffered = 12
+ val Friend = 13
+ val Block = 21
+}
+
+@MessagePackMessage
+class FieldOrder{
+
+ var one : Int = 0
+ var two : String = "aaa"
+ var three : String = "bbb"
+ var four : String = ""
+ var five : Boolean = false
+
+ def six : Int = 1
+ def six_=(v : Int) = one = v
+
+ override def toString = "hogehoge"
+
}
\ No newline at end of file
diff --git a/scala/src/test/scala/org/msgpack/ScalaFieldEntryReaderSpec.scala b/scala/src/test/scala/org/msgpack/ScalaFieldEntryReaderSpec.scala
index 3eeffaad..66ff819b 100644
--- a/scala/src/test/scala/org/msgpack/ScalaFieldEntryReaderSpec.scala
+++ b/scala/src/test/scala/org/msgpack/ScalaFieldEntryReaderSpec.scala
@@ -19,6 +19,8 @@ import org.specs.runner.{ JUnitSuiteRunner, JUnit }
class ScalaFieldEntryReaderSpec extends Specification with JUnit {
"ScalaFieldEntryReader" should {
+
+
"check setter " in {
val reader = new ScalaFieldEntryReader()
@@ -67,6 +69,27 @@ class ScalaFieldEntryReaderSpec extends Specification with JUnit {
}
+ "field order" in {
+ var reader = new ScalaFieldEntryReader
+ val c = classOf[FieldOrder]
+
+ println("Methods of FieldOrder class")
+ c.getMethods.foreach(println(_))
+ println("-- end --")
+
+ val props = reader.findPropertyMethods(c)
+
+ var index : Int = 0
+ val names = List("one","two","three","four","five","six")
+ for( p <- props.values){
+ p._1.getName must_== names(index)
+ index += 1
+ }
+
+
+ }
+
+
"indexing " in {
val reader = new ScalaFieldEntryReader()