Improvements in ProjectChecker - now it checks for corrupted source and uncompilable methods jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 11 Apr 2012 17:07:51 +0100
branchjv
changeset 3046 c99775eaf08a
parent 3045 0d05c8eaa028
child 3047 a19c6e22a8bb
Improvements in ProjectChecker - now it checks for corrupted source and uncompilable methods
AbstractSourceCodeManager.st
Make.proto
Make.spec
ProjectChecker.st
ProjectProblem.st
bc.mak
libbasic3.rc
--- a/AbstractSourceCodeManager.st	Mon Apr 09 19:33:20 2012 +0100
+++ b/AbstractSourceCodeManager.st	Wed Apr 11 17:07:51 2012 +0100
@@ -1655,6 +1655,17 @@
     "Modified (comment): / 29-09-2011 / 13:27:09 / cg"
 !
 
+performsCompilabilityChecks
+    "Should return true, if the manager itself performs
+     compilability checks, false otherwise.
+
+     Basically a hack, see my senders..."
+
+    ^false"/by default
+
+    "Created: / 11-04-2012 / 16:54:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 prefixOfVersionMethodForExtensionsSelector
     "all scm-extensionsVersion methods start with this prefix"
 
@@ -3628,7 +3639,7 @@
 !AbstractSourceCodeManager class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.290 2012/03/02 16:10:59 cg Exp $'
+    ^ '$Id: AbstractSourceCodeManager.st 1914 2012-04-11 16:07:51Z vranyj1 $'
 !
 
 version_CVS
@@ -3636,7 +3647,7 @@
 !
 
 version_SVN
-    ^ '$Id: AbstractSourceCodeManager.st 1909 2012-03-31 00:14:49Z vranyj1 $'
+    ^ '$Id: AbstractSourceCodeManager.st 1914 2012-04-11 16:07:51Z vranyj1 $'
 ! !
 
 AbstractSourceCodeManager initialize!
--- a/Make.proto	Mon Apr 09 19:33:20 2012 +0100
+++ b/Make.proto	Wed Apr 11 17:07:51 2012 +0100
@@ -1,7 +1,7 @@
 # $Header$
 #
 # DO NOT EDIT
-# automagically generated from the projectDefinition: stx_libbasic3 at 2012-04-03 18:15:13.032.
+# automagically generated from the projectDefinition: stx_libbasic3 at 2012-04-11 17:08:30.078.
 #
 # Warning: once you modify this file, do not rerun
 # stmkmp or projectDefinition-build again - otherwise, your changes are lost.
@@ -129,7 +129,7 @@
 $(OUTDIR)Change.$(O) Change.$(H): Change.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)ChangeDeltaInformation.$(O) ChangeDeltaInformation.$(H): ChangeDeltaInformation.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)ChangeNotificationParameter.$(O) ChangeNotificationParameter.$(H): ChangeNotificationParameter.st $(INCLUDE_TOP)/stx/libbasic/Array.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)ChangeSet.$(O) ChangeSet.$(H): ChangeSet.st $(INCLUDE_TOP)/stx/libbasic/OrderedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/SmalltalkChunkFileSourceWriter.$(H) $(INCLUDE_TOP)/stx/libbasic/AbstractSourceFileWriter.$(H) $(STCHDR)
+$(OUTDIR)ChangeSet.$(O) ChangeSet.$(H): ChangeSet.st $(INCLUDE_TOP)/stx/libbasic/OrderedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SmalltalkChunkFileSourceWriter.$(H) $(INCLUDE_TOP)/stx/libbasic/AbstractSourceFileWriter.$(H) $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(STCHDR)
 $(OUTDIR)ChangeSetDiff.$(O) ChangeSetDiff.$(H): ChangeSetDiff.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)ChangeSetDiffComponent.$(O) ChangeSetDiffComponent.$(H): ChangeSetDiffComponent.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)ClassOrganizer.$(O) ClassOrganizer.$(H): ClassOrganizer.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
