Question about get Method Handle to interface field
Remi Forax
forax at univ-mlv.fr
Sat Sep 2 19:26:26 UTC 2017
Hi Radek,
Do you still trying to implement properties in Java ?
It seem to be an overlook to me,
getstatic and putstatic are allowed on a static field declared in an interface, getstatic and putstatic use a CONSTANT_Fieldref so unlike constant method handle based on method which need to know if the owner is an interface or not (to generate a CONSTANT_Methodref or a CONSTANT_InterfaceMethodRef), see JVMS 4.4.2.
The following patch should fix the issue
case ClassFile.REF_getStatic:
case ClassFile.REF_putStatic:
staticOk = true;
+ interfaceOwner = true;
case ClassFile.REF_getField:
Rémi
----- Mail original -----
> De: "Radek Smogura" <rsmogura at gmail.com>
> À: compiler-dev at openjdk.java.net
> Envoyé: Samedi 2 Septembre 2017 19:20:06
> Objet: Question about get Method Handle to interface field
> Hi all,
>
> Recently I played a little bit and tried to obtain MethodHandle to GET method
> for interface static field. The code which I try to use is
>
> new Pool.MethodHandle(ClassFile.REF_getStatic, sym, types);
>
> But it fails on assertion: Assert.check(!refSym.owner.isInterface() ||
> interfaceOwner) located in MethodHandle.checkConsistent:365 ?
>
> I wonder if such handles are allowed?
>
> Thanks,
> Radek
>
> P.S. Sorry if I post this message twice, but I got SMTP issues
More information about the compiler-dev
mailing list