--- 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 $'
! !