Pharo和Squeak Smalltalk:在包中列出未实现的方法?

时间:2012-01-05 16:17:30

标签: smalltalk squeak pharo

如何在包中列出所有未实现的方法?鉴于该方法应该在该包中实现而不在其他包中实现(例如在包外或在Object中的超类中)。

编辑:是的,我想知道“发送的消息未实现”,但是将分析限制在一个特定的给定包中,例如:

FooPackage unmplementedMessageSends。

1 个答案:

答案 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