pharo-project / pharo

Pharo is a dynamic reflective pure object-oriented language supporting live programming inspired by Smalltalk.
http://pharo.org
Other
1.21k stars 356 forks source link

From iceberg browse in Calypso raises and error when we click on extensions. #17400

Open Ducasse opened 4 days ago

Ducasse commented 4 days ago

Capture 2024-11-17 at 18 07 48

ClyRing2Environment(Object)>>doesNotUnderstand: #definedClassesInPackage:
[ :package |
        | classes |
        classes := (environment isNotNil and: [ environment system isNotNil ])
                       ifTrue: [
                       environment system definedClassesInPackage: package ]
                       ifFalse: [ package definedClasses ].

        classes do: aBlock ] in ClyPackageScope>>classesDo: in Block: [ :package |...
Set>>do:
ClyPackageScope>>packagesDo:
ClyPackageScope>>classesDo:
ClyAllClassesQuery(ClyClassQuery)>>buildResult:
ClyRawQueryResult(ClyQueryResult)>>rebuild
[

        needsRebuild ifTrue: [
            needsRebuild := false.
            self rebuild]

    ] in ClyRawQueryResult(ClyQueryResult)>>rebuildIfNeeded in Block: [...
[
        aBlock value
    ] in ClyRawQueryResult(ClyQueryResult)>>protectAccessWhile: in Block: [...
FullBlockClosure(BlockClosure)>>ensure:
[
            owner := activeProcess.
            aBlock ensure: [ owner := nil ] ] in Mutex>>critical: in Block: [...
[
        caught := true.
        self wait.
        blockValue := mutuallyExcludedBlock value
    ] in Semaphore>>critical: in Block: [...
FullBlockClosure(BlockClosure)>>ensure:
Semaphore>>critical:
Mutex>>critical:
ClyRawQueryResult(ClyQueryResult)>>protectAccessWhile:
ClyRawQueryResult(ClyQueryResult)>>rebuildIfNeeded
ClyNavigationEnvironment>>query:
ClyPackageScope(ClyScope)>>query:
ClyAllClassesQuery(ClyQuery)>>execute
[ :each |
        subResult := each execute.
        subResult items] in ClyUnionQuery>>buildResult: in Block: [ :each |...
[ :each | col addAll: (aBlock value: each) ] in Set(Collection)>>flatCollect:as: in Block: [ :each | col addAll: (aBlock value: each) ]
Set>>do:
Set(Collection)>>flatCollect:as:
Set(Collection)>>flatCollect:
ClyUnionQuery>>buildResult:
ClyExtensionLastSortedClassResult(ClyQueryResult)>>rebuild
ClyExtensionLastSortedClassResult(ClyBrowserQueryResult)>>rebuild
[

        needsRebuild ifTrue: [
            needsRebuild := false.
            self rebuild]

    ] in ClyExtensionLastSortedClassResult(ClyQueryResult)>>rebuildIfNeeded in Block: [...
[
        aBlock value
    ] in ClyExtensionLastSortedClassResult(ClyQueryResult)>>protectAccessWhile: in Block: [...
FullBlockClosure(BlockClosure)>>ensure:
[
            owner := activeProcess.
            aBlock ensure: [ owner := nil ] ] in Mutex>>critical: in Block: [...
[
        caught := true.
        self wait.
        blockValue := mutuallyExcludedBlock value
    ] in Semaphore>>critical: in Block: [...
FullBlockClosure(BlockClosure)>>ensure:
Semaphore>>critical:
Mutex>>critical:
ClyExtensionLastSortedClassResult(ClyQueryResult)>>protectAccessWhile:
ClyExtensionLastSortedClassResult(ClyQueryResult)>>rebuildIfNeeded
ClyNavigationEnvironment>>query:
ClyCompositeScope(ClyScope)>>query:
ClyUnionQuery(ClyQuery)>>execute
ClyUnionQuery(ClyQuery)>>openBrowserCursorFor:
ClyExpandedDataSource(ClyDataSource)>>openOn:
ClyQueryViewMorph>>setUpDataSource:
[
        self closeDataSource.
        self setUpDataSource: aDataSource.
        self refreshTable
    ] in ClyQueryViewMorph>>dataSource: in Block: [...
[
        aBlock value.
        aQueryView changesWasInitiatedByUser ifTrue: [
            newTools := OrderedCollection new.
            tabManager buildToolsOn: newTools for: aQueryView createSelectionContext.
            tabManager desiredSelection: (newTools collect: [:each | each class])   ].
    ] in ClyFullBrowserMorph(ClyBrowserMorph)>>changeStateOf:by: in Block: [...
ClyFullBrowserMorph(ClyBrowserMorph)>>changeStateBy:
ClyFullBrowserMorph(ClyBrowserMorph)>>changeStateOf:by:
ClyQueryViewMorph>>changeStateBy:
ClyQueryViewMorph>>dataSource:
[
        | oldDataSource |
        oldDataSource := self dataSource.
        self dataSource: (self dataSourceClass on: aQuery).
        self transferExpansionStateFrom: oldDataSource.
        self ensureSelectedItemIfNeeded ] in ClyQueryViewMorph>>showQuery: in Block: [...
FullBlockClosure(BlockClosure)>>ensure:
ClyQueryViewMorph>>initiateUIChangeBy:
ClyQueryViewMorph>>showQuery:
ClyQueryViewMorph>>showQueries:as:
ClyFullBrowserMorph>>switchToFlatClasses
ClyFullBrowserMorph>>packageSelectionChanged
ClyFullBrowserMorph(Object)>>perform:withEnoughArguments:
[
        self isFilterChanged ifTrue: [
            selectionIsChanged := self updateSelectionForNewFilter.
            selectionIsChanged ifFalse: [ ^self ] "No selection change happens"].
        selectionIsChanged ifTrue: [ self updateSelection].
        navigationSelector ifNotNil: [
            browser
                perform: navigationSelector
                withEnoughArguments: {self selection}].
    ] in ClyQueryViewMorph>>selectionChanged in Block: [...
[
        aBlock value.
        aQueryView changesWasInitiatedByUser ifTrue: [
            newTools := OrderedCollection new.
            tabManager buildToolsOn: newTools for: aQueryView createSelectionContext.
            tabManager desiredSelection: (newTools collect: [:each | each class])   ].
    ] in ClyFullBrowserMorph(ClyBrowserMorph)>>changeStateOf:by: in Block: [...
FullBlockClosure(BlockClosure)>>on:do:
[
        aBlock on: Error do: [:err |
            navigationFailed := true. "this flag prevents any UI update in case of error"
            err pass]
    ] in ClyFullBrowserMorph(ClyBrowserMorph)>>changeStateBy: in Block: [...
FullBlockClosure(BlockClosure)>>ensure:
ClyFullBrowserMorph(ClyBrowserMorph)>>changeStateBy:
ClyFullBrowserMorph(ClyBrowserMorph)>>changeStateOf:by:
ClyQueryViewMorph>>changeStateBy:
ClyQueryViewMorph>>selectionChanged
MessageSend>>value
MessageSend>>cull:
MessageSend>>cull:cull:
[ action cull: anAnnouncement cull: announcer ] in AnnouncementSubscription(AbstractAnnouncementSubscription)>>deliver: in Block: [ action cull: anAnnouncement cull: announcer ]
FullBlockClosure(BlockClosure)>>on:do:
[ Processor terminateRealActive ] in [ :ex |
              | onDoCtx handler bottom thisCtx |
              onDoCtx := thisContext.
              thisCtx := onDoCtx home.

              "find the context on stack for which this method's is sender"

              [ onDoCtx sender == thisCtx ] whileFalse: [
                  onDoCtx := onDoCtx sender.
                  onDoCtx ifNil: [ "Can't find our home context. seems like we're already forked
                and handling another exception in new thread. In this case, just pass it through handler."
                      ^ handlerAction cull: ex ] ].

              bottom := [ Processor terminateRealActive ] asContext.
              onDoCtx privSender: bottom.

              handler := [ handlerAction cull: ex ] asContext.
              handler privSender: thisContext sender.

              (Process forContext: handler priority: Processor activePriority) resume.

              "cut the stack of current process"
              thisContext privSender: thisCtx.
              nil ] in FullBlockClosure(BlockClosure)>>on:fork: in Block: [ Processor terminateRealActive ]