{"record":{"id":"d3c33d4e0b19af1f","repo":"apache/beam","slug":"autovalue-builder-class-buildertypedescriptor-did-not","errorCode":null,"errorMessage":"AutoValue builder class ${builderTypeDescriptor} did not contain a setter for ${autoValueFieldName}","messagePattern":"AutoValue builder class (.+?) did not contain a setter for (.+?)","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AutoValueUtils.java","lineNumber":260,"sourceCode":"    ReflectUtils.getMethods(builderTypeDescriptor.getRawType()).stream()\n        .filter(ReflectUtils::isSetter)\n        .map(m -> FieldValueTypeInformation.forSetter(builderTypeDescriptor, m))\n        .forEach(fv -> setterTypes.putIfAbsent(fv.getName(), fv));\n\n    List<FieldValueTypeInformation> setterMethods =\n        Lists.newArrayList(); // The builder methods to call in order.\n    List<FieldValueTypeInformation> schemaTypes =\n        fieldValueTypeSupplier.get(typeDescriptor, schema);\n    for (FieldValueTypeInformation type : schemaTypes) {\n      String autoValueFieldName =\n          ReflectUtils.stripGetterPrefix(\n              Preconditions.checkArgumentNotNull(\n                      type.getMethod(), JavaBeanUtils.GETTER_WITH_NULL_METHOD_ERROR)\n                  .getName());\n\n      FieldValueTypeInformation setterType = setterTypes.get(autoValueFieldName);\n      if (setterType == null) {\n        throw new RuntimeException(\n            \"AutoValue builder class \"\n                + builderTypeDescriptor\n                + \" did not contain \"\n                + \"a setter for \"\n                + autoValueFieldName);\n      }\n      setterMethods.add(setterType);\n    }\n\n    Method buildMethod =\n        ReflectUtils.getMethods(builderTypeDescriptor.getRawType()).stream()\n            .filter(m -> m.getName().equals(\"build\"))\n            .findAny()\n            .orElseThrow(() -> new RuntimeException(\"No build method in builder\"));\n    return createBuilderCreator(\n        builderTypeDescriptor.getRawType(), setterMethods, buildMethod, schema, schemaTypes);\n  }\n","sourceCodeStart":242,"sourceCodeEnd":278,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AutoValueUtils.java#L242-L278","documentation":"AutoValueUtils translates getters on an @AutoValue class into setters on its generated Builder to build schemas. getBuilderCreator throws RuntimeException when, for a given AutoValue field name, the builder class exposes no matching setter method — so a Row value cannot be mapped back into the builder.","triggerScenarios":"getBuilderCreator iterates the AutoValue class getters, looks each field up in the builder's setterTypes map, and finds null because the generated builder lacks a setter with that name.","commonSituations":"Mismatched/incompatible AutoValue versions where builder method naming differs; hand-written or partial builder-like classes; the builder class is stale relative to the annotated class after adding a field without regenerating.","solutions":["Regenerate AutoValue classes with a matching AutoValue version (clean rebuild)","Ensure the class is truly annotated with @AutoValue so its generated Builder includes setters for all fields","Check for stale/shaded artifacts where the builder and value class come from different builds","Compare the AutoValue class getters with the builder setter names to spot mismatches"],"exampleFix":"// before\n// @AutoValue class has field 'userId' but builder was built from stale generated code without setUserId\n// after\nmvn clean compile  # regenerate AutoValue builder with setUserId for field userId","handlingStrategy":"try-catch","validationCode":"for (String getter : autoValueFieldNames) {\n  if (!builderSetterNames.contains(getter))\n    throw new IllegalStateException(\"Builder missing setter for \" + getter);\n}","typeGuard":null,"tryCatchPattern":"try { Row[] rows = AutoValueUtils.getRowsFromAutoValue(...); }\ncatch (RuntimeException e) { if (e.getMessage().contains(\"did not contain a setter\")) { /* rebuild/regenerate */ } else throw e; }","preventionTips":["Clean-rebuild so generated builders match the annotated classes","Keep AutoValue versions consistent across modules","Avoid mixing hand-written builder classes with AutoValue-generated ones"],"tags":["java","apache-beam","autovalue","reflection"],"backgroundTag":"method-not-implemented","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}