care for package; added installAsAutoloaded
authorClaus Gittinger <cg@exept.de>
Fri, 08 Feb 2002 15:45:03 +0100
changeset 1134 915934e8aab8
parent 1133 9ff43ad49dbd
child 1135 08323691c543
care for package; added installAsAutoloaded
ClassDefinitionChange.st
--- a/ClassDefinitionChange.st	Fri Feb 08 12:37:43 2002 +0100
+++ b/ClassDefinitionChange.st	Fri Feb 08 15:45:03 2002 +0100
@@ -13,7 +13,8 @@
 "{ Package: 'stx:libbasic3' }"
 
 ClassChange subclass:#ClassDefinitionChange
-	instanceVariableNames:'definition objectType nameSpaceName classType otherParameters'
+	instanceVariableNames:'definition objectType nameSpaceName package classType
+		otherParameters'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'System-Changes'
@@ -69,6 +70,10 @@
     objectType := something.
 !
 
+package:aPackageID
+    package := aPackageID
+!
+
 source
     "return the source of the change"
 
@@ -123,12 +128,51 @@
 
 !ClassDefinitionChange methodsFor:'queries'!
 
+definitionSelector
+    |parseTree|
+
+    parseTree := Parser parseExpression:self source.
+    parseTree isMessage ifTrue:[
+        ^ parseTree selector
+    ].
+    self error:'should not happen'.
+!
+
 isClassDefinitionChange
     ^ true
 ! !
 
+!ClassDefinitionChange methodsFor:'special'!
+
+installAsAutoloadedClassIfNotPrivate
+    |parseTree sel cat clsName catIdx|
+
+    parseTree := Parser parseExpression:self source.
+    parseTree isMessage ifFalse:[
+        self error:'should not happen: bad change source'.
+    ].
+
+    sel := parseTree selector.
+    (sel endsWith:':privateIn:') ifTrue:[^ self].
+    catIdx := sel keywords indexOf:'category:'.  
+    catIdx ~~ 0 ifTrue:[
+        cat := (parseTree args at:catIdx) evaluate.
+    ].
+
+    clsName := self className asSymbol.
+
+    ((Smalltalk includesKey:clsName) not 
+    or:[ (Smalltalk at:clsName) isBehavior not]) ifTrue:[
+         Smalltalk 
+            installAutoloadedClassNamed:clsName 
+            category:cat 
+            package:(package ? Project current package) 
+            revision:nil
+    ]
+! !
+
 !ClassDefinitionChange class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/ClassDefinitionChange.st,v 1.24 2001-11-09 16:20:24 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ClassDefinitionChange.st,v 1.25 2002-02-08 14:45:03 cg Exp $'
 ! !