2012-01-05 60 views
1

如何列出包中所有未實現的方法?假定該方法應該在該包中實現,而不是其他(例如在包或對象外的超類中)。Pharo和Squeak Smalltalk:在包中列出未實現的方法?

編輯:是的,我想知道,但在分析限制在一個特定的給定的包,爲前「未實現的已發送郵件」:

了FooPackage unimplementedMessageSends。

+1

我仔細閱讀了這個問題幾次,不知道你在問什麼。也許增加一個具體的例子將有助於 – 2012-01-05 19:21:05

+2

我也不明白這個問題。也許作者想知道發送的_messages沒有實現_?或者,也許他想知道具有_undefined子類responsabilities_的方法?這兩個問題都可以在CodeCritics中找到,它是重構引擎的一部分。 – 2012-01-05 19:28:39

回答

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(看看你能用什麼,不要改變它!),CompiledMethodSystemOrganization

顯然這個示例使用類(我假設這是你的包是什麼意思?)「類別排列的」,當然你可以修改它,使該方法的參數,是這樣的:

MyUtilClass unimplementedMessageSendsFor: aCategorySymbol 
相關問題