required missing protocol display
authorClaus Gittinger <cg@exept.de>
Thu, 22 Oct 2009 14:43:18 +0200
changeset 9039 c7c93f434394
parent 9038 9b56d0b8c38e
child 9040 03a3e869b946
required missing protocol display
Tools_MethodCategoryList.st
--- a/Tools_MethodCategoryList.st	Thu Oct 22 14:43:13 2009 +0200
+++ b/Tools_MethodCategoryList.st	Thu Oct 22 14:43:18 2009 +0200
@@ -34,6 +34,13 @@
 	privateIn:MethodCategoryList
 !
 
+Method variableSubclass:#MissingMethod
+	instanceVariableNames:'selector'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:MethodCategoryList
+!
+
 !MethodCategoryList class methodsFor:'documentation'!
 
 copyright
@@ -799,6 +806,7 @@
             |protocols 
              allProtocols superSendProtocols uncommentedProtocols obsoleteProtocols 
              documentationProtocols longProtocols extensionProtocols redefinedProtocols overrideProtocols
+             missingRequiredProtocols
              noCat static notStatic classSelectorPairsAlreadyDone
              packages remainingClasses remainingCategories classesAlreadyDone noPackage|
 
@@ -822,6 +830,7 @@
                 extensionProtocols := protocols includes:(self class nameListEntryForExtensions).
                 redefinedProtocols := protocols includes:(self class nameListEntryForRedefined).
                 overrideProtocols := protocols includes:(self class nameListEntryForOverride).
+                missingRequiredProtocols := protocols includes:(self class nameListEntryForRequired).
 
 "/                packages := packageFilter value value.
 "/                (packages notNil and:[packages includes:(self class nameListEntryForALL)]) ifTrue:[
@@ -836,7 +845,7 @@
 
                 leafClasses do:[:aLeafClass |  
                     (self classesToProcessForClasses:(Array with:aLeafClass)) do:[:aClass |
-                        |supportsMethodCategories isJavaClass anyInThisClass|
+                        |supportsMethodCategories isJavaClass anyInThisClass requiredProtocolForClass|
 
                         (classesAlreadyDone includes:aClass) ifFalse:[
                             classesAlreadyDone add:aClass.
@@ -912,6 +921,18 @@
                                     ]
                                 ]
                             ].
+
+                            missingRequiredProtocols ifTrue:[
+                                requiredProtocolForClass := CodeGeneratorTool missingRequiredProtocolFor:aClass.
+                                requiredProtocolForClass do:[:sel | 
+                                    |selectorInRed missingMethodPlaceHolder|
+
+                                    selectorInRed := sel colorizeAllWith:Color red.
+                                    missingMethodPlaceHolder := MissingMethod basicNew.
+                                    missingMethodPlaceHolder mclass:aClass; selector:selectorInRed.
+                                    whatToDo value:aClass value:'required' value:selectorInRed value:missingMethodPlaceHolder.
+                                ].
+                            ].
                             anyInThisClass ifTrue:[ remainingClasses remove:aClass ifAbsent:nil. ].
                         ].
                     ].
@@ -1031,7 +1052,7 @@
      packageFilterOnInput packageFilter nameListEntryForALL changeSet 
      emphasizedPlus emphasisForRef emphasisForMod
      numObsolete numSuper numUncommented numDocumentation numLong numOverride
