Re: [jde] Re: [jde] problems finding symbol definition if class implements interface

2004-10-10 Thread Raul Acevedo
On Sat, 2004-10-09 at 00:32 -0400, Paul Kinnucan wrote:
 Raul Acevedo writes:
   Looking at the JDEE source, it looks like it just doesn't know about
   symbols in interfaces at all.  In particular, jde-open-jump-to-class
   only knows to look in the parent class, but it doesn't consider any
   implemented interfaces, either in the current class or in any parent
   class.  Is this a known limitation?
   
 
 Not to me. jde-open-jump-to-class has other limitations as well. I
 plan to work on removing them as soon as possible. If anybody else
 wants to jump in and help with this, feel free.

Here's an implementation that looks through all interfaces in addition
to the parent classes.  It keeps a list of already seen classes lest we
get into an infinite loop somehow.  It also restores buffer positions
after it visits a buffer and doesn't find what it wants, and does a
bury-buffer on all intermediate buffers visited so if the definition you
want is in another buffer, and you do Ctrl-x b, your previous buffer is
right there (instead of the default now being some random file you
haven't explicitly visited).

This method is somewhat complicated so I'm sure I haven't done it the
best way and haven't taken everything into account, but it Works For Me.

Ideally though this would be done entirely differently... rather than
visiting a bunch of files, maybe there's a way to use the jde-usages
plugin data to find the definition directly and more efficiently.

Raul

(defun jde-open-jump-to-class (parsed-symbol class-name java-file-name)
  Opens JAVA-FILE-NAME and place the cursor in the parsed variable
  (let* (tokens super-class seen-before old-point (first-time t))
;; if the current buffer contains java-file-name do not try to
;; open the file
(if (not (string-equal (buffer-file-name) java-file-name))
(funcall (or jde-open-cap-ff-function-temp-override
 jde-open-class-at-point-find-file-function)
 java-file-name))
(setq old-point (point))
(search-forward { nil t)
(setq tokens (append (semantic-tag-type-superclasses 
(semantic-current-tag-of-class 'type))
 (semantic-tag-type-interfaces (semantic-current-tag-of-class 
'type
(setq super-class (car tokens))
(when (and (fboundp 'senator-search-forward) (not (string= parsed-symbol )))
  (beginning-of-buffer)
  (senator-parse)
  (setq parsed-symbol (concat \\b parsed-symbol \\b))
  (while (and (not (senator-re-search-forward parsed-symbol nil t))
  (consp tokens))
(message (format tokens %s  tokens))
(let ((token (car tokens)))
  (setq tokens (cdr tokens))
  (if (and (stringp token)
   (not (member token seen-before)))
  ;; searching for the thing-of-interest has failed 
  ;; let's try in the base class
  (progn
(setq seen-before (cons token seen-before))
(goto-char old-point)
(if (not first-time) (bury-buffer))
(let ((jde-open-cap-ff-function-temp-override 'find-file))
  (jde-show-superclass-source-2 (ncons token)))
(setq old-point (point))
(beginning-of-buffer)
(senator-parse)
(search-forward { nil t)
(setq tokens (append tokens
 (semantic-tag-type-superclasses 
(semantic-current-tag-of-class 'type))
 (semantic-tag-type-interfaces 
(semantic-current-tag-of-class 'type
;;if it is the first time try in the class definition
;;itself.
(if first-time
(progn 
  (setq first-time nil)
  (senator-re-search-forward
   (progn
 (string-match .*\\.\\([^.]+\\)$ (concat . class-name))
 (match-string 1 (concat . class-name)))
   nil t)))
(if (not super-class)
(error Method not found))
(setq super-class token




Re: [jde] Re: [jde] problems finding symbol definition if class implements interface

2004-10-10 Thread Paul Kinnucan
Raul Acevedo writes:
  On Sat, 2004-10-09 at 00:32 -0400, Paul Kinnucan wrote:
   Raul Acevedo writes:
 Looking at the JDEE source, it looks like it just doesn't know about
 symbols in interfaces at all.  In particular, jde-open-jump-to-class
 only knows to look in the parent class, but it doesn't consider any
 implemented interfaces, either in the current class or in any parent
 class.  Is this a known limitation?
 
   
   Not to me. jde-open-jump-to-class has other limitations as well. I
   plan to work on removing them as soon as possible. If anybody else
   wants to jump in and help with this, feel free.
  

Hi Raul,

I'll take a look at your implementation as soon as possible. At the
moment, I am working on integrating and qualifying a large backlog of
contributions and so it may take me a few days to get to yours.

Regards,

Paul

  Here's an implementation that looks through all interfaces in addition
  to the parent classes.  It keeps a list of already seen classes lest we
  get into an infinite loop somehow.  It also restores buffer positions
  after it visits a buffer and doesn't find what it wants, and does a
  bury-buffer on all intermediate buffers visited so if the definition you
  want is in another buffer, and you do Ctrl-x b, your previous buffer is
  right there (instead of the default now being some random file you
  haven't explicitly visited).
  
  This method is somewhat complicated so I'm sure I haven't done it the
  best way and haven't taken everything into account, but it Works For Me.
  
  Ideally though this would be done entirely differently... rather than
  visiting a bunch of files, maybe there's a way to use the jde-usages
  plugin data to find the definition directly and more efficiently.
  
  Raul
  
  (defun jde-open-jump-to-class (parsed-symbol class-name java-file-name)
Opens JAVA-FILE-NAME and place the cursor in the parsed variable
(let* (tokens super-class seen-before old-point (first-time t))
  ;; if the current buffer contains java-file-name do not try to
  ;; open the file
  (if (not (string-equal (buffer-file-name) java-file-name))
  (funcall (or jde-open-cap-ff-function-temp-override
   jde-open-class-at-point-find-file-function)
   java-file-name))
  (setq old-point (point))
  (search-forward { nil t)
  (setq tokens (append (semantic-tag-type-superclasses 
  (semantic-current-tag-of-class 'type))
   (semantic-tag-type-interfaces 
  (semantic-current-tag-of-class 'type
  (setq super-class (car tokens))
  (when (and (fboundp 'senator-search-forward) (not (string= parsed-symbol )))
(beginning-of-buffer)
(senator-parse)
(setq parsed-symbol (concat \\b parsed-symbol \\b))
(while (and (not (senator-re-search-forward parsed-symbol nil t))
(consp tokens))
  (message (format tokens %s  tokens))
  (let ((token (car tokens)))
(setq tokens (cdr tokens))
(if (and (stringp token)
 (not (member token seen-before)))
;; searching for the thing-of-interest has failed 
;; let's try in the base class
(progn
  (setq seen-before (cons token seen-before))
  (goto-char old-point)
  (if (not first-time) (bury-buffer))
  (let ((jde-open-cap-ff-function-temp-override 'find-file))
(jde-show-superclass-source-2 (ncons token)))
  (setq old-point (point))
  (beginning-of-buffer)
  (senator-parse)
  (search-forward { nil t)
  (setq tokens (append tokens
   (semantic-tag-type-superclasses 
  (semantic-current-tag-of-class 'type))
   (semantic-tag-type-interfaces 
  (semantic-current-tag-of-class 'type
  ;;if it is the first time try in the class definition
  ;;itself.
  (if first-time
  (progn 
(setq first-time nil)
(senator-re-search-forward
 (progn
   (string-match .*\\.\\([^.]+\\)$ (concat . class-name))
   (match-string 1 (concat . class-name)))
 nil t)))
  (if (not super-class)
  (error Method not found))
  (setq super-class token
  
  



Re: [jde] problems finding symbol definition if class implements interface

2004-10-08 Thread Raul Acevedo
Looking at the JDEE source, it looks like it just doesn't know about
symbols in interfaces at all.  In particular, jde-open-jump-to-class
only knows to look in the parent class, but it doesn't consider any
implemented interfaces, either in the current class or in any parent
class.  Is this a known limitation?

Raul

On Thu, 2004-10-07 at 15:49 -0700, Raul Acevedo wrote:
 I have something like:
 
 public interface FooInterface {
 public static final int FOO = 1;
 }
 
 public class FooClass implements FooInterface {
 public void doSomething() {
 System.out.println(I'm doing something with  + FOO);
 }
 }
 
 If I put the cursor on the System.out.println, on FOO,
 jde-open-class-at-point can't find the definition.  If I write
 FooInterface.FOO instead of FOO, it's fine, but FOO by itself is not. 
 
 Raul



Re: [jde] problems finding symbol definition if class implements interface

2004-10-08 Thread Paul Kinnucan
Raul Acevedo writes:
  Looking at the JDEE source, it looks like it just doesn't know about
  symbols in interfaces at all.  In particular, jde-open-jump-to-class
  only knows to look in the parent class, but it doesn't consider any
  implemented interfaces, either in the current class or in any parent
  class.  Is this a known limitation?
  

Not to me. jde-open-jump-to-class has other limitations as well. I
plan to work on removing them as soon as possible. If anybody else
wants to jump in and help with this, feel free.

Paul


  Raul
  
  On Thu, 2004-10-07 at 15:49 -0700, Raul Acevedo wrote:
   I have something like:
   
   public interface FooInterface {
   public static final int FOO = 1;
   }
   
   public class FooClass implements FooInterface {
   public void doSomething() {
   System.out.println(I'm doing something with  + FOO);
   }
   }
   
   If I put the cursor on the System.out.println, on FOO,
   jde-open-class-at-point can't find the definition.  If I write
   FooInterface.FOO instead of FOO, it's fine, but FOO by itself is not. 
   
   Raul