{"record":{"id":"f9eec910c161e2cf","repo":"pinpoint-apm/pinpoint","slug":"no-methods-are-intercepted-target-interceptor","errorCode":null,"errorMessage":"No methods are intercepted. target:{}, interceptor:{}, methodFilter:{} ","messagePattern":"No methods are intercepted\\. target:(.+?), interceptor:(.+?), methodFilter:(.+?) ","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/ASMClass.java","lineNumber":469,"sourceCode":"        final InterceptorArgumentProvider interceptorArgumentProvider = objectBinderFactory.newInterceptorArgumentProvider();\n        final AutoBindingObjectFactory filterFactory = objectBinderFactory.newAutoBindingObjectFactory(pluginContext, classNode.getClassLoader(), interceptorArgumentProvider);\n        final ObjectFactory objectFactory = ObjectFactory.byConstructor(filterTypeName, (Object[]) annotation.constructorArguments());\n        final MethodFilter filter = (MethodFilter) filterFactory.createInstance(objectFactory);\n\n        boolean singleton = annotation.singleton();\n        int interceptorId = -1;\n\n        for (InstrumentMethod m : getDeclaredMethods(filter)) {\n            if (singleton && interceptorId != -1) {\n                m.addInterceptor(interceptorId);\n            } else {\n                // TODO casting fix\n                interceptorId = ((ASMMethod) m).addInterceptorInternal(interceptorClass, constructorArgs, scope, executionPolicy);\n            }\n        }\n\n        if (interceptorId == -1) {\n            logger.warn(\"No methods are intercepted. target:{}, interceptor:{}, methodFilter:{} \", this.classNode.getInternalName(), interceptorClass, filterTypeName);\n        }\n\n        return interceptorId;\n    }\n\n\n    @Override\n    public int addInterceptor(Class<? extends Interceptor> interceptorClass) throws InstrumentException {\n        Objects.requireNonNull(interceptorClass, \"interceptorClass\");\n        return addInterceptor0(interceptorClass, null, null, null);\n    }\n\n    @Override\n    public int addInterceptor(Class<? extends Interceptor> interceptorClass, Object[] constructorArgs) throws InstrumentException {\n        Objects.requireNonNull(interceptorClass, \"interceptorClass\");\n        Objects.requireNonNull(constructorArgs, \"constructorArgs \");\n        return addInterceptor0(interceptorClass, constructorArgs, null, null);\n    }","sourceCodeStart":451,"sourceCodeEnd":487,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/ASMClass.java#L451-L487","documentation":"ASMClass.addInterceptor0 logs this warning when, after applying the MethodFilter to the target class, no method matched, so no interceptor was injected and interceptorId remains -1. Instrumentation of that class is effectively a no-op: the interceptor code exists but is never wired to any method. The agent does not fail; the target methods simply remain uninstrumented.","triggerScenarios":"addInterceptor/addScopedInterceptor called with a methodFilter whose name/constructor/signature predicates match no method in the target class (wrong method name, wrong parameter types, method is synthetic/bridge-filtered out, or the class truly lacks the method at the instrumented version).","commonSituations":"Plugin targets e.g. HttpServlet.service via a filter but the app uses a subclass override; library upgrade changed method signatures; filter parameters specified with wrong descriptor.","solutions":["Log/print the target class's declared methods and confirm the expected method exists at runtime","Check the methodFilter's name and parameter type matching — remember internal names (Ljava/lang/String;) and inheritance rules","Use executionPolicy/scope settings appropriate for inherited methods, or add the interceptor to the declaring superclass transformer instead","Update the plugin to the library version actually deployed (e.g. different method signature after upgrade)"],"exampleFix":"// before\nfilter = new MethodFilter() {\n    public boolean accept(ASMMethod method) {\n        return method.getName().equals(\"doServive\"); // typo\n    }\n};\n// after\nfilter = new MethodFilter() {\n    public boolean accept(ASMMethod method) {\n        return method.getName().equals(\"doService\");\n    }\n};","handlingStrategy":"validation","validationCode":"// before adding the interceptor, assert the method exists on the runtime class\nclassOf(target).getDeclaredMethods().any { m -> filterName == m.name } // else fix the filter name/signature","typeGuard":"function declaresMethod(clazz, name) { try { return clazz.getDeclaredMethod(name) != null; } catch (e) { return false; } }","tryCatchPattern":"if (interceptorId == -1) { logger.warn(\"No methods are intercepted. target:{}, interceptor:{}, methodFilter:{}\", internalName, interceptorClass, filterTypeName); }","preventionTips":["Pin plugin method filters to the exact library version you instrument","Use ASMClass declared-method dumps in tests to validate filters","Account for inherited methods — ASMClass instruments declared methods only","Write plugin tests asserting interceptorId != -1"],"tags":["bytecode","instrumentation","asm","interceptor"],"backgroundTag":"unsupported-operation","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}