-     numRedefine numExtension showPseudoProtocols|
+     numRedefine numExtension numMissingRequired showPseudoProtocols|
 
     generator := inGeneratorHolder value.
     generator isNil ifTrue:[ ^ #() ].
@@ -1063,7 +1084,7 @@
     variablesToHighlight := variableFilter value.
     classVarsToHighLight := filterClassVars value.
     numObsolete := numSuper := numUncommented := numDocumentation := numLong := 0.
-    numRedefine := numOverride := numExtension := 0.
+    numRedefine := numOverride := numExtension := numMissingRequired := 0.
 
     generator do:[:clsIn :catIn | 
                         |emptyProtocols clsName doHighLight doHighLightRed suppress|
@@ -1145,7 +1166,7 @@
     changeSet := ChangeSet current.
 
     classesProcessed do:[:eachClass |
-        |classPackage|
+        |classPackage required|
 
         classPackage := eachClass package.
         eachClass methodDictionary keysAndValuesDo:[:mSelector :mthd |
@@ -1177,7 +1198,12 @@
             (SmallTeam notNil and:[ SmallTeam includesChangeForClass:eachClass selector:mSelector] ) ifTrue:[
                 itemsInRemoteChangeSet add:mCategory.    
             ].
-        ]
+        ].
+        showPseudoProtocols value ifTrue:[
+            "/ see if there is a subclassResponsibility in a superclass
+            required := CodeGeneratorTool missingRequiredProtocolFor:eachClass.
+            numMissingRequired := numMissingRequired + required size.
+        ].
     ].
 
     categoryList := categoryList asOrderedCollection.
@@ -1253,42 +1279,47 @@
     ].
     categoryList notEmpty ifTrue:[
         noAllItem value ~~ true ifTrue:[
-            categoryList addFirst:(nameListEntryForALL asText allItalic).
+            categoryList addFirst:(nameListEntryForALL allItalic).
             rawProtocolList addFirst:nameListEntryForALL.
         ].
         showPseudoProtocols value ifTrue:[
             numSuper > 0 ifTrue:[
-                categoryList add:((self class nameListEntryForSuperSend bindWith:numSuper) asText allItalic).
+                categoryList add:((self class nameListEntryForSuperSend bindWith:numSuper) allItalic).
                 rawProtocolList add:self class nameListEntryForSuperSend.
             ].
             numRedefine > 0 ifTrue:[
-                categoryList add:((self class nameListEntryForRedefined bindWith:numRedefine) asText allItalic).
+                categoryList add:((self class nameListEntryForRedefined bindWith:numRedefine) allItalic).
                 rawProtocolList add:self class nameListEntryForRedefined.
             ].
             numDocumentation > 0 ifTrue:[
-                categoryList add:((self class nameListEntryForDocumentation bindWith:numDocumentation) asText allItalic).
+                categoryList add:((self class nameListEntryForDocumentation bindWith:numDocumentation) allItalic).
                 rawProtocolList add:self class nameListEntryForDocumentation.
             ].
             numUncommented > 0 ifTrue:[
-                categoryList add:((self class nameListEntryForUncommented bindWith:numUncommented) asText allItalic).
+                categoryList add:((self class nameListEntryForUncommented bindWith:numUncommented) allItalic).
                 rawProtocolList add:self class nameListEntryForUncommented.
             ].
             numLong > 0 ifTrue:[
-                categoryList add:((self class nameListEntryForLong bindWith:numLong) asText allItalic).
+                categoryList add:((self class nameListEntryForLong bindWith:numLong) allItalic).
                 rawProtocolList add:self class nameListEntryForLong.
             ].
             numObsolete > 0 ifTrue:[
-                categoryList add:((self class nameListEntryForObsolete bindWith:numObsolete) asText allItalic).
+                categoryList add:((self class nameListEntryForObsolete bindWith:numObsolete) allItalic).
                 rawProtocolList add:self class nameListEntryForObsolete.
             ].
             numExtension > 0 ifTrue:[
-                categoryList add:((self class nameListEntryForExtensions bindWith:numExtension) asText allItalic).
+                categoryList add:((self class nameListEntryForExtensions bindWith:numExtension) allItalic).
                 rawProtocolList add:self class nameListEntryForExtensions.
             ].
             numOverride > 0 ifTrue:[
-                categoryList add:((self class nameListEntryForOverride bindWith:numOverride) asText allItalic).
+                categoryList add:((self class nameListEntryForOverride bindWith:numOverride) allItalic).
                 rawProtocolList add:self class nameListEntryForOverride.
             ].
+            numMissingRequired > 0 ifTrue:[
+                categoryList add:((self class nameListEntryForRequired bindWith:numMissingRequired) allItalic colorizeAllWith:Color red).
+                rawProtocolList add:self class nameListEntryForRequired.
+            ].
+
         ].
     ].
     ^ categoryList
@@ -1651,14 +1682,40 @@
                 ifFalse:[ flags bitClear: FlagSendsSuper]
 ! !
 
+!MethodCategoryList::MissingMethod methodsFor:'accessing'!
+
+mclass:aClass
+    mclass := aClass
+!
+
+selector
+    ^ selector
+!
+
+selector:something
+    selector := something.
+!
+
+source
+    ^ (CodeGeneratorTool basicNew
+        codeFor_shouldImplementFor:selector string asSymbol 
+        inClass:mclass) colorizeAllWith:Color red
+! !
+
+!MethodCategoryList::MissingMethod methodsFor:'printing & storing'!
+
+printStringForBrowserWithSelector:selector inClass:aClass
+    ^ selector,' (** missing required **)' colorizeAllWith:Color red
+! !
+
 !MethodCategoryList class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Tools_MethodCategoryList.st,v 1.42 2009-10-15 11:43:58 fm Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools_MethodCategoryList.st,v 1.43 2009-10-22 12:43:18 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Tools_MethodCategoryList.st,v 1.42 2009-10-15 11:43:58 fm Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools_MethodCategoryList.st,v 1.43 2009-10-22 12:43:18 cg Exp $'
 ! !
 
 MethodCategoryList initialize!