antlr / stringtemplate4

StringTemplate 4
http://www.stringtemplate.org
Other
955 stars 231 forks source link

correct StackOverflowEerror from rendering `java.nio.Path` #319

Open Groostav opened 6 months ago

Groostav commented 6 months ago

the java.nio.Path interface is recursively iterable on Path. This causes a stack-overflow in ST4's representation as it is never able to find an element that isnt iterable, so it calls convertAnythingIteratableToIterator all-the-way-down.

java.nio.Path implements Iterable<java.nio.Path>,

eg:

var path = Paths.get("some/path");
Path first = path.iterator().next(); //== "some"
Path firstFirst = first.iterator().next(); //== "some"
Path firstFirstFirst = firstFirst.iterator().next(); //== "some"

and so on.

This really does not play nicely with convertAnythingIteratableToIterator: This behavior means, even if you supply a converter for java.nio.path, ST4 never identifies it as a POJO and so never asks for a renderer.


suggestions:

I'm swamped, but I need this so I could create a PR if needed. In the mean time I'm going to twiddle my thumbs for a while.

Groostav commented 6 months ago

the more I think about it, what is the rationale for converting to iterable before checking if the user provided an explicit converter?