Autoload.st
changeset 9554 58c5e80cf9a4
parent 9520 28f01d573376
child 9556 1556db314fec
--- a/Autoload.st	Thu Aug 17 09:50:54 2006 +0200
+++ b/Autoload.st	Thu Aug 17 09:54:53 2006 +0200
@@ -280,7 +280,8 @@
      - it is defined a noop in all non-autoloading classes.
      Return the loaded class"
 
-    |myName myNameSpace newClass project prevMode package|
+    |myName myNameSpace newClass project prevMode packageID
+     packageDefinitionClass|
 
     myName := self name asSymbol.
     myNameSpace := self nameSpace.
@@ -323,6 +324,19 @@
         Transcript showCR:('autoloading ', myName , ' ...'); endEntry.
     ].
 
+    packageID := self package.
+    "is there a package-definition ?"
+    packageDefinitionClass := ProjectDefinition definitionClassForPackage: packageID.
+    (packageDefinitionClass notNil) ifTrue:[
+        (packageDefinitionClass ~~ self) ifTrue:[
+            (packageDefinitionClass isBehavior) ifTrue:[
+                (packageDefinitionClass isLoaded) ifFalse:[
+                    packageDefinitionClass autoload.
+                ].
+            ].
+        ].
+    ].
+
     [
         InProgressClasses add:myName.
 
@@ -340,16 +354,15 @@
             Project setProject:nil.
         ].
 
-        package := self package.
         Class nameSpaceQuerySignal answer:myNameSpace "Smalltalk" 
         do:[
-            Class packageQuerySignal answer:package 
+            Class packageQuerySignal answer:packageID 
             do:[
                 Class classConventionViolationConfirmationQuerySignal answer:true
                 do:[
                     (Smalltalk 
                         fileInClass:myName
-                        package:package
+                        package:packageID
                         initialize:false 
                         lazy:LazyLoading
                         silent:nil)  
@@ -357,12 +370,11 @@
                         "/ temporary: try without stx/package prefix
                         "/ this will vanish as soon as source-directory
                         "/ is always guaranteed to contain an stx-subtree
-                        ((package startsWith:'stx/') 
-                        or:[package startsWith:'stx:']) ifTrue:[
-                            package := package copyFrom:5.
+                        ((packageID startsWith:'stx/') 
+                        or:[packageID startsWith:'stx:']) ifTrue:[
                             Smalltalk 
                                 fileInClass:myName
-                                package:package
+                                package:(packageID copyFrom:5)
                                 initialize:false 
                                 lazy:LazyLoading
                                 silent:nil.
@@ -419,7 +431,7 @@
         ^ nil
     ].
 
-    newClass setPackage:package.
+    newClass setPackage:packageID.
     newClass instAndClassSelectorsAndMethodsDo:[:sel :mthd | mthd setPackage:package].
 
     "/
@@ -464,7 +476,7 @@
     self changed:#loaded with:newClass.
     ^ newClass
 
-    "Modified: / 05-07-2006 / 15:35:56 / cg"
+    "Modified: / 17-08-2006 / 09:55:01 / cg"
 ! !
 
 !Autoload class methodsFor:'message catching'!
@@ -883,7 +895,7 @@
 !Autoload class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Autoload.st,v 1.135 2006-08-11 09:01:16 ca Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Autoload.st,v 1.136 2006-08-17 07:54:53 cg Exp $'
 ! !
 
 Autoload initialize!