pinpoint-apm/pinpoint · error · IllegalArgumentException
Argument type of the setter is different with the field…
Error message
Argument type of the setter is different with the field type. setterMethod: ${fieldType}, fieldType: ${fieldJavaType} What it means
Thrown inside ASMClass.addSetter: the analyzed setter method's argument type does not match the target field's type (SetterAnalyzer result vs fieldNode type), so injecting the setter would create a type-inconsistent mutator.
Solutions
- Make the setter interface's parameter type exactly match the field type
- Check for primitive/wrapper mismatches
- Correct the setter class bound in the plugin configuration
Defensive patterns
Strategy: type-guard
When it happens
Trigger: Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/ASMClass.java:338 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/4b52ea528450b5ec.
Report an issue: GitHub.
Appendix: source
Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/ASMClass.java:338
@Override
public void addSetter(Class<?> setterClass, String fieldName) throws InstrumentException {
this.addSetter(setterClass, fieldName, false);
}
@Override
public void addSetter(Class<?> setterClass, String fieldName, boolean removeFinal) throws InstrumentException {
Objects.requireNonNull(setterClass, "setterClass");
try {
final SetterAnalyzer.SetterDetails setterDetails = SetterAnalyzer.instance().analyze(setterClass);
final ASMFieldNodeAdapter fieldNode = this.classNode.getField(fieldName, null);
if (fieldNode == null) {
throw new IllegalArgumentException("Not found field. name=" + fieldName);
}
final Type fieldType = setterDetails.getFieldType();
if (!fieldNode.getJavaType().equals(fieldType)) {
throw new IllegalArgumentException("Argument type of the setter is different with the field type. setterMethod: " + fieldType + ", fieldType: " + fieldNode.getJavaType());
}
if (fieldNode.isStatic()) {
throw new IllegalArgumentException("Cannot add setter to static fields. setterMethod: " + setterDetails.getSetter().getName() + ", fieldName: " + fieldName);
}
final int original = fieldNode.getAccess();
boolean finalRemoved = false;
if (fieldNode.isFinal()) {
if (!removeFinal) {
throw new IllegalArgumentException("Cannot add setter to final field. setterMethod: " + setterDetails.getSetter().getName() + ", fieldName: " + fieldName);
} else {
final int removed = original & ~Opcodes.ACC_FINAL;
fieldNode.setAccess(removed);
finalRemoved = true;
}
}
View on GitHub (pinned to 744c3d3075)