Hello,

> Ittay Freiman wrote:
> 
> Hello,
> 
> I've been using imenu for some time. It is a great package except for
> one thing: It doesn't handle overloaded methods. This means that in
> the listings (either menu / completion) I just see the method name,
> without the signature of its parameters. Can this be fixed?

Following is an advised `jde-imenu-index-class' which displays full
method signatures in the "Classes" imenu.

Sincerely,
David

----------------------------------------------------------------------
(defadvice jde-imenu-index-class (around my-jde-imenu-index-class
(tokens) activate)
  "Creates an imenu index for a class. This version displays full method
signatures."
  (let ((methods (semantic-find-nonterminal-by-token 'function tokens))
        (fields  (semantic-find-nonterminal-by-token 'variable tokens))
        (classes (semantic-find-nonterminal-by-token 'type     tokens))
        index)

    (while methods
      (let* ((method-token (car methods))
             (method-name  (semantic-token-name method-token))
             (method-type  (semantic-token-type method-token))
             (method-args  (semantic-token-function-args method-token))
             (method-pos   (semantic-token-start method-token))
             method-sig)
        (setq method-sig (if method-type
                             (format "%s %s(" method-type method-name)
                           (format "%s(" method-name)))
        (while method-args
          (let ((method-arg-token (car method-args))
                method-arg-type)
            (when method-arg-token
              (setq method-arg-type (semantic-token-type
method-arg-token))
              (setq method-sig (concat method-sig method-arg-type))))
          (setq method-args (cdr method-args))
          (if method-args (setq method-sig (concat method-sig ","))))
        (setq method-sig (concat method-sig ")"))
        (setq index
              (append
               index (list (cons method-sig method-pos)))))
      (setq methods (cdr methods)))

    (while fields
      (let* ((field-token (car fields))
             (field-name  (semantic-token-name  field-token))
             (field-pos   (semantic-token-start field-token)))
        (setq index 
              (append 
               index (list (cons field-name field-pos)))))
      (setq fields (cdr fields)))

    (while classes
      (let* ((class-token  (car classes))
             (class-name   (semantic-token-name       class-token))
             (parts        (semantic-token-type-parts class-token))
             (class-index  (jde-imenu-index-class parts)))
        (setq index 
              (append 
               index 
               (list (cons (concat "class " class-name) class-index)))))
      (setq classes (cdr classes)))
    (setq ad-return-value index)))
----------------------------------------------------------------------

Reply via email to