Hi Pavel.<br><br><div class="gmail_quote">On Thu, Jun 21, 2012 at 2:13 PM, Pavel Porvatov <span dir="ltr"><<a href="mailto:pavel.porvatov@oracle.com" target="_blank">pavel.porvatov@oracle.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Hi Paulo,<div class="im"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi. I've noticed that DefaultStyledDocument has a slowness issue when inserting text. Even if you subclass it and expose the faster method:<br>
protected void insert(int offset, ElementSpec[] data)<br>
<br>
the body of the method still uses a stringbuilder to append all char[] inside of the data before actually inserting into the content.<br>
<br>
This is because the only method for insertion in the default content interface is:<br>
public UndoableEdit insertString(int where, String str)<br>
<br>
Now if there are going to be extension methods in java 8, it would be nice to have a<br>
public UndoableEdit insert(int where, int index, int length, char[] str) default {<br>
   return insert(where, new String(index, length, str);<br>
}<br>
</blockquote></div>
In which class do you suggest to add the new method?</blockquote><div>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. I suppose you can also just modify the current method<br>

DefaultStyledDocument.insert(int offset, ElementSpec[] data) <br>by using 'getContent() instanceof GapContent', casting and using the GapVector (superclass of GapContent) replace method directly, instead of going through the public Content API, which needs to a string (thus the stringbuilder, creating a string that is only used as a char [] holder.<br>

<br><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="im"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


with a adequate specialization in GapContent (that obviously doesn't call the string version), and that that new method is used in the<br>
protected void insert(int offset, ElementSpec[] data)<br>
method (and where it makes sense)<br>
</blockquote></div>
I'm not sure I understand correctly the last sentence. Could you please clarify that, please?<br>
</blockquote></div><br>It's how i understood the new extension methods work; you provide a simple no-state implementation in the interface (which is possible in this case with AbstractDocument.Content.insertString(int where, String str) ) and then implementations specialize the method for speed. <br>

I was also speculating that this is maybe not the only place where such a method makes sense.<br><br><br>Anyway, the speed penalty of the buffered insert (which you have to extend DefaultStyledDocument or use reflection to access anyway) of first creating a new large string with all the text that is only going to be String.toCharArray() in the next method is very significant if your text is actually something you'd like to buffer (like war and peace for instance).<br>

Either way that the bulk insert method is improved, either by instanceof cast or new public api in Content taking advantage of extension methods, i think it should be fixed.<br>