private int indexOfMethod(ClassReader cls, MethodReader method) { int index = 0; for (MethodReader m : cls.getMethods()) { if (m.getDescriptor().equals(method.getDescriptor())) { return index; } ++index; } return -1; }
private MethodDependency getMethodDependency(String className, MethodDescriptor descriptor) { Map<MethodDescriptor, MethodDependency> map = methodCache.computeIfAbsent(className, k -> new HashMap<>()); MethodDependency result = map.get(descriptor); if (result == null) { MethodHolder method = getMethodHolder(className, descriptor); if (method != null && !(method.getDescriptor().equals(descriptor) && method.getOwnerName().equals(className))) { result = getMethodDependency(method.getOwnerName(), method.getDescriptor()); } else { MethodReference reference = method != null ? method.getReference() : new MethodReference(className, descriptor); result = createMethodDep(reference, method); } map.put(descriptor, result); } return result; }
private void install(TeaVMJavaScriptHost host) { host.addVirtualMethods((context, methodRef) -> { if (!methodRef.getDescriptor().equals(GET_MESSAGE)) { return false; } return context.getClassSource().isSuperType("java.lang.Throwable", methodRef.getClassName()).orElse(false); }); host.add(new AbstractRendererListener() { RenderingManager manager; @Override public void begin(RenderingManager manager, BuildTarget buildTarget) throws IOException { this.manager = manager; } @Override public void complete() throws IOException { renderExceptionMessage(manager.getWriter()); } }); }
@Override public void methodReached(DependencyAgent agent, MethodDependency methodDep) { MethodModel proxy = describer.getMethod(methodDep.getReference()); if (proxy != null && installedProxies.add(proxy)) { agent.getIncrementalCache().setNoCache(methodDep.getReference()); ClassReader cls = agent.getClassSource().get(methodDep.getMethod().getOwnerName()); int index = 0; for (MethodReader method : cls.getMethods()) { if (method.getDescriptor().equals(methodDep.getMethod().getDescriptor())) { break; } ++index; } new UsageGenerator(agent, proxy, methodDep, proxyClassLoader, index).installProxyEmitter(); } }
int id = 0; for (MethodReader callerMethod : callerClass.getMethods()) { if (callerMethod.getDescriptor().equals(callSite.getCaller().getDescriptor())) { break;