{"record":{"id":"748fcb22bae1cd98","repo":"pinpoint-apm/pinpoint","slug":"null-parametertype-not-supported","errorCode":null,"errorMessage":"null parameterType not supported","messagePattern":"null parameterType not supported","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformTemplate.java","lineNumber":90,"sourceCode":"////        if (ParameterUtils.hasNull(parameters)) {\n////            throw new IllegalArgumentException(\"null parameter not supported\");\n////        }\n//\n//        final Class<?>[] parameterType = ParameterUtils.toClass(parameters);\n//        // commons-lang\n//        // ConstructorUtils.getMatchingAccessibleConstructor()\n//\n//        transform(className, transformCallbackClass, parameters, parameterType);\n//    }\n\n    @Override\n    public void transform(String className, Class<? extends TransformCallback> transformCallbackClass, Object[] parameters, Class<?>[] parameterTypes) {\n        Objects.requireNonNull(className, \"className\");\n        Objects.requireNonNull(transformCallbackClass, \"transformCallbackClass\");\n\n        TransformCallbackChecker.validate(transformCallbackClass, parameterTypes);\n        if (ParameterUtils.hasNull(parameterTypes)) {\n            throw new IllegalArgumentException(\"null parameterType not supported\");\n        }\n        ParameterUtils.checkParameterType(parameterTypes);\n\n\n        final Matcher matcher = Matchers.newClassNameMatcher(className);\n\n        // release class reference\n        final String transformCallbackName = transformCallbackClass.getName();\n        this.instrumentContext.addClassFileTransformer(matcher, transformCallbackName, parameters, parameterTypes);\n    }\n\n    @Override\n    public void transform(String className, Class<? extends TransformCallback> transformCallbackClass, TransformCallbackParameters params) {\n        Object[] parameters = params.values();\n        Class<?>[] parameterTypes = params.types();\n        this.transform(className, transformCallbackClass, parameters, parameterTypes);\n    }\n}","sourceCodeStart":72,"sourceCodeEnd":108,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/transformer/TransformTemplate.java#L72-L108","documentation":"TransformTemplate.transform rejects a parameterTypes array that contains null entries. A null element is not a real Class token, so before deeper validation the method throws IllegalArgumentException with this message.","triggerScenarios":"Calling transform(className, callbackClass, parameters, parameterTypes) where the parameterTypes array itself contains a null element (e.g. built by conditional code that forgot to assign a Class).","commonSituations":"Constructing the Class[] array dynamically with unassigned slots; passing a mix of typed and untyped constructor arguments; converting a varargs list that included nulls.","solutions":["Ensure every element of parameterTypes is a non-null Class before calling transform","Size the array to the actual number of parameters to avoid trailing null slots","Use a helper (ParameterUtils.hasNull) in your own code to pre-validate"],"exampleFix":"// before\nClass<?>[] types = new Class<?>[2];\ntypes[0] = String.class; // types[1] is null\ntransformer.transform(\"Foo\", Cb.class, new Object[]{\"a\"}, types); // throws\n// after\nClass<?>[] types = new Class<?>[]{String.class};\ntransformer.transform(\"Foo\", Cb.class, new Object[]{\"a\"}, types);","handlingStrategy":"validation","validationCode":"boolean hasNullType = parameterTypes == null || Arrays.asList(parameterTypes).contains(null);\nif (hasNullType) throw new IllegalArgumentException(\"parameterTypes must not contain null\");","typeGuard":null,"tryCatchPattern":"try {\n    transformer.transform(name, cb, params, types);\n} catch (IllegalArgumentException e) {\n    if (\"null parameterType not supported\".equals(e.getMessage())) {\n        logger.error(\"parameterTypes array contains null; rebuild it with concrete Class tokens\", e);\n    } else { throw e; }\n}","preventionTips":["Build Class[] arrays with exact sizing — no placeholder null slots","Validate arrays with ParameterUtils.hasNull in test utilities","Prefer varargs collection conversion that fails fast on null elements"],"tags":["null-argument","transform-callback","validation"],"backgroundTag":"null-argument","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"}