EsotericSoftware / EsotericSoftware/reflectasm

Scala 3 lazy val implementation breaks FieldAccess reflection

Open
#86 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
1.5k
Forks
217
PR merge metrics
No merged PRs in 30d

Description

Scala 3 changed the implementation of lazy vals. Classes containing a lazy val end up with a field called `0bitmap$1`:

```
Compiled from "Test.scala"
public class Test implements scala.Product,java.io.Serializable {
public static final long OFFSET$0;
public long 0bitmap$1;
private final byte a;
...
```

This results in a `ClassFormatError`:
```
Cause: java.lang.ClassFormatError: Illegal field name "0bitmap$1" in class io/altoo/akka/serialization/kryo/TestFieldAccess
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
at com.esotericsoftware.reflectasm.AccessClassLoader.defineClass(AccessClassLoader.java:78)
at com.esotericsoftware.reflectasm.AccessClassLoader.defineAccessClass(AccessClassLoader.java:57)
at com.esotericsoftware.reflectasm.FieldAccess.get(FieldAccess.java:173)
```

(Report from https://github.com/EsotericSoftware/kryo/issues/882)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.