{"record":{"id":"f415f5bb781011fb","repo":"apache/skywalking","slug":"expected-list-argument-for-extension-function-got","errorCode":null,"errorMessage":"Expected list argument for extension function, got {}","messagePattern":"Expected list argument for extension function, got (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/v2/compiler/MALMethodChainCodegen.java","lineNumber":233,"sourceCode":"            } else {\n                sb.append((int) raw);\n            }\n        } else if (List.class.isAssignableFrom(expectedType)) {\n            if (arg instanceof MALExpressionModel.StringListArgument) {\n                final List<String> values =\n                    ((MALExpressionModel.StringListArgument) arg).getValues();\n                sb.append(\"java.util.Arrays.asList(new String[]{\");\n                for (int i = 0; i < values.size(); i++) {\n                    if (i > 0) {\n                        sb.append(\", \");\n                    }\n                    sb.append('\"')\n                      .append(DslJavaSourceText.toLiteral(values.get(i)))\n                      .append('\"');\n                }\n                sb.append(\"})\");\n            } else {\n                throw new IllegalArgumentException(\n                    \"Expected list argument for extension function, got \"\n                        + arg.getClass().getSimpleName());\n            }\n        } else {\n            throw new IllegalArgumentException(\n                \"Unsupported extension parameter type: \"\n                    + expectedType.getName());\n        }\n    }\n\n    // ==================== Argument codegen ====================\n\n    /**\n     * Generates a method call argument with special handling for primitive double methods.\n     * For {@code .valueEqual(33)}: emits raw {@code 33.0}.\n     * For {@code .multiply(100)}: emits boxed {@code Long.valueOf(100L)}.\n     */\n    private void generateMethodCallArg(final StringBuilder sb,","sourceCodeStart":215,"sourceCodeEnd":251,"githubUrl":"https://github.com/apache/skywalking/blob/102af09b4a56064e22050dded10e2c52e490d040/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/v2/compiler/MALMethodChainCodegen.java#L215-L251","documentation":"Thrown by MALMethodChainCodegen.generateExtensionArg when the extension method declares a List parameter (only List<String> is supported) but the MAL argument node is not a StringListArgument — e.g. a bare string, a number, or a single identifier was passed where a ['a','b'] list literal is required.","triggerScenarios":"Extension 'sum(SampleFamily, List<String> labels)' invoked as '.myext::sum(\"svc\")' or '.myext::sum(100)' instead of '.myext::sum([\\'svc\\'])'.","commonSituations":"Confusing the extension list syntax with the built-in sum()/avg() style — built-ins also need bracket lists, but authors sometimes drop them for single-element lists; switching a String param to List<String> and leaving old rules unchanged.","solutions":["Wrap the values in a bracketed string list literal: .myext::fn(['svc', 'instance'])","Single-element lists still need brackets: .myext::fn(['svc'])","If a single value is intended, keep the Java parameter as String instead of List<String>"],"exampleFix":"# before\nexpr: m.sum([]).myext::rollup(\"svc\")\n\n# after\nexpr: m.sum([]).myext::rollup(['svc'])","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"boolean isStringList(MALExpressionModel.Argument a) {\n    return a instanceof MALExpressionModel.StringListArgument;\n}","tryCatchPattern":"catch IllegalArgumentException at compile time; show the expected ['a','b'] list syntax","preventionTips":["Always bracket list arguments, even single-element ones","Match the built-in sum(['label']) style when writing extension list args"],"tags":["mal","extension","type-mismatch","list"],"backgroundTag":null,"analyzedSha":"102af09b4a56064e22050dded10e2c52e490d040","analyzedAt":"2026-08-14T10:47:52.647Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}