Skip to content

Commit d3dc5fd

Browse files
committed
[GR-58967] Fix invoking interface methods and overridden default methods through jdwp.
PullRequest: graal/19001
2 parents aed5e74 + 0f6fa31 commit d3dc5fd

File tree

3 files changed

+16
-0
lines changed
  • espresso/src
    • com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp
    • com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/impl

3 files changed

+16
-0
lines changed

espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/api/MethodRef.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,14 @@ public interface MethodRef {
148148
*/
149149
Object invokeMethodSpecial(Object... args);
150150

151+
/**
152+
* Invokes an interface method with input arguments. The first argument must be the self object.
153+
*
154+
* @param args guest-language arguments used when calling the method
155+
* @return the guest-language return value
156+
*/
157+
Object invokeInterfaceMethod(Object... args);
158+
151159
/**
152160
* Determines if the declaring class has a source file attribute.
153161
*

espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/impl/JDWP.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1806,6 +1806,8 @@ static CommandResult createReply(Packet packet, DebuggerController controller, D
18061806
ThreadJob<Object> job = new ThreadJob<>(thread, () -> {
18071807
if (Modifier.isPrivate(method.getModifiers())) {
18081808
return method.invokeMethodSpecial(args);
1809+
} else if (method.getDeclaringKlassRef().isInterface()) {
1810+
return method.invokeInterfaceMethod(args);
18091811
} else {
18101812
return method.invokeMethodVirtual(args);
18111813
}

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/impl/Method.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1707,6 +1707,12 @@ public Object invokeMethodSpecial(Object... args) {
17071707
return invokeDirectSpecial(args);
17081708
}
17091709

1710+
@Override
1711+
public Object invokeInterfaceMethod(Object... args) {
1712+
checkRemovedByRedefinition();
1713+
return invokeDirectInterface(args);
1714+
}
1715+
17101716
private void checkRemovedByRedefinition() {
17111717
if (getMethod().isRemovedByRedefinition()) {
17121718
Meta meta = getMeta();

0 commit comments

Comments
 (0)