private static String calcLabelAsync(ValueDescriptor descriptor,
                                       EvaluationContext evaluationContext,
                                       DescriptorLabelListener labelListener)
    throws EvaluateException {
    Value value = descriptor.getValue();
    CompletableFuture<String> future;
    if (value instanceof StringReferenceImpl) {
      DebuggerUtils.ensureNotInsideObjectConstructor((ObjectReference)value, evaluationContext);
      future = DebuggerUtilsAsync.getStringValue((StringReference)value);
    }
    else {
      future = CompletableFuture.completedFuture(calcLabel(descriptor, evaluationContext));
    }
    return calcLabelFromFuture(future, descriptor, labelListener);
  }
private static String calcLabelAsync(ValueDescriptor descriptor,
                                       EvaluationContext evaluationContext,
                                       DescriptorLabelListener labelListener)