RoelTyper is a fast type reconstructor for Smalltalk, based on heuristics. It was originally developed by me and won the ESUG Innovation Award 2005. Later on it was improved by Frédéric Pluquet and Antoine Marot. It is available for free for Squeak/Pharo (dual-licensed MIT + SqueakL) and Cincom VisualWorks Smalltalk (bundle 'RoelTyperBundle', MIT license)

RoelTyper type-checks variables (instance variables of classes, arguments, return types). Typing a complete VisualWorks Smalltalk image takes less than one minute and a half! For this speed you get the types for about 80% of instance variables in the system. The theoretical approach is published in the paper Fast type reconstruction for dynamically typed programming languages (see my publications for the complete reference).

The type information can be used by various tools:

Some VisualWorks screenshots


The Refactoring Browser features a new pane that shows the types for the instance variables of a selected class. The results shown are either extracted by RoelTyper, or edited manually. Right-clicking an entry allows to open up the Typing Results Explainer, or the Type Result Editor.


The Type Result editor is the place for viewing and editing types. Initially the types shown are the ones extracted by RoelTyper. The results are sometimes too general (when lots of classes conform to the interface used by the variable). In that case you can manually edit the types, and save the results. Manually added types can be checked for conformance with the source code.


Type Conflicts is a tool that can be opened from the VisualWorks launcher. When it is open, accepting methods can trigger type conflicts that are then shown in this window. Conflicts can be clicked, and then a Typing Conflict Resolver window will open, allowing to view the differences in detail. Using the menu, the interactive type checking can be enabled, and the displaying of conflicts can be controlled.


The Typing Conflict Resolver puts two conflicting typing results side by side, so that you can choose which one to accept.


The Results Explainer shows the interface sent to this instance variable and assignments made to this variable (direct or through accessors).