code: private void registerLocalComponents(TypeElement component, MethodSpec.Builder initBuilder,
        List<CodeBlock> staticInitParameters) {
      List<TypeMirror> localComponents = getComponentLocalComponents(elements, component);
  
      if (localComponents.isEmpty()) {
        return;
      }
  
      initBuilder.addStatement("$T<$T> components = jsConstructor.getOptionsComponents()",
          JsPropertyMap.class,
          ParameterizedTypeName.get(VueJsAsyncProvider.class, VueJsConstructor.class));
  
      localComponents.forEach(localComponent -> {
        ClassName factory = componentFactoryName(localComponent);
  
        String parameterName = factory.reflectionName().replaceAll("\\.", "_");
        initBuilder.addParameter(providerOf(factory), parameterName);
        staticInitParameters.add(CodeBlock.of("() -> $T.get()", factory));
  
        initBuilder.addStatement(
            "components.set($L.get().getComponentTagName(), render -> render.accept($L.get().getJsConstructor()))",
            parameterName,
            parameterName);
      });
    }
docs: Register components passed to the annotation. The parameters of the generated method are the
  factories for the local components we depend on. Their values are either injected, or pass
  directly when using the "get()" static accessor.
  
  @param component The Component we generate for
  @param initBuilder The builder for the init method
  @param staticInitParameters The parameters of the static init function