# HG changeset patch # User Claus Gittinger # Date 1220635935 -7200 # Node ID ea616118c5b6b40420ac8e1ef5f43f51d6fe7a9a # Parent 553e658691d213205110af6b4b1fc366fbea76b2 if method is marked as example- or ignoreInPreRequisite resource, then ignore its globals when checking for preRequisites. diff -r 553e658691d2 -r ea616118c5b6 ProjectDefinition.st --- 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!