code: private static ListMultimap<TreeNode, Comment> findBlockComments(CompilationUnit unit) {
      ListMultimap<TreeNode, Comment> blockComments =
          MultimapBuilder.hashKeys().arrayListValues().build();
      for (Comment comment : unit.getCommentList()) {
        if (!comment.isBlockComment()) {
          continue;
        }
        int commentPos = comment.getStartPosition();
        AbstractTypeDeclaration containingType = null;
        int containingTypePos = -1;
        for (AbstractTypeDeclaration type : unit.getTypes()) {
          int typePos = type.getStartPosition();
          if (typePos < 0) {
            continue;
          }
          int typeEnd = typePos + type.getLength();
          if (commentPos > typePos && commentPos < typeEnd && typePos > containingTypePos) {
            containingType = type;
            containingTypePos = typePos;
          }
        }
        blockComments.put(containingType != null ? containingType : unit, comment);
      }
      return blockComments;
    }
docs: Finds all block comments and associates them with their containing type.
  This is trickier than you might expect because of inner types.