ProjectDefinition.st
changeset 12558 1c30499cb772
parent 12555 9924562388ed
child 12570 6587a05b5cd4
--- a/ProjectDefinition.st	Wed Nov 18 18:57:52 2009 +0100
+++ b/ProjectDefinition.st	Wed Nov 18 19:09:22 2009 +0100
@@ -13,7 +13,8 @@
 
 Object subclass:#ProjectDefinition
 	instanceVariableNames:''
-	classVariableNames:'LibraryType GUIApplicationType NonGUIApplicationType'
+	classVariableNames:'LibraryType GUIApplicationType NonGUIApplicationType
+		PackagesBeingLoaded'
 	poolDictionaries:''
 	category:'System-Support-Projects'
 !
@@ -4678,17 +4679,31 @@
     "load some packages (at least the projectDefinitions and their extensions).
      If asAutoloaded == true, classes will be only installed as autoloaded."
 
-    Class withoutUpdatingChangesDo:[
-        aListOfPackages do:[:aPackage |
-            |def|
-
-            "/ def := aPackage asPackageId projectDefinitionClass.
-            (def notNil and:[def isFullyLoaded]) ifTrue:[
-                "/ nothing to be done...
-            ] ifFalse:[
-                Smalltalk loadPackageWithId:aPackage asAutoloaded:asAutoloaded.
-            ]
+    |packagesBefore|
+
+    packagesBefore := PackagesBeingLoaded copy.
+    PackagesBeingLoaded isNil ifTrue:[
+        PackagesBeingLoaded := Set new
+    ].
+    [
+        Class withoutUpdatingChangesDo:[
+            aListOfPackages do:[:aPackage |
+                |def|
+
+                (PackagesBeingLoaded includes:aPackage) ifFalse:[
+                    PackagesBeingLoaded add:aPackage.
+                
+                    "/ def := aPackage asPackageId projectDefinitionClass.
+                    (def notNil and:[def isFullyLoaded]) ifTrue:[
+                        "/ nothing to be done...
+                    ] ifFalse:[
+                        Smalltalk loadPackageWithId:aPackage asAutoloaded:asAutoloaded.
+                    ]
+                ]
+            ].
         ].
+    ] ensure:[
+        PackagesBeingLoaded := packagesBefore.
     ].
 !
 
@@ -5188,11 +5203,11 @@
 !ProjectDefinition class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.289 2009-11-18 15:46:05 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.290 2009-11-18 18:09:22 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.289 2009-11-18 15:46:05 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.290 2009-11-18 18:09:22 cg Exp $'
 ! !
 
 ProjectDefinition initialize!