45 protected DelegatingMethodHandle(MethodType type, MethodHandle target) {
46 super(type, chooseDelegatingForm(target));
47 }
48
49 protected DelegatingMethodHandle(MethodType type, LambdaForm form) {
50 super(type, form);
51 }
52
53 /** Define this to extract the delegated target which supplies the invocation behavior. */
54 protected abstract MethodHandle getTarget();
55
56 @Override
57 abstract MethodHandle asTypeUncached(MethodType newType);
58
59 @Override
60 MemberName internalMemberName() {
61 return getTarget().internalMemberName();
62 }
63
64 @Override
65 boolean isInvokeSpecial() {
66 return getTarget().isInvokeSpecial();
67 }
68
69 @Override
70 Class<?> internalCallerClass() {
71 return getTarget().internalCallerClass();
72 }
73
74 @Override
75 MethodHandle copyWith(MethodType mt, LambdaForm lf) {
76 // FIXME: rethink 'copyWith' protocol; it is too low-level for use on all MHs
77 throw newIllegalArgumentException("do not use this");
78 }
79
80 @Override
81 String internalProperties() {
82 return "\n& Class="+getClass().getSimpleName()+
83 "\n& Target="+getTarget().debugString();
84 }
|
45 protected DelegatingMethodHandle(MethodType type, MethodHandle target) {
46 super(type, chooseDelegatingForm(target));
47 }
48
49 protected DelegatingMethodHandle(MethodType type, LambdaForm form) {
50 super(type, form);
51 }
52
53 /** Define this to extract the delegated target which supplies the invocation behavior. */
54 protected abstract MethodHandle getTarget();
55
56 @Override
57 abstract MethodHandle asTypeUncached(MethodType newType);
58
59 @Override
60 MemberName internalMemberName() {
61 return getTarget().internalMemberName();
62 }
63
64 @Override
65 boolean isCrackable() {
66 MemberName member = internalMemberName();
67 return member != null &&
68 (member.isResolved() ||
69 member.isMethodHandleInvoke() ||
70 member.isVarHandleMethodInvoke());
71 }
72
73 @Override
74 /*non-public*/
75 MethodHandle viewAsType(MethodType newType, boolean strict) {
76 return getTarget().viewAsType(newType, strict);
77 }
78
79 @Override
80 boolean isInvokeSpecial() {
81 return getTarget().isInvokeSpecial();
82 }
83
84 @Override
85 Class<?> internalCallerClass() {
86 return getTarget().internalCallerClass();
87 }
88
89 @Override
90 MethodHandle copyWith(MethodType mt, LambdaForm lf) {
91 // FIXME: rethink 'copyWith' protocol; it is too low-level for use on all MHs
92 throw newIllegalArgumentException("do not use this");
93 }
94
95 @Override
96 String internalProperties() {
97 return "\n& Class="+getClass().getSimpleName()+
98 "\n& Target="+getTarget().debugString();
99 }
|