Hello,
Attached is an improved advised version `jde-create-imenu-index' and
`jde-imenu-index-class' which displays full method signatures in the
"Classes" imenu depending on the setting of the customizable option
`jde-enable-full-method-signatures-index-menu'.
Sincerely,
David <[EMAIL PROTECTED]>
(defcustom jde-enable-full-method-signatures-index-menu nil
"If non-nil the \"Classes\" imenu displays full method signatures.
Use \"*rescan*\" to update the imenu when this option is changed."
:group 'jde-project
:type 'boolean)
(defadvice jde-imenu-index-class (around my-jde-imenu-index-class (tokens) activate)
"Creates an imenu index for a class. Displays full method signatures
if `jde-enable-full-method-signatures-index-menu' is non-nil."
(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-pos (semantic-token-start method-token))
method-sig)
(if jde-enable-full-method-signatures-index-menu
(let ((method-type (semantic-token-type method-token))
(method-args (semantic-token-function-args method-token)))
(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 method-sig (format "%s()" method-name)))
(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)))
(defadvice jde-create-imenu-index (around my-jde-create-imenu-index () activate)
"Creates an imenu index for a Java source buffer.
This function uses the semantic bovinator to index the buffer."
;; The following clears the toplevel bovin cache for the current
;; buffer and forces *rescan* to work even if the current buffer has
;; not been modifified. This is needed to rebuild the "Classes" imenu when
;; `jde-enable-full-method-signatures-index-menu' option is changed.
(semantic-clear-toplevel-cache)
(let* ((tokens (semantic-bovinate-toplevel))
(packages (semantic-find-nonterminal-by-token 'package tokens))
(depends (semantic-find-nonterminal-by-token 'include tokens))
(classes (semantic-find-nonterminal-by-token 'type tokens))
depend-index
index)
(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)))
(while depends
(let* ((depend-token (car depends))
(depend-name (semantic-token-name depend-token))
(depend-pos (semantic-token-start depend-token)))
(setq depend-index (append depend-index (list (cons depend-name depend-pos)))))
(setq depends (cdr depends)))
(if depend-index
(setq index (append index (list (cons "Imports" depend-index)))))
(while packages
(let* ((package-token (car packages))
(package-name (semantic-token-name package-token))
(package-pos (semantic-token-start package-token)))
(setq index
(append
index
(list (cons (concat "package " package-name) package-pos)))))
(setq packages (cdr packages)))
(setq ad-return-value index)))