@Override
  protected TextChunk @NotNull [] computeText() {
    TextChunk[] usageChunks = super.computeText();

    List<TextChunk> result = new ArrayList<>();

    for (int i = 0, length = usageChunks.length; i < length; i++) {
      TextChunk textChunk = usageChunks[i];
      SimpleTextAttributes attributes = textChunk.getSimpleAttributesIgnoreBackground();
      if (isForcedLeaf()) {
        attributes = attributes.derive(attributes.getStyle(), NamedColorUtil.getInactiveTextColor(), attributes.getBgColor(), attributes.getWaveColor());
      }
      result.add(new TextChunk(attributes.toTextAttributes(), textChunk.getText()));
      if (i == 0) {
        result.add(new TextChunk(new TextAttributes(), FontUtil.spaceAndThinSpace()));
      }
    }

    if (indexNesting != 0) {
      result.add(new TextChunk(
        SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES.toTextAttributes(),
        " " + JavaBundle.message("slice.usage.message.tracking.container.contents",
                                 containerName,
                                 syntheticField.isEmpty() ? "" : "." + syntheticField)));
    }

    PsiElement element = getElement();
    PsiMethod method;
    PsiClass aClass;
    while (true) {
      method = PsiTreeUtil.getParentOfType(element, PsiMethod.class);
      aClass = method == null ? PsiTreeUtil.getParentOfType(element, PsiClass.class) : method.getContainingClass();
      if (aClass instanceof PsiAnonymousClass) {
        element = aClass;
      }
      else {
        break;
      }
    }

    int methodOptions = PsiFormatUtilBase.SHOW_NAME | PsiFormatUtilBase.SHOW_PARAMETERS | PsiFormatUtilBase.SHOW_CONTAINING_CLASS;
    String location = method != null
                      ? PsiFormatUtil.formatMethod(method, PsiSubstitutor.EMPTY, methodOptions, PsiFormatUtilBase.SHOW_TYPE, 2)
                      : aClass != null ? PsiFormatUtil.formatClass(aClass, PsiFormatUtilBase.SHOW_NAME) : null;
    if (location != null) {
      TextAttributes attributes = SimpleTextAttributes.GRAY_ATTRIBUTES.toTextAttributes();
      result.add(new TextChunk(attributes, " " + JavaBundle.message("slice.usage.message.location", location)));
    }

    Language language = element == null ? JavaLanguage.INSTANCE : element.getLanguage();
    if (language != JavaLanguage.INSTANCE) {
      SliceLanguageSupportProvider foreignSlicing = LanguageSlicing.getProvider(element);
      if (foreignSlicing == null) {
        TextAttributes attributes = SimpleTextAttributes.EXCLUDED_ATTRIBUTES.toTextAttributes();
        result.add(new TextChunk(attributes, " " + JavaBundle.message("slice.usage.message.in.file.stopped.here", language.getDisplayName())));
      }
    }

    SliceValueFilter filter = params.valueFilter;
    SliceUsage parent = getParent();
    SliceValueFilter parentFilter = parent == null ? null : parent.params.valueFilter;
    String filterText = filter == null || getElement() == null ? "" : filter.getPresentationText(getElement());
    String parentFilterText = parentFilter == null || parent.getElement() == null ? "" :
                              parentFilter.getPresentationText(parent.getElement());
    if (!filterText.isEmpty() && !filterText.equals(parentFilterText)) {
      String message = LangBundle.message("slice.analysis.title.filter", filterText);
      result.add(new TextChunk(SimpleTextAttributes.GRAY_ATTRIBUTES.toTextAttributes(), " " + message));
    }
    if (requiresAssertionViolation) {
      TextAttributes attributes = SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES.toTextAttributes();
      result.add(new TextChunk(attributes, " " + JavaBundle.message("slice.usage.message.assertion.violated")));
    }

    return result.toArray(TextChunk.EMPTY_ARRAY);
  }
@Override
  protected TextChunk @NotNull [] computeText()