if method is marked as example- or ignoreInPreRequisite
resource, then ignore its globals when checking for preRequisites.
--- a/ProjectDefinition.st Wed Sep 03 10:58:19 2008 +0200
+++ b/ProjectDefinition.st Fri Sep 05 19:32:15 2008 +0200
@@ -3151,46 +3151,6 @@
!ProjectDefinition class methodsFor:'private'!
-addReferencesToClassesFromGlobalsIn:aSetOfClasses to:usedClassReasons
- aSetOfClasses
- do:[:aClass |
- self
- addReferencesToClassesFromGlobalsInMethods:
- (aClass theNonMetaclass methodDictionary values
- select:[:m | m package = aClass package])
- to:usedClassReasons.
-
- self
- addReferencesToClassesFromGlobalsInMethods:
- (aClass theMetaclass methodDictionary values
- select:[:m | m package = aClass package])
- to:usedClassReasons.
- ].
-
- "Modified: / 10-10-2006 / 23:03:45 / cg"
-!
-
-addReferencesToClassesFromGlobalsInMethods:someMethods to:usedClassReasons
- someMethods do:[:method |
- method usedGlobals
- do:[:global |
- |globalsName usedClass|
-
- globalsName := global asSymbol.
- usedClass := Smalltalk at:globalsName.
- (usedClass notNil and:[usedClass isClass and:[usedClass isNameSpace not]]) ifTrue:[
- usedClass name == globalsName ifTrue:[ "/ skip aliases
- (usedClassReasons at:usedClass ifAbsentPut:[Set new])
- add:(usedClass name, ' - referenced by ', method mclass name,'>>',method selector)
- ]
- ]
- ]
- ]
-
- "Created: / 10-10-2006 / 23:00:07 / cg"
- "Modified: / 30-05-2007 / 12:48:30 / cg"
-!
-
classNamesAndAttributesDo: aBlock
self namesAndAttributesIn:(self classNamesAndAttributes) do: aBlock
@@ -3432,70 +3392,6 @@
"Modified: / 12-10-2006 / 20:45:39 / cg"
!
-searchForPreRequisites
- "answer a Dictionary where the keys are the prerequisite package for this package
- and the values are a Set of reasons, why each package is required"
-
- |requiredClasses requiredPackageReasons usedClassesWithReasons ignoredPackages|
-
- usedClassesWithReasons := Dictionary new.
-
- "my classes are required"
- requiredClasses := (self searchForClassesWithProject:self package) asSet.
-
- "my subproject's classes are required"
- self subProjects do:[:eachProjectName |
- requiredClasses addAll: (self searchForClassesWithProject:eachProjectName asSymbol)
- ].
-
- "all superclasses of my classes and my subProject's classes are required"
- requiredClasses do:[:cls |
- cls allSuperclassesDo:[:eachSuperclass |
- (usedClassesWithReasons at: eachSuperclass ifAbsentPut:[Set new])
- add: (eachSuperclass name, ' - superclass of ', cls name).
- ]
- ].
-
- "all classes referenced by my classes or my subproject's classes
- are required. But:
- only search for locals refered to by my methods (assuming that superclasses'
- prerequisites are specified in their package)."
-
- self addReferencesToClassesFromGlobalsIn:requiredClasses to:usedClassesWithReasons.
- self addReferencesToClassesFromGlobalsInMethods:(self searchForExtensionsWithProject:self package) to:usedClassesWithReasons.
-
- "don't put classes from subProjects into the required list"
- ignoredPackages := (self siblingsAreSubProjects
- ifTrue:[ self searchForSiblingProjects ]
- ifFalse:[ self searchForSubProjects ]) asSet.
-
- ignoredPackages add:self package.
- ignoredPackages add:Project noProjectID.
-
- "now map classes to packages and collect the reasons"
- requiredPackageReasons := Dictionary new.
- usedClassesWithReasons keysAndValuesDo:[:usedClass :reasonsPerClass | |usedClassPackage|
- usedClassPackage := usedClass package.
- (ignoredPackages includes:usedClassPackage) ifFalse:[
- (requiredPackageReasons at:usedClassPackage ifAbsentPut:[Set new])
- addAll:reasonsPerClass.
- ].
- ].
-
- ^ requiredPackageReasons
-
- "
- self searchForPreRequisites
- stx_libbasic3 searchForPreRequisites
- bosch_dapasx_Application searchForPreRequisites
- bosch_dapasx_pav_browser searchForPreRequisites
- "
-
- "Created: / 07-08-2006 / 20:42:39 / fm"
- "Modified: / 07-08-2006 / 21:56:25 / fm"
- "Modified: / 20-09-2006 / 17:29:59 / cg"
-!
-
searchForProjectsWhichProvideHeaderFiles
|addPackage myPackageID requiredPackages|
@@ -3781,6 +3677,118 @@
]
! !
+!ProjectDefinition class methodsFor:'private-prerequisites'!
+
+addReferencesToClassesFromGlobalsIn:aSetOfClasses to:usedClassReasons
+ aSetOfClasses
+ do:[:aClass |
+ self
+ addReferencesToClassesFromGlobalsInMethods:
+ (aClass theNonMetaclass methodDictionary values
+ select:[:m | m package = aClass package])
+ to:usedClassReasons.
+
+ self
+ addReferencesToClassesFromGlobalsInMethods:
+ (aClass theMetaclass methodDictionary values
+ select:[:m | m package = aClass package])
+ to:usedClassReasons.
+ ].
+
+ "Modified: / 10-10-2006 / 23:03:45 / cg"
+!
+
+addReferencesToClassesFromGlobalsInMethods:someMethods to:usedClassReasons
+ someMethods do:[:method |
+ |resources|
+
+ resources := method resources.
+ ((resources includes:'ignoreInPrerequisites')
+ and:[resources includes:'example']) ifFalse:[
+ method usedGlobals
+ do:[:global |
+ |globalsName usedClass|
+
+ globalsName := global asSymbol.
+ usedClass := Smalltalk at:globalsName.
+ (usedClass notNil and:[usedClass isClass and:[usedClass isNameSpace not]]) ifTrue:[
+ usedClass name == globalsName ifTrue:[ "/ skip aliases
+ (usedClassReasons at:usedClass ifAbsentPut:[Set new])
+ add:(usedClass name, ' - referenced by ', method mclass name,'>>',method selector)
+ ]
+ ]
+ ]
+ ]
+ ]
+
+ "Created: / 10-10-2006 / 23:00:07 / cg"
+ "Modified: / 30-05-2007 / 12:48:30 / cg"
+!
+
+searchForPreRequisites
+ "answer a Dictionary where the keys are the prerequisite package for this package
+ and the values are a Set of reasons, why each package is required"
+
+ |requiredClasses requiredPackageReasons usedClassesWithReasons ignoredPackages|
+
+ usedClassesWithReasons := Dictionary new.
+
+ "my classes are required"
+ requiredClasses := (self searchForClassesWithProject:self package) asSet.
+
+ "my subproject's classes are required"
+ self subProjects do:[:eachProjectName |
+ requiredClasses addAll: (self searchForClassesWithProject:eachProjectName asSymbol)
+ ].
+
+ "all superclasses of my classes and my subProject's classes are required"
+ requiredClasses do:[:cls |
+ cls allSuperclassesDo:[:eachSuperclass |
+ (usedClassesWithReasons at: eachSuperclass ifAbsentPut:[Set new])
+ add: (eachSuperclass name, ' - superclass of ', cls name).
+ ]
+ ].
+
+ "all classes referenced by my classes or my subproject's classes
+ are required. But:
+ only search for locals refered to by my methods (assuming that superclasses'
+ prerequisites are specified in their package)."
+
+ self addReferencesToClassesFromGlobalsIn:requiredClasses to:usedClassesWithReasons.
+ self addReferencesToClassesFromGlobalsInMethods:(self searchForExtensionsWithProject:self package) to:usedClassesWithReasons.
+
+ "don't put classes from subProjects into the required list"
+ ignoredPackages := (self siblingsAreSubProjects
+ ifTrue:[ self searchForSiblingProjects ]
+ ifFalse:[ self searchForSubProjects ]) asSet.
+
+ ignoredPackages add:self package.
+ ignoredPackages add:Project noProjectID.
+
+ "now map classes to packages and collect the reasons"
+ requiredPackageReasons := Dictionary new.
+ usedClassesWithReasons keysAndValuesDo:[:usedClass :reasonsPerClass | |usedClassPackage|
+ usedClassPackage := usedClass package.
+ (ignoredPackages includes:usedClassPackage) ifFalse:[
+ (requiredPackageReasons at:usedClassPackage ifAbsentPut:[Set new])
+ addAll:reasonsPerClass.
+ ].
+ ].
+
+ ^ requiredPackageReasons
+
+ "
+ self searchForPreRequisites
+ stx_libbasic3 searchForPreRequisites
+ bosch_dapasx_Application searchForPreRequisites
+ bosch_dapasx_pav_browser searchForPreRequisites
+ "
+
+ "Created: / 07-08-2006 / 20:42:39 / fm"
+ "Modified: / 07-08-2006 / 21:56:25 / fm"
+ "Modified: / 20-09-2006 / 17:29:59 / cg"
+! !
+
!ProjectDefinition class methodsFor:'queries'!
definitionClassForPackage: aPackageID
@@ -4037,7 +4045,7 @@
!ProjectDefinition class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.194 2008-07-29 12:35:42 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.195 2008-09-05 17:32:15 cg Exp $'
! !
ProjectDefinition initialize!