WALA icon indicating copy to clipboard operation
WALA copied to clipboard

CHA missed an invocation about interface

Open kitty-1998 opened this issue 1 year ago • 1 comments

Hi, I found a code example which may help improve Wala. See the minimized code example below:

package edu.kitty;
public class Main {
    public static void main(String[] args) {
        Inner i = (a) -> a%7;
        System.out.println(i.bar(1));
    }
    interface Inner {
        int bar(int a);
    }
}

The method main called bar and call graph should have this edge, but I used CHA algorithm to construct the call graph and found no callee target of main.

My Wala version: 1.6.4

kitty-1998 avatar Apr 12 '24 09:04 kitty-1998

Thanks, yes, this is a known issue. The CHA call graph only includes edges to concrete methods, not abstract methods like Inner.bar. Here, the bar implementation that gets invoked is not immediately evident in the bytecode; the class containing the bar implementation is generated at runtime using invokedynamic (see details here). We do handle such cases with other call graph algorithms, but it's not obviously to me how to handle it in CHA without a good amount of additional complexity.

msridhar avatar Apr 12 '24 13:04 msridhar