У нас есть огромный проект, в котором многие методы были объявлены заранее, а реализации выполняются. Все объявленные методы имеют тело, которое просто выдает исключение, скажем, UnimplException. Теперь, когда методы были объявлены, и было предоставлено действительное (компилируемое) тело, их можно вызвать из других методов.Список всех нереализованных методов, вызванных методом
Теперь вопрос заключается в том, есть ли способ перечислить все такие нереализованные (имеющие только компилируемое тело, бросающие конкретное исключение) методы, заданные определенным методом?
Для иллюстрации более (код, чтобы передать идею, а не строго компилятор дружественных):
class A {
methA() {
throw new UnimplException();
}
}
class B {
methB() {
// proper body
// and calls methA
A.methA();
// does something else
// and returns.
}
}
class C {
methC() {
// proper body
// calls methB
B.methB();
}
}
Таким образом, если мы будем исходить из, скажем, methC, то мы хотим поехать весь путь вниз по дерево методов для достижения мета-метана, потому что methC называет methB (который правильно реализован, и мы не заинтересованы), который, в свою очередь, вызывает methA, который не выполняется должным образом, и это то, что мы хотим найти. Мы хотим найти все такие нереализованные методы, начиная с метода и пройдя несколько уровней до тех пор, пока не охватим все такие нереализованные методы.
Мы думали о JavaAssist, но мы не знаем, как спуститься со всех уровней, потому что он, кажется, дает нам все методы, вызванные методом, но не рекурсивно.
Любая помощь очень ценится :)
Использует grep вариант? – Fildor
Это даже не компилируется. У вас не может быть 'throws' в теле, это должно быть' throw new UnimplException() 'и поместить' throws UnimplException' сразу после 'methA()'. 'methA()' и 'methB()' также не являются статичными, поэтому вы не можете их так называть. –
Из кода, который вы опубликовали, попытка компиляции сделает флаг java-компилятора для каждого нереализованного метода, потому что они бросают исключение, не сообщая об этом (или даже бросая его должным образом, вам нужно новое ключевое слово и 'UnimplException()') –