110 }
111 static DirectMethodHandle make(Method method) {
112 return make(method.getDeclaringClass(), new MemberName(method));
113 }
114 static DirectMethodHandle make(Field field) {
115 return make(field.getDeclaringClass(), new MemberName(field));
116 }
117 private static DirectMethodHandle makeAllocator(MemberName ctor) {
118 assert(ctor.isConstructor() && ctor.getName().equals("<init>"));
119 Class<?> instanceClass = ctor.getDeclaringClass();
120 ctor = ctor.asConstructor();
121 assert(ctor.isConstructor() && ctor.getReferenceKind() == REF_newInvokeSpecial) : ctor;
122 MethodType mtype = ctor.getMethodType().changeReturnType(instanceClass);
123 LambdaForm lform = preparedLambdaForm(ctor);
124 MemberName init = ctor.asSpecial();
125 assert(init.getMethodType().returnType() == void.class);
126 return new Constructor(mtype, lform, ctor, init, instanceClass);
127 }
128
129 @Override
130 MethodHandle copyWith(MethodType mt, LambdaForm lf) {
131 assert(this.getClass() == DirectMethodHandle.class); // must override in subclasses
132 return new DirectMethodHandle(mt, lf, member);
133 }
134
135 @Override
136 String internalProperties() {
137 return "\n& DMH.MN="+internalMemberName();
138 }
139
140 //// Implementation methods.
141 @Override
142 @ForceInline
143 MemberName internalMemberName() {
144 return member;
145 }
146
147 private static final MemberName.Factory IMPL_NAMES = MemberName.getFactory();
148
149 /**
|
110 }
111 static DirectMethodHandle make(Method method) {
112 return make(method.getDeclaringClass(), new MemberName(method));
113 }
114 static DirectMethodHandle make(Field field) {
115 return make(field.getDeclaringClass(), new MemberName(field));
116 }
117 private static DirectMethodHandle makeAllocator(MemberName ctor) {
118 assert(ctor.isConstructor() && ctor.getName().equals("<init>"));
119 Class<?> instanceClass = ctor.getDeclaringClass();
120 ctor = ctor.asConstructor();
121 assert(ctor.isConstructor() && ctor.getReferenceKind() == REF_newInvokeSpecial) : ctor;
122 MethodType mtype = ctor.getMethodType().changeReturnType(instanceClass);
123 LambdaForm lform = preparedLambdaForm(ctor);
124 MemberName init = ctor.asSpecial();
125 assert(init.getMethodType().returnType() == void.class);
126 return new Constructor(mtype, lform, ctor, init, instanceClass);
127 }
128
129 @Override
130 BoundMethodHandle rebind() {
131 return BoundMethodHandle.makeReinvoker(this);
132 }
133
134 @Override
135 MethodHandle copyWith(MethodType mt, LambdaForm lf) {
136 assert(this.getClass() == DirectMethodHandle.class); // must override in subclasses
137 return new DirectMethodHandle(mt, lf, member);
138 }
139
140 @Override
141 String internalProperties() {
142 return "\n& DMH.MN="+internalMemberName();
143 }
144
145 //// Implementation methods.
146 @Override
147 @ForceInline
148 MemberName internalMemberName() {
149 return member;
150 }
151
152 private static final MemberName.Factory IMPL_NAMES = MemberName.getFactory();
153
154 /**
|