NewSystemBrowser.st
changeset 9755 c5e058f89572
parent 9749 4ff47b7f5f24
child 9762 4571888c536b
--- a/NewSystemBrowser.st	Wed Feb 09 20:40:50 2011 +0100
+++ b/NewSystemBrowser.st	Thu Feb 10 16:57:37 2011 +0100
@@ -5212,7 +5212,7 @@
 
     <resource: #menu>
 
-    ^
+    ^ 
      #(Menu
         (
          (MenuItem
@@ -5289,9 +5289,9 @@
             isVisible: hasNonProjectDefinitionSelectedHolder
           )
          (MenuItem
-            enabled: hasApplicationOrHTTPServiceClassSelectedHolder
-            label: 'Application Code'
-            itemValue: classMenuGenerateApplicationCode
+            enabled: hasLoadedClassSelectedHolder
+            label: 'Singleton Pattern'
+            itemValue: classMenuGenerateSingletonPatternInstanceCreationMethods
             translateLabel: true
             isVisible: hasNonProjectDefinitionSelectedHolder
           )
@@ -5310,13 +5310,23 @@
             isVisible: hasNonProjectDefinitionSelectedHolder
           )
          (MenuItem
+            label: '-'
+            isVisible: hasNonProjectDefinitionSelectedHolder
+          )
+         (MenuItem
+            enabled: hasApplicationOrHTTPServiceClassSelectedHolder
+            label: 'Application Code'
+            itemValue: classMenuGenerateApplicationCode
+            translateLabel: true
+            isVisible: hasNonProjectDefinitionSelectedHolder
+          )
+         (MenuItem
             enabled: hasLoadedClassSelectedHolder
             label: 'Class Initialization Code'
             itemValue: classMenuGenerateClassInitializationCode
             translateLabel: true
             isVisible: hasNonProjectDefinitionSelectedHolder
           )
-
          (MenuItem
             enabled: hasLoadedClassSelectedHolder
             label: 'Required Protocol'
@@ -20434,6 +20444,48 @@
         lazyInitialization:false
 !
 
+classMenuGenerateSingletonPatternInstanceCreationMethods
+    "create instance creation methods for singleton"
+
+    |singletonVarName|
+
+    self
+        generateUndoableChangeOverSelectedClasses:'Singleton Pattern for %(singleClassNameOrNumberOfClasses)'
+        via:[:generator :eachClass |
+            |theClass vars defaultNameForSingleton singletonVar|
+
+            "/ if any of the selected classes is a subclass of one of the previously processed,
+            "/ and we have added a class-instvar in the previous loop cycle,
+            "/ we have top refetch, because the class is now obsolete (stupid consequence of not having a
+            "/ good become).
+            "/ refetch to get the present class (sigh)
+            theClass := Smalltalk at:(eachClass theNonMetaclass name).
+
+            vars := theClass theMetaclass allInstanceVariableNames asSet.
+            vars removeAll:(Class allInstanceVariableNames).
+
+            (singletonVarName notNil and:[vars includes:singletonVarName]) ifTrue:[
+                defaultNameForSingleton := singletonVarName
+            ] ifFalse:[
+                defaultNameForSingleton := 'theOneAndOnlyInstance'.
+                "/ vars add:'theOneAndOnlyInstance'.
+            ].
+            singletonVar := Dialog  
+                request:'Class-Instvar to keep Singleton in?'
+                initialAnswer:defaultNameForSingleton
+                list:(vars asSortedCollection).
+            singletonVar isEmptyOrNil ifTrue:[^ self].
+
+            (theClass theMetaclass allInstanceVariableNames asSet includes:singletonVar) ifFalse:[
+                theClass theMetaclass addInstVarName:singletonVar.
+                theClass := Smalltalk at:(eachClass theNonMetaclass name).
+            ].
+            generator createSingletonPatternInstanceCreationMethodsIn:theClass usingVariable:singletonVar
+        ].
+
+    "Created: / 10-02-2011 / 16:28:36 / cg"
+!
+
 classMenuGenerateStandardPrintOnMethod
     self
         generateUndoableChangeOverSelectedClasses:'Generate PrintOn Method for %(singleClassNameOrNumberOfClasses)'
@@ -45032,11 +45084,11 @@
 !NewSystemBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Attic/NewSystemBrowser.st,v 1.1514 2011-02-09 13:03:16 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Attic/NewSystemBrowser.st,v 1.1515 2011-02-10 15:57:37 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Attic/NewSystemBrowser.st,v 1.1514 2011-02-09 13:03:16 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Attic/NewSystemBrowser.st,v 1.1515 2011-02-10 15:57:37 cg Exp $'
 ! !
 
 NewSystemBrowser initialize!