It sounds like you just need to use getMethod
instead of getDeclaredMethod
. The whole point of getDeclaredMethod
is that it only finds methods declared in the class you're calling it on:
Returns a Method object that reflects the specified declared method of the class or interface represented by this Class object.
Whereas getMethod
has:
C is searched for any matching methods. If no matching method is found, the algorithm of step 1 is invoked recursively on the superclass of C.
That will only find public methods though. If the method you're after isn't public, you should recurse up the class hierarchy yourself, using getDeclaredMethod
or getDeclaredMethods
on each class in the hierarchy:
Class<?> clazz = plugin.getClass();
while (clazz != null) {
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
// Test any other things about it beyond the name...
if (method.getName().equals("getFile") && ...) {
return method;
}
}
clazz = clazz.getSuperclass();
}