Improvements in ProjectChecker jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Thu, 23 Feb 2012 15:15:11 +0000
branchjv
changeset 3023 ed74806df5bc
parent 3022 d678b271a3f9
child 3024 2cef8b5bdf24
Improvements in ProjectChecker
Make.proto
Make.spec
PerforceSourceCodeManager.st
ProjectChecker.st
ProjectProblem.st
abbrev.stc
bc.mak
libInit.cc
libbasic3.rc
stx_libbasic3.st
--- a/Make.proto	Tue Feb 14 17:06:02 2012 +0000
+++ b/Make.proto	Thu Feb 23 15:15:11 2012 +0000
@@ -1,7 +1,7 @@
-# $Header: /cvs/stx/stx/libbasic3/Make.proto,v 1.125 2012/01/30 18:55:02 vrany Exp $
+# $Header$
 #
 # DO NOT EDIT
-# automagically generated from the projectDefinition: stx_libbasic3 at 2012-01-30 18:54:42.721.
+# automagically generated from the projectDefinition: stx_libbasic3 at 2012-02-23 15:14:59.653.
 #
 # Warning: once you modify this file, do not rerun
 # stmkmp or projectDefinition-build again - otherwise, your changes are lost.
@@ -140,6 +140,7 @@
 $(OUTDIR)MethodFinder.$(O) MethodFinder.$(H): MethodFinder.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)ProfileTree.$(O) ProfileTree.$(H): ProfileTree.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)ProjectChecker.$(O) ProjectChecker.$(H): ProjectChecker.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)ProjectProblem.$(O) ProjectProblem.$(H): ProjectProblem.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SourceCodeCache.$(O) SourceCodeCache.$(H): SourceCodeCache.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SourceCodeManagerError.$(O) SourceCodeManagerError.$(H): SourceCodeManagerError.st $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SourceCodeManagerUtilities.$(O) SourceCodeManagerUtilities.$(H): SourceCodeManagerUtilities.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -193,4 +194,3 @@
 
 # ENDMAKEDEPEND --- do not remove this line
 
-
--- a/Make.spec	Tue Feb 14 17:06:02 2012 +0000
+++ b/Make.spec	Thu Feb 23 15:15:11 2012 +0000
@@ -1,7 +1,7 @@
-# $Header: /cvs/stx/stx/libbasic3/Make.spec,v 1.74 2012/01/30 18:54:51 vrany Exp $
+# $Header$
 #
 # DO NOT EDIT
-# automagically generated from the projectDefinition: stx_libbasic3 at 2012-01-30 18:54:42.420.
+# automagically generated from the projectDefinition: stx_libbasic3 at 2012-02-23 15:14:58.433.
 #
 # Warning: once you modify this file, do not rerun
 # stmkmp or projectDefinition-build again - otherwise, your changes are lost.
@@ -115,6 +115,7 @@
 	ProjectChecker \
 	MercurialSourceCodeManager \
 	InvalidChange \
+	ProjectProblem \
 
 
 
@@ -185,8 +186,8 @@
     $(OUTDIR)ProjectChecker.$(O) \
     $(OUTDIR)MercurialSourceCodeManager.$(O) \
     $(OUTDIR)InvalidChange.$(O) \
+    $(OUTDIR)ProjectProblem.$(O) \
     $(OUTDIR)extensions.$(O) \
 
 
 
-
--- a/PerforceSourceCodeManager.st	Tue Feb 14 17:06:02 2012 +0000
+++ b/PerforceSourceCodeManager.st	Thu Feb 23 15:15:11 2012 +0000
@@ -2536,7 +2536,7 @@
 !PerforceSourceCodeManager class methodsFor:'documentation'!
 
 version
-    ^ '$Id: /cvs/stx/stx/libbasic3/PerforceSourceCodeManager.st,v 1.23 2012/01/19 15:19:48 cg Exp $'
+    ^ '$Id: PerforceSourceCodeManager.st 1886 2012-02-23 15:15:11Z vranyj1 $'
 !
 
 version_CVS
@@ -2544,7 +2544,7 @@
 !
 
 version_SVN
