internal BootstrapMethod(JavaClassImage image, BootstrapMethodInfo info) { _handle = new LazyValue <MethodHandle>(() => { var constantInfo = image.ClassFile.ConstantPool.ResolveConstant(info.MethodRefIndex); return(constantInfo is MethodHandleInfo methodHandleInfo ? new MethodHandle(image, methodHandleInfo) : null); }); Arguments = new List <object>(info.Arguments.Count); foreach (ushort argIndex in info.Arguments) { Arguments.Add(ResolveArgument(image, argIndex)); } }
public int GetBootstrapMethodIndex(BootstrapMethod bootstrapMethod) { var info = new BootstrapMethodInfo { MethodRefIndex = (ushort)ConstantPoolBuffer.GetMethodHandleIndex(bootstrapMethod.Handle), }; foreach (var arg in bootstrapMethod.Arguments) { info.Arguments.Add((ushort)ConstantPoolBuffer.GetStaticConstantIndex(arg)); } if (!_bootstrapInfos.TryGetValue(info, out int index)) { var methods = BootstrapMethodsAttribute.BootstrapMethods; index = methods.Count; methods.Add(info); _bootstrapInfos.Add(info, index); } return(index); }