Hi Paulo,


On Fri, Jun 29, 2012 at 1:40 PM, Pavel Porvatov <pavel.porva...@oracle.com <mailto:pavel.porva...@oracle.com>> wrote:

    Hi Paulo,
    Hi Pavel.

    On Thu, Jun 21, 2012 at 2:13 PM, Pavel Porvatov
    <pavel.porva...@oracle.com <mailto:pavel.porva...@oracle.com>> wrote:

        Hi Paulo,

            Hi. I've noticed that DefaultStyledDocument has a
            slowness issue when inserting text. Even if you subclass
            it and expose the faster method:
            protected void insert(int offset, ElementSpec[] data)

            the body of the method still uses a stringbuilder to
            append all char[] inside of the data before actually
            inserting into the content.

            This is because the only method for insertion in the
            default content interface is:
            public UndoableEdit insertString(int where, String str)

            Now if there are going to be extension methods in java 8,
            it would be nice to have a
            public UndoableEdit insert(int where, int index, int
            length, char[] str) default {
              return insert(where, new String(index, length, str);
            }

        In which class do you suggest to add the new method?

    It would need to be part of AbstractDocument.Content with the new
    extension method feature in order to be able to be part of the
    public interface of Content and be useable generally without casts.
    Unfortunately we can't do that because of backward compatibility.


Why not? (this for java 8 with extension methods). I admit i hadn't thought it through for**javax.swing.text.GapContent Since it's not final, using instanceof for the same effect in DefaultStyledDocument.insert(int offset, ElementSpec[] data)
in the would be be a bad idea since the Content can be replaced.

However, with a extension method that only calls the string version in the Content interface, and overriding that method in GapContent to copy the char[]'s directly, and using that new Content method in
DefaultStyledDocument.insert(int offset, ElementSpec[] data)
would have the same effect.
We cannot modify public API (in your case it's AbstractDocument.Content) because there are lot of implementations and all of them will be not compilable.

Regards, Pavel

Reply via email to