-    ^ '$Id$'
+    ^ '$Id: PerforceSourceCodeManager.st 1886 2012-02-23 15:15:11Z vranyj1 $'
 ! !
 
 PerforceSourceCodeManager initialize!
--- a/ProjectChecker.st	Tue Feb 14 17:06:02 2012 +0000
+++ b/ProjectChecker.st	Thu Feb 23 15:15:11 2012 +0000
@@ -18,13 +18,6 @@
 	category:'System-Support-Projects'
 !
 
-Object subclass:#Problem
-	instanceVariableNames:'label description severity data'
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:ProjectChecker
-!
-
 !ProjectChecker class methodsFor:'documentation'!
 
 copyright
@@ -105,7 +98,9 @@
 !
 
 problems
-    ^ problems
+    ^ problems ? #()
+
+    "Modified: / 23-02-2012 / 15:14:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ProjectChecker methodsFor:'checking'!
@@ -114,9 +109,8 @@
 
     packageDef := ProjectDefinition definitionClassForPackage: package.
     packageDef isNil ifTrue:[
-        self problem: 'Project definition class for package %1 does not exist (no further checks performed)'
-             description: nil
-             severity: #error.
+        self addProblem: 
+            (ProjectProblem newProjectDefinitionDoesNotExist package: package).
         ^self    
     ].
 
@@ -142,7 +136,7 @@
     "Checks whether all classes listed in #classNamesAndAttributes are present
     and if all present classes are listed"
 
-    |classesInImage classesInDescription missingPools onlyInImage onlyInDescription|
+    |classesInImage classesInDescription onlyInImage onlyInDescription|
     "WARNING: Copy/paste of ProjectDefinition>>validateDescription"
 
     classesInImage := Smalltalk allClasses select:[:cls | (cls package = self package) and:[cls isPrivate not]].
@@ -155,15 +149,13 @@
 
         cls := Smalltalk at:nm asSymbol.
         cls isNil ifTrue:[
-            self problem: 'Missing class ', nm 
-                 description: 'A class is listed in project definition but not present in the system'
-                 severity: #error
+            self addProblem: 
+                (ProjectProblem newClassListedButDoesNotExist className: nm)
         ] ifFalse:[
             classesInDescription add:cls.
         ].
     ].
 
-    missingPools := Set new.
     classesInDescription do:[:eachClass |
         eachClass sharedPoolNames do:[:eachPoolName |
             |pool|
@@ -175,18 +167,16 @@
                 ]
             ].
             pool isNil ifTrue:[
-                self 
-                    problem:'Missing pool: ',eachPoolName 
-                    description: ('Class %1 uses a pool named %2 but it does not exists' bindWith: eachClass with: pool)
-                    severity: #error data: eachClass.
-                missingPools add:eachPoolName.
+                self addProblem: 
+                    (ProjectProblem newClassUsesPoolButItDoesNotExist
+                        className: eachClass name;
+                        poolName: eachPoolName).
             ] ifFalse:[
                 pool isSharedPool ifFalse:[
-                    self 
-                        problem:'Missing pool: ',eachPoolName 
-                        description: ('Class %1 uses a pool named %2 but it is not actually a shared pool.' bindWith: eachClass with: pool)
-                        severity: #error data: eachClass.
-                    missingPools add:eachPoolName.
+                    self addProblem: 
+                        (ProjectProblem newClassUsesPoolButItIsNotASharedPool
+                            className: eachClass name;
+                            poolName: eachPoolName).                
                 ].
             ].
         ].
@@ -195,15 +185,13 @@
     classesInImage ~= classesInDescription ifTrue:[
         onlyInImage := (classesInImage reject:[:cls | classesInDescription includes:cls]).
         onlyInImage do:[:cls|
-            self problem: ('Class %1 not listed in project definition' bindWith: cls)
-                 description: 'The class %1 not listed in project definition''s #classNamesAndAttributes, therefore it won''t be compiler nor autoladed next time you compile/load project.'
-                 severity: #error data: cls.
+            self addProblem: 
+                (ProjectProblem newClassNotListed className: cls name).
         ].
         onlyInDescription := (classesInDescription reject:[:cls | classesInImage includes:cls]).
         onlyInDescription do:[:cls|
-            self problem: ('Class %1 is listed in project definition but not present in the system' bindWith: cls)
-                 description: 'The class %1 list in project definition''s but not present in the system. This leads to uncompilable package as build files may be incorrectly generated.'
-                 severity: #error data: cls.
+            self addProblem: 
+                (ProjectProblem newClassListedButDoesNotExist className: cls name)
         ].
     ].
 
