Hi, To make it easier to refactor these places, here is how to find asClass usages with GTSpotter: http://www.humane-assessment.com/blog/finding-asclass-usages-in-glamour-using-gtspotter
:) Cheers, Doru On Wed, Apr 8, 2015 at 12:32 PM, stepharo <[email protected]> wrote: > Hi > > We want to raise a strong warning against the extension of the use of > asClass and friends. > asClass should not be used in Pharo distribution. I will propose to > deprecate it. > > We are working on dependency analysis, module system, remote debugging and > asClass introduces > lose class references and many related problems. > > I would like to remove this behavior because it is clear that it will just > grow up and lead to deadcode and ugly dependencies. > > First, most of the time you can avoid to query Smalltalk globals at: and > that BY CONSTRUCTION a software system should be built and it should > define its own customization. > > > Second, at least use self class environment at: #foo > > Why is it much much much better? because it does not rely on String class > resolution and as such > is much more modular. You do not want to have the resolution of a symbol > related to the place where String is defined but on where your code is > actually. > > Imagine that tomorrow your code is in its own module. Then you want to > know from your code point of you > if a binding exist not from the one of environment in which String is. > > > > > here are some examples: > > ============================== > quadrangleClass > ^ 'QuadrangleForTesting' asClass > > Strange it simply breaks. Of course it broke the smallLint rule. > > ============================== > Metacello should better define OSProcess as a dependent.Because it is not > clear what will happen > if if not there? > > extractRepositoryFrom: zipFile to: directory > "unzip <zipFile> into <directory>" > > | out err proc errorMessage | > out := FileStream forceNewFileNamed: '/tmp/zip.out'. > err := FileStream forceNewFileNamed: '/tmp/zip.err'. > errorMessage := ''. > [ > proc := #OSProcess asClass thisOSProcess > forkJob: '/usr/bin/unzip' > arguments: > {'-u'. > zipFile. > '-d'. > directory} > environment: nil > descriptors: (Array with: nil with: out with: err). > > ================== > > I do not get why we need this funky logic. > > openInBrickWindowLabeled: aLabel > > #GLMSystemWindowBrick asClassIfAbsent: [ > ^ self asMorph openInWindow ]. > > ^ #GLMSystemWindowBrick asClass new > label: aLabel; > color: Color transparent; > addBrickBack: ( > GLMBrick new > vSpaceFill > > > window > "Answer the receiver's window." > #GLMWindowBrick asClassIfAbsent: [ > ^ self ownerThatIsA: SystemWindow ]. > > ^ (self ownerThatIsA: #GLMWindowBrick asClass) > ifNil: [ self ownerThatIsA: SystemWindow ] > > > > sendUsageData: aBoolean > | settingsClass | > settingsClass := #GTSpotterEventRecorderSettings asClassIfAbsent: [ ^ > self ]. > ^ settingsClass sendUsageData: aBoolean > > > sendUsageData > | settingsClass | > settingsClass := #GTSpotterEventRecorderSettings asClassIfAbsent: [ ^ > false ]. > ^ settingsClass sendUsageData > > > -- www.tudorgirba.com "Every thing has its own flow"
