/usr/share/SuperCollider/SCClassLibrary/DefaultLibrary/dumpFullInterface.sc is in supercollider-common 1:3.4.5-1wheezy1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | + Class {
dumpFullInterface {
("\nFull Interface for " ++ this.name).postln;
// post the superclasses
("\nSuperclasses: " ++ this.superclasses).postln;
// Instance methods
this.dumpAllMethods;
// Class methods
this.class.dumpAllMethods;
}
dumpAllMethods {
var methodlist, superclasses, prependString, superPrependString, name;
methodlist = IdentitySet[];
if(this.isMetaClass,
{ prependString = "\nClass Methods for ";
superPrependString = "\nClass Methods inherited from ";
name = this.asString.copyToEnd(5);
superclasses = name.asSymbol.asClass.superclasses;
},
{ prependString = "\nInstance Methods for ";
superPrependString = "\nInstance Methods inherited from ";
name = this.name;
superclasses = this.superclasses;
}
);
(prependString ++ name ++ "\n").postln;
this.methods.do({ arg meth;
var numargs, methname;
methname = meth.name;
methodlist.add(methname);
numargs = meth.argNames.size - 1;
" ".post;
methname.post;
" ( ".post;
meth.argNames.do({ arg name, i;
if (i > 0, { // skip 'this'
name.post;
if (i < numargs, {
", ".post;
});
});
});
" )\n".post;
});
// Methods for superclasses
superclasses.do({ arg superclass, superobject, supername;
if(this.isMetaClass,
{
superobject = superclass.class;
},
{
superobject = superclass;
}
);
supername = superobject.asString;
if(supername.containsStringAt(0, "Meta_"), { supername = supername.copyToEnd(5) });
(superPrependString ++ supername ++ "\n").postln;
superobject.methods.do({ arg meth;
var numargs, methname;
methname = meth.name;
if(methodlist.includes(methname).not, {
methodlist.add(methname);
numargs = meth.argNames.size - 1;
" ".post;
methname.post;
" ( ".post;
meth.argNames.do({ arg name, i;
if (i > 0, { // skip 'this'
name.post;
if (i < numargs, {
", ".post;
});
});
});
" )\n".post;
});
});
});
// include methods for Class
if(this.isMetaClass, {"\nMethods inherited from Class\n".postln; Class.dumpInterface; });
}
dumpMethodList {
var mList, sc;
mList = IdentityDictionary.new; // repository for methods
this.collectMethods(mList); // get them
sc = this; // to print superclass chain
{ sc != Object }.while({
(sc.name ++ " : ").post;
sc = sc.superclass;
});
"Object".postln;
mList.asSortedArray.do({ |pair|
(pair[0] ++ " <" ++ pair[1].ownerClass.name ++ "-"
++ pair[0] ++ ">").post;
(pair[1].argNames.size > 1).if({
" (".post;
pair[1].argNames.do({ |argname, i|
(i > 1).if({ ", ".post });
(i > 0).if({ argname.post; });
});
")".post;
});
"".postln;
});
}
collectMethods { arg list;
// only collect if not Object or Class
((this.name != \Object) && (this.name != \Class)).if({ this.methods.do({ |meth|
// if keys already includes methodname,
// then a subclass has overridden this superclass method, so don't add
list.keys.includes(meth.name).not.if({
list.put((meth.name.asString).asSymbol, meth);
});
});
superclass.asClass.collectMethods(list); // go up a level
});
}
helpFileForMethod {
arg methodSymbol;
this.findRespondingMethodFor(methodSymbol).ownerClass.openHelpFile;
}
// show all subclasses of this class sorted in alpha order (not tree order)
dumpSubclassList {
var list, listCollector;
// recursive function to collect class objects
listCollector = { arg node, l;
l.add(node);
node.subclasses.do({ arg n; listCollector.value(n, l) });
};
list = List.new;
listCollector.value(this, list); // do the recursion
list.sort({ arg a, b; a.name < b.name }) // sort it
.do({ arg n; // and iterate to post the class names (w/ supers)
n.name.post;
n.superclasses.do({ arg s; (" : " ++ s.name).post; });
"\n".post;
});
("\n" ++ list.size.asString ++ " classes listed.").postln;
}
}
|