docs: private Pair<Element, Element> getFieldAndSetterForProperty(
        Symbol.MethodSymbol symbol, String capPropName) {
      Element field = null;
      Element getter = null;
      String fieldName = decapitalize(capPropName);
      String getterName = "get" + capPropName;
      for (Symbol elem : symbol.owner.getEnclosedElements()) {
        if (elem.getKind().isField() && elem.getSimpleName().toString().equals(fieldName)) {
          if (field != null) {
            throw new RuntimeException("already found field " + fieldName);
          }
          field = elem;
        } else if (elem.getKind().equals(ElementKind.METHOD)
            && elem.getSimpleName().toString().equals(getterName)) {
          if (getter != null) {
            throw new RuntimeException("already found getter " + getterName);
          }
          getter = elem;
        }
      }
      if (field != null && field.asType().getKind().isPrimitive()) {
        // ignore primitive properties
        return Pair.of(null, null);
      }
      return Pair.of(field, getter);
    }