【发布时间】:2015-09-15 20:23:21
【问题描述】:
我们有一个庞大的项目,其中许多方法已预先声明,并且正在进行实施。所有声明的方法都有一个简单地抛出异常的主体,比如 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 开始,那么我们想一直沿着方法树向下到达 methA,因为 methC 调用 methB(它已正确实现,我们不感兴趣),而后者又调用 methA这没有正确实施,这就是我们想要找到的。 我们希望从一个方法开始搜索所有此类未实现的方法,并深入几级,直到我们涵盖所有此类未实现的方法。
我们想到了 JavaAssist,但我们不确定如何深入所有级别,因为它似乎为我们提供了从方法内调用的所有方法,但不是递归的。
非常感谢任何帮助:)
【问题讨论】:
-
是否使用 grep 选项?
-
这甚至不会编译。正文中不能有
throws,它必须是throw new UnimplException(),并在methA()后面加上throws UnimplException。methA()和methB()也不是静态的,所以你不能这样称呼它们。 -
从您发布的代码中,尝试编译会使 java 编译器标记每个未实现的方法,因为它们在没有报告的情况下抛出异常(甚至抛出异常;您需要 new 关键字和
UnimplException()) -
@Fildor 听起来 OP 要求从某个方法获取调用树的未实现叶子,而不仅仅是其中包含 throw 语句的所有方法的列表。
-
如果您使用的是 Eclipse,您可以单击 Exception
UnimplException和Ctrl+Shift+G以显示工作区中对类的所有引用。或者,您可以右键单击 Exception 和References -> Workspace
标签: java recursion bytecode java-bytecode-asm javassist