docs: private void registerFieldsAndMethodsInContext(TemplateParserContext templateParserContext,
        TypeElement componentTypeElement, Set<String> alreadyDoneVariable,
        Set<String> alreadyDoneMethods) {
      ElementFilter
          .fieldsIn(componentTypeElement.getEnclosedElements())
          .stream()
          .filter(field -> field.getAnnotation(Data.class) != null
              || field.getAnnotation(Prop.class) != null)
          .forEach(field -> {
            String name = field.getSimpleName().toString();
            if (alreadyDoneVariable.contains(name)) {
              return;
            }
  
            alreadyDoneVariable.add(name);
            templateParserContext.addRootVariable(ClassName.get(field.asType()), name);
          });
  
      ElementFilter
          .methodsIn(componentTypeElement.getEnclosedElements())
          .stream()
          .filter(method -> hasAnnotation(method, Computed.class))
          .filter(method -> !"void".equals(method.getReturnType().toString()))
          .forEach(method -> {
            String name = getComputedPropertyName(method);
            if (alreadyDoneVariable.contains(name)) {
              return;
            }
            alreadyDoneVariable.add(name);
  
            TypeMirror propertyType;
            if ("void".equals(method.getReturnType().toString())) {
              propertyType = method.getParameters().get(0).asType();
            } else {
              propertyType = method.getReturnType();
            }
  
            templateParserContext
                .addRootComputedProperty(ClassName.get(propertyType), name,
                    computedPropertyNameToFieldName(name));
          });
  
      ElementFilter
          .methodsIn(componentTypeElement.getEnclosedElements())
          .stream()
          .filter(ComponentGeneratorsUtil::isMethodVisibleInTemplate)
          .map(ExecutableElement::getSimpleName)
          .map(Object::toString)
          .forEach(methodName -> {
            if (alreadyDoneMethods.contains(methodName)) {
              return;
            }
            alreadyDoneMethods.add(methodName);
  
            templateParserContext.addRootMethod(methodName);
          });
  
      getSuperComponentType(componentTypeElement)
          .ifPresent(superComponent -> registerFieldsAndMethodsInContext(
              templateParserContext,
              superComponent,
              alreadyDoneVariable,
              alreadyDoneMethods));
    }