]> code.delx.au - gnu-emacs/blobdiff - lisp/cedet/srecode/java.el
Update copyright year to 2015
[gnu-emacs] / lisp / cedet / srecode / java.el
index db4d2deee28faf104ee93ad75ffa43aaf2b0dd10..d812df1c935bb5cef2566ef978ba9f511a7e8b84 100644 (file)
@@ -1,6 +1,6 @@
 ;;; srecode/java.el --- Srecode Java support
 
-;; Copyright (C) 2009-2013 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <eric@siege-engine.com>
 
@@ -27,6 +27,7 @@
 
 (require 'srecode/dictionary)
 (require 'semantic/find)
+(require 'ede)
 
 ;;;###autoload
 (defun srecode-semantic-handle-:java (dict)
@@ -39,12 +40,26 @@ FILENAME_AS_CLASS - file converted to a Java class name."
         (fnox (file-name-sans-extension fsym))
         (dir (file-name-directory (buffer-file-name)))
         (fpak fsym)
+        (proj (ede-current-project))
+        (pths (ede-source-paths proj 'java-mode))
         )
     (while (string-match "\\.\\| " fpak)
       (setq fpak (replace-match "_" t t fpak)))
-    (if (string-match "src/" dir)
-       (setq dir (substring dir (match-end 0)))
-      (setq dir (file-name-nondirectory (directory-file-name dir))))
+    ;; We can extract package from:
+    ;; 1) a java EDE project source paths,
+    (cond ((and proj pths)
+           (let* ((pth) (res))
+             (while (and (not res)
+                         (setq pth (expand-file-name (car pths))))
+               (when (string-match pth dir)
+                 (setq res (substring dir (match-end 0))))
+               (setq pths (cdr pths)))
+             (setq dir res)))
+          ;; 2) a simple heuristic
+          ((string-match "src/" dir)
+           (setq dir (substring dir (match-end 0))))
+          ;; 3) outer directory as a fallback
+          (t (setq dir (file-name-nondirectory (directory-file-name dir)))))
     (setq dir (directory-file-name dir))
     (while (string-match "/" dir)
       (setq dir (replace-match "." t t dir)))