pinpoint-apm/pinpoint · error · InstrumentException
already have method( ).
Error message
${className} already have method(${methodName}). What it means
Thrown by ASMClass.addDelegatorMethod: the target class already declares a method with the same name and parameter types as the delegator method to be added, so adding it would create a duplicate declaration.
Solutions
- Choose a different delegator method name or parameters
- Skip delegation when getDeclaredMethod already finds the method
- Fix the plugin transformer that requests a duplicate delegator on this class
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/ASMClass.java:244 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/7c5fdc84f6d7c4fc.
Report an issue: GitHub.
Appendix: source
Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/ASMClass.java:244
final ClassLoader classLoader = classNode.getClassLoader();
final ProtectionDomain protectionDomain = classNode.getProtectionDomain();
final ASMClassNodeAdapter adviceClassNode = ASMClassNodeAdapter.get(this.pluginContext, classLoader, protectionDomain, classInternalName);
if (adviceClassNode == null) {
throw new NotFoundInstrumentException(adviceClassName + " not found.");
}
final ASMAspectWeaver aspectWeaver = new ASMAspectWeaver();
aspectWeaver.weaving(this.classNode, adviceClassNode);
setModified(true);
}
@Override
public InstrumentMethod addDelegatorMethod(final String methodName, final String... paramTypes) throws InstrumentException {
Objects.requireNonNull(methodName, "methodName");
// check duplicated method.
if (getDeclaredMethod(methodName, paramTypes) != null) {
throw new InstrumentException(getName() + " already have method(" + methodName + ").");
}
final ASMClassNodeAdapter superClassNode = ASMClassNodeAdapter.get(this.pluginContext, classNode.getClassLoader(), classNode.getProtectionDomain(), this.classNode.getSuperClassInternalName());
if (superClassNode == null) {
throw new NotFoundInstrumentException(getName() + " not found super class(" + this.classNode.getSuperClassInternalName() + ")");
}
final String desc = JavaAssistUtils.javaTypeToJvmSignature(paramTypes);
final ASMMethodNodeAdapter superMethodNode = superClassNode.getDeclaredMethod(methodName, desc);
if (superMethodNode == null) {
throw new NotFoundInstrumentException(methodName + desc + " is not found in " + superClassNode.getInternalName());
}
final ASMMethodNodeAdapter methodNode = this.classNode.addDelegatorMethod(superMethodNode);
setModified(true);
return new ASMMethod(this.engineComponent, this.pluginContext, this, methodNode);
}
View on GitHub (pinned to 744c3d3075)