{"record":{"id":"42a718dea97af488","repo":"apple/pkl","slug":"mappingamendmentcannothaveparameters-42a718","errorCode":"mappingAmendmentCannotHaveParameters","errorMessage":"Expected a function that returns a `Mapping`, but got a `Mapping`.","messagePattern":"Expected a function that returns a `Mapping`, but got a `Mapping`\\.","errorType":"exception","errorClass":"VmException","httpStatus":null,"severity":"error","filePath":"pkl-core/src/main/java/org/pkl/core/ast/expression/literal/SpecializedObjectLiteralNode.java","lineNumber":189,"sourceCode":"  protected final boolean checkIsValidMappingAmendment() {\n    if (checkedIsValidMappingAmendment) return true;\n\n    for (var member : EconomicMaps.getValues(members)) {\n      if (member.isLocal()) continue;\n\n      var memberName = member.getNameOrNull();\n      if (memberName == null) continue;\n\n      if (memberName != Identifier.DEFAULT) {\n        throw exceptionBuilder()\n            .evalError(\"objectCannotHaveProperty\", BaseModule.getMappingClass())\n            .withSourceSection(member.getHeaderSection())\n            .build();\n      }\n    }\n\n    if (parametersDescriptor != null) {\n      throw exceptionBuilder()\n          .evalError(\"mappingAmendmentCannotHaveParameters\")\n          .withSourceSection(getParentNode().getSourceSection())\n          .build();\n    }\n\n    checkedIsValidMappingAmendment = true;\n    return true;\n  }\n\n  @Idempotent\n  protected final boolean checkMaxListingMemberIndex(int parentLength) {\n    assert maxListingMemberIndex != Long.MIN_VALUE;\n    if (maxListingMemberIndex < parentLength) return true;\n\n    CompilerDirectives.transferToInterpreter();\n    var cursor = EconomicMaps.getEntries(members);\n    while (cursor.advance()) {\n      var key = cursor.getKey();","sourceCodeStart":171,"sourceCodeEnd":207,"githubUrl":"https://github.com/apple/pkl/blob/f3efcbfc9b60d30053b0536d664948d7aa1b8673/pkl-core/src/main/java/org/pkl/core/ast/expression/literal/SpecializedObjectLiteralNode.java#L171-L207","documentation":"A Mapping amendment must be a plain object literal; it cannot declare function parameters because the amended target is a `Mapping` value, not a parameterized constructor. `checkIsValidMappingAmendment` throws this when `parametersDescriptor` is non-null, i.e. the amendment literal has a parameter list.","triggerScenarios":"Writing a parameterized amendment such as `mymap { (key) { ... } }` or an `amends (x) -> ...` form targeting a Mapping-typed value.","commonSituations":"Reusing a class-amendment pattern (which supports parameters) on a Mapping; templated config generation that assumed parameterized Mapping amendments exist.","solutions":["Remove the parameter list from the Mapping amendment and write entries directly","Parameterize at a higher level: put the parameterized logic in a function that returns the Mapping, then assign it","If dynamic keying is needed, compute keys in normal expressions within entries"],"exampleFix":"// before\nmymap { (k) { [k] = 1 } }\n// after\nmymap { [\"key\"] = 1 }\n","handlingStrategy":"validation","validationCode":"// Mapping amendments take no parameter list: write mymap { [k] = v } not mymap { (k) { ... } }\n","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only class-amending literals support parameter lists","Compute dynamic keys with normal expressions inside entries"],"tags":["pkl","mapping","amends","parameters"],"backgroundTag":"unsupported-operation","analyzedSha":"f3efcbfc9b60d30053b0536d664948d7aa1b8673","analyzedAt":"2026-09-08T13:10:45.570Z","contentChangedAt":"2026-09-08T13:10:45.570Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}