Mar 31st, 2009, 05:17 AM
Spring EL dependency on antlr 3.0.1
Spring EL is depending on antlr 3.0.1, which is not really compatible with the latest releases of antlr (3.1.x).
That wouldn't be such a big problem, but
overriding the method recoverFromMismatchedToken(..) proved to be a bit dangerous in terms of compatibility, especially when you read the reason of this overriding:
* Overridden purely because the base implementation does a System.err.println()
public void recoverFromMismatchedToken(IntStream input, RecognitionException e, int ttype, BitSet follow)"
I guess the guys from antlr did not like this messing with this code and they invalidated the overridden method, and also invalidating the reason of the overridden. In case Spring will depend on antlr 3.1.x there will be no need for that code (overridden method).
It is true that antlr didn't act in a gentle way either, by mercilessly deleting some method that de overridden Spring method is invoking (recoverFromMismatchedElement), instead of deprecating it.
One answer would be to use antlr 3.0.1 all the way (which is not quite a flexible option). We can live with that, but there is one more weakness in the M2 release, the osgi configuration, which will accept any version of antlr from the interval [3.0.0, 4.0.0) .
Let's say the osgi server (dmServer eventually) will provide antlr 3.1.x, in this case, the M2 will become invalid.
I think it is best to remove the overriding method and change the ivy dependency to antlr 3.1.x, once added to springsource repository.
Tags for this Thread