{"record":{"id":"c008d46e51415d40","repo":"pinpoint-apm/pinpoint","slug":"functionalinterfacename-must-not-be-empty","errorCode":null,"errorMessage":"functionalInterfaceName must not be empty","messagePattern":"functionalInterfaceName must not be empty","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/matcher/LambdaExpressionMatcher.java","lineNumber":22,"sourceCode":"import com.navercorp.pinpoint.bootstrap.instrument.matcher.operand.MatcherOperand;\nimport com.navercorp.pinpoint.bootstrap.instrument.matcher.operand.PackageInternalNameMatcherOperand;\nimport com.navercorp.pinpoint.common.util.StringUtils;\n\nimport java.util.Objects;\n\npublic class LambdaExpressionMatcher implements PackageBasedMatcher {\n    static final String LAMBDA_INSTANCE_NAME_PREFIX = \"$$Lambda$\";\n    private final String basePackageName;\n    private final MatcherOperand matcherOperand;\n\n    public LambdaExpressionMatcher(String baseClassName, String functionalInterfaceName) {\n        Objects.requireNonNull(baseClassName, \"baseClassName\");\n        if (!StringUtils.hasText(baseClassName)) {\n            throw new IllegalArgumentException(\"baseClassName must not be empty\");\n        }\n        Objects.requireNonNull(functionalInterfaceName, \"functionalInterfaceName\");\n        if (!StringUtils.hasText(functionalInterfaceName)) {\n            throw new IllegalArgumentException(\"functionalInterfaceName must not be empty\");\n        }\n        this.basePackageName = baseClassName + LAMBDA_INSTANCE_NAME_PREFIX;\n\n        final MatcherOperand operand = new PackageInternalNameMatcherOperand(basePackageName);\n        final MatcherOperand functionalInterfaceMatcherOperand = new InterfaceInternalNameMatcherOperand(functionalInterfaceName, false);\n        this.matcherOperand = operand.and(functionalInterfaceMatcherOperand);\n    }\n\n    @Override\n    public String getBasePackageName() {\n        return this.basePackageName;\n    }\n\n    @Override\n    public MatcherOperand getMatcherOperand() {\n        return this.matcherOperand;\n    }\n","sourceCodeStart":4,"sourceCodeEnd":40,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/matcher/LambdaExpressionMatcher.java#L4-L40","documentation":"Constructor guard in LambdaExpressionMatcher: the functionalInterfaceName argument is null or empty, so the matcher cannot build its InterfaceInternalNameMatcherOperand identifying which functional interface the lambda implements.","triggerScenarios":"Thrown at agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/matcher/LambdaExpressionMatcher.java:22 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Supply the functional interface internal name (e.g. 'java/lang/Runnable') when constructing the matcher","Validate plugin configuration for empty interface names"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}