docs: @SuppressWarnings("unused")
      @Internal
      @UsedByGeneratedCode
      protected final Object getValueForConstructorArgument(BeanResolutionContext resolutionContext, BeanContext context, int argIndex) {
          ConstructorInjectionPoint<T> constructorInjectionPoint = getConstructor();
          BeanResolutionContext.Path path = resolutionContext.getPath();
          Argument<?> argument = constructorInjectionPoint.getArguments()[argIndex];
          path.pushConstructorResolve(this, argument);
          try {
              Object result;
              if (context instanceof ApplicationContext) {
                  ApplicationContext propertyResolver = (ApplicationContext) context;
                  AnnotationMetadata argMetadata = argument.getAnnotationMetadata();
                  Optional<String> valAnn = argMetadata.getValue(Value.class, String.class);
                  String prop = valAnn.orElseGet(() ->
                          argMetadata.getValue(Property.class, "name", String.class)
                                  .orElseThrow(() -> new IllegalStateException("Compiled getValueForMethodArgument(..) call present but @Value annotation missing."))
                  );
                  ArgumentConversionContext<?> conversionContext = ConversionContext.of(argument);
                  Optional<?> value = resolveValue(propertyResolver, conversionContext, valAnn.isPresent(), prop);
                  if (argument.getType() == Optional.class) {
                      return resolveOptionalObject(value);
                  } else {
                      // can't use orElseThrow here due to compiler bug
                      if (value.isPresent()) {
                          result = value.get();
                      } else {
                          if (argMetadata.hasDeclaredAnnotation(Nullable.class)) {
                              result = null;
                          } else {
                              throw new DependencyInjectionException(resolutionContext, conversionContext, prop);
                          }
                      }
                  }
              } else {
                  throw new DependencyInjectionException(resolutionContext, argument, "BeanContext must support property resolution");
              }
              path.pop();
              return result;
          } catch (NoSuchBeanException | BeanInstantiationException e) {
              throw new DependencyInjectionException(resolutionContext, argument, e);
          }
      }