@@ -218,9 +206,8 @@
 
     classesToCheck do:[:class|
         (class isPrivate not and:[(classNamesListed includes: class name) not]) ifTrue:[
-            self problem: ('Class %1 not listed in project definition' bindWith: class)
-                 description: 'The class %1 not listed in project definition''s #classNamesAndAttributes, therefore it won''t be compiler nor autoladed next time you compile/load project.'
-                 severity: #error data: class.
+            self addProblem: 
+                (ProjectProblem newClassNotListed className: class name).
         ]
     ].
 
@@ -243,15 +230,15 @@
     ].
 
     (extensionsListed \ extensionsPresent) do:[:clsAndSel|
-        self problem: ('Missing  %1>>%2 extension method' bindWith: clsAndSel first with: clsAndSel second)
-             description: ('An extension method %1>>%2 is listed in #extensionMethodNames but not present in image' bindWith: clsAndSel first with: clsAndSel second)
-             severity: #warning data: clsAndSel.
+         self addProblem: 
+            (ProjectProblem newExtensionMethodListedButDoesNotExist
+                className: clsAndSel first selector: clsAndSel second).                            
     ].
 
     (extensionsPresent \ extensionsListed) do:[:clsAndSel|
-        self problem: ('%1>>%2 extension method not in list' bindWith: clsAndSel first with: clsAndSel second)
-             description: ('An extension method %1>>%2 present in image but not listed in  #extensionMethodNames' bindWith: clsAndSel first with: clsAndSel second)
-             severity: #warning data: clsAndSel.
+         self addProblem: 
+            (ProjectProblem newExtensionMethodNotListed
+                className: clsAndSel first selector: clsAndSel second).                            
     ].
 
     "Created: / 12-01-2012 / 12:31:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -263,9 +250,9 @@
 
     packageDef searchForExtensions do:[:mthd|
         (packageDef preRequisites includes: mthd mclass package) ifFalse:[
-            self problem: ('%3 required by extension method but not in prerequisites' bindWith: mthd mclass package)
-                 description: ('An extension method %1>>%2 extends class in package %3 but the package is not listed in package''s prerequisited. This leads into missing methods and strange bugs when application is compiled and run!!' bindWith: mthd class with: mthd selector with: mthd class package)
-                 severity: #error data: mthd
+"/            self problem: ('%3 required by extension method but not in prerequisites' bindWith: mthd mclass package)
+"/                 description: ('An extension method %1>>%2 extends class in package %3 but the package is not listed in package''s prerequisited. This leads into missing methods and strange bugs when application is compiled and run!!' bindWith: mthd class with: mthd selector with: mthd class package)
+"/                 severity: #error data: mthd
          ].
     ]
 
@@ -278,9 +265,9 @@
     checker := [:cls|
         cls selectorsAndMethodsDo:[:sel :mth|
             (mth package isNil or:[mth package == PackageId noProjectID]) ifTrue:[
-                self problem: ('Unpackaged method %1 >> %2'  bindWith: mth mclass with: sel)
-                     description: 'The class belongs to ''no package'' and therefore won'' be commited. All methods should belong to a package.'
-                     severity: #error data: mth.
+                 self addProblem: 
+                    (ProjectProblem newMethodInNoPackage
+                        className: cls name selector: sel).                            
             ]
         ]
     ].
@@ -334,87 +321,18 @@
 
 !ProjectChecker methodsFor:'reporting'!
 
-problem: label description: description severity: severity
-    "Reports a problem"
-
-    ^self problem: label description: description severity: severity data: nil
-
-    "Created: / 11-01-2012 / 17:24:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-problem: label description: description severity: severity data: data
-    "Reports a problem"
-
+addProblem: aProjectProblem
+    aProjectProblem package: self package.
     problems isNil ifTrue:[problems := OrderedCollection new].
