{"record":{"id":"86a458761da24bfc","repo":"pinpoint-apm/pinpoint","slug":"ignore-class-file-transformer","errorCode":null,"errorMessage":"Ignore class file transformer {}","messagePattern":"Ignore class file transformer (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/ClassFileTransformerProvider.java","lineNumber":162,"sourceCode":"            return new MatchableTransformerRegistry(this.instrumentMatcherCacheConfig, matchableClassFileTransformerList);\n        }\n        return new DefaultTransformerRegistry(matchableClassFileTransformerList);\n    }\n\n    private List<MatchableClassFileTransformer> getMatchableTransformers(PluginContextLoadResult pluginContexts) {\n        Objects.requireNonNull(pluginContexts, \"pluginContexts\");\n\n        final List<MatchableClassFileTransformer> matcherList = new ArrayList<>();\n        for (ClassFileTransformer transformer : pluginContexts.getClassFileTransformer()) {\n            if (transformer instanceof MatchableClassFileTransformer) {\n                final MatchableClassFileTransformer t = (MatchableClassFileTransformer) transformer;\n                if (logger.isInfoEnabled()) {\n                    logger.info(\"Registering class file transformer {} for {} \", t, t.getMatcher());\n                }\n                matcherList.add(t);\n            } else {\n                if (logger.isWarnEnabled()) {\n                    logger.warn(\"Ignore class file transformer {}\", transformer);\n                }\n            }\n        }\n\n        return matcherList;\n    }\n\n}","sourceCodeStart":144,"sourceCodeEnd":170,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/ClassFileTransformerProvider.java#L144-L170","documentation":"WARN log in ClassFileTransformerProvider.getMatchableTransformers: a ClassFileTransformer from the injected transformer list does not implement MatchableClassFileTransformer (getMatcher() unavailable), so it cannot be wrapped for targeted matching and is skipped. The agent registers only matchable transformers so bytecode transformation is limited to classes that actually match.","triggerScenarios":"A transformer in the provided transformer list is not an instance of MatchableClassFileTransformer (or wrap() returned null), so it is dropped during agent startup.","commonSituations":"A custom or third-party plugin registers a plain ClassFileTransformer incompatible with Pinpoint's transformer registry; plugin built against an older Pinpoint API before the Matchable interface.","solutions":["Implement MatchableClassFileTransformer (provide getMatcher()) in the custom transformer instead of plain ClassFileTransformer.","Check the plugin's Pinpoint version compatibility and upgrade/rebuild it.","Verify the transformer list wiring in the DI configuration; remove transformers that are intentionally non-matchable."],"exampleFix":"// before\npublic class MyTransformer implements ClassFileTransformer { ... }\n// after\npublic class MyTransformer implements MatchableClassFileTransformer {\n  public ClassMatcher getMatcher() { return new DefaultClassNameMatcher(Arrays.asList(\"com.example.Target\")); }\n  ...\n}","handlingStrategy":"type-guard","validationCode":"if (!(transformer instanceof MatchableClassFileTransformer)) {\n    throw new IllegalArgumentException(transformer + \" must implement MatchableClassFileTransformer\");\n}","typeGuard":"boolean isMatchable(Object t) {\n    return t instanceof MatchableClassFileTransformer;\n}","tryCatchPattern":null,"preventionTips":["Always implement MatchableClassFileTransformer for Pinpoint plugins.","Keep plugin builds aligned with the agent's Pinpoint version.","Log/verify the registered transformer list at startup in tests."],"tags":["bytecode-instrumentation","agent","class-transformer"],"backgroundTag":"type-mismatch","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}