Я не полностью протестировал это, поэтому вам, возможно, придется немного его настроить в соответствии с вашими требованиями, но, насколько я понимаю, ваш вопрос может привести к чему-то вроде этого:
| allMethodsSent allMethodsImplemented |
allMethodsSent := IdentitySet new.
allMethodsImplemented := IdentitySet new.
(SystemOrganization listAtCategoryNamed: #'Collections-Arrayed')
do: [:eachClassName |
(Smalltalk at: eachClassName) methodDictionary valuesDo: [:eachMethod |
allMethodsSent addAll: eachMethod messages.
].
allMethodsImplemented addAll: (Smalltalk at: eachClassName) selectors
].
^allMethodsSent
removeAllFoundIn: allMethodsImplemented;
yourself
Надеюсь, что это поможет вам начать, по крайней мере, если вам нужно настроить его, взгляните на классы Behavior
(чтобы увидеть, что вы можете использовать, а не изменить его!), CompiledMethod
и SystemOrganization
.
Очевидно, что в этом примере используется категория (я предполагаю, что вы подразумеваете под пакетом?) «Коллекции с массивами», но вы, конечно, могли бы адаптировать ее, чтобы сделать это параметром метода, что-то вроде:
MyUtilClass unimplementedMessageSendsFor: aCategorySymbol