1
Kenji Yoshida @xuwei_k
json4s のテストが Scala 2.13.0-RC1 では通って 2.13.0=RC2 では失敗するのだが、Scala 側のバグではなくリフレクション関連だから、コンパイラが内部クラスをどうエンコードするかの内部実装に依存した処理書いてる json4s 側の責任だからversionで分岐して直さないといけないやつだろうか・・・
Kenji Yoshida @xuwei_k
outer を含むか含まないか?はともかく java.lang.reflect.Constructor の getParameters と getGenericParameterTypes が返す数が違う、っていいのか?(Javaであり得るのか?)
Kenji Yoshida @xuwei_k
2.13.0-RC1とRC2の差分見た限り、関連しそうなやつこれくらいしか見つからないけど github.com/scala/scala/co… "Fix interop between Java and generic inner Scala classes"
Kenji Yoshida @xuwei_k
バグなのかどうか自信ないけど、雑に報告 github.com/scala/bug/issu…
Kenji Yoshida @xuwei_k
そしてjson4s、community-buildsにずっと前から加わっているけれど、(この前のscalaz外された事件関係なく)ずっと前から全部のテストは実行されてないな、なんでやねん…
Kenji Yoshida @xuwei_k
これ2.12.8でのgetParametersの出力も、なかなか意味わからないバグり方しているように見えるが、それ含めて直した副作用なのか、それとは別なのか。そもそも普通のinner classではなく、こうやってtrait内にclass作って、それを継承したobject作る、みたいな、もう少し複雑な時だけなのか調べてないが
Kenji Yoshida @xuwei_k
etGenericParameterTypes と getParameters の情報が全然異なるように返すこともできるということは、classファイル上で全然違う場所に違う情報として保持されてるのかな (JVMのclassファイル詳しくないマン)
Kenji Yoshida @xuwei_k
eed3si9nさんがリンク貼ってくれて、この修正後の挙動はJavaと同じで、でもそれ自体は15年も前にJava自体のバグとしてバグ報告されているがずっと変わってないので、もう実質Javaの仕様なのでは、みたいなコメントもらった、なるほど草。 奥が深い…
Kenji Yoshida @xuwei_k
ん、いやでもこれ、inner classのparameterの数や型によって、 getGenericParameterTypes にouterの参照が含まれる場合と、そうでない場合がある気がするけれど、この挙動なんなの・・・。 これもJavaと同じ動作なのか、あるいは・・・
Kenji Yoshida @xuwei_k
Scala 2.13.0-RC2の場合はなぜか - Int や String などの型使うと getGenericParameterTypes の中に outer の param 出現し - Option[Int] や List[Int] などにすると出現しなくなるが Javaの場合は、どちらの場合もouterのparam出現しない気がする?
Kenji Yoshida @xuwei_k
うぉーーー、なるほど、自分のあの例はinterfaceだからそうなっただけで、Javaの場合もstaticではない内部クラスだと同じ挙動( = outerが引数の型により含まれたり含まれなかったりする)になるのか。 なにこれ、Java辛すぎるでしょ・・・ gist.github.com/xuwei-k/a365b5…

コメント

ログインして広告を非表示にする
ログインして広告を非表示にする