public override TooltipItem GetTooltipItem(Vector2 pos)
        {
            Vector2 originalPos = pos;

            if (parserInterface.lastSourceFile == null)
            {
                Reparse();
            }


            pos = editor.doc.GoToEndOfWord(pos, 1);
            Vector2 endWordPos = editor.doc.IncrementPosition(pos, -1);

            pos = editor.doc.GoToEndOfWhitespace(pos, 1);

            ExpressionInfo result = new ExpressionInfo();

            result.startPosition = pos;
            result.endPosition   = pos;
            result.initialized   = true;

            char nextChar       = editor.doc.GetCharAt(pos);
            bool isBeginGeneric = nextChar == '<';

            if (useUnityscript)
            {
                Vector2 charAfterPos = editor.doc.GoToEndOfWhitespace(editor.doc.IncrementPosition(pos, 1), 1);
                char    charAfter    = editor.doc.GetCharAt(charAfterPos);
                if (nextChar == '.' && charAfter == '<')
                {
                    pos            = charAfterPos;
                    nextChar       = editor.doc.GetCharAt(pos);
                    isBeginGeneric = true;
                }
            }
            //GameObject go;

            //go.GetComponent<Vector3>();
            if (isBeginGeneric)
            {
                result.startPosition      = pos;
                result.endPosition        = pos;
                ExpressionResolver.editor = editor;
                result = ExpressionResolver.CountToExpressionEnd(result, 1, ExpressionBracketType.Generic);

                pos = result.endPosition;
                pos = editor.doc.IncrementPosition(pos, 1);
                pos = editor.doc.GoToEndOfWhitespace(pos, 1);

                result.startPosition = pos;
                result.endPosition   = pos;
                nextChar             = editor.doc.GetCharAt(pos);
            }

            bool isFunction = false;

            if (nextChar == '(')
            {
                ExpressionResolver.editor = editor;
                result     = ExpressionResolver.CountToExpressionEnd(result, 1, ExpressionBracketType.Expression);
                pos        = result.endPosition;
                nextChar   = editor.doc.GetCharAt(pos);
                isFunction = true;
            }

            if (!isFunction)
            {
                pos = endWordPos;
            }

            //Debug.Log(nextChar+" "+editor.doc.GetCharAt(endWordPos));

            string str = editor.syntaxRule.ResolveExpressionAt(pos, -1);

            if (useUnityscript)
            {
                str = str.Replace(".<", "<");
            }
            //Debug.Log(str);

            ChainResolver sigChainResolver = new ChainResolver(editor, originalPos);
            ChainItem     item             = null;

            item = sigChainResolver.ResolveChain(str, false);

            TooltipItem tooltipItem = null;

            if (item != null)
            {
                if (item.finalLinkType != null)
                {
                    tooltipItem         = new TooltipItem(item.finalLinkType.Name + " " + item.finalLink.name);
                    tooltipItem.clrType = item.finalLinkType;
                }

                if (item.finalLink.completionItem != null)
                {
                    tooltipItem = new TooltipItem(item.finalLink.completionItem);
                }
            }

            return(tooltipItem);
        }