In case it is useful to someone:

I've found an issue using jde-usages with the latest jdee (trunk).
Basically I wasn't able to display a inheritance tree (subtypes or
supertypes) for a given class.

Log shown in the messages buffer:

---------------------------------------------

error : (void-variable java\.io\.printstr...@7a3570b0) [2 times]
error : (void-variable //) [3 times]
Beanshell expression evaluation error.
  Expression: {
  boolean _prevShowValue = this.interpreter.getShowResults();
  Object _retVal = null;
  this.interpreter.setShowResults(false);
  _jdeCustEvalFn() { jde.util.Usages.getAllClasses (out); };
  try { _retVal = eval("_jdeCustEvalFn();"); }
  finally {
    this.interpreter.setShowResults(_prevShowValue);
  }
  if (_retVal != null) print(_retVal);
}
  Error: // Error: // Uncaught Exception: Method Invocation
this.interpreter.eval : at Line: 73 : in file: /bsh/commands/eval.bsh :
this .interpreter .eval ( expression , this .caller .namespace ) 

Called from method: eval : at Line: 29 : in file: <unknown file> : eval
( "_jdeCustEvalFn();" ) 
Target exception: Sourced file: inline evaluation of:
``_jdeCustEvalFn();'' : Undefined argument: out  : at Line: 28 : in
file: <unknown file> : ( out ) 

Called from method: _jdeCustEvalFn : at Line: 1 : in file: inline
evaluation of: ``_jdeCustEvalFn();'' : _jdeCustEvalFn ( ) 
 [2 times]

---------------------------------------------


So, basically the error is caused by the undefined argument 'out'.
The error can be fixed by replacing the following 3 lines in the
jde-usages-class-completion.el (line 46):

(jde-jeval (concat "out = new java.io.PrintStream (new
java.io.BufferedOutputStream (new java.io.FileOutputStream (new
java.io.File (\"" classes-file "\"))));"))
(jde-jeval "jde.util.Usages.getAllClasses (out);")
(jde-jeval "out.close();")


By:

(jde-jeval (concat "out = new java.io.PrintStream (new
java.io.BufferedOutputStream (new java.io.FileOutputStream (new
java.io.File (\"" classes-file "\")))); jde.util.Usages.getAllClasses
(out); out.close();"))


Basically, every 'jde-eval' invocation is scoped (between '{...}').
That's why the 'out' variable is not known in the second 'jde-eval'
invocation.
Replacing the 3 tree evaluations by just one fixes the problem.





------------------------------------------------------------------------------

_______________________________________________
jdee-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jdee-users

Reply via email to