1
25
26 package java.lang.invoke;
27
28 import jdk.internal.vm.annotation.Stable;
29
30 import static java.lang.invoke.LambdaForm.BasicType.*;
31 import static java.lang.invoke.MethodHandleStatics.*;
32
33
37 final class SimpleMethodHandle extends BoundMethodHandle {
38
39 private SimpleMethodHandle(MethodType type, LambdaForm form) {
40 super(type, form);
41 }
42
43 static BoundMethodHandle make(MethodType type, LambdaForm form) {
44 return new SimpleMethodHandle(type, form);
45 }
46
47 static @Stable BoundMethodHandle.SpeciesData BMH_SPECIES;
48
49 @Override
50 BoundMethodHandle.SpeciesData speciesData() {
51 return BMH_SPECIES;
52 }
53
54 @Override
55 BoundMethodHandle copyWith(MethodType mt, LambdaForm lf) {
56 return make(mt, lf);
57 }
58
59 @Override
60 String internalProperties() {
61 return "\n& Class="+getClass().getSimpleName();
62 }
63
64 @Override
65 final BoundMethodHandle copyWithExtendL(MethodType mt, LambdaForm lf, Object narg) {
66 return BoundMethodHandle.bindSingle(mt, lf, narg);
67 }
68 @Override
69 final BoundMethodHandle copyWithExtendI(MethodType mt, LambdaForm lf, int narg) {
70 try {
71 return (BoundMethodHandle) BMH_SPECIES.extendWith(I_TYPE_NUM).factory().invokeBasic(mt, lf, narg);
72 } catch (Throwable ex) {
73 throw uncaughtException(ex);
74 }
75 }
76 @Override
77 final BoundMethodHandle copyWithExtendJ(MethodType mt, LambdaForm lf, long narg) {
78 try {
79 return (BoundMethodHandle) BMH_SPECIES.extendWith(J_TYPE_NUM).factory().invokeBasic(mt, lf, narg);
80 } catch (Throwable ex) {
81 throw uncaughtException(ex);
82 }
83 }
84 @Override
85 final BoundMethodHandle copyWithExtendF(MethodType mt, LambdaForm lf, float narg) {
86 try {
87 return (BoundMethodHandle) BMH_SPECIES.extendWith(F_TYPE_NUM).factory().invokeBasic(mt, lf, narg);
88 } catch (Throwable ex) {
89 throw uncaughtException(ex);
90 }
91 }
92 @Override
93 final BoundMethodHandle copyWithExtendD(MethodType mt, LambdaForm lf, double narg) {
94 try {
95 return (BoundMethodHandle) BMH_SPECIES.extendWith(D_TYPE_NUM).factory().invokeBasic(mt, lf, narg);
96 } catch (Throwable ex) {
97 throw uncaughtException(ex);
98 }
99 }
100 }
101