Compatibility is a complex issue, but we do our best in maintaining three types of compatibilities between two sequential versions of SSLR (e.g. between 1.17 and 1.18, but not between 1.16 and 1.18 18):
- binary compatibility: we don't guarantee that your code can be linked with new version without recompilation, however for most releases this might be possible;
- source compatibility: in most cases (see below) you should be able to recompile your code with newer version of SSLR without any changes;
- behavioral compatibility: in most cases (see below) your code will behave exactly as with previous version of SSLR without any changes.
- Recompile your code with next version of SSLR. If it can't be compiled, then don't hesitate to inform us about this.
- Check notes on release and upgrade about existence of behavioral incompatibilities (see below). If any, then you should fix them by following instructions in notes. Good coverage of your code by unit tests is highly recommended (Sonar SonarQubeTM can help you to enforce this), so you will be able to perform tests to verify that it behaves exactly as before upgrade. If not, then don't hesitate to ask help.
- Remove uses of deprecated code by following instructions from Javadocs (Sonar SonarQubeTM can help you to find such code). And don't forget to execute tests to verify that regressions were not introduced by such changes.
Sincerely yours, SonarSource Language Team.
- Source: Deprecated hamcrest matchers were removed in preference to Fest-assertions.
- Behavioral: No difference between usual grammar rule and "recovery rule" - both will be presented in AST and so can be handled via AST visitor. Thus ParseErrorCheck in Sonar Plugins SonarQubeTM plugins must be reworked, if plugin uses "recovery rule".
- Behavioral: Modifications made in grammar do not affect lexerless parser, which was created before those modifications.
- Behavioral: Previously was possible to execute parser with grammar, which contains references on undefined rules, but now this is forbidden.
- Deprecation: Old ways to construct Grammars were marked as deprecated - use Builders instead.