ClassChange.st
changeset 2514 36e11e387006
parent 2315 dde09d0ab7bf
child 2520 092b3abcd994
--- a/ClassChange.st	Wed Sep 07 19:47:17 2011 +0200
+++ b/ClassChange.st	Wed Sep 07 21:27:31 2011 +0200
@@ -79,7 +79,7 @@
 
     "do not autoload an owning class of a private class!!"
 
-    |className class owner altName|
+    |className class owner altName nsName ns meta|
 
     className := self className.
     className isNil ifTrue:[^ nil].
@@ -88,44 +88,60 @@
         "/ VW - namespace prefix - convert to colon-notation
         className := className copyReplaceAll:$. withAll:'::'.
     ].
+    nsName := self nameSpaceOverride ? 'Smalltalk'.
+    nsName notNil ifTrue:[
+        ns := NameSpace name:nsName
+    ].
+    (meta := (className endsWith:' class')) ifTrue:[    
+        className := className copyWithoutLast:6.
+    ].
 
-    class := Smalltalk loadedClassNamed:className.
+    class := (ns ? Smalltalk) loadedClassNamed:className.     
     class isNil ifTrue:[
         self isPrivateClassDefinitionChange ifTrue:[
-            owner := Smalltalk loadedClassNamed:(self owningClassName).
+            owner := (ns ? Smalltalk) loadedClassNamed:(self owningClassName).
             owner notNil ifTrue:[
                 class := owner privateClassesAt:className.
-                ^ class.
+                ^ meta ifTrue:[class theMetaclass] ifFalse:[class].
             ].
         ] ifFalse:[
-            (className endsWith:' class') ifTrue:[
-                class := Smalltalk classNamed:(className copyWithoutLast:6).
-                class notNil ifTrue:[ class := class theMetaclass ].
-            ] ifFalse:[
-                class := Smalltalk classNamed:className.
-            ].
-
+            class := (ns ? Smalltalk) classNamed:className. 
             "/ class := Parser evaluate:className ifFail:[nil].
             class isNil ifTrue:[
                 (altName := self classNameForWellKnownVisualWorksNamespaceClass:className) notNil
                 ifTrue:[
-                    class := Smalltalk classNamed:altName.
+                    class := (ns ? Smalltalk) classNamed:altName.
                     class isNil ifTrue:[
                         class := Parser evaluate:altName ifFail:[nil]
                     ]
                 ].
-                class isNil ifTrue:[
-                    ^ nil.
+            ].
+        ].
+        class isNil ifTrue:[
+            ns ~= Smalltalk ifTrue:[
+                self isPrivateClassDefinitionChange ifTrue:[
+                    owner := Smalltalk loadedClassNamed:(self owningClassName).
+                    owner notNil ifTrue:[
+                        class := owner privateClassesAt:className.
+                        ^ meta ifTrue:[class theMetaclass] ifFalse:[class].
+                    ].
+                ] ifFalse:[
+                    class := Smalltalk classNamed:className.
+                    "/ class := Parser evaluate:className ifFail:[nil].
+                    class isNil ifTrue:[
+                        ^ nil.
+                    ].
                 ].
             ].
-
         ].
     ].
+    class isNil ifTrue:[^ nil].
+
     "/ care for aliases...
-    (class notNil and:[class name ~= className]) ifTrue:[ ^ nil ].
-    ^ class.
+    (class nameWithoutPrefix ~= className) ifTrue:[ ^ nil ].
+    ^ meta ifTrue:[class theMetaclass] ifFalse:[class].
 
-    "Modified: / 29-01-2011 / 11:31:08 / cg"
+    "Modified: / 07-09-2011 / 21:11:51 / cg"
 !
 
 changeClass:aClass
@@ -202,6 +218,18 @@
     "Modified: 15.7.1996 / 09:28:35 / cg"
 !
 
+nameSpaceOverride
+    |ns|
+
+    nameSpaceOverride notNil ifTrue:[^ nameSpaceOverride].
+
+    ns := Class nameSpaceQuerySignal query.
+    ns == Smalltalk ifTrue:[^ nil].
+    ^ ns name
+
+    "Created: / 07-09-2011 / 20:45:43 / cg"
+!
+
 nonMetaClassName
     ^ self isForMeta
 	ifTrue:[ self className copyTo:(self className size - 6) ]
@@ -324,14 +352,16 @@
 !ClassChange methodsFor:'queries'!
 
 cutMyNameSpaceOf:aString
+    |ns|
+
     aString isNil ifTrue:[ ^ aString ].
-    nameSpaceOverride isNil ifTrue:[ ^ aString ].
-    (aString startsWith:(nameSpaceOverride , '.')) ifTrue:[ ^ self cutNameSpaceOf:aString ].
-    (aString startsWith:(nameSpaceOverride , '::')) ifTrue:[ ^ self cutNameSpaceOf:aString ].
+    (ns := self nameSpaceOverride) isNil ifTrue:[ ^ aString ].
+    (aString startsWith:(ns , '.')) ifTrue:[ ^ self cutNameSpaceOf:aString ].
+    (aString startsWith:(ns , '::')) ifTrue:[ ^ self cutNameSpaceOf:aString ].
 
     ^ aString
 
-    "Modified: / 15-06-2010 / 14:51:49 / cg"
+    "Modified: / 07-09-2011 / 20:49:33 / cg"
 !
 
 cutNameSpaceOf:aString
@@ -379,9 +409,9 @@
 !ClassChange class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/ClassChange.st,v 1.58 2011-01-29 12:00:03 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ClassChange.st,v 1.59 2011-09-07 19:27:31 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/ClassChange.st,v 1.58 2011-01-29 12:00:03 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ClassChange.st,v 1.59 2011-09-07 19:27:31 cg Exp $'
 ! !