如何使用java辅助替换流畅的api中的精确方法调用?

时间:2016-04-08 10:20:14

标签: java bytecode instrumentation javassist

我需要在java方法中替换方法调用。

考虑一个场景:

public void enterCatle(){

    if(PaltformRuntime.returnSuggestion()){

        System.out.println("entered into the castle");
    }
}

我需要用其他方法调用替换returnSuggestion()。我可以通过覆盖edit(MethodCall m)来实现此目的。 Expression editor of java assist

但有一种情况如下。

public void enterCatle(){   
    if(PaltformRuntime.returnSuggestion() && ElementRegistry.returnSuggestion()){

        System.out.println("entered into the castle");
    }
}

在if语句的enterCatle()里面,有来自不同类的2 returnSuggestion()。我需要的是单独替换第一个returnSuggestion()

我尝试通过m.getLineNumber() m.where().getName()之类的条件来确定要替换的确切方法调用,我可以将这些内容缩小到特定方法和精确行号。现在的问题是,如果在同一行中使用两次相同的方法,则两者都会被替换。

如何确定要更换的确切方法?有没有办法获取方法调用的上下文,如方法调用的位置,以便我可以通过java辅助映射。 或者这种情况还有其他方法吗?

0 个答案:

没有答案