void updateReturnValueTemplate(UExpression expression) {
    LOG.assertTrue(isInitialized());
    if (expression == null) return;
    synchronized (this) {
      if (myReturnValueTemplate == null) return;
    }

    if (!getSuperMethods().isEmpty()) {
      for (final RefMethod refMethod : getSuperMethods()) {
        RefMethodImpl refSuper = (RefMethodImpl)refMethod;
        refSuper.initializeIfNeeded();
        refSuper.updateReturnValueTemplate(expression);
      }
    }
    else {
      if (RefJavaUtil.getInstance().isCallToSuperMethod(expression, getUastElement())) return;
      String newTemplate = createReturnValueTemplate(expression, this);

      synchronized (this) {
        if (Strings.areSameInstance(myReturnValueTemplate, RETURN_VALUE_UNDEFINED)) {
          myReturnValueTemplate = newTemplate;
        }
        else if (!Objects.equals(myReturnValueTemplate, newTemplate)) {
          myReturnValueTemplate = null;
        }
      }
    }
  }
void updateReturnValueTemplate(UExpression expression)