Magnolia Tech

いつもコードのことばかり考えている人のために。

Scalaでバイトコードに出力されるparamterにドットが含まれることへの対応

docs.oracle.com

4.2.2. Unqualified Names

Names of methods, fields, local variables, and formal parameters are stored as unqualified names. An unqualified name must contain at least one Unicode code point and must not contain any of the ASCII characters . ; [ / (that is, period or semicolon or left square bracket or forward slash).

なるほど、仕様書にそう書かれているのか。

先日のエントリでなぜそんなチェックをしているのか分からないと書いたけど、Javaの仕様書には書かれていなかった、JVM側の仕様に起因していた。バイトコードだからそりゃそうか。

blog.magnolia.tech

Scala側にissueをあげた

It is possible to set a parameter name to a method parameter that is illegal in Java · Issue #12306 · scala/bug · GitHub

そうしたら、早速PRが作られた。JVMの仕様と合っていないから、直すのが適切だろうと。

Parameter names are encoded by som-snytt · Pull Request #9435 · scala/scala · GitHub

なにげなく立てたけど、改善に役になってよかった。

ちなみにDotty(Scala 3.0.0)はバイトコードにパラメータ名を設定しないことが分かった。issueをあげようかな。