pinpoint-apm/pinpoint · warning · IllegalArgumentException

'(' not found. signature:

Error message

'(' not found. signature:

What it means

getParameterSignature extracts the parameter section of a JVM method descriptor, which must begin with '('. If the signature string contains no '(' the input is not a method descriptor and IllegalArgumentException is thrown. Called from parameterSignature.

Source

Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/util/JavaAssistUtils.java:380

    private static List<String> splitParameterSignature(String signature) {
        final String parameterSignature = getParameterSignature(signature);
        if (parameterSignature.isEmpty()) {
            return Collections.emptyList();
        }
        final Matcher matcher = PARAMETER_SIGNATURE_PATTERN.matcher(parameterSignature);
        final List<String> parameterTypeList = new ArrayList<>();
        while (matcher.find()) {
            parameterTypeList.add(matcher.group());
        }
        return parameterTypeList;
    }


    private static String getParameterSignature(String signature) {
        int start = signature.indexOf('(');
        if (start == -1) {
            throw new IllegalArgumentException("'(' not found. signature:" + signature);
        }
        final int end = signature.indexOf(')', start + 1);
        if (end == -1) {
            throw new IllegalArgumentException("')' not found. signature:" + signature);
        }
        start = start + 1;
        if (start == end) {
            return "";
        }
        return signature.substring(start, end);
    }

    public static String[] getParameterType(Class<?>[] paramsClass) {
        if (paramsClass == null) {
            return null;
        }
        String[] paramsString = new String[paramsClass.length];
        for (int i = 0; i < paramsClass.length; i++) {

View on GitHub (pinned to 744c3d3075)

Solutions

  1. Pass the full JVM method descriptor including '(' ... ')' e.g. '(ILjava/lang/String;)V'
  2. Check upstream code that stores/truncates the signature
  3. Validate the input with signature.contains("(") before calling

Example fix

// before
JavaAssistUtils.parseParameterSignature("Ljava/lang/String;"); // field descriptor, no '(' -> throws
// after
JavaAssistUtils.parseParameterSignature("(Ljava/lang/String;)V"); // method descriptor
Defensive patterns

Strategy: validation

Validate before calling

if (signature == null || signature.indexOf('(') < 0) { throw new IllegalArgumentException("not a method descriptor: " + signature); }

Type guard

boolean isMethodDescriptor(String s) { return s != null && s.indexOf('(') >= 0; }

Try / catch

try { params = JavaAssistUtils.parseParameterSignature(sig); } catch (IllegalArgumentException e) { params = Collections.emptyList(); }

Prevention

When it happens

Trigger: Calling JavaAssistUtils.parameterSignature/getParameterSignature with a string lacking '(', e.g. a bare class name, a field descriptor, or only the return-type portion of a descriptor.

Common situations: Confusing field descriptors with method descriptors; passing already-stripped parameter signatures back in; metadata fields populated with method names instead of full descriptors.

Understand the failure class

Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.

Related errors


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