packages := RPackageOrganizer default packages select: [ :package | MCWorkingCopy allManagers detect: [ :each | each packageName = package name ] ifOne: [ :mc | mc repositoryGroup repositories anySatisfy: [ :each | each location = 'http://smalltalkhub.com/mc/Pharo/Pharo40/main' ] ] ifNone: [ false ] ]. packages := packages reject: [ :each | (each name endsWith: 'Tests') or: [(each name endsWith: 'Test') or: [ each name includesSubstring: '-Test' ]] ]. classes := IdentityDictionary new. packages do: [ :each | each definedClasses do: [ :cls | classes at: cls put: cls linesOfCode ] ]. gtExtensionPackages := {#'GT-InspectorExtensions-Core' asPackage . #'GT-SpotterExtensions-Core' asPackage}. root := MalNodeWithPreviousAndNext new. packages do: [ :each | packageNode := MalNodeWithPreviousAndNext new. root to: packageNode. each definedClasses do: [ :cls | classNode := MalNodeWithPreviousAndNext with: (cls -> {(classes at: cls) max: 1 . (gtExtensionPackages anySatisfy: [:gt | cls isExtendedInPackage: gt ]) ifTrue: [Color red] ifFalse: [Color lightGray alpha: 0.5]}). packageNode to: classNode ]. packageNode model: (each -> { (packageNode nextNodes sumNumbers: [ :classNode | classNode model value first ]) max: 1 . (packageNode nextNodes anySatisfy: [ :classNode | classNode model value second = Color red ]) ifTrue: [ Color paleRed ] ifFalse: [ Color transparent ] }) ]. root model: (Smalltalk -> { 1 . Color transparent}). b := RTCircularTreeMapBuilder new. b shape color: [ : each | each model value second ]; borderWidth: 1; borderColor: (Color lightGray alpha: 0.5). b baseradius: 500; weight: [ :each | each model value first ]. b explore: root using: [ :each | each nextNodes ]. b