--- a/Make.spec	Mon Apr 09 19:33:20 2012 +0100
+++ b/Make.spec	Wed Apr 11 17:07:51 2012 +0100
@@ -1,7 +1,7 @@
 # $Header$
 #
 # DO NOT EDIT
-# automagically generated from the projectDefinition: stx_libbasic3 at 2012-04-03 18:15:12.101.
+# automagically generated from the projectDefinition: stx_libbasic3 at 2012-04-11 17:08:29.225.
 #
 # Warning: once you modify this file, do not rerun
 # stmkmp or projectDefinition-build again - otherwise, your changes are lost.
--- a/ProjectChecker.st	Mon Apr 09 19:33:20 2012 +0100
+++ b/ProjectChecker.st	Wed Apr 11 17:07:51 2012 +0100
@@ -100,7 +100,9 @@
 !
 
 package:packageId
-    package := packageId.
+    package := packageId asSymbol.
+
+    "Modified: / 11-04-2012 / 16:00:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 problems
@@ -271,9 +273,12 @@
     checker := [:cls|
         cls selectorsAndMethodsDo:[:sel :mth|
             (mth package isNil or:[mth package == PackageId noProjectID]) ifTrue:[
-                 self addProblem: 
-                    (ProjectProblem newMethodInNoPackage
-                        className: cls name selector: sel).                            
+                "Sigh, special hack for Expecco"
+                (cls name = 'Expecco::AbstractApplication class' and:[sel = 'flags']) ifFalse:[
+                    self addProblem: 
+                        (ProjectProblem newMethodInNoPackage
+                            className: cls name selector: sel).                            
+                ]
             ]
         ]
     ].
@@ -285,6 +290,93 @@
     ]
 
     "Created: / 13-02-2012 / 18:18:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+checkMethodCodingStyle: method
+    "Checks for various coding style violations such as 'self halt' or
+     improper indentation :-)"
+
+    "To be implemented"
+
+    "Created: / 11-04-2012 / 12:38:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+checkMethodSTCCompilability1: method into: problem
+    "Checks is the method can be compiled by STC based on Parser error/warnings"
+
+    | lang |
+    lang := method programmingLanguage.
+    lang isSmalltalk ifFalse:[ ^ self ].
+
+    lang compilerClass new
+        compile:method source
+        forClass:method mclass
+        inCategory:'others'
+        notifying:problem
+        install:false
+        skipIfSame:false
+        silent:false
+        foldConstants:true
+        ifFail:[ ]
+
+    "Created: / 11-04-2012 / 15:31:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+checkMethodSTCCompilability2: method into: problem
+    "Checks is the method can be compiled by STC based on selected lint rules"
+
+    "Not yet implemented"
+
+    "Created: / 11-04-2012 / 15:54:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+checkMethodSTCCompilability: method
+    "Checks is the method can be compiled by STC (since STC won't compile
+     everything bytecode compiler/jit compiler does, sigh"
+
+    "To be implemented"
+
+    | issue |
+    issue := ProjectProblem newMethodCompilabilityIssue.
+    issue method: method.
+    self checkMethodSTCCompilability1: method into: issue.
+    self checkMethodSTCCompilability2: method into: issue.
+    issue hasIssue ifTrue:[
+        self addProblem: issue
+    ]
+
+    "Created: / 11-04-2012 / 12:37:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+checkMethodSourceCode: method
+    "Checks, whether method's source code is both
+     available and parseable. Return true if the code
+     is syntactically corret, false otherwise"
+
+    | source |
+
+    [    
+        source := method source.
+    ] on: Error do:[
+        self addProblem:
+            (ProjectProblem newMethodSourceNotAvailable method: method).
+        ^false
+    ].
+    [
+        (Parser parseMethod: method source) == #Error ifTrue:[
+            self addProblem:
+                (ProjectProblem newMethodSourceCorrupted method: method).
+            ^false.
+        ]
+    ] on: Error do:[
+        self addProblem:
+            (ProjectProblem newMethodSourceCorrupted method: method).
+        ^false.
+    ].
+
+    ^true
+
+    "Created: / 11-04-2012 / 12:29:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ProjectChecker methodsFor:'checks-private'!
@@ -308,12 +400,43 @@
     "Created: / 13-02-2012 / 18:18:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+checkMethod: method
