Re: deleting next newline character in java 21 (linux)

"Matthieu Casanova" <[email protected]> Tue, 03 Oct 2023 13:14:23 +0200
Newsgroups gmane.editors.jedit.devel
Message-ID <[email protected]>
Hey Dale,
I did not apply your patch but I tested it and it seems it works nicely.
I also committed a little unit test that reproduce the bug in java 21 while it pass in java 11. And it pass with both when your patch is applied.


-- 
  Matthieu Casanova
  [email protected]


Lun 02 oct 2023, à 23:46, Dale Anson a écrit :
> https://sourceforge.net/p/jedit/bugs/4125/ covers this issue. Now that you've pinpointed the source of the problem, I think the fix I mentioned on that bug is probably sufficient. Yes?
> 
> On Mon, Oct 2, 2023 at 12:38 PM Eric Le Lay <[email protected]> wrote:
>> The problem is a changed BreakIterator implementation [1]
>> 
>> - before openjdk 20 it was sun.util.locale.provider.RuleBasedBreakIterator
>> - after, it is sun.util.locale.provider.BreakIteratorProviderImpl$GraphemeBreakIterator
>> 
>> RuleBasedBreakIterator.following() returns DONE when we are at the last character of the line (next character is new line)
>> GraphemeBreakIterator.following() returns the current offset when we are at the last character of the line.
>> 
>> Here is a patch to fix it on openjdk:
>> 
>> diff --git a/org/gjt/sp/jedit/textarea/TextArea.java b/org/gjt/sp/jedit/textarea/TextArea.java
>> index 9ce126e49..13214008b 100644
>> --- a/org/gjt/sp/jedit/textarea/TextArea.java
>> +++ b/org/gjt/sp/jedit/textarea/TextArea.java
>> @@ -6314,7 +6314,7 @@ loop:             for(int i = lineNo - 1; i >= 0; i--)
>>                 {
>>                         int following = charBreaker.following(offset -
>>                                         index0Offset);
>> -                       if (following == BreakIterator.DONE)
>> +                       if (following == BreakIterator.DONE || (Runtime.version().feature() >= 20 && following == offset - index0Offset))
>>                         {
>>                                 // This means a end of line. Then it is
>>                                 // safe to assume 1 code unit is a character.
>> 
>> 
>> I don't know the code in TextArea and I can't vouch for it working correctly with characters above BMP.
>> If k_satoda is still around, I would really appreciate the help.
>> 
>> Also I hope the condition on Runtime.version().feature() is inlined by the JIT compiler but a better solution should be considered.
>> 
>> Please anybody help on this: I think it should be fixed for jEdit 5.7 release...
>> 
>> Cheers,
>> 
>> [1] https://bugs.openjdk.org/browse/JDK-8291660
>> 
>> Le Fri, 2 Jun 2023 15:15:10 -0600,
>> Dale Anson <[email protected]> a écrit :
>> 
>> > I tried the KeyEventDemo from Oracle. I made a minor adjustment to use
>> > a text area instead of a text field in the demo to be able to test
>> > delete at the end of a line. The delete key in the demo works fine.
>> > I've attached the demo code if you want to try it out.
>> >
>> > I guess this means the problem is in jEdit, not in Java.
>> >
>> > On Fri, Jun 2, 2023 at 2:51 PM Dale Anson <[email protected]> wrote:
>> > >
>> > > I'm not finding anything by googling about this. I did find that if
>> > > I press Ctrl-Delete at the end of the line that it works like I
>> > > would expect Delete by itself to work. It seems the delete key works
>> > > correctly everywhere except at the end of a line. I'm testing with
>> > > Java 20.
>> > >
>> > > On Fri, Jun 2, 2023 at 9:48 AM Alan Ezust <[email protected]>
>> > > wrote: 
>> > > >
>> > > > I can confirm the same problem exists in openJDK 20 (linux). Do
>> > > > we work around it in jEdit or do we try to report it as a bug in
>> > > > openjdk, I wonder?
>> > > >
>> > > > On Wed, May 31, 2023 at 11:20 AM Alan Ezust
>> > > > <[email protected]> wrote: 
>> > > >>
>> > > >> I just tried jEdit with java21 and now the "delete" character no
>> > > >> longer works if I am at the end of the line - i expect it to
>> > > >> delete the newline and it just doesn't. switching to java 19
>> > > >> makes the problem go away.
>> > > > --
>> > > > -----------------------------------------------
>> > > > jEdit Developers' List
>> > > > [email protected]
>> > > > https://lists.sourceforge.net/lists/listinfo/jedit-devel 
> 
> -- 
> -----------------------------------------------
> jEdit Developers' List
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/jedit-devel
>

-- 
-----------------------------------------------
jEdit Developers' List
[email protected]
https://lists.sourceforge.net/lists/listinfo/jedit-devel