docs: public @Nullable io.micronaut.inject.ast.Element visit(
              Element element, AnnotationMetadata annotationMetadata) {
          if (element instanceof VariableElement) {
              final JavaFieldElement e = new JavaFieldElement(
                      (VariableElement) element,
                      annotationMetadata,
                      visitorContext);
              visitor.visitField(
                      e,
                      visitorContext
              );
              return e;
          } else if (element instanceof ExecutableElement) {
              ExecutableElement executableElement = (ExecutableElement) element;
              if (executableElement.getSimpleName().toString().equals("<init>")) {
                  final JavaConstructorElement e = new JavaConstructorElement(
                          executableElement,
                          annotationMetadata, visitorContext);
                  visitor.visitConstructor(
                          e,
                          visitorContext
                  );
                  return e;
              } else {
                  final JavaMethodElement e = new JavaMethodElement(
                          executableElement,
                          annotationMetadata, visitorContext);
                  visitor.visitMethod(
                          e,
                          visitorContext
                  );
                  return e;
              }
          } else if (element instanceof TypeElement) {
              TypeElement typeElement = (TypeElement) element;
              boolean isEnum = JavaModelUtils.resolveKind(typeElement, ElementKind.ENUM).isPresent();
              if (isEnum) {
                  final JavaEnumElement e = new JavaEnumElement(
                          typeElement,
                          annotationMetadata,
                          visitorContext,
                          Collections.emptyList());
                  visitor.visitClass(
                          e,
                          visitorContext
                  );
                  return e;
              } else {
                  final JavaClassElement e = new JavaClassElement(
                          typeElement,
                          annotationMetadata,
                          visitorContext);
                  visitor.visitClass(
                          e,
                          visitorContext
                  );
                  return e;
              }
          }
          return null;
      }