code: public static LineAndColumn getLineAndColumn(INode anyNode, int documentOffset) {
  		// special treatment for inconsistent nodes such as SyntheticLinkingLeafNode
  		if (anyNode.getParent() == null && !(anyNode instanceof RootNode)) {
  			return LineAndColumn.from(1,1);
  		}
  		return InternalNodeModelUtils.getLineAndColumn(anyNode, documentOffset);
  	}
docs: Compute the line and column information at the given offset from any node that belongs the the document. The line is one-based, e.g.
  the first line has the line number '1'. The line break belongs the line that it breaks. In other words, the first line break in the
  document also has the line number '1'. The column number starts at '1', too. In effect, the document offset '0' will always return
  line '1' and column '1'.
  
  If the given documentOffset points exactly to {@code anyNode.root.text.length}, it's assumed to be a virtual character thus
  the offset is valid and the column and line information is returned as if it was there.
  
  This contract is in sync with {@link org.eclipse.emf.ecore.resource.Resource.Diagnostic}.
  
  @throws IndexOutOfBoundsException
  if the document offset does not belong to the document,
  {@code documentOffset < 0 || documentOffset > anyNode.rootNode.text.length}