jodd-core/src/main/java/jodd/util/ClassUtil.java
public static Method[] getAccessibleMethods(Class clazz, final Class limit) {
		Package topPackage = clazz.getPackage();
		List<Method> methodList = new ArrayList<>();
		int topPackageHash = topPackage == null ? 0 : topPackage.hashCode();
		boolean top = true;
		do {
			if (clazz == null) {
				break;
			}
			Method[] declaredMethods = clazz.getDeclaredMethods();
			for (Method method : declaredMethods) {
				if (Modifier.isVolatile(method.getModifiers())) {
				    continue;
				}
//				if (Modifier.isAbstract(method.getModifiers())) {
//					continue;
//				}
				if (top) {				// add all top declared methods
					methodList.add(method);
					continue;
				}
				int modifier = method.getModifiers();
				if (Modifier.isPrivate(modifier)) {
					continue;										// ignore super private methods
				}
				if (Modifier.isAbstract(modifier)) {		// ignore super abstract methods
					continue;
				}
				if (Modifier.isPublic(modifier)) {
					addMethodIfNotExist(methodList, method);		// add super public methods
					continue;
				}
				if (Modifier.isProtected(modifier)) {
					addMethodIfNotExist(methodList, method);		// add super protected methods
					continue;
				}
				// add super default methods from the same package
				Package pckg = method.getDeclaringClass().getPackage();
				int pckgHash = pckg == null ? 0 : pckg.hashCode();
				if (pckgHash == topPackageHash) {
					addMethodIfNotExist(methodList, method);
				}
			}
			top = false;
		} while ((clazz = clazz.getSuperclass()) != limit);

		Method[] methods = new Method[methodList.size()];
		for (int i = 0; i < methods.length; i++) {
			methods[i] = methodList.get(i);
		}
		return methods;
	}
public static Method[] getAccessibleMethods(Class clazz, final Class limit) {
		Package topPackage = clazz.getPackage();
		List<Method> methodList = new ArrayList<>();
		int topPackageHash = topPackage == null ? 0 : topPackage.hashCode();
		boolean top = true;
		do {
			if (clazz == null) {
				break;
			}
			Method[] declaredMethods = clazz.getDeclaredMethods();
			for (Method method : declaredMethods) {
				if (Modifier.isVolatile(method.getModifiers())) {
				    continue;
				}
//				if (Modifier.isAbstract(method.getModifiers())) {
//					continue;
//				}
				if (top) {				// add all top declared methods
					methodList.add(method);
					continue;
				}
				int modifier = method.getModifiers();
				if (Modifier.isPrivate(modifier)) {
					continue;										// ignore super private methods
				}
				if (Modifier.isAbstract(modifier)) {		// ignore super abstract methods
					continue;
				}
				if (Modifier.isPublic(modifier)) {
					addMethodIfNotExist(methodList, method);		// add super public methods
					continue;
				}
				if (Modifier.isProtected(modifier)) {
					addMethodIfNotExist(methodList, method);		// add super protected methods
					continue;
				}
				// add super default methods from the same package
				Package pckg = method.getDeclaringClass().getPackage();
				int pckgHash = pckg == null ? 0 : pckg.hashCode();
				if (pckgHash == topPackageHash) {
					addMethodIfNotExist(methodList, method);
				}
			}
			top = false;
		} while ((clazz = clazz.getSuperclass()) != limit);

		Method[] methods = new Method[methodList.size()];
		for (int i = 0; i < methods.length; i++) {
			methods[i] = methodList.get(i);
		}
		return methods;
	}
public static Method [ ] getAccessibleMethods ( Class clazz , final Class limit ) { Package topPackage = clazz . getPackage ( ) ; List < Method > methodList = new ArrayList <> ( ) ; int topPackageHash = topPackage == null ? 0 : topPackage . hashCode ( ) ; boolean top = true ; do { if ( clazz == null ) { break ; } Method [ ] declaredMethods = clazz . getDeclaredMethods ( ) ; for ( Method method : declaredMethods ) { if ( Modifier . isVolatile ( method . getModifiers ( ) ) ) { continue ; } //				if (Modifier.isAbstract(method.getModifiers())) { //					continue; //				} if ( top ) { // add all top declared methods methodList . add ( method ) ; continue ; } int modifier = method . getModifiers ( ) ; if ( Modifier . isPrivate ( modifier ) ) { continue ; // ignore super private methods } if ( Modifier . isAbstract ( modifier ) ) { // ignore super abstract methods continue ; } if ( Modifier . isPublic ( modifier ) ) { addMethodIfNotExist ( methodList , method ) ; // add super public methods continue ; } if ( Modifier . isProtected ( modifier ) ) { addMethodIfNotExist ( methodList , method ) ; // add super protected methods continue ; } // add super default methods from the same package Package pckg = method . getDeclaringClass ( ) . getPackage ( ) ; int pckgHash = pckg == null ? 0 : pckg . hashCode ( ) ; if ( pckgHash == topPackageHash ) { addMethodIfNotExist ( methodList , method ) ; } } top = false ; } while ( ( clazz = clazz . getSuperclass ( ) ) != limit ) ; Method [ ] methods = new Method [ methodList . size ( ) ] ; for ( int i = 0 ; i < methods . length ; i ++ ) { methods [ i ] = methodList . get ( i ) ; } return methods ; }
Returns array of all methods that are accessible from given class, upto limit
(usually <code>Object.class</code>). Abstract methods are ignored.
Returns array of all methods that are accessible from given class upto limit ( usually <code > Object . class< / code > ) . Abstract methods are ignored .