You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Daniel Sun (JIRA)" <ji...@apache.org> on 2019/02/12 15:57:00 UTC
[jira] [Created] (GROOVY-8989) Support native interface default
method
Daniel Sun created GROOVY-8989:
----------------------------------
Summary: Support native interface default method
Key: GROOVY-8989
URL: https://issues.apache.org/jira/browse/GROOVY-8989
Project: Groovy
Issue Type: Improvement
Reporter: Daniel Sun
Fix For: 3.0.0-alpha-5
Currently, interface default methods are implemented using traits, i.e. the implementation is not native interface default methods. We must refine the implementation before 3.0.0 final released.
As MOP needs to additional methods like the following, some of which are {{private}}, so we maybe have to generate bytecode of Java9+ version. As a result, Java9+ is required to run.
{code:java}
// access flags 0x1004
protected synthetic $getStaticMetaClass()Lgroovy/lang/MetaClass;
ALOAD 0
INVOKEVIRTUAL java/lang/Object.getClass ()Ljava/lang/Class;
LDC LA;.class
IF_ACMPEQ L0
ALOAD 0
INVOKESTATIC org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass (Ljava/lang/Object;)Lgroovy/lang/MetaClass;
ARETURN
L0
FRAME SAME
GETSTATIC A.$staticClassInfo : Lorg/codehaus/groovy/reflection/ClassInfo;
ASTORE 1
ALOAD 1
IFNONNULL L1
ALOAD 0
INVOKEVIRTUAL java/lang/Object.getClass ()Ljava/lang/Class;
INVOKESTATIC org/codehaus/groovy/reflection/ClassInfo.getClassInfo (Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
DUP
ASTORE 1
PUTSTATIC A.$staticClassInfo : Lorg/codehaus/groovy/reflection/ClassInfo;
L1
FRAME APPEND [org/codehaus/groovy/reflection/ClassInfo]
ALOAD 1
INVOKEVIRTUAL org/codehaus/groovy/reflection/ClassInfo.getMetaClass ()Lgroovy/lang/MetaClass;
ARETURN
MAXSTACK = 2
MAXLOCALS = 2
// access flags 0x1
public getMetaClass()Lgroovy/lang/MetaClass;
@Lgroovy/transform/Generated;()
@Lgroovy/transform/Internal;()
ALOAD 0
GETFIELD A.metaClass : Lgroovy/lang/MetaClass;
DUP
IFNULL L0
ARETURN
L0
FRAME SAME1 groovy/lang/MetaClass
POP
ALOAD 0
DUP
INVOKEVIRTUAL A.$getStaticMetaClass ()Lgroovy/lang/MetaClass;
PUTFIELD A.metaClass : Lgroovy/lang/MetaClass;
ALOAD 0
GETFIELD A.metaClass : Lgroovy/lang/MetaClass;
ARETURN
MAXSTACK = 2
MAXLOCALS = 1
// access flags 0x1
public setMetaClass(Lgroovy/lang/MetaClass;)V
@Lgroovy/transform/Generated;()
@Lgroovy/transform/Internal;()
ALOAD 0
ALOAD 1
PUTFIELD A.metaClass : Lgroovy/lang/MetaClass;
RETURN
MAXSTACK = 2
MAXLOCALS = 2
// access flags 0x1
public invokeMethod(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
@Lgroovy/transform/Generated;()
@Lgroovy/transform/Internal;()
ALOAD 0
INVOKEVIRTUAL A.getMetaClass ()Lgroovy/lang/MetaClass;
ALOAD 0
ALOAD 1
ALOAD 2
INVOKEINTERFACE groovy/lang/MetaClass.invokeMethod (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; (itf)
ARETURN
MAXSTACK = 4
MAXLOCALS = 3
// access flags 0x1
public getProperty(Ljava/lang/String;)Ljava/lang/Object;
@Lgroovy/transform/Generated;()
@Lgroovy/transform/Internal;()
ALOAD 0
INVOKEVIRTUAL A.getMetaClass ()Lgroovy/lang/MetaClass;
ALOAD 0
ALOAD 1
INVOKEINTERFACE groovy/lang/MetaClass.getProperty (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; (itf)
ARETURN
MAXSTACK = 3
MAXLOCALS = 2
// access flags 0x1
public setProperty(Ljava/lang/String;Ljava/lang/Object;)V
@Lgroovy/transform/Generated;()
@Lgroovy/transform/Internal;()
ALOAD 0
INVOKEVIRTUAL A.getMetaClass ()Lgroovy/lang/MetaClass;
ALOAD 0
ALOAD 1
ALOAD 2
INVOKEINTERFACE groovy/lang/MetaClass.setProperty (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V (itf)
RETURN
MAXSTACK = 4
MAXLOCALS = 3
// access flags 0x100A
private static synthetic $createCallSiteArray_1([Ljava/lang/String;)V
ALOAD 0
LDC 0
LDC "println"
AASTORE
RETURN
MAXSTACK = 3
MAXLOCALS = 1
// access flags 0x100A
private static synthetic $createCallSiteArray()Lorg/codehaus/groovy/runtime/callsite/CallSiteArray;
LDC 1
ANEWARRAY java/lang/String
ASTORE 0
ALOAD 0
INVOKESTATIC A.$createCallSiteArray_1 ([Ljava/lang/String;)V
NEW org/codehaus/groovy/runtime/callsite/CallSiteArray
DUP
LDC LA;.class
ALOAD 0
INVOKESPECIAL org/codehaus/groovy/runtime/callsite/CallSiteArray.<init> (Ljava/lang/Class;[Ljava/lang/String;)V
ARETURN
MAXSTACK = 4
MAXLOCALS = 1
// access flags 0x100A
private static synthetic $getCallSiteArray()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
GETSTATIC A.$callSiteArray : Ljava/lang/ref/SoftReference;
IFNULL L0
GETSTATIC A.$callSiteArray : Ljava/lang/ref/SoftReference;
INVOKEVIRTUAL java/lang/ref/SoftReference.get ()Ljava/lang/Object;
CHECKCAST org/codehaus/groovy/runtime/callsite/CallSiteArray
DUP
ASTORE 0
IFNONNULL L1
L0
FRAME SAME
INVOKESTATIC A.$createCallSiteArray ()Lorg/codehaus/groovy/runtime/callsite/CallSiteArray;
ASTORE 0
NEW java/lang/ref/SoftReference
DUP
ALOAD 0
INVOKESPECIAL java/lang/ref/SoftReference.<init> (Ljava/lang/Object;)V
PUTSTATIC A.$callSiteArray : Ljava/lang/ref/SoftReference;
L1
FRAME APPEND [org/codehaus/groovy/runtime/callsite/CallSiteArray]
ALOAD 0
GETFIELD org/codehaus/groovy/runtime/callsite/CallSiteArray.array : [Lorg/codehaus/groovy/runtime/callsite/CallSite;
ARETURN
MAXSTACK = 3
MAXLOCALS = 1
{code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)