public Method getDeclaredMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException { checkMemberAccess(Member.DECLARED); if (!type.isClassType()) throwNoSuchMethodException(name, parameterTypes); if (name == null) { throwNoSuchMethodException(name, parameterTypes); } Atom aName = Atom.findOrCreateUnicodeAtom(name); if (aName == RVMClassLoader.StandardClassInitializerMethodName || aName == RVMClassLoader.StandardObjectInitializerMethodName) { // <init> and <clinit> are not methods. throwNoSuchMethodException(name, parameterTypes); } RVMMethod[] methods = type.asClass().getDeclaredMethods(); RVMMethod answer = null; for (RVMMethod meth : methods) { if (meth.getName() == aName && parametersMatch(meth.getParameterTypes(), parameterTypes)) { if (answer == null) { answer = meth; } else { RVMMethod m2 = meth; if (answer.getReturnType().resolve().isAssignableFrom(m2.getReturnType().resolve())) { answer = m2; } } } } if (answer == null) { throwNoSuchMethodException(name, parameterTypes); } return JikesRVMSupport.createMethod(answer); }
public Method getMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException { checkMemberAccess(Member.PUBLIC); if (!type.isClassType()) throwNoSuchMethodException(name, parameterTypes); if (name == null) { throwNoSuchMethodException(name, parameterTypes); } Atom aName = Atom.findOrCreateUnicodeAtom(name); if (aName == RVMClassLoader.StandardClassInitializerMethodName || aName == RVMClassLoader.StandardObjectInitializerMethodName) { // <init> and <clinit> are not methods. throwNoSuchMethodException(name, parameterTypes); } // (1) Scan the declared public methods of this class and each of its superclasses RVMMethod answer = getMethodInternal1(aName, parameterTypes); if (answer == null) { // (2) Now we need to consider methods inherited from interfaces. // Because we inject the requisite Miranda methods, we can do this simply // by looking at this class's virtual methods instead of searching interface hierarchies. answer = getMethodInternal2(aName, parameterTypes); } if (answer == null) { throwNoSuchMethodException(name, parameterTypes); } return JikesRVMSupport.createMethod(answer); }
public Method[] getMethods() throws SecurityException { checkMemberAccess(Member.PUBLIC); RVMMethod[] static_methods = type.getStaticMethods(); RVMMethod[] virtual_methods = type.getVirtualMethods(); ArrayList<Method> coll = new ArrayList<Method>(static_methods.length + virtual_methods.length); for (RVMMethod meth : static_methods) { if (meth.isPublic()) { coll.add(JikesRVMSupport.createMethod(meth)); } } for (RVMMethod meth : virtual_methods) { if (meth.isPublic()) { coll.add(JikesRVMSupport.createMethod(meth)); } } return coll.toArray(new Method[coll.size()]); }
public Method[] getDeclaredMethods() throws SecurityException { checkMemberAccess(Member.DECLARED); if (!type.isClassType()) return new Method[0]; RVMMethod[] methods = type.asClass().getDeclaredMethods(); ArrayList<Method> coll = new ArrayList<Method>(methods.length); for (RVMMethod meth : methods) { if (!meth.isClassInitializer() && !meth.isObjectInitializer()) { coll.add(JikesRVMSupport.createMethod(meth)); } } return coll.toArray(new Method[coll.size()]); }