pinpoint-apm/pinpoint · error · IllegalArgumentException
baseClassName must not be empty
Error message
baseClassName must not be empty
What it means
Constructor guard in LambdaExpressionMatcher: the baseClassName argument is null or empty (StringUtils/Objects check), so the lambda-targeting matcher cannot determine which enclosing class's $$Lambda$ instances to match.
Solutions
- Supply a valid fully-qualified base class name to LambdaExpressionMatcher
- Validate the plugin's target class configuration before creating the matcher
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/matcher/LambdaExpressionMatcher.java:18 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/5ddfb6d94999ea0f.
Report an issue: GitHub.
Appendix: source
Thrown at agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/matcher/LambdaExpressionMatcher.java:18
package com.navercorp.pinpoint.bootstrap.instrument.matcher;
import com.navercorp.pinpoint.bootstrap.instrument.matcher.operand.InterfaceInternalNameMatcherOperand;
import com.navercorp.pinpoint.bootstrap.instrument.matcher.operand.MatcherOperand;
import com.navercorp.pinpoint.bootstrap.instrument.matcher.operand.PackageInternalNameMatcherOperand;
import com.navercorp.pinpoint.common.util.StringUtils;
import java.util.Objects;
public class LambdaExpressionMatcher implements PackageBasedMatcher {
static final String LAMBDA_INSTANCE_NAME_PREFIX = "$$Lambda$";
private final String basePackageName;
private final MatcherOperand matcherOperand;
public LambdaExpressionMatcher(String baseClassName, String functionalInterfaceName) {
Objects.requireNonNull(baseClassName, "baseClassName");
if (!StringUtils.hasText(baseClassName)) {
throw new IllegalArgumentException("baseClassName must not be empty");
}
Objects.requireNonNull(functionalInterfaceName, "functionalInterfaceName");
if (!StringUtils.hasText(functionalInterfaceName)) {
throw new IllegalArgumentException("functionalInterfaceName must not be empty");
}
this.basePackageName = baseClassName + LAMBDA_INSTANCE_NAME_PREFIX;
final MatcherOperand operand = new PackageInternalNameMatcherOperand(basePackageName);
final MatcherOperand functionalInterfaceMatcherOperand = new InterfaceInternalNameMatcherOperand(functionalInterfaceName, false);
this.matcherOperand = operand.and(functionalInterfaceMatcherOperand);
}
@Override
public String getBasePackageName() {
return this.basePackageName;
}
@OverrideView on GitHub (pinned to 744c3d3075)