Function: srecode-semantic-apply-tag-to-dict-default
srecode-semantic-apply-tag-to-dict-default is a byte-compiled function
defined in semantic.el.gz.
Signature
(srecode-semantic-apply-tag-to-dict-default TAGOBJ DICT)
Documentation
Insert features of TAGOBJ into dictionary DICT.
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/srecode/semantic.el.gz
(defun srecode-semantic-apply-tag-to-dict-default (tagobj dict)
"Insert features of TAGOBJ into dictionary DICT."
;; Store the sst into the dictionary.
(srecode-dictionary-set-value dict "TAG" tagobj)
;; Pull out the tag for the individual pieces.
(let ((tag (oref tagobj prime)))
(srecode-dictionary-set-value dict "NAME" (semantic-tag-name tag))
(srecode-dictionary-set-value dict "TYPE" (semantic-format-tag-type tag nil))
(run-hook-with-args 'srecode-semantic-apply-tag-augment-hook tag dict)
(cond
;;
;; FUNCTION
;;
((eq (semantic-tag-class tag) 'function)
;; FCN ARGS
(let ((args (semantic-tag-function-arguments tag)))
(while args
(let ((larg (car args))
(subdict (srecode-dictionary-add-section-dictionary
dict "ARGS")))
;; Clean up elements in the arg list.
(if (stringp larg)
(setq larg (semantic-tag-new-variable
larg nil nil)))
;; Apply the sub-argument to the subdictionary.
(srecode-semantic-apply-tag-to-dict
(srecode-semantic-tag (semantic-tag-name larg)
:prime larg)
subdict)
)
;; Next!
(setq args (cdr args))))
;; PARENTS
(let ((p (semantic-tag-function-parent tag)))
(when p
(srecode-dictionary-set-value dict "PARENT" p)
))
;; EXCEPTIONS (java/c++)
(let ((exceptions (semantic-tag-get-attribute tag :throws)))
(while exceptions
(let ((subdict (srecode-dictionary-add-section-dictionary
dict "THROWS")))
(srecode-dictionary-set-value subdict "NAME" (car exceptions))
)
(setq exceptions (cdr exceptions)))
)
)
;;
;; VARIABLE
;;
((eq (semantic-tag-class tag) 'variable)
(when (semantic-tag-variable-default tag)
(let ((subdict (srecode-dictionary-add-section-dictionary
dict "HAVEDEFAULT")))
(srecode-dictionary-set-value
subdict "VALUE" (semantic-tag-variable-default tag))))
)
;;
;; TYPE
;;
((eq (semantic-tag-class tag) 'type)
(dolist (p (semantic-tag-type-superclasses tag))
(let ((sd (srecode-dictionary-add-section-dictionary
dict "PARENTS")))
(srecode-dictionary-set-value sd "NAME" p)
))
(dolist (i (semantic-tag-type-interfaces tag))
(let ((sd (srecode-dictionary-add-section-dictionary
dict "INTERFACES")))
(srecode-dictionary-set-value sd "NAME" i)
))
; NOTE : The members are too complicated to do via a template.
; do it via the insert-tag solution instead.
;
; (dolist (mem (semantic-tag-type-members tag))
; (let ((subdict (srecode-dictionary-add-section-dictionary
; dict "MEMBERS")))
; (when (stringp mem)
; (setq mem (semantic-tag-new-variable mem nil nil)))
; (srecode-semantic-apply-tag-to-dict
; (srecode-semantic-tag (semantic-tag-name mem)
; :prime mem)
; subdict)))
))))