added:
authorvrany
Thu, 12 Jan 2012 14:12:35 +0100
changeset 2718 d82d91c62477
parent 2717 45a75154a883
child 2719 a25a07c06d84
added: #checkExtensionsListConsistency #checkExtensionsPrerequisited #checkExtensionsPrerequisites changed: #checkPackage
ProjectChecker.st
--- a/ProjectChecker.st	Thu Jan 12 14:01:30 2012 +0100
+++ b/ProjectChecker.st	Thu Jan 12 14:12:35 2012 +0100
@@ -155,6 +155,51 @@
     ].
 
     "Created: / 11-01-2012 / 17:14:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+checkExtensionsListConsistency
+    "Checks whether all extensions listed in #extensionMethodNames are present
+    and if all extension methods are listed"
+
+    | extensionsListed extensionsPresent |
+
+    extensionsListed := OrderedCollection new.
+    packageDef extensionMethodNames pairWiseDo:[:cls :sel|
+        extensionsListed add: (Array with: cls with: sel)
+    ].
+    extensionsPresent := OrderedCollection new.
+    packageDef searchForExtensions do:[:each|
+        extensionsPresent add: (Array with: each mclass name with: each selector)
+    ].
+
+    (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.
+    ].
+
+    (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.
+    ].
+
+    "Created: / 12-01-2012 / 12:31:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+checkExtensionsPrerequisites
+    "Checks whether packages of all extensions method classes are listed
+     in package prerequisites"
+
+    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
+         ].
+    ]
+
+    "Created: / 12-01-2012 / 12:41:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ProjectChecker methodsFor:'checks-private'!
@@ -181,9 +226,11 @@
         ^self    
     ].
     self checkClassListConsistency.
+    self checkExtensionsListConsistency.
+    self checkExtensionsPrerequisites.
+
     "add more here..."
 
-
     "Created: / 11-01-2012 / 16:55:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
@@ -245,12 +292,27 @@
     severity := something.
 ! !
 
+!ProjectChecker::Problem methodsFor:'printing & storing'!
+
+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>"
+! !
+
 !ProjectChecker class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectChecker.st,v 1.2 2012-01-11 18:56:12 vrany Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectChecker.st,v 1.3 2012-01-12 13:12:35 vrany Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectChecker.st,v 1.2 2012-01-11 18:56:12 vrany Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectChecker.st,v 1.3 2012-01-12 13:12:35 vrany Exp $'
 ! !