This is really expensive to do in Java. Creating an object for each Line, for each revision of that Line?

There is no way this will scale to blame a 100,000 line source file. But you need to make the code support that use case in Java.