+Jalview._setAPI = function(app) {
+
+ // Create a map of nonqualified methods to qualified methods
+ // based on parameter type.
+ var cl = Class.forName$S("jalview.bin.Jalview");
+ if (!cl.$clazz$.getInstance$) {
+ System.err.println(app.__Info.main + " has no getInstance() method; interface creation skipped.");
+ return;
+ }
+ var instance = app._instance = cl.$clazz$.getInstance$();
+ var apply = function(args, methods) {
+ return methods[args.length].apply(instance, args);
+ }
+ var getMap = function(cl) {
+ var methods = cl.getMethods$();
+ var p = cl.$clazz$.prototype;
+ var map = {};
+ for (var i = 0, n = methods.length; i < n; i++) {
+ var qname = methods[i].name;
+ if (cl.$clazz$[qname])
+ continue; // static method
+ var s = qname.split("$");
+ var name = s[0];
+ if (!name)
+ continue; // $init$, $cinit$
+ if (app[name]) {
+ name += "$";
+ System.err.println(app._id + "." + name + " is " + qname);
+ };
+ (m = map[name])||(m = map[name] = []);
+ var j = p[qname].length;
+ if (m[j]) {
+ System.err.println(app._id + ".instance." + qname + " must be called directly.");
+ app[qname] = p[qname];
+ } else {
+ System.out.println(app._id + "." + name + "(" + j + ") aliases " + app._id + ".instance." + qname);
+ m[j] = p[qname];
+ }
+ }
+ return map;
+ }
+ var getFunc = function(map,i) {
+ return function(){return apply(arguments,map[i])};
+ }
+ var map = getMap(Clazz._4Name(app.__Info.main));
+ var n = 0;
+ for (var i in map) {
+ n++;
+ app[i] = getFunc(map,i);
+ }
+ System.err.println(app._id + " contains " + n + " JavaScript interface methods");
+}