Правильный способ получить все установленные методы в Pharo

#methods #reflection #pharo #idioms

#методы #отражение #pharo #идиомы

Вопрос:

Иногда требуется проанализировать все методы в изображении. Один из способов сделать это — работать с CompiledMethod allInstances . Но делать это таким образом опасно, поскольку

  1. В конечном итоге вы можете использовать старые методы, которые еще не были собраны с помощью мусора.
  2. Могут быть скомпилированные методы анонимных классов или другие экземпляры, которые существуют по техническим причинам.

Ответ №1:

Выражение, не зависящее от диалекта, будет

 ProtoObject withAllSubclasses gather: [:cls |
  cls methodDictionary values asArray,
    cls class methodDictionary values asArray]
  

Ответ №2:

Одна вещь, которую я придумал, это:

 RPackage organizer packages flatCollect: #methods 
  

Комментарии:

1. Кстати, комментарий к этому методу предлагает использовать RPackage organizer вместо этого, хотя я никогда не сталкивался с проблемой с вашим вариантом.

Ответ №3:

Я бы предложил использовать SystemNavigation класс, предназначенный для этого:

 SystemNavigation default allMethodsSelect: [:m | true]