-    problems add:
-        (Problem new
-            label: label;
-            description: description;
-            severity: severity;
-            data: data)
-
-    "Created: / 11-01-2012 / 17:17:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
-!ProjectChecker::Problem methodsFor:'accessing'!
-
-data
-    ^ data
-!
-
-data:something
-    data := something.
-!
-
-description
-    ^ description
-!
+    problems add: aProjectProblem
 
-description:something
-    description := something.
-!
-
-label
-    ^ label
-!
-
-label:something
-    label := something.
-!
-
-severity
-    ^ severity
-!
-
-severity:something
-    severity := something.
-! !
-
-!ProjectChecker::Problem methodsFor:'printing & storing'!
-
-displayString
-    ^self label
-
-    "Created: / 14-02-2012 / 17:02:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-printOn:aStream
-    "append a printed representation if the receiver to the argument, aStream"
-
-    super printOn:aStream.
-    aStream nextPut:$(.
-    severity printOn:aStream.
-    aStream nextPut:$:; space.
-    label printOn:aStream.
-    aStream nextPut:$).
-
-    "Modified: / 12-01-2012 / 13:09:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 23-02-2012 / 13:10:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ProjectChecker class methodsFor:'documentation'!
 
 version
-    ^ '$Id: ProjectChecker.st 1885 2012-02-14 17:06:02Z vranyj1 $'
+    ^ '$Id: ProjectChecker.st 1886 2012-02-23 15:15:11Z vranyj1 $'
 !
 
 version_CVS
@@ -422,5 +340,5 @@
 !
 
 version_SVN
-    ^ '$Id: ProjectChecker.st 1885 2012-02-14 17:06:02Z vranyj1 $'
+    ^ '$Id: ProjectChecker.st 1886 2012-02-23 15:15:11Z vranyj1 $'
 ! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ProjectProblem.st	Thu Feb 23 15:15:11 2012 +0000
