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

  1. Supply a valid fully-qualified base class name to LambdaExpressionMatcher
  2. 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;
    }

    @Override

View on GitHub (pinned to 744c3d3075)