Project.st
changeset 5199 feb18acac2b2
parent 5196 395147c4e481
child 5201 24264de948dd
--- a/Project.st	Sat Jan 22 17:42:15 2000 +0100
+++ b/Project.st	Sat Jan 22 18:52:11 2000 +0100
@@ -1128,7 +1128,14 @@
                             package:self package    
                             revision:nil
                     ] ifFalse:[
-                        Smalltalk fileIn:clsFilename
+                        Object errorSignal handle:[:ex |
+                            self warn:'error during fileIn: ' , ex errorString
+                        ] do:[
+                            Class packageQuerySignal answer:packageName do:[    
+                                clsFilename fileIn.
+                            "/ Smalltalk fileIn:clsFilename
+                            ]
+                        ]
                     ]
                 ]
             ] ifFalse:[
@@ -1354,9 +1361,11 @@
     s tab. s nextPutLine:(self package storeString).
 
     defNS := self defaultNameSpace.
-    (defNS ~~ Smalltalk) ifTrue:[
+    (defNS notNil and:[defNS ~~ Smalltalk]) ifTrue:[
         s nextPutAll:'nameSpace'. 
         s tab. s nextPutLine:(defNS name storeString).
+    ] ifFalse:[
+        defNS := nil.
     ].
 
     s nextPutAll:'
@@ -1494,19 +1503,41 @@
         s nextPutLine:'#( \'.
         "/ find the longest className (for layout only)
         
-        maxLen := classes inject:0 into:[:maxSoFar :aClass |
+        maxLen := classes inject:0 into:[:maxSoFar :aClassOrName |
                                         |clsName|
 
-                                        clsName := aClass name.
+                                        aClassOrName isBehavior ifTrue:[
+                                            clsName := aClassOrName name.
+                                        ] ifFalse:[
+                                            clsName := aClassOrName.
+                                            defNS notNil ifTrue:[
+                                                (clsName startsWith:(defNS name , '::')) ifFalse:[
+                                                    clsName := (defNS name , '::' , clsName)
+                                                ]
+                                            ].
+                                            clsName := clsName asSymbol.
+                                        ].
                                         maxSoFar max:clsName storeString size
                                      ].
 
-        classes do:[:aClass |
+        classes do:[:aClassOrName |
             |clsInfo clsName fileName cond|
 
-            clsInfo := self classInfoFor:aClass.
-
-            clsName := aClass name.
+            aClassOrName isBehavior ifTrue:[
+                clsName := aClassOrName name.
+            ] ifFalse:[
+                clsName := aClassOrName.
+                defNS notNil ifTrue:[
+                    (clsName startsWith:(defNS name , '::')) ifFalse:[
+                        clsName := (defNS name , '::' , clsName)
+                    ]
+                ].
+                clsName := clsName asSymbol.
+            ].
+            clsInfo := self classInfoFor:clsName.
+            clsInfo isNil ifTrue:[
+                clsInfo := self classInfoFor:aClassOrName.
+            ].
             fileName := clsInfo classFileName.
             fileName = (clsName , '.st') ifTrue:[
                 fileName := nil
@@ -1643,13 +1674,13 @@
 !
 
 classesInOrderFor:whatMsg
-    |classes numBad firstBad msg|
-
-    classes := self classes.
+    |classesOrNames classes numBad firstBad msg|
+
+    classesOrNames := self classes.
     numBad := 0.
     firstBad := nil.
 
-    classes := classes collect:[:clsOrSymbol |  |cls|
+    classes := classesOrNames collect:[:clsOrSymbol |  |cls|
                                         clsOrSymbol isBehavior ifFalse:[
                                             cls := Smalltalk at:clsOrSymbol asSymbol.
                                             cls isNil ifTrue:[
@@ -1657,7 +1688,7 @@
                                                 firstBad := firstBad ? clsOrSymbol.
                                             ] ifFalse:[
                                                 cls isLoaded ifFalse:[
-                                                    cls autoLoad.
+                                                    cls := cls autoLoad.
                                                     cls isLoaded ifFalse:[
                                                         cls := nil
                                                     ]
@@ -1669,14 +1700,15 @@
                                         ]
                               ].
     numBad ~~ 0 ifTrue:[
-        msg := 'Cannot ' , whatMsg.
-        msg := msg , 'Reason: Class ''' , firstBad asText allBold
+        msg := 'Cannot determine load/compile order when about to ' , whatMsg.
+        msg := msg , '\Reason: Class ''' , firstBad asText allBold
                    , ''' is not loaded.'.
         numBad ~~ 1 ifTrue:[
             msg := msg , '\(' , (numBad-1) printString , ' more unloaded classes were found)'
         ].
+        msg := msg , '\\You will have to manually load the classes or edit the project file.'.
         self warn:msg withCRs.
-        ^ nil.
+        ^ classesOrNames.
     ].
 
     "/ to not list private classes
@@ -3547,6 +3579,6 @@
 !Project class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Project.st,v 1.144 2000-01-19 15:59:59 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Project.st,v 1.145 2000-01-22 17:52:11 cg Exp $'
 ! !
 Project initialize!