pinpoint-apm/pinpoint · error · IllegalArgumentException

Setter interface method must have exactly 1 argument

Error message

Setter interface method must have exactly 1 argument: ${setterType.getName()}

What it means

IllegalArgumentException from SetterAnalyzer.analyze when the single method of the setter interface does not take exactly one parameter. Field setter interfaces must have the shape void setX(FieldType v); any other arity cannot be compiled into a valid field setter.

Solutions

  1. Change the setter method to accept exactly one argument (the field value)
  2. Use a getter interface instead if you intend to read the field
  3. Split multi-argument updates into separate single-argument setter interfaces

Example fix

// before
interface NameSetter { void setName(String first, String last); }
// after
interface NameSetter { void setName(String fullName); }
Defensive patterns

Strategy: validation

Validate before calling

Method m = setterType.getDeclaredMethods()[0];
if (m.getParameterCount() != 1) {
    throw new IllegalArgumentException("setter must take exactly 1 argument");
}

Type guard

boolean hasSingleArgSetter(Class<?> t) {
    return t.isInterface() && t.getDeclaredMethods().length == 1
        && t.getDeclaredMethods()[0].getParameterCount() == 1;
}

Try / catch

try {
    SetterDetails d = new SetterAnalyzer().analyze(setterType);
} catch (IllegalArgumentException e) {
    logger.error("invalid setter arity on {}: {}", setterType, e.getMessage());
}

Prevention

When it happens

Trigger: Defining a setter interface method with zero arguments or two or more arguments and passing it to the analyzer via a field setter definition.

Common situations: Plugin authors modeling a fluent setter returning the interface plus extra args; copying a getter/parameterized accessor pattern that does not fit the setter contract.

Understand the failure class

Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.

Related errors


AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07). Data as JSON: /api/errors/242063a21c2f3d1c. Report an issue: GitHub.

Appendix: source

Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/SetterAnalyzer.java:51

    private SetterAnalyzer() {
    }

    public SetterDetails analyze(Class<?> setterType) {
        Objects.requireNonNull(setterType, "setterType");

        if (!setterType.isInterface()) {
            throw new IllegalArgumentException("setterType " + setterType + "is not an interface");
        }

        final Method[] methods = setterType.getDeclaredMethods();
        if (methods.length != 1) {
            throw new IllegalArgumentException("Setter interface must have only one method: " + setterType.getName());
        }

        final Method setter = methods[0];
        if (setter.getParameterCount() != 1) {
            throw new IllegalArgumentException("Setter interface method must have exactly 1 argument: " + setterType.getName());
        }

        Class<?>[] arguments = setter.getParameterTypes();
        Class<?> fieldType = arguments[0];

        Class<?> returnType = setter.getReturnType();

        if (returnType != void.class) {
            throw new IllegalArgumentException("Setter must have return type void: " + setterType.getName());
        }

        return new SetterDetails(setter, fieldType);
    }

    public static final class SetterDetails {
        private final Method setter;
        private final Type fieldType;

View on GitHub (pinned to 744c3d3075)