Function: smart-java-packages
smart-java-packages is a byte-compiled function defined in
hmouse-tag.el.
Signature
(smart-java-packages)
Documentation
If on a package or import line, try to display the associated referent.
Returns non-nil iff on such a line, even if the referent is not found.
Look for packages in smart-java-package-path.
Source Code
;; Defined in ~/.emacs.d/elpa/hyperbole-20260414.325/hmouse-tag.el
(defun smart-java-packages ()
"If on a `package' or `import' line, try to display the associated referent.
Returns non-nil iff on such a line, even if the referent is not found.
Look for packages in `smart-java-package-path'."
(let ((opoint (point)))
(beginning-of-line)
(if (looking-at smart-java-package-regexp)
(let ((keyword-type (buffer-substring-no-properties
(match-beginning 1) (match-end 1)))
(referent (buffer-substring-no-properties (match-beginning 2) (match-end 2)))
(found)
(subpath)
dir-list path subfile)
(goto-char opoint)
(if (string-equal keyword-type "package")
(let ((library-path (smart-java-library-path referent)))
(if library-path
(hpath:find (expand-file-name
(replace-regexp-in-string
"\\." (file-name-as-directory "") referent nil t)
library-path))
;; Show the current directory, which should contain this package.
(hpath:find default-directory)))
;; This is an `import' statement. If it includes a *, show the
;; associated library directory, otherwise, show the specific
;; package.
(if (string-match "\\.\\*" referent)
(setq subfile (substring referent 0 (match-beginning 0))
subfile (replace-regexp-in-string
"\\." (file-name-as-directory "") subfile nil t))
(setq subpath (replace-regexp-in-string
"\\." (file-name-as-directory "") referent nil t)
subfile (concat subpath ".java")))
;;
;; Try to find the path containing referent.
;;
;; Search up the current directory tree for a possible matching
;; directory below which the referent library might live and add
;; this to smart-java-package-path for searching.
(let ((library-path (smart-java-library-path referent)))
(if library-path
(setq dir-list (cons library-path smart-java-package-path))))
(while dir-list
(setq path (expand-file-name subfile (car dir-list))
dir-list (if (setq found (file-exists-p path))
nil
(cdr dir-list))))
(when (and (not found) subpath hyperb:microsoft-os-p)
;; Try .jav suffix.
(setq subfile (concat subpath ".jav")
dir-list smart-java-package-path)
(while dir-list
(setq path (expand-file-name subfile (car dir-list))
dir-list (if (setq found (file-exists-p path))
nil
(cdr dir-list)))))
;;
;; If found, display file
;;
(if found
(if (file-readable-p path)
(hpath:find path)
(beep)
(message "(smart-java-packages): `%s' unreadable" path))
(beep)
(message "(smart-java-packages): `%s' not found" referent))
path))
(goto-char opoint)
nil)))