@@ -0,0 +1,516 @@
+"
+ COPYRIGHT (c) 2006 by eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libbasic3' }"
+
+Object subclass:#ProjectProblem
+	instanceVariableNames:'package'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'System-Support-Projects'
+!
+
+ProjectProblem subclass:#ClassProblem
+	instanceVariableNames:'className'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ProjectProblem
+!
+
+ProjectProblem::ClassProblem subclass:#ClassNotListed
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ProjectProblem
+!
+
+ProjectProblem::ClassProblem subclass:#ClassListedButDoesNotExist
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ProjectProblem
+!
+
+ProjectProblem::ClassProblem subclass:#ClassUsesPoolButItDoesNotExist
+	instanceVariableNames:'poolName'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ProjectProblem
+!
+
+ProjectProblem::ClassProblem subclass:#ClassUsesPoolButItIsNotASharedPool
+	instanceVariableNames:'poolName'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ProjectProblem
+!
+
+ProjectProblem subclass:#MethodProblem
+	instanceVariableNames:'className selector'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ProjectProblem
+!
+
+ProjectProblem::MethodProblem subclass:#ExtensionMethodNotListed
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ProjectProblem
+!
+
+ProjectProblem::MethodProblem subclass:#MethodInNoPackage
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ProjectProblem
+!
+
+ProjectProblem::MethodProblem subclass:#ExtensionMethodListedButDoesNotExist
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ProjectProblem
+!
+
+ProjectProblem subclass:#ProjectDefinitionDoesNotExist
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ProjectProblem
+!
+
+!ProjectProblem class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 2006 by eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+! !
+
+!ProjectProblem class methodsFor:'instance creation'!
+
+newClassListedButDoesNotExist
+
+    ^ClassListedButDoesNotExist new
+
+    "Created: / 23-02-2012 / 13:18:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+newClassNotListed
+
+    ^ClassNotListed new
+
+    "Created: / 23-02-2012 / 13:59:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+newClassUsesPoolButItDoesNotExist
+
+    ^ClassUsesPoolButItDoesNotExist new
+
+    "Created: / 23-02-2012 / 13:37:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+newClassUsesPoolButItIsNotASharedPool
+
+    ^ClassUsesPoolButItIsNotASharedPool new
+
+    "Created: / 23-02-2012 / 13:48:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+newExtensionMethodListedButDoesNotExist
+
+    ^ExtensionMethodListedButDoesNotExist new
+
+    "Created: / 23-02-2012 / 14:26:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+newExtensionMethodNotListed
+
+    ^ExtensionMethodNotListed new
+
+    "Created: / 23-02-2012 / 14:27:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+newMethodInNoPackage
+
+    ^MethodInNoPackage new
+
+    "Created: / 23-02-2012 / 14:27:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+newProjectDefinitionDoesNotExist
+
+    ^ProjectDefinitionDoesNotExist new
+
+    "Created: / 23-02-2012 / 13:08:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProjectProblem methodsFor:'accessing'!
+
+actions
+    "Return (possibly empty) list of actions that
+     the user may take to fix/investigate the problem.
+     Returned value should be list of pairs (label, action block)"
+
+    ^#()
+
+    "Created: / 23-02-2012 / 13:08:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+description
+    "Return a (HTML) describing the problem."
+
+    ^self subclassResponsibility
+
+    "Created: / 23-02-2012 / 13:04:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+descriptionAndActions
+    "Return a (HTML) describing the problem plus possible actions."
+
+    ^self description
+
+    "Created: / 23-02-2012 / 14:32:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+label
+    "Return the label (possibly instance if a Text) shortly describing the problem"
+
+    ^self subclassResponsibility
+
+    "Created: / 23-02-2012 / 13:03:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+package
+    ^ package
+!
+
+package:aSymbol
+    package := aSymbol.
+!
+
+packageDefinitionClass
+    ^ProjectDefinition definitionClassForPackage: package
+
+    "Created: / 23-02-2012 / 13:26:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+severity
+    "Return a severity - one of #error, #warning, #info"
+
+    ^#warning"/by default
+
+    "Created: / 23-02-2012 / 13:09:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProjectProblem methodsFor:'printing & storing'!
+
+displayString
+    ^self label
+
+    "Created: / 14-02-2012 / 17:02:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+printOn:aStream
+    "append a printed representation if the receiver to the argument, aStream"
+
+    super printOn:aStream.
+    aStream nextPut:$(.
+    severity printOn:aStream.
+    aStream nextPut:$:; space.
+    label printOn:aStream.
+    aStream nextPut:$).
+
+    "Modified: / 12-01-2012 / 13:09:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProjectProblem methodsFor:'utilities-HTML'!
+
+linkToClass: classOrclassName
+
+    | className |
+    className := classOrclassName isBehavior
+                    ifTrue: [classOrclassName storeString]
+                    ifFalse:[classOrclassName].
+
+    ^'<A INFO="Click to browse class" ACTION="doit: UserPreferences current systemBrowserClass openInClass:%1"><CODE>%1</CODE></A>'
+        bindWith: className
+
+    "Created: / 23-02-2012 / 13:44:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+linkToClass: classOrclassName selector: selector
+
+    | className |
+    className := classOrclassName isBehavior
+                    ifTrue: [classOrclassName name]
+                    ifFalse:[classOrclassName].
+
+    ^'<A INFO="Click to browse method" ACTION="doit: UserPreferences current systemBrowserClass openInClass:%1 selector: %2"><CODE>%1>>%3</CODE></A>'
+        bindWith: className
+            with: selector storeString
+            with: selector
+
+    "Created: / 23-02-2012 / 13:45:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProjectProblem::ClassProblem methodsFor:'accessing'!
+
+className
+    ^ className
+!
+
+className:something
+    className := something.
+! !
+
+!ProjectProblem::ClassNotListed methodsFor:'accessing'!
+
+description
+    "Return a (HTML) describing the problem."
+
+    ^
+'Class %1 is not listed in project definition. Such class won''t be compiled
+and - if some other class dependents on it - whole package will fail to compile
+at all. 
+
+Either add it into %2 or remove it completely.'
+bindWith: (self linkToClass: className)
+    with: (self linkToClass: self packageDefinitionClass class selector: #classNamesAndAttributes)
+
+    "Modified: / 23-02-2012 / 14:35:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+label
+    "Return the label (possibly instance if a Text) shortly describing the problem"
+
+    ^'Class %1 not listed in project definition' bindWith: className
+
+    "Modified: / 23-02-2012 / 13:55:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProjectProblem::ClassListedButDoesNotExist methodsFor:'accessing'!
+
+description
+    "Return a (HTML) describing the problem."
+    ^
+'A class (%1) is listed in project definition class but
+it is not present in the system.
+
+You should either create it or remove it from %1.' 
+    bindWith: (self linkToClass: self packageDefinitionClass class selector: #classNamesAndAttributes)
+
+    "Modified: / 23-02-2012 / 14:34:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+label
+    ^'Missing class ', className
+
+    "Modified: / 23-02-2012 / 13:20:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProjectProblem::ClassUsesPoolButItDoesNotExist methodsFor:'accessing'!
+
+description
+    "Return a (HTML) describing the problem."
+
+    ^
+'A class %1 uses pool %2 but it does not exists. 
+
+The pool should be removed from class definition otherwise
+the package won''t compile due missing class.'
+    bindWith: (self linkToClass: className) with: poolName
+
+    "Modified: / 23-02-2012 / 13:47:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+label
+    "Return the label (possibly instance if a Text) shortly describing the problem"
+
+    ^'Missing pool (%1)' bindWith: className
+
+    "Modified: / 23-02-2012 / 13:34:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+poolName
+    ^ poolName
+!
+
+poolName:something
+    poolName := something.
+! !
+
+!ProjectProblem::ClassUsesPoolButItIsNotASharedPool methodsFor:'accessing'!
+
+description
+    "Return a (HTML) describing the problem."
+
+    ^
+'A class %1 uses pool %2 but it does not exists. 
+
+The pool should be removed from class definition otherwise
+the package won''t compile due missing class.'
+    bindWith: (self linkToClass: className) 
+        with: (self linkToClass: poolName)
+
+    "Modified: / 23-02-2012 / 13:48:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+label
+    "Return the label (possibly instance if a Text) shortly describing the problem"
+
+    ^'Used pool is not a SharedPool (%1)' bindWith: className
+
+    "Modified: / 23-02-2012 / 13:40:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+poolName
+    ^ poolName
+!
+
+poolName:something
+    poolName := something.
+! !
+
+!ProjectProblem::MethodProblem methodsFor:'accessing'!
+
+className
+    ^ className
+!
+
+className:something
+    className := something.
+!
+
+className:something selector: sel
+    className := something.
+    selector :=  sel
+
+    "Created: / 23-02-2012 / 14:17:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+selector
+    ^ selector
+!
+
+selector:something
+    selector := something.
+! !
+
+!ProjectProblem::MethodProblem methodsFor:'utilities-HTML'!
+
+linkToMethod
+
+    ^self linkToClass: className selector: selector
+
+    "Created: / 23-02-2012 / 14:21:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProjectProblem::ExtensionMethodNotListed methodsFor:'accessing'!
+
+description
+    "Return a (HTML) describing the problem."
+
+^'Method %1 is not listed in %2. Although it does not hurt,
+it should be listed'
+    bindWith: (self linkToMethod)
+        with: (self linkToClass: self packageDefinitionClass class selector: #extensionMethodNames)
+
+    "Modified: / 23-02-2012 / 14:34:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+label
+    "Return the label (possibly instance if a Text) shortly describing the problem"
+
+    ^'Extension method %1>>%2 not listed' bindWith: className with: selector
+
+    "Modified: / 23-02-2012 / 14:22:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProjectProblem::MethodInNoPackage methodsFor:'accessing'!
+
+description
+    "Return a (HTML) describing the problem."
+
+    ^
+'Method %1 does not belong to any package. Such methods
+are not commited and will be lost when you restart/recompile.
+Method should be moved to some package, %2 maybe?'
+    bindWith: (self linkToMethod) 
+        with: package
+
+    "Modified: / 23-02-2012 / 14:21:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+label
+    "Return the label (possibly instance if a Text) shortly describing the problem"
+
+    ^'Unpackaged method %1>>%2' bindWith: className with: selector
+
+    "Modified: / 23-02-2012 / 14:19:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProjectProblem::ExtensionMethodListedButDoesNotExist methodsFor:'accessing'!
+
+description
+    "Return a (HTML) describing the problem."
+
+^'Method %1>>%2 listed in %3 but does not exists. This does not hurt
+if you stc-compile all your code, but such a package will fail to
+(auto)load from sources. 
+
+It is highly reccomended to add the method to the list (%3).'
+    bindWith: className with: selector
+        with: (self linkToClass: self packageDefinitionClass class selector: #extensionMethodNames)
+
+    "Modified: / 23-02-2012 / 14:35:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+label
+    "Return the label (possibly instance if a Text) shortly describing the problem"
+
+    ^'Extension method %1>>%2 listed but not exist' bindWith: className with: selector
+
+    "Modified: / 23-02-2012 / 14:22:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProjectProblem::ProjectDefinitionDoesNotExist methodsFor:'accessing'!
+
+description
+    "Return a (HTML) describing the problem."
+
+    ^
+'A project definition class for package %1 does not exists.
+You <b>must</b> create it, otherwise package management won''t work'.
+
+    "Modified: / 23-02-2012 / 13:29:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+label
+    ^'Project definition class for %1 does not exist' bindWith: package
+
+    "Modified: / 23-02-2012 / 13:21:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProjectProblem class methodsFor:'documentation'!
+
+version_SVN
+    ^ '$Id: ProjectProblem.st 1886 2012-02-23 15:15:11Z vranyj1 $'
+! !
--- a/abbrev.stc	Tue Feb 14 17:06:02 2012 +0000
+++ b/abbrev.stc	Thu Feb 23 15:15:11 2012 +0000
@@ -66,4 +66,4 @@
 ProjectChecker ProjectChecker stx:libbasic3 'System-Support-Projects' 0
 MercurialSourceCodeManager MercurialSourceCodeManager stx:libbasic3 'System-SourceCodeManagement' 0
 InvalidChange InvalidChange stx:libbasic3 'System-Changes' 0
-
+ProjectProblem ProjectProblem stx:libbasic3 'System-Support-Projects' 0
--- a/bc.mak	Tue Feb 14 17:06:02 2012 +0000
+++ b/bc.mak	Thu Feb 23 15:15:11 2012 +0000
@@ -1,7 +1,7 @@
-# $Header: /cvs/stx/stx/libbasic3/bc.mak,v 1.104 2012/01/30 18:55:19 vrany Exp $
+# $Header$
 #
 # DO NOT EDIT
-# automagically generated from the projectDefinition: stx_libbasic3 at 2012-01-30 18:54:42.879.
+# automagically generated from the projectDefinition: stx_libbasic3 at 2012-02-23 15:15:00.217.
 #
 # Warning: once you modify this file, do not rerun
 # stmkmp or projectDefinition-build again - otherwise, your changes are lost.
@@ -82,6 +82,7 @@
 $(OUTDIR)MethodFinder.$(O) MethodFinder.$(H): MethodFinder.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)ProfileTree.$(O) ProfileTree.$(H): ProfileTree.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)ProjectChecker.$(O) ProjectChecker.$(H): ProjectChecker.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ProjectProblem.$(O) ProjectProblem.$(H): ProjectProblem.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SourceCodeCache.$(O) SourceCodeCache.$(H): SourceCodeCache.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SourceCodeManagerError.$(O) SourceCodeManagerError.$(H): SourceCodeManagerError.st $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SourceCodeManagerUtilities.$(O) SourceCodeManagerUtilities.$(H): SourceCodeManagerUtilities.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -134,4 +135,3 @@
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\libbasic\UserPreferences.$(H) $(INCLUDE_TOP)\stx\libbasic\IdentityDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
-
--- a/libInit.cc	Tue Feb 14 17:06:02 2012 +0000
+++ b/libInit.cc	Thu Feb 23 15:15:11 2012 +0000
@@ -1,5 +1,5 @@
 /*
- * $Header: /cvs/stx/stx/libbasic3/libInit.cc,v 1.92 2012/01/30 18:56:12 vrany Exp $
+ * $Header$
  *
  * DO NOT EDIT
  * automagically generated from the projectDefinition: stx_libbasic3.
@@ -43,6 +43,7 @@
 _MethodFinder_Init(pass,__pRT__,snd);
 _ProfileTree_Init(pass,__pRT__,snd);
 _ProjectChecker_Init(pass,__pRT__,snd);
+_ProjectProblem_Init(pass,__pRT__,snd);
 _SourceCodeCache_Init(pass,__pRT__,snd);
 _SourceCodeManagerError_Init(pass,__pRT__,snd);
 _SourceCodeManagerUtilities_Init(pass,__pRT__,snd);
@@ -96,4 +97,3 @@
 _stx_137libbasic3_extensions_Init(pass,__pRT__,snd);
 __END_PACKAGE__();
 }
-
--- a/libbasic3.rc	Tue Feb 14 17:06:02 2012 +0000
+++ b/libbasic3.rc	Thu Feb 23 15:15:11 2012 +0000
@@ -3,7 +3,7 @@
 // automagically generated from the projectDefinition: stx_libbasic3.
 //
 VS_VERSION_INFO VERSIONINFO
-  FILEVERSION     6,2,1867,1867
+  FILEVERSION     6,2,1884,1884
   PRODUCTVERSION  6,2,1,1
 #if (__BORLANDC__)
   FILEFLAGSMASK   VS_FF_DEBUG | VS_FF_PRERELEASE
@@ -20,12 +20,12 @@
     BEGIN
       VALUE "CompanyName", "eXept Software AG\0"
       VALUE "FileDescription", "Smalltalk/X Additional Developer Basic Classes (LIB)\0"
-      VALUE "FileVersion", "6.2.1867.1867\0"
+      VALUE "FileVersion", "6.2.1884.1884\0"
       VALUE "InternalName", "stx:libbasic3\0"
       VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2011\nCopyright eXept Software AG 1998-2011\0"
       VALUE "ProductName", "Smalltalk/X\0"
       VALUE "ProductVersion", "6.2.1.1\0"
-      VALUE "ProductDate", "Mon, 30 Jan 2012 18:54:42 GMT\0"
+      VALUE "ProductDate", "Thu, 23 Feb 2012 15:15:00 GMT\0"
     END
 
   END
@@ -35,4 +35,3 @@
     VALUE "Translation", 0x409, 0x4E4 // U.S. English, Windows Multilingual
   END
 END
-
--- a/stx_libbasic3.st	Tue Feb 14 17:06:02 2012 +0000
+++ b/stx_libbasic3.st	Thu Feb 23 15:15:11 2012 +0000
@@ -166,7 +166,10 @@
         ProjectChecker
         MercurialSourceCodeManager
         InvalidChange
+        ProjectProblem
     )
+
+    "Modified: / 23-02-2012 / 15:13:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 extensionMethodNames
@@ -217,27 +220,26 @@
      (Generated since 2011-04-08)
     "        
 
-    ^ '$URL$'
+    ^ '$URL: https://vranyj1@swing.fit.cvut.cz/svn/stx/libbasic3/branches/jv/stx_libbasic3.st $'
 !
 
 svnRevisionNr
     "Return a SVN revision number of myself.
      This number is updated after a commit"
 
-    ^ "$SVN-Revision:"        '1874M'"$"
+    ^ "$SVN-Revision:"1885"$"
 ! !
 
 !stx_libbasic3 class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/stx_libbasic3.st,v 1.67 2012/01/30 18:56:18 vrany Exp $'
+    ^ '$Id: stx_libbasic3.st 1886 2012-02-23 15:15:11Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic3/stx_libbasic3.st,v 1.67 2012/01/30 18:56:18 vrany Exp '
+    ^ '§Header: /cvs/stx/stx/libbasic3/stx_libbasic3.st,v 1.67 2012/01/30 18:56:18 vrany Exp §'
 !
 
 version_SVN
-    ^ '$Id: stx_libbasic3.st 1884 2012-02-13 19:20:09Z vranyj1 $'
+    ^ '$Id: stx_libbasic3.st 1886 2012-02-23 15:15:11Z vranyj1 $'
 ! !
-