private void addTargetDocumentation(@NotNull PyTargetExpression target, boolean isProperty) {
    if (isAttribute() && !isProperty) {
      final PyClass containingClass = target.getContainingClass();
      @SuppressWarnings("ConstantConditions") final HtmlChunk link = getLinkToClass(containingClass, true);
      String targetName = target.getName();
      if (link != null && targetName != null) {
        if (PyUtil.isInstanceAttribute(target)) {
          myBody.appendRaw(PyPsiBundle.message("QDOC.instance.attribute", HtmlChunk.text(targetName).bold(), link));
        }
        else {
          myBody.appendRaw(PyPsiBundle.message("QDOC.class.attribute", HtmlChunk.text(targetName).bold(), link));
        }
        myBody.br();
      }
      // if there is no separate doc for attribute we will try to take it from class doc
      if (getEffectiveDocStringExpression(target) == null) {
        final PyStringLiteralExpression docString = getEffectiveDocStringExpression(containingClass);
        if (docString != null) {
          final StructuredDocString structuredDocString = DocStringUtil.parse(docString.getStringValue());
          final String description = structuredDocString.getAttributeDescription(targetName);
          if (StringUtil.isNotEmpty(description)) {
            myContent.append(runFormatterService(description));
          }
        }
      }
    }
    myBody.append(PythonDocumentationProvider.describeTarget(target, myContext));
  }
private void addTargetDocumentation(@NotNull PyTargetExpression target, boolean isProperty)