I would say, that besides #checkClass: and #checkMethod: rules should also have #checkMetaClass: this will allow rule developers to be more flexible, and will add a bit more certainty.
Because sometimes you need to check both, then you implement a method and call it from #checkClass: and #checkMetaClass:. Sometimes you only need to check one of them. And you will always know that metaclass will not sendup in your method. Uko > On 23 Jun 2015, at 08:40, Guillermo Polito <guillermopol...@gmail.com> wrote: > > What if rules that need metaclasses ask for them explicitly to the class? > > environment allClasses do: [ :theInstanceSide | > self doSomethingWith: theInstanceSide. > self doSomethingWith: theInstanceSide classSide. ] > > Just putting another possibility on the table... > > El lun., 22 de jun. de 2015 a la(s) 10:40 p. m., Nicolai Hess > <nicolaih...@web.de <mailto:nicolaih...@web.de>> escribió: > > 2014-12-18 22:32 GMT+01:00 Yuriy Tymchuk <yuriy.tymc...@me.com > <mailto:yuriy.tymc...@me.com>>: > I’m ready to help with this issue, but as far as I can tell, it’s not hard to > implement the mentors. Here we should decide on the meaning of the phrases. > What are "all behaviors” and so on. The reason of the refactoring that I’ve > done was that there were two methods with similar names that were doing > different things. > > Uko > >> On 18 Dec 2014, at 21:19, Nicolai Hess <nicolaih...@web.de >> <mailto:nicolaih...@web.de>> wrote: >> >> Hi, >> >> some time ago Yuriy cleaned up the RBBrowserEnvironment methods for >> allClassesAndTraits(Do), classesDo, .... >> >> The fix was good and necessary (I think). But they had an impact >> on some SmallLint-rules (they arent applied on the class side) and the >> behavior >> for the different Environments changed (compared with Pharo3 >> (-> 14621 <https://pharo.fogbugz.com/default.asp?14621> Some >> RBBrowserEnvironments don't work well with Metaclasses)) >> >> As some SmallLint-rules need to iterate over the metaclasses as well and >> I don't want to revert Yuriys change, I 'll add another method that >> collect classes and metaclasses. >> >> So, I need some help, how to name this methods: >> >> all classes (Object, Integer, ....) -> allClasses, ok >> all classes and metaclasses (Object, Object class, Integer class ) -> ? >> allBehaviors? >> all classes and traits -> allClassesAndTraits, ok >> all classes and meta classes and traits and class traits -> ? no idea! >> all metaclasses and class traits -> allMeta(ClassesAndTraits) ? I don't know >> if we need this >> >> One problem with "allBehaviors" is, SystemNavigation uses allBehaviors to >> iterate >> over classes, metaclasses, traits and class traits, >> allthough a Trait is not a Behavior. (TClass isBehavior -> false) >> >> feedback is welcome >> >> >> nicolai >> >> > > > > > Pharo 3.0: > SystemNavigation default allClasses size. 4024 > Smalltalk allClasses size. 4024. > RBBrowserEnvironment default allClasses size. 4024 > RBBrowserEnvironment default classes size. 8048 > > Pharo 4.0: > > SystemNavigation default allClasses size. 5012 > Smalltalk allClasses size. 5012 > RBBrowserEnvironment default allClasses size. 5012 > RBBrowserEnvironment default classes size. 5012 > > -> I "define" the Pharo 4.0 behavior as the correct one. > RBEnvironment>>#classes should not contain meta classes. > > Some other RBEnvironments and/or RBRules rely on the "classes = classes and > metaclasses" (-> see issue > 14621 <https://pharo.fogbugz.com/default.asp?14621> > Some RBBrowserEnvironments don't work well with Metaclasses > 14230 <https://pharo.fogbugz.com/default.asp?14230> > Some rules aren't applied on the classside anymore > 15302 <https://pharo.fogbugz.com/default.asp?15302> > a RBEnvironment from #referencesTo: does not list meta classes > > I will change them, and if appropiate, add a new > classesAndMetaclasses resp. classesAndMetaclassesDo: > > I don't know about classesAndMetaclassesTraits. And I skip "behaviors" for > now. > #allBehaviors is suspicious to me, I still don't > know what they are: > > Smalltalk globals allBehaviors includes:TBehavior. -> true (1) > TBehavior isBehavior. -> false (!) > > >