class: ProjectChecker
authorClaus Gittinger <cg@exept.de>
Sun, 15 Feb 2015 18:20:44 +0100
changeset 3791 edc9f920cfb1
parent 3790 51aee735f8e6
child 3792 0aedc1a9ba73
class: ProjectChecker comment/format in: #documentation changed: #checkExtensionsListConsistency
ProjectChecker.st
--- a/ProjectChecker.st	Sun Feb 15 18:20:28 2015 +0100
+++ b/ProjectChecker.st	Sun Feb 15 18:20:44 2015 +0100
@@ -40,11 +40,14 @@
 documentation
 "
     A simple project checker that can search whole projects or individual
-    classes or methods for various problems that may cause build problems such
-    as:
+    classes or methods for various problems that may cause build problems,
+    such as:
         - inconsistent/messed up project definition class
         - method code problems
 
+    NOTE: this is not a lint. It only checks for inconsitent configuration
+    (projectDefinition class data vs. real data) and compilability (stc limitations).
+
     NOTE: Not yet finished. This code is meant as a single central entry for all the
     source code management tools like SCM Utilities, NewSystemBrowser ets. That code
     will be refactored later once this tool prooves itself useful and mature enough.
@@ -367,9 +370,11 @@
 
 checkExtensionsListConsistency
     "Checks whether all extensions listed in #extensionMethodNames are present
-    and if all extension methods are listed"
+     and if all extension methods are listed.
+     Also check if any regular or extension method is also listed in some other package
+     (which may happen after a move, if the original package was not updated)"
 
-    | extensionsListed extensionsPresent |
+    | extensionsListed extensionsPresent allOtherExtensions checkMethod|
 
     extensionsListed := OrderedCollection new.
     currentPackageDef extensionMethodNames pairWiseDo:[:cls :sel|
@@ -415,8 +420,44 @@
                 className: clsAndSel first selector: clsAndSel second).                            
     ].
 
-    "Created: / 12-01-2012 / 12:31:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 29-03-2013 / 19:41:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    allOtherExtensions := Set new.
+    ProjectDefinition allSubclassesDo:[:eachOther |
+        eachOther ~~ currentPackageDef ifTrue:[
+            allOtherExtensions addAll:(eachOther extensionMethods).
+        ].
+    ].
+
+    checkMethod :=
+        [:eachMethodHere |
+            (allOtherExtensions includes:eachMethodHere) ifTrue:[
+                |otherProjectDefinitions|
+
+                otherProjectDefinitions := OrderedCollection new.
+                "/ where is it?
+                ProjectDefinition allSubclassesDo:[:someOtherPackage |
+                    someOtherPackage ~~ currentPackageDef ifTrue:[
+                        (someOtherPackage extensionMethods includes:eachMethodHere) ifTrue:[
+                            otherProjectDefinitions add:someOtherPackage
+                        ]
+                    ]
+                ].
+                otherProjectDefinitions notEmptyOrNil ifTrue:[
+                    otherProjectDefinitions sortBySelector:#package.
+                    self addProblem: 
+                       (ProjectProblem newMethodListedInOtherPackage
+                           className: (eachMethodHere mclass name) selector: (eachMethodHere selector);
+                           otherProjectDefinitionClasses:otherProjectDefinitions;
+                           yourself).                            
+                ].
+            ].
+        ].
+
+    currentPackageDef classes do:[:eachClass |
+        eachClass instAndClassMethodsDo:[:m |
+            (m package = currentPackage) ifTrue:[ checkMethod value:m].
+        ].
+    ].
+    currentPackageDef extensions do:checkMethod.
 !
 
 checkExtensionsPrerequisites
@@ -715,14 +756,14 @@
 !ProjectChecker class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectChecker.st,v 1.28 2015-02-10 18:22:36 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectChecker.st,v 1.29 2015-02-15 17:20:44 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectChecker.st,v 1.28 2015-02-10 18:22:36 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectChecker.st,v 1.29 2015-02-15 17:20:44 cg Exp $'
 !
 
 version_SVN
-    ^ '$Id: ProjectChecker.st,v 1.28 2015-02-10 18:22:36 cg Exp $'
+    ^ '$Id: ProjectChecker.st,v 1.29 2015-02-15 17:20:44 cg Exp $'
 ! !