|
Part of Pragma comparison (Pragma>>#=) compares its containing method, however CompiledMethods do not compare selector.
Therefore PragmaCollector can sometimes add duplicate entries or remove incorrect ones when a different method was removed.
Comparison failure example: <code> cls := Object subclass: #Something.
cls compile: 'first <broken> ^ 1'.
cls compile: 'second <broken> ^ 1'.
pragmas := Pragma allNamed: #broken in: cls. pragmas. "an Array(<broken> <broken>)" pragmas asSet. "a Set(<broken>)"
cls methods. "{Something>>#first. Something>>#second}" cls methods asSet. "a Set(Something>>#first)"
(cls>>#first) = (cls>>#second) "true" </code>
PragmaCollector failure example: <code> cls := Object subclass: #Something.
cls compile: 'first <broken> ^ 1'.
cls compile: 'second <broken> ^ 1'.
collector := PragmaCollector filter: [ :prg | (#(broken) includes: prg keyword) ]. collector reset. collector collected collect: #methodSelector. "an OrderedCollection(#first #second)"
cls removeSelector: #second. collector collected collect: #methodSelector. "an OrderedCollection(#second)" </code>
|
|
|
Priority: 3 – Must Fix
|
|
Status: Work Needed
|
|
Assigned to: Everyone
|
|
Milestone: Pharo7.0
|
Go to Case
|
|