From 1e84d86c9501af8170226db79798a94901270324 Mon Sep 17 00:00:00 2001 From: FoggyDawn Date: Sat, 24 May 2025 16:29:56 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86CHA=E7=AE=97?= =?UTF-8?q?=E6=B3=95=E7=9A=84=E8=B0=83=E7=94=A8=E5=9B=BE=E5=88=86=E6=9E=90?= =?UTF-8?q?=E4=BD=BF=E7=94=A8NonNull=E7=9A=84resolve=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E9=A2=91=E7=B9=81=E6=8A=A5=E9=94=99=E9=9A=BE=E4=BB=A5=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82SPECIAL=20case?= =?UTF-8?q?=E7=9A=84=E5=8F=98=E5=8A=A8=E6=98=AF=E5=8F=82=E8=80=83pta?= =?UTF-8?q?=E7=AE=97=E6=B3=95=E5=86=85=E5=A4=84=E7=90=86=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pascal/taie/analysis/graph/callgraph/CHABuilder.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/pascal/taie/analysis/graph/callgraph/CHABuilder.java b/src/main/java/pascal/taie/analysis/graph/callgraph/CHABuilder.java index e78a94e2d..406a8aa72 100644 --- a/src/main/java/pascal/taie/analysis/graph/callgraph/CHABuilder.java +++ b/src/main/java/pascal/taie/analysis/graph/callgraph/CHABuilder.java @@ -146,7 +146,7 @@ private CallGraph buildCallGraph(JMethod entry) { private Set resolveCalleesOf(Invoke callSite) { CallKind kind = CallGraphs.getCallKind(callSite); return switch (kind) { - case INTERFACE, VIRTUAL -> { + case INTERFACE, VIRTUAL, SPECIAL -> { MethodRef methodRef = callSite.getMethodRef(); if (ignoreObjectMethods && isObjectMethod(methodRef)) { yield Set.of(); @@ -164,7 +164,11 @@ private Set resolveCalleesOf(Invoke callSite) { } yield callees.size() <= calleeLimit ? callees : Set.of(); } - case SPECIAL, STATIC -> Set.of(callSite.getMethodRef().resolve()); + case STATIC -> { + JMethod callee = CallGraphs.resolveCallee(null, callSite); + if (callee!= null) yield Set.of(callee); + else yield Set.of(); + } case DYNAMIC -> { logger.debug("CHA cannot resolve invokedynamic {}", callSite); yield Set.of(); From fbca42b5de6ccd79645eced63f3709f988063333 Mon Sep 17 00:00:00 2001 From: FoggyDawn Date: Sat, 24 May 2025 16:29:56 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86CHA=E7=AE=97?= =?UTF-8?q?=E6=B3=95=E7=9A=84=E8=B0=83=E7=94=A8=E5=9B=BE=E5=88=86=E6=9E=90?= =?UTF-8?q?=E4=BD=BF=E7=94=A8NonNull=E7=9A=84resolve=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E9=A2=91=E7=B9=81=E6=8A=A5=E9=94=99=E9=9A=BE=E4=BB=A5=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82SPECIAL=20case?= =?UTF-8?q?=E7=9A=84=E5=8F=98=E5=8A=A8=E6=98=AF=E5=8F=82=E8=80=83pta?= =?UTF-8?q?=E7=AE=97=E6=B3=95=E5=86=85=E5=A4=84=E7=90=86=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pascal/taie/analysis/graph/callgraph/CHABuilder.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/pascal/taie/analysis/graph/callgraph/CHABuilder.java b/src/main/java/pascal/taie/analysis/graph/callgraph/CHABuilder.java index e78a94e2d..f6d8189ab 100644 --- a/src/main/java/pascal/taie/analysis/graph/callgraph/CHABuilder.java +++ b/src/main/java/pascal/taie/analysis/graph/callgraph/CHABuilder.java @@ -164,7 +164,11 @@ private Set resolveCalleesOf(Invoke callSite) { } yield callees.size() <= calleeLimit ? callees : Set.of(); } - case SPECIAL, STATIC -> Set.of(callSite.getMethodRef().resolve()); + case SPECIAL, STATIC -> { + JMethod callee = CallGraphs.resolveCallee(null, callSite); + if (callee!= null) yield Set.of(callee); + else yield Set.of(); + } case DYNAMIC -> { logger.debug("CHA cannot resolve invokedynamic {}", callSite); yield Set.of();