<div dir="ltr"><div>Inspired by the email I sent about adding an abstract method to SystemWindow, I built some scripts to try to identify other abstract methods that are missing.</div><div><br></div><div>So, I attach three scripts that find classes and the selectors of their potentially missing abstract methods. This is the logic for each one of them:</div><div><br></div><div>Case 1: pretty sure we should create abstract methods for these<div style="margin-left:40px">     Analyzes classes we know are abstract (i.e. which have abstract methods, have no instances and have at least one subclass), selects the methods that are implemented by <i>all</i> subclasses, which <i>are not</i> in the abstract superclass, but that <i>are sent</i> from the superclass to self.<br></div><br>Case 2: also pretty sure, but in classes that don't have abstract methods yet<br><div style="margin-left:40px">     Similar to Case 1, but the classes that are analyzed don't have any abstract method. Because the messages are sent to self from the superclass, I strongly suspect that these should also be implemented as abstract methods.<br></div><br>Case 3: not sure, but worth checking<br><div style="margin-left:40px">   Analyzes classes we know are abstract (similar to Case 1, but more constrained: the classes should have at least *2* subclasses), selects the methods that are implemented by <i>all</i> subclasses, which are not in the abstract superclass, and that are <i>not</i> sent from the superclass to self (to avoid repeating what was found in Case 1).<br>In this case we don't have the evidence of a message being sent to self from the abstract class, but having all subclasses (which are at least 2) implement the same message from an abstract superclass is some form of evidence. For example, I'm pretty sure we should have an abstract method for Boolean>>#orNot:.</div></div><div><br></div><div>Being able to decide what to do with these findings requires domain knowledge, so I'm not saying we should 100% add all of these as abstract methods. Probably there are better design decisions depending on the particular cases.</div><div><br></div><div>I hope you find this helpful!</div><div><br></div><div>Cheers,</div><div>Facu</div><div><br></div></div>