DoWhatIMeanSupport.st
changeset 5598 5b69ed53ef4b
parent 5552 2fe0fa28ecf5
child 5606 28585ddb3a51
--- a/DoWhatIMeanSupport.st	Mon Sep 11 09:05:47 2017 +0200
+++ b/DoWhatIMeanSupport.st	Mon Sep 11 09:11:07 2017 +0200
@@ -2918,7 +2918,7 @@
      allSelectors
      selectorsForIsXXXTests selectorsSentInClass selectorsImplementedInSuper 
      editAction editActionForArg argNames selectorsForVars
-     selectorTypedSoFar addIfNotYetImplemented alreadyOK|
+     selectorTypedSoFar addIfNotYetImplemented alreadyOK processMenu|
 
     allSelectors := Set new.
 
@@ -2942,7 +2942,7 @@
                     sel ~= selectorTypedSoFar ifTrue:[    
                         (allSelectors includes:sel) ifFalse:[
                             (classOrNil implements:sel asSymbol) ifFalse:[ 
-                                selectorsForVars add:sel.
+                                list add:sel.
                                 allSelectors add:sel.
                             ].
                         ].
@@ -2999,6 +2999,63 @@
                     ]                     
                 ]
             ].
+            "/ if on the instance side, and the class side has menu- or windowspecs,
+            "/ also add messages named as callbacks or aspects
+            (classOrNil theNonMetaclass inheritsFrom:ApplicationModel) ifTrue:[
+                processMenu :=  
+                    [:menu |
+                        menu itemsDo:[:item |
+                            |sel subMenu|
+
+                            (sel := item choice) notNil ifTrue:[
+                                addIfNotYetImplemented value:selectorsSentInClass value:sel
+                            ].    
+                            (sel := item itemValue) notNil ifTrue:[
+                                addIfNotYetImplemented value:selectorsSentInClass value:sel
+                            ].    
+                            (sel := item submenuChannel) notNil ifTrue:[
+                                addIfNotYetImplemented value:selectorsSentInClass value:sel
+                            ].    
+                            (subMenu := item submenu) notNil ifTrue:[
+                                processMenu value:subMenu
+                            ].    
+                        ].    
+                    ].    
+
+                classOrNil withAllSuperclassesDo:[:eachSuperclass |
+                    eachSuperclass theMetaclass methodDictionary keysAndValuesDo:[:sel :mthd |
+                        |spec bodyNode retVal specArray menu| 
+                        
+                        (mthd hasMenuResource) ifTrue:[
+                            bodyNode := mthd parseTree body.
+                            bodyNode lastIsReturn ifTrue:[
+                                (retVal := bodyNode statements last value) isLiteralArray ifTrue:[
+                                    specArray := retVal value.
+                                    menu := specArray decodeAsLiteralArray.
+                                    processMenu value:menu.    
+                                ].
+                            ].
+                        ].    
+                        (mthd hasCanvasResource) ifTrue:[
+                            bodyNode := mthd parseTree body.
+                            bodyNode lastIsReturn ifTrue:[
+                                (retVal := bodyNode statements last value) isLiteralArray ifTrue:[
+                                    specArray := retVal value.
+                                    spec := specArray decodeAsLiteralArray.
+                                    spec aspectSelectors do:[:sel | addIfNotYetImplemented value:selectorsSentInClass value:sel].
+                                    spec valueSelectors do:[:sel | addIfNotYetImplemented value:selectorsSentInClass value:sel].
+                                    spec actionSelectors do:[:sel | addIfNotYetImplemented value:selectorsSentInClass value:sel].
+                                ].
+                            ].
+                        ].
+                    ].    
+                    eachSuperclass selectorsDo:[:sel |
+                        (sel startsWith:selectorTypedSoFar) ifTrue:[
+                            addIfNotYetImplemented value:selectorsImplementedInSuper value:sel.
+                        ]                     
+                    ]                     
+                ]
+            ].
         ].
     ].
 
@@ -3161,7 +3218,7 @@
     "Modified: / 04-07-2006 / 18:48:26 / fm"
     "Created: / 10-11-2006 / 13:46:44 / cg"
     "Modified: / 16-02-2010 / 10:13:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 10-02-2017 / 10:32:45 / cg"
+    "Modified: / 10-09-2017 / 14:51:26 / cg"
 !
 
 codeCompletionForTempVariable:node into:actionBlock