pinpoint-apm/pinpoint · error · IllegalArgumentException
different return type. return=
Error message
different return type. return=${fieldType}, field=${fieldJavaType} What it means
Thrown inside ASMClass.addGetter: the field exists but its type differs from the getter method's analyzed return type (GetterAnalyzer), so generating the getter would produce a type-inconsistent accessor.
Solutions
- Make the getter interface's return type exactly match the target field's type
- Check for autoboxing/primitive mismatches between getter and field
- Correct the getter class used 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:306 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/10b9332bc4b99aee.
Report an issue: GitHub.
Appendix: source
Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/ASMClass.java:306
} catch (Exception e) {
throw new InstrumentException("Failed to add field with accessor [" + accessorClass.getName() + "]. Cause:" + e.getMessage(), e);
}
}
@Override
public void addGetter(Class<?> getterClass, String fieldName) throws InstrumentException {
Objects.requireNonNull(getterClass, "getterClass");
Objects.requireNonNull(fieldName, "fieldName");
try {
final GetterAnalyzer.GetterDetails getterDetails = GetterAnalyzer.instance().analyze(getterClass);
final ASMFieldNodeAdapter fieldNode = this.classNode.getField(fieldName, null);
if (fieldNode == null) {
throw new IllegalArgumentException("Not found field. name=" + fieldName);
}
Type fieldType = getterDetails.getFieldType();
if (!fieldNode.getJavaType().equals(fieldType)) {
throw new IllegalArgumentException("different return type. return=" + fieldType + ", field=" + fieldNode.getJavaType());
}
boolean modified = this.classNode.addGetterMethod(getterDetails.getGetter().getName(), fieldNode);
modified |= this.classNode.addInterface(getterClass.getName());
if (modified) {
setModified(true);
} else if (logger.isDebugEnabled()) {
logger.debug("Skip addGetter, getter already declared. class={}, getter={}", getName(), getterClass.getName());
}
} catch (Exception e) {
throw new InstrumentException("Failed to add getter: " + getterClass.getName(), e);
}
}
@Override
public void addSetter(Class<?> setterClass, String fieldName) throws InstrumentException {
this.addSetter(setterClass, fieldName, false);
}View on GitHub (pinned to 744c3d3075)