diff scripts/general/methods.m @ 15785:42cff4396de4

Add methods.m which extends methods() to work on Java objects. Deprecate javamethods.m. Rename C++ methods to __methods__. * scripts/deprecated/javamethods.m: Moved from scripts/java. Added deprecated warning. * scripts/java/javamethods.m: Moved to scripts/deprecated. * scripts/general/methods.m: New m-file which accepts Java and Octave class objects and classnames as inputs. * libinterp/octave-value/ov-class.cc(Fmethods): Renamed methods to __methods__ to avoid clash with methods.m * scripts/deprecated/module.mk: Added javamethods.m to deprecated build. * scripts/general/module.mk: Added methods.m to build. * scripts/java/module.mk: Removed javamethods.m from build.
author Rik <rik@octave.org>
date Thu, 13 Dec 2012 22:41:48 -0800
parents
children 921912c92102
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/general/methods.m	Thu Dec 13 22:41:48 2012 -0800
@@ -0,0 +1,76 @@
+## Copyright (C) 2012 Rik Wehbring
+##
+## This file is part of Octave.
+##
+## Octave is free software; you can redistribute it and/or modify it
+## under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3 of the License, or (at
+## your option) any later version.
+##
+## Octave is distributed in the hope that it will be useful, but
+## WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+## General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn  {Built-in Function} {} methods (@var{obj})
+## @deftypefnx {Built-in Function} {} methods ("@var{classname}")
+## @deftypefnx {Built-in Function} {@var{mtds} =} methods (@dots{})
+##
+## Return a cell array containing the names of the methods for the
+## object @var{obj} or the named class @var{classname}.
+## @var{obj} may be an Octave class object or a Java object.
+##
+## @seealso{fieldnames}
+## @end deftypefn
+
+function mtds = methods (obj)
+  
+  if (nargin != 1)
+    print_usage ();
+  endif
+  
+  if (isobject (obj))
+    ## Call internal C++ function for Octave objects
+    mtds_list = __methods__ (obj);
+  elseif (ischar (obj))
+    ## Could be a classname for an Octave class or Java class.
+    ## Try Octave class first.
+    mtds_list = __methods__ (obj);
+    if (isempty (mtds_list))
+      mtds_str = java_invoke ("org.octave.ClassHelper", "getMethods", obj);
+      mtds_list = strsplit (mtds_str, ';');
+    endif
+  elseif (isjava (obj))
+    mtds_str = java_invoke ("org.octave.ClassHelper", "getMethods", obj);
+    mtds_list = strsplit (mtds_str, ';');
+  else
+    error ("methods: Invalid input argument");
+  endif
+
+  if (nargout == 0)
+    classname = ifelse (ischar (obj), obj, class (obj));
+    printf ("Methods for class %s:\n", classname);
+    disp (list_in_columns (mtds_list));
+  else
+    mtds = mtds_list;
+  endif
+
+endfunction
+
+
+## test Octave classname
+%!test
+%! mtds = methods ("ftp");
+%! assert (mtds{1}, "ascii");
+
+## test Java classname
+%!testif HAVE_JAVA 
+%! mtds = methods ("java.lang.Double");
+%! search = strfind (mtds, "java.lang.Double valueOf");
+%! assert (! isempty ([search{:}]));
+