class: ProjectChecker
comment/format in: #documentation
changed: #checkExtensionsListConsistency
--- 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 $'
! !