+
+    (self checkMethodSourceCode: method) ifTrue:[
+        "/OK, method's source is OK, perform further checks
+        self checkMethodSTCCompilability: method.
+        self checkMethodCodingStyle: method.
+    ]
+
+    "Created: / 11-04-2012 / 12:27:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 checkMethods
-    "Not yet implemented"
+
+    methods notEmptyOrNil ifTrue:[
+        self checkMethods: methods.
+        ^self.
+    ].
+
+    self checkMethods:
+        (Iterator on:[:whatToDo|
+            (classes notNil ifTrue:[classes] ifFalse:[Smalltalk allClasses]) do:[:cls|
+                cls theNonMetaclass withAllPrivateClassesDo:[:each |
+                    each instAndClassSelectorsAndMethodsDo:[:s :m | m package = package ifTrue:[whatToDo value:m]]
+                ].
+            ]
+        ])
 
     "Created: / 11-01-2012 / 16:55:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+checkMethods: methodsToCheck
+
+    methodsToCheck do:[:m|self checkMethod: m].
+
+    "Created: / 11-04-2012 / 12:16:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 checkPackage
 
     self checkClassListConsistency.
@@ -338,9 +461,9 @@
 !ProjectChecker class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectChecker.st,v 1.4 2012/03/14 16:25:24 vrany Exp $'
+    ^ '$Id: ProjectChecker.st 1914 2012-04-11 16:07:51Z vranyj1 $'
 !
 
 version_SVN
-    ^ '$Id: ProjectChecker.st 1904 2012-03-21 17:46:55Z vranyj1 $'
+    ^ '$Id: ProjectChecker.st 1914 2012-04-11 16:07:51Z vranyj1 $'
 ! !
--- a/ProjectProblem.st	Mon Apr 09 19:33:20 2012 +0100
+++ b/ProjectProblem.st	Wed Apr 11 17:07:51 2012 +0100
@@ -67,6 +67,27 @@
 	privateIn:ProjectProblem
 !
 
+ProjectProblem::MethodProblem subclass:#MethodCompilabilityIssue
+	instanceVariableNames:'errors warnings'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ProjectProblem
+!
+
+Object subclass:#Error
+	instanceVariableNames:'message startPosition endPosition'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ProjectProblem::MethodCompilabilityIssue
+!
+
+Object subclass:#Warning
+	instanceVariableNames:'message startPosition endPosition'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ProjectProblem::MethodCompilabilityIssue
+!
+
 ProjectProblem::MethodProblem subclass:#MethodInNoPackage
 	instanceVariableNames:''
 	classVariableNames:''
@@ -81,6 +102,20 @@
 	privateIn:ProjectProblem
 !
 
+ProjectProblem::MethodProblem subclass:#MethodSourceCorrupted
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ProjectProblem
+!
+
+ProjectProblem::MethodProblem subclass:#MethodSourceNotAvailable
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ProjectProblem
+!
+
 ProjectProblem subclass:#ProjectDefinitionDoesNotExist
 	instanceVariableNames:''
 	classVariableNames:''
@@ -148,6 +183,13 @@
     "Created: / 23-02-2012 / 14:27:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+newMethodCompilabilityIssue
+
+    ^MethodCompilabilityIssue new
+
+    "Created: / 11-04-2012 / 15:34:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 newMethodInNoPackage
 
     ^MethodInNoPackage new
@@ -155,6 +197,20 @@
     "Created: / 23-02-2012 / 14:27:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+newMethodSourceCorrupted
+
+    ^MethodSourceCorrupted new
+
+    "Created: / 11-04-2012 / 12:35:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+newMethodSourceNotAvailable
+
+    ^MethodSourceNotAvailable new
+
+    "Created: / 11-04-2012 / 12:31:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 newProjectDefinitionDoesNotExist
 
     ^ProjectDefinitionDoesNotExist new
@@ -203,7 +259,9 @@
 !
 
 package:aSymbol
-    package := aSymbol.
+    package := aSymbol asSymbol.
+
+    "Modified: / 11-04-2012 / 16:00:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 packageDefinitionClass
@@ -324,6 +382,14 @@
     ^'Missing class ', className
 
     "Modified: / 23-02-2012 / 13:20:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+severity
+    "Return a severity - one of #error, #warning, #info"
+
+    ^#error
+
+    "Created: / 11-04-2012 / 12:48:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ProjectProblem::ClassUsesPoolButItDoesNotExist methodsFor:'accessing'!
@@ -406,6 +472,13 @@
     "Created: / 23-02-2012 / 14:17:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+method: method
+
+    self className: method mclass name selector: method selector
+
+    "Created: / 11-04-2012 / 12:32:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 selector
     ^ selector
 !
@@ -444,6 +517,208 @@
     "Modified: / 23-02-2012 / 14:22:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!ProjectProblem::MethodCompilabilityIssue methodsFor:'accessing'!
+
+description
+    "Return a (HTML) describing the problem."
+
+    | issuePrinter |
+
+    issuePrinter := [:stream :issue|
+        stream nextPutAll:'<li>'.
+        issue descriptionOn: stream.
+        stream nextPutAll:'</li>'.
+        stream cr.
+    ].
+
+    ^ String streamContents:[:s|
+        s 
+            nextPutAll: 'Following problems has been found in ';
+            nextPutAll: self linkToMethod;
+            nextPutAll: ':'; cr;
+            nextPutAll: '<ul>'.
+        errors ? #() do:[:issue|issuePrinter value: s value: issue].
+        warnings ? #() do:[:issue|issuePrinter value: s value: issue].
+        s 
+            nextPutAll: '</ul>'.
+
+        errors notNil ifTrue:[
+            s nextPutAll:
+'STC won''t compile such a code, therefore you must fix it before commiting'
+        ].
+    ]
+
+    "Modified: / 11-04-2012 / 15:51:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+label
+    "Return the label (possibly instance if a Text) shortly describing the problem"
+
+    ^ errors notNil ifTrue:[
+        'Uncompilable method %1>>%2' bindWith: className with: selector
+    ] ifFalse:[
+        'Warnings for method %1>>%2' bindWith: className with: selector
+    ]
+
+    "Modified: / 11-04-2012 / 16:04:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+severity
+    ^ errors notNil ifTrue:[#error] ifFalse:[#warning]
+
+    "Modified: / 11-04-2012 / 15:40:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProjectProblem::MethodCompilabilityIssue methodsFor:'error handling'!
+
+correctableError:aMessage position:position to:endPos from:aCompiler
+    "error notification during fileIn.
+     This is sent by the compiler/evaluator if it detects errors."
+
+    self error:aMessage position:position to:endPos from:aCompiler.
+    ^ false. "/ no correction
+
+    "Created: / 30-07-1999 / 18:11:15 / cg"
+    "Modified: / 02-11-2010 / 12:58:54 / cg"
+!
+
+correctableSelectorWarning:aMessage position:position to:endPos from:aCompiler
+    "warning notification during fileIn.
+     This is sent by the compiler/evaluator if it detects errors."
+
+    self warning:aMessage position:position to:endPos from:aCompiler.
+    ^ false. "/ no correction
+
+    "Modified: / 02-11-2010 / 12:59:04 / cg"
+!
+
+correctableWarning:aMessage position:position to:endPos from:aCompiler
+    "error notification during fileIn.
+     This is sent by the compiler/evaluator if it detects errors."
+
+    self warning:aMessage position:position to:endPos from:aCompiler.
+    ^ false
+
+    "Created: / 02-11-2010 / 13:29:40 / cg"
+!
+
+error:aMessage position:position to:endPos from:aCompiler
+    "error notification during fileIn.
+     This is sent by the compiler/evaluator if it detects errors."
+
+    errors isNil ifTrue:[ errors := OrderedCollection new].
+    errors add: (Error message: aMessage from: position to: endPos)
+
+    "Created: / 30-07-1999 / 18:10:30 / cg"
+    "Modified: / 11-04-2012 / 15:36:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+unusedVariableWarning:aMessage position:position to:endPos from:aCompiler
+    "warning notification during fileIn.
+     This is sent by the compiler/evaluator if it detects errors."
+
+    ^ self warning:aMessage position:position to:endPos from:aCompiler
+!
+
+warning:aMessage position:position to:endPos from:aCompiler
+    "warning notification during fileIn - ignore it.
+     This is sent by the compiler/evaluator if it detects errors."
+
+    warnings isNil ifTrue:[ warnings := OrderedCollection new].
+    warnings   add: (Warning message: aMessage from: position to: endPos).
+
+    "Created: / 30-07-1999 / 18:11:05 / cg"
+    "Modified: / 11-04-2012 / 15:39:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProjectProblem::MethodCompilabilityIssue methodsFor:'queries'!
+
+hasIssue
+    ^ (errors ? warnings) notNil
+
+    "Created: / 11-04-2012 / 15:43:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProjectProblem::MethodCompilabilityIssue::Error class methodsFor:'instance creation'!
+
+message: message from: startPosition to: endPosition
+
+    ^self new
+        message: message;
+        startPosition: startPosition;
+        endPosition: endPosition;
+        yourself.
+
+    "Created: / 11-04-2012 / 15:38:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProjectProblem::MethodCompilabilityIssue::Error methodsFor:'accessing'!
+
+descriptionOn: stream
+
+    stream nextPutAll: message; space; nextPutAll:'(error)'
+
+    "Created: / 11-04-2012 / 15:52:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+endPosition
+    ^ endPosition
+!
+
+endPosition:something
+    endPosition := something.
+!
+
+message
+    ^ message
+!
+
+message:something
+    message := something.
+!
+
+startPosition
+    ^ startPosition
+!
+
+startPosition:something
+    startPosition := something.
+! !
+
+
+!ProjectProblem::MethodCompilabilityIssue::Warning methodsFor:'accessing'!
+
+descriptionOn: stream
+
+    stream nextPutAll: message; space"/; nextPutAll:'(warning)'
+
+    "Created: / 11-04-2012 / 15:52:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+endPosition
+    ^ endPosition
+!
+
+endPosition:something
+    endPosition := something.
+!
+
+message
+    ^ message
+!
+
+message:something
+    message := something.
+!
+
+startPosition
+    ^ startPosition
+!
+
+startPosition:something
+    startPosition := something.
+! !
+
 !ProjectProblem::MethodInNoPackage methodsFor:'accessing'!
 
 description
@@ -491,6 +766,68 @@
     "Modified: / 23-02-2012 / 14:22:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!ProjectProblem::MethodSourceCorrupted methodsFor:'accessing'!
+
+description
+    "Return a (HTML) describing the problem."
+
+    ^
+'Source code for %1 is <b>corrupted</b>. This is likely because
+the binary class version does not match the source file. This may happen,
+for instance, if you compile a class library and then edit the .st file.'
+    bindWith: (self linkToMethod) 
+        with: package
+
+    "Modified: / 11-04-2012 / 12:47:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+label
+    "Return the label (possibly instance if a Text) shortly describing the problem"
+
+    ^ 'Corrupted source code for %1>>%2' bindWith: className with: selector
+
+    "Modified: / 11-04-2012 / 12:42:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+severity
+    "Return a severity - one of #error, #warning, #info"
+
+    ^#error
+
+    "Created: / 11-04-2012 / 12:47:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ProjectProblem::MethodSourceNotAvailable methodsFor:'accessing'!
+
+description
+    "Return a (HTML) describing the problem."
+
+    ^
+'Source code for %1  is not available. Check your package path
+and/or source code management settings.
+'
+    bindWith: (self linkToMethod) 
+        with: package
+
+    "Modified: / 11-04-2012 / 12:44:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+label
+    "Return the label (possibly instance if a Text) shortly describing the problem"
+
+    ^ 'Unavailable source code for %1>>%2' bindWith: className with: selector
+
+    "Modified: / 11-04-2012 / 12:41:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+severity
+    "Return a severity - one of #error, #warning, #info"
+
+    ^#error
+
+    "Created: / 11-04-2012 / 12:47:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !ProjectProblem::ProjectDefinitionDoesNotExist methodsFor:'accessing'!
 
 description
@@ -507,10 +844,18 @@
     ^'Project definition class for %1 does not exist' bindWith: package
 
     "Modified: / 23-02-2012 / 13:21:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+severity
+    "Return a severity - one of #error, #warning, #info"
+
+    ^#error
+
+    "Created: / 11-04-2012 / 12:48:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ProjectProblem class methodsFor:'documentation'!
 
 version_SVN
-    ^ '$Id: ProjectProblem.st 1890 2012-02-28 22:30:49Z vranyj1 $'
+    ^ '$Id: ProjectProblem.st 1914 2012-04-11 16:07:51Z vranyj1 $'
 ! !
--- a/bc.mak	Mon Apr 09 19:33:20 2012 +0100
+++ b/bc.mak	Wed Apr 11 17:07:51 2012 +0100
@@ -1,7 +1,7 @@
 # $Header$
 #
 # DO NOT EDIT
-# automagically generated from the projectDefinition: stx_libbasic3 at 2012-04-03 18:15:13.530.
+# automagically generated from the projectDefinition: stx_libbasic3 at 2012-04-11 17:08:30.550.
 #
 # Warning: once you modify this file, do not rerun
 # stmkmp or projectDefinition-build again - otherwise, your changes are lost.
@@ -71,7 +71,7 @@
 $(OUTDIR)Change.$(O) Change.$(H): Change.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)ChangeDeltaInformation.$(O) ChangeDeltaInformation.$(H): ChangeDeltaInformation.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)ChangeNotificationParameter.$(O) ChangeNotificationParameter.$(H): ChangeNotificationParameter.st $(INCLUDE_TOP)\stx\libbasic\Array.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)ChangeSet.$(O) ChangeSet.$(H): ChangeSet.st $(INCLUDE_TOP)\stx\libbasic\OrderedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\SmalltalkChunkFileSourceWriter.$(H) $(INCLUDE_TOP)\stx\libbasic\AbstractSourceFileWriter.$(H) $(STCHDR)
+$(OUTDIR)ChangeSet.$(O) ChangeSet.$(H): ChangeSet.st $(INCLUDE_TOP)\stx\libbasic\OrderedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SmalltalkChunkFileSourceWriter.$(H) $(INCLUDE_TOP)\stx\libbasic\AbstractSourceFileWriter.$(H) $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(STCHDR)
 $(OUTDIR)ChangeSetDiff.$(O) ChangeSetDiff.$(H): ChangeSetDiff.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)ChangeSetDiffComponent.$(O) ChangeSetDiffComponent.$(H): ChangeSetDiffComponent.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)ClassOrganizer.$(O) ClassOrganizer.$(H): ClassOrganizer.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
--- a/libbasic3.rc	Mon Apr 09 19:33:20 2012 +0100
+++ b/libbasic3.rc	Wed Apr 11 17:07:51 2012 +0100
@@ -3,7 +3,7 @@
 // automagically generated from the projectDefinition: stx_libbasic3.
 //
 VS_VERSION_INFO VERSIONINFO
-  FILEVERSION     6,2,1909,1909
+  FILEVERSION     6,2,1911,1911
   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.1909.1909\0"
+      VALUE "FileVersion", "6.2.1911.1911\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", "Tue, 03 Apr 2012 17:15:13 GMT\0"
+      VALUE "ProductDate", "Wed, 11 Apr 2012 16:08:30 GMT\0"
     END
 
   END