Corrupted flags(access) on outer parameter in inner class constructor when reading java class compiled with -parameters
Corrupted flags (access) on outer parameter in inner class constructor when reading java class compiled with -parameters: expecting ACC_SYNTHETIC, but 32784 (ACC_MANDATED/ACC_MODULE + ACC_FINAL)
Java source:
// JAVAC_OPTIONS: -parameters
public class ParameterNames {
class Inner {
public Inner(double doubleInnerParam, Object objectInnerParam) {}
}
/*enum Enum { //OK
E(0.0, "");
Enum(double doubleEnumParam, String stringEnumParam) {}
}*/
}
Compiled File (JDK 1.8.0_144): ParameterNames_Inner.class
Test:
import org.objectweb.asm.ClassReader
import org.objectweb.asm.ClassVisitor
import org.objectweb.asm.MethodVisitor
import org.objectweb.asm.Opcodes
import java.io.File
import java.io.FileInputStream
fun main() {
val visitor = object : ClassVisitor(Opcodes.ASM7) {
override fun visitMethod(
access: Int,
name: String?,
descriptor: String?,
signature: String?,
exceptions: Array<out String>?
): MethodVisitor {
println("Method: $name")
return object : MethodVisitor(Opcodes.ASM7) {
override fun visitParameter(name: String?, access: Int) {
println("Parameter: $name - $access")
}
}
}
}
ClassReader(FileInputStream(File("ParameterNames\$Inner.class"))).accept(visitor, 0)
}
Output:
Method: <init>
Parameter: this$0 - 32784
Parameter: doubleInnerParam - 0
Parameter: objectInnerParam - 0