Here is my stab at fixing "jde-open-class-source fails with full class
name".
This also deals with some of the proposals I had made earlier.
(defun jde-normalize-class-name (class-name)
"Normalize the class name by substituting / or \\ with ."
(substitute ?. ?\\ (substitute ?. ?/ class-name))
)
(defun jde-open-class-source ( &optional unqual-class )
"Displays source of the class whose name appears at point in the current
Java buffer. This command finds only classes that reside in the source paths
specified by `jde-db-source-directories'. You should provide a global
setting
for this variable in your .emacs file to accommodate source files that are
not associated with any project."
(interactive)
(condition-case err
(let* ((unqualified-name
(jde-normalize-class-name (or unqual-class
(read-from-minibuffer "Class: " (thing-at-point
'symbol)))))
(class-names
(if (position ?. unqualified-name)
(list unqualified-name)
;;expand the names into full names, or a list of names
(jde-jeval-r
(concat
"jde.util.JdeUtilities.getQualifiedName(\""
unqualified-name "\");"))))
)
;;Check return value of QualifiedName
(if (or (eq class-names nil)
(not (listp class-names)))
(error "Cannot find %s" unqualified-name))
;; Turn off switching project settings to avoid
;; resetting jde-db-source-directories.
(let ((old-value jde-project-context-switching-enabled-p))
(setq jde-project-context-switching-enabled-p nil)
;;If the list is only one long
(if (eq 1 (length class-names))
;;then show it
(progn(other-window 1)
(jde-find-class-source (car class-names)))
;;else let the user choose
(let ((class (efc-query-options class-names "Which class?")))
(if class
(jde-find-class-source class))))
(setq jde-project-context-switching-enabled-p old-value)))
(error
(message "%s" (error-message-string err)))))