{"record":{"id":"3aa8247f73fa50d2","repo":"JetBrains/intellij-community","slug":"interface-method-invocation-is-not-supported-in-jv","errorCode":null,"errorMessage":"Interface method invocation is not supported in JVM {}. Use JVM 1.8.0_45 or higher to run {}","messagePattern":"Interface method invocation is not supported in JVM (.+?)\\. Use JVM 1\\.8\\.0_45 or higher to run (.+?)","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java","lineNumber":1736,"sourceCode":"    InvocationResult result =\n      tryInvokeWithHelper(interfaceType, null, method, args, (EvaluationContextImpl)evaluationContext, 0, false);\n    if (result.isSuccess()) {\n      return result.getValue();\n    }\n    return new InvokeCommand<>(method, args, (EvaluationContextImpl)evaluationContext) {\n      @Override\n      protected Value invokeMethod(ThreadReference thread, int invokePolicy, Method method, List<? extends Value> args)\n        throws InvocationException, ClassNotLoadedException, IncompatibleThreadStateException, InvalidTypeException {\n        if (LOG.isDebugEnabled()) {\n          LOG.debug(\"Invoking \" + interfaceType.name() + \".\" + method.name());\n        }\n\n        try {\n          //noinspection SSBasedInspection\n          return interfaceType.invokeMethod(thread, method, args, invokePolicy);\n        }\n        catch (LinkageError e) {\n          throw new IllegalStateException(\"Interface method invocation is not supported in JVM \" +\n                                          SystemInfo.JAVA_VERSION +\n                                          \". Use JVM 1.8.0_45 or higher to run \" +\n                                          ApplicationNamesInfo.getInstance().getFullProductName());\n        }\n      }\n    }.start(false);\n  }\n\n\n  @Override\n  public ArrayReference newInstance(final ArrayType arrayType,\n                                    final int dimension)\n    throws EvaluateException {\n    try {\n      return arrayType.newInstance(dimension);\n    }\n    catch (Exception e) {\n      throw EvaluateExceptionUtil.createEvaluateException(e);","sourceCodeStart":1718,"sourceCodeEnd":1754,"githubUrl":"https://github.com/JetBrains/intellij-community/blob/be881553f2a76ac8b4ea53950d93f0de78295c19/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java#L1718-L1754","documentation":"Thrown when the debugger evaluates a method call on an interface type and the target JVM's JDI implementation throws a LinkageError while invoking the interface method. Older JVMs (before 1.8.0_45) could not invoke static/default methods on interfaces via JDI. The message tells the user which JVM version is running the debuggee and the minimum version required.","triggerScenarios":"Evaluating an expression like 'interfaceVar.method()' or 'SomeInterface.staticMethod()' in the debugger evaluator while the debuggee runs on a JVM older than 1.8.0_45; the JDI ClassType/InterfaceType.invokeMethod call raises LinkageError (e.g. java.lang.NoSuchMethodError on java.lang.invoke machinery) and is wrapped in IllegalStateException.","commonSituations":"Debugging a legacy application running on JDK 6/7 or early JDK 8 builds; evaluating default or static interface methods introduced in Java 8; remote debugging an old application server (Tomcat 6, WebLogic) whose bundled JRE predates 8u45.","solutions":["Run the debuggee on JDK 1.8.0_45 or newer (set Project SDK / run configuration JRE to a modern JDK)","Avoid evaluating interface default/static methods; call a concrete implementing class's method instead","For remote debugging, point the debugger at a debuggee launched with a newer JVM and re-attach"],"exampleFix":"// before: debuggee launched with JDK 7\njava -agentlib:jdwp=transport=dt_socket,server=y -version:1.7 MyApp\n\n// after: debuggee launched with JDK 8u45+\njava -agentlib:jdwp=transport=dt_socket,server=y MyApp","handlingStrategy":"validation","validationCode":"// before invoking interface methods via JDI\nif (SystemInfo.isJavaVersionAtLeast(8, 0, 45) || !isInterfaceType(target)) {\n  value = interfaceType.invokeMethod(thread, method, args, policy);\n} else {\n  // route through a concrete implementing class instead\n}","typeGuard":null,"tryCatchPattern":"try {\n  return interfaceType.invokeMethod(thread, method, args, invokePolicy);\n} catch (LinkageError e) {\n  // degrade gracefully: report old-JVM limitation, offer concrete-class call\n}","preventionTips":["Run the debuggee on JDK 8u45+ so JDI supports interface method invocation","Prefer calling methods on concrete implementing classes in evaluated expressions","Check the debuggee JVM version before relying on default/static interface method evaluation"],"tags":["debugger","jdi","jvm-version","evaluation"],"backgroundTag":null,"analyzedSha":"be881553f2a76ac8b4ea53950d93f0de78295c19","analyzedAt":"2026-08-14T14:13:06.425Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}