如何在包中列出所有未实现的方法?鉴于该方法应该在该包中实现而不在其他包中实现(例如在包外或在Object中的超类中)。
编辑:是的,我想知道“发送的消息未实现”,但是将分析限制在一个特定的给定包中,例如:
FooPackage unmplementedMessageSends。
答案 0 :(得分:1)
我还没有对此进行全面测试,因此您可能需要稍微调整一下以满足您的要求,但根据我对您的问题的理解,您可能会遇到以下情况:
| 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
(看看你可以使用什么,而不是改变它!),{{1 }和CompiledMethod
。
显然这个例子使用了类别(我假设你的意思是包?)“Collections-Arrayed”,但你当然可以调整它来制作一个方法参数,如:
SystemOrganization