Autoload.st
changeset 15054 1667e3fe9e8b
parent 14503 286c53d82fa9
child 15056 7ee92e75b2c4
--- a/Autoload.st	Wed Apr 03 20:39:02 2013 +0200
+++ b/Autoload.st	Wed Apr 03 20:53:03 2013 +0200
@@ -286,7 +286,7 @@
      Return the loaded class"
 
     |myName myNameSpace newClass project prevMode packageID
-     packageDefinitionClass|
+     packageDefinitionClass packageExtensionsFile|
 
     self == Autoload ifTrue:[
         "already loaded"
@@ -329,14 +329,14 @@
         ].
     ].
 
-    "load it"
     (Object infoPrinting and:[Smalltalk silentLoading ~~ true]) ifTrue:[
         "/ thisContext fullPrintAll.
         Transcript showCR:('autoloading ', myName , ' ...'); endEntry.
     ].
 
     packageID := self package.
-    "is there a package-definition ?"
+
+    "if there is a package-definition, make sure it is loaded first"
     packageDefinitionClass := ProjectDefinition definitionClassForPackage: packageID.
     (packageDefinitionClass notNil) ifTrue:[
         (packageDefinitionClass ~~ self) ifTrue:[
@@ -344,8 +344,18 @@
                 (packageDefinitionClass isLoaded) ifFalse:[
                     packageDefinitionClass autoload.
                 ].
+                "/ make sure that my package's extensions are also present
+                (packageDefinitionClass isLoaded) ifTrue:[
+                    packageDefinitionClass loadExtensions    
+                ]
             ].
         ].
+    ] ifFalse:[
+        "/ no package definition class - look for extensions anyway
+        packageExtensionsFile := (Smalltalk projectDirectoryForPackage:packageID) asFilename / 'extensions.st'.
+        packageExtensionsFile exists ifTrue:[
+            packageExtensionsFile fileIn.
+        ].
     ].
 
     [
@@ -371,10 +381,13 @@
             do:[
                 Class classConventionViolationConfirmationQuerySignal answer:true
                 do:[
-                    (self classFilename notNil and:[self classFilename asFilename isAbsolute]) ifTrue:[
+                    |classFileName|
+
+                    classFileName := self classFilename.    
+                    (classFilename notNil and:[classFilename asFilename isAbsolute]) ifTrue:[
                         "/ if filename is absolute, the autoload-class was created by an
                         "/ explicit install-as-autoloaded via the fileBrowser.
-                        Smalltalk fileIn:self classFilename lazy:false silent:nil.
+                        Smalltalk fileIn:classFilename lazy:false silent:nil.
                     ] ifFalse:[
                         (Smalltalk 
                             fileInClass:myName
@@ -797,11 +810,12 @@
 !Autoload class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Autoload.st,v 1.162 2012-11-06 00:23:36 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Autoload.st,v 1.163 2013-04-03 18:53:03 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Autoload.st,v 1.162 2012-11-06 00:23:36 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Autoload.st,v 1.163 2013-04-03 18:53:03 cg Exp $'
 ! !
 
+
 Autoload initialize!