From: Alan E. <ala...@gm...> - 2007-08-31 15:51:21
|
Slava asked me personally to see if I could eliminate ChunkCache entirely and replace it with something that's part of the more modern JDK 5. Normally, I like refactoring and making code cleaner, but a lot of this code is indeed a nightmare and interlocked in many places. It is definitely one of the areas in jEdit core that needs to be cleaned up. There is nobody currently working on that code. I know a couple of us (matthieu, vampire, and marcelo) go into it occasionally to fix the odd bug, but there is no active development on it, and Slava would love to see ChunkCache just "go away". On 8/31/07, Shlomy Reinstein <sre...@gm...> wrote: > Hi Alan, > i have debugged it a bit. The involved code in jedit is enormously complex. > What I found out so far is something you can also see happen: After the > backspace, instead of putting the caret on the 2nd logical line of the > wrapped physical line (which should become the last visible line on screen), > it puts the caret on the 1st logical line (and makes it the last visible > line). This causes the exception. I tried to figure out why it makes the > wrong logical line be the last one, but found it to be extremely complex and > time consuming. I can only say that "moveCaretPosition" is actually called > for the right location, but for some reason the text area is updated > incorrectly. > If there's someone who knows this code better than I do, I suggest to ask > him to do that, because it can take days to debug. However, if there's no > one else to do it, I can do it. > The problem is most likely to reside in ChunkCache.updateChunksUpTo. The > first line in this method is: > "// this method is a nightmare". Don't know who wrote this, but it's > probably true :) > Shlomy > > > ---------- Forwarded message ---------- > From: SourceForge.net <no...@so...> > Date: Aug 30, 2007 10:30 PM > Subject: [ jEdit-devel ] [ jedit-Bugs-1775258 ] NPE in scroll code again > To: no...@so... > > Bugs item #1775258, was opened at 2007-08-16 12:12 > Message generated for change (Comment added) made by shlomy > You can respond by visiting: > https://sourceforge.net/tracker/?func=detail&atid=100588&aid=1775258&group_id=588 > > Please note that this message will contain a full copy of the comment > thread, > including the initial issue submission, for this request, > not just the latest update. > Category: text area and syntax packages > Group: normal bug > Status: Open > Resolution: None > Priority: 8 > Private: No > Submitted By: andreweans (andreweans) > Assigned to: Nobody/Anonymous (nobody) > Summary: NPE in scroll code again > > Initial Comment: > This is supposed to be a comment to bug #1763932, "NPE in scroll code", but > whenever I try to submit the comment, I get the Sourceforge error "Artifact > Could Not Be Created - Insufficient Permissions" > So I'm trying to submit it as a new bug instead. > > This is apparently the same bug as #1584436. > http://www.jedit.org/CHANGES43.txt says it was fixed in > 4.3pre10 : "Scrolling up broken after content removing (#1584436) (Matthieu > Casanova)". But it apparently wasn't fixed; I'm still getting the error, and > so is the original reporter of this bug (#1763932). The changelog for > /jEdit/trunk/org/gjt/sp/jedit/textarea/TextArea.java says > #1584436 was fixed in revision 8999. The diff to the previous version shows > that all that was changed in this particular file was that a null pointer > check and the corresponding error logging were deleted. They included the > comment "FIXME - we need to reset the state of this window so that it has > the right dimensions again." The offending line of code (both before and > after the change), which is causing the null pointer exception, is > attempting to dereference a pointer (named "point") which was returned by > the function offsetToXY, but offsetToXY is returning null, apparently > because screenLine is -1. H > opefully somebody who is familiar with the code can investigate what went > wrong. > > Here are my logs of the bug, from pre9 with java 1.6.0_01-b06, and from > pre10 with java 1.6.0_02-b06: > > Before upgrading: > [message] Log: java.version=1.6.0_01 > [message] Log: java.vm.version=1.6.0_01-b06 > [message] Log: java.runtime.version=1.6.0_01-b06 > [message] Log: java.vendor=Sun Microsystems Inc. > [message] Log: java.compiler=null > [message] Log: os.name=Windows Vista > [message] Log: os.version=6.0 > [message] Log: os.arch=x86 > (snip) > [notice] jEdit: jEdit version 4.3pre9 > (snip) > [error] JEditTextArea: BUG: > screenLine=-1,visibleLines=45,physicalLine=0,offset=0,firstPhysicalLine=0,lastPhysicalLine=26 > [error] BeanShellAction: java.lang.NullPointerException > [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea.scrollTo(TextArea.java:860) > [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea.scrollToCaret > (TextArea.java:712) > [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea._finishCaretUpdate(TextArea.java:5004) > [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea.finishCaretUpdate(TextArea.java > :5156) > [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea.moveCaretPosition(TextArea.java:2213) > [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea.moveCaretPosition(TextArea.java:2179) > [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea.moveCaretPosition(TextArea.java:2168) > [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea.goToBufferStart(TextArea.java:3128) > [error] BeanShellAction: at > sun.reflect.NativeMethodAccessorImpl.invoke0 (Native > Method) > [error] BeanShellAction: at > sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) > [error] BeanShellAction: at > sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown > Source) > [error] BeanShellAction: at java.lang.reflect.Method.invoke(Unknown Source) > [error] BeanShellAction: at bsh.Reflect.invokeMethod(Reflect.java:134) > [error] BeanShellAction: at bsh.Reflect.invokeObjectMethod(Reflect.java:80) > [error] BeanShellAction: at bsh.Name.invokeMethod(Name.java:858) > [error] BeanShellAction: at > bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:75) > [error] BeanShellAction: at > bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102) > [error] BeanShellAction: at > bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47) > [error] BeanShellAction: at bsh.BSHBlock.evalBlock(BSHBlock.java:130) > [error] BeanShellAction: at bsh.BSHBlock.eval(BSHBlock.java :80) > [error] BeanShellAction: at bsh.BshMethod.invokeImpl(BshMethod.java:362) > [error] BeanShellAction: at bsh.BshMethod.invoke(BshMethod.java:258) > [error] BeanShellAction: at bsh.BshMethod.invoke(BshMethod.java:186) > [error] BeanShellAction: at > org.gjt.sp.jedit.BeanShell.runCachedBlock(BeanShell.java:509) > [error] BeanShellAction: at > org.gjt.sp.jedit.BeanShellAction.invoke(BeanShellAction.java:76) > [error] BeanShellAction: at > org.gjt.sp.jedit.gui.InputHandler.invokeAction(InputHandler.java:416) > [error] BeanShellAction: at > org.gjt.sp.jedit.gui.InputHandler.invokeAction(InputHandler.java:382) > [error] BeanShellAction: at > org.gjt.sp.jedit.gui.DefaultInputHandler.handleKey > (DefaultInputHandler.java:373) > [error] BeanShellAction: at > org.gjt.sp.jedit.input.AbstractInputHandler.processKeyEventKeyStrokeHandling(AbstractInputHandler.java:116) > [error] BeanShellAction: at > org.gjt.sp.jedit.gui.InputHandler.processKeyEvent > (InputHandler.java:185) > [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea.processKeyEvent(TextArea.java:4510) > [error] BeanShellAction: at java.awt.Component.processEvent(Unknown Source) > [error] BeanShellAction: at java.awt.Container.processEvent(Unknown Source) > [error] BeanShellAction: at > java.awt.Component.dispatchEventImpl(Unknown Source) > [error] BeanShellAction: at > java.awt.Container.dispatchEventImpl(Unknown Source) > [error] BeanShellAction: at > java.awt.Component.dispatchEvent(Unknown Source) > [error] BeanShellAction: at > java.awt.KeyboardFocusManager.redispatchEvent(Unknown > Source) > [error] BeanShellAction: at > java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent > (Unknown Source) > [error] BeanShellAction: at > java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown > Source) > [error] BeanShellAction: at > java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown > Source) > [error] BeanShellAction: at > java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown > Source) > [error] BeanShellAction: at > java.awt.Component.dispatchEventImpl(Unknown Source) > [error] BeanShellAction: at > java.awt.Container.dispatchEventImpl (Unknown Source) > [error] BeanShellAction: at > java.awt.Window.dispatchEventImpl(Unknown Source) > [error] BeanShellAction: at > java.awt.Component.dispatchEvent(Unknown Source) > [error] BeanShellAction: at > java.awt.EventQueue.dispatchEvent (Unknown Source) > [error] BeanShellAction: at > java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown > Source) > [error] BeanShellAction: at > java.awt.EventDispatchThread.pumpEventsForFilter(Unknown > Source) > [error] BeanShellAction: at > java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown > Source) > [error] BeanShellAction: at > java.awt.EventDispatchThread.pumpEvents(Unknown Source) > [error] BeanShellAction: at > java.awt.EventDispatchThread.pumpEvents (Unknown Source) > [error] BeanShellAction: at > java.awt.EventDispatchThread.run(Unknown Source) > > After upgrading: > 3:53:14 AM [message] Log: java.version=1.6.0_02 > 3:53:14 AM [message] Log: java.vm.version=1.6.0_02-b06 > 3:53:14 AM [message] Log: java.runtime.version=1.6.0_02-b06 > 3:53:14 AM [message] Log: java.vendor=Sun Microsystems Inc. > 3:53:14 AM [message] Log: java.compiler=null > 3:53:14 AM [message] Log: os.name=Windows Vista > 3:53:14 AM [message] Log: os.version=6.0 > 3:53:14 AM [message] Log: os.arch=x86 > (snip) > 3:53:14 AM [notice] jEdit: jEdit version 4.3pre10 > (snip) > 8:29:21 PM [error] BeanShellAction: java.lang.NullPointerException > 8:29:21 PM [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea.scrollTo(TextArea.java:875) > 8:29:21 PM [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea.scrollToCaret(TextArea.java:739) > 8:29:21 PM [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea._finishCaretUpdate(TextArea.java:5085) > 8:29:21 PM [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea.finishCaretUpdate(TextArea.java:5238) > 8:29:21 PM [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea.moveCaretPosition(TextArea.java:2232) > 8:29:21 PM [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea.moveCaretPosition(TextArea.java:2198) > 8:29:21 PM [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea.moveCaretPosition(TextArea.java:2187) > 8:29:21 PM [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea._changeLine(TextArea.java:5353) > 8:29:21 PM [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea.goToNextLine(TextArea.java:2456) > 8:29:21 PM [error] BeanShellAction: at > sun.reflect.GeneratedMethodAccessor14.invoke(Unknown > Source) > 8:29:21 PM [error] BeanShellAction: at > sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown > Source) > 8:29:21 PM [error] BeanShellAction: at > java.lang.reflect.Method.invoke(Unknown Source) > 8:29:21 PM [error] BeanShellAction: at > bsh.Reflect.invokeMethod(Reflect.java:134) > 8:29:21 PM [error] BeanShellAction: at > bsh.Reflect.invokeObjectMethod(Reflect.java:80) > 8:29:21 PM [error] BeanShellAction: at bsh.Name.invokeMethod(Name.java:858) > 8:29:21 PM [error] BeanShellAction: at > bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java :75) > 8:29:21 PM [error] BeanShellAction: at > bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102) > 8:29:21 PM [error] BeanShellAction: at > bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47) > 8:29:21 PM [error] BeanShellAction: at > bsh.BSHBlock.evalBlock(BSHBlock.java:130) > 8:29:21 PM [error] BeanShellAction: at bsh.BSHBlock.eval(BSHBlock.java:80) > 8:29:21 PM [error] BeanShellAction: at > bsh.BshMethod.invokeImpl(BshMethod.java:362) > 8:29:21 PM [error] BeanShellAction: at > bsh.BshMethod.invoke(BshMethod.java:258) > 8:29:21 PM [error] BeanShellAction: at > bsh.BshMethod.invoke(BshMethod.java:186) > 8:29:21 PM [error] BeanShellAction: at > org.gjt.sp.jedit.BeanShell.runCachedBlock(BeanShell.java > :509) > 8:29:21 PM [error] BeanShellAction: at > org.gjt.sp.jedit.BeanShellAction.invoke(BeanShellAction.java:76) > 8:29:21 PM [error] BeanShellAction: at > org.gjt.sp.jedit.gui.InputHandler.invokeAction(InputHandler.java:416) > 8:29:21 PM [error] BeanShellAction: at > org.gjt.sp.jedit.gui.InputHandler.invokeAction(InputHandler.java:382) > 8:29:21 PM [error] BeanShellAction: at > org.gjt.sp.jedit.gui.DefaultInputHandler.handleKey(DefaultInputHandler.java > :373) > 8:29:21 PM [error] BeanShellAction: at > org.gjt.sp.jedit.input.AbstractInputHandler.processKeyEventKeyStrokeHandling(AbstractInputHandler.java:116) > 8:29:21 PM [error] BeanShellAction: at > org.gjt.sp.jedit.gui.InputHandler.processKeyEvent > (InputHandler.java:185) > 8:29:21 PM [error] BeanShellAction: at > org.gjt.sp.jedit.textarea.TextArea.processKeyEvent(TextArea.java:4591) > 8:29:21 PM [error] BeanShellAction: at > java.awt.Component.processEvent(Unknown Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.Container.processEvent(Unknown Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.Component.dispatchEventImpl(Unknown Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.Container.dispatchEventImpl(Unknown Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.Component.dispatchEvent(Unknown Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.KeyboardFocusManager.redispatchEvent (Unknown > Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown > Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent > (Unknown Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown > Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.DefaultKeyboardFocusManager.dispatchEvent (Unknown > Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.Component.dispatchEventImpl(Unknown Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.Container.dispatchEventImpl(Unknown Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.Window.dispatchEventImpl(Unknown Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.Component.dispatchEvent(Unknown Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.EventQueue.dispatchEvent(Unknown Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown > Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.EventDispatchThread.pumpEventsForFilter(Unknown > Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown > Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.EventDispatchThread.pumpEvents(Unknown Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.EventDispatchThread.pumpEvents(Unknown Source) > 8:29:21 PM [error] BeanShellAction: at > java.awt.EventDispatchThread.run(Unknown Source) > > I originally reported this at > http://community.jedit.org/?q=node/view/3624 > > > ---------------------------------------------------------------------- > > >Comment By: Shlomy Reinstein (shlomy) > Date: 2007-08-30 22:30 > > Message: > Logged In: YES > user_id=1477607 > Originator: NO > > What are C-n and C-` for you? For me, C-n is "new buffer". > > ---------------------------------------------------------------------- > > Comment By: andreweans (andreweans) > Date: 2007-08-30 16:55 > > Message: > Logged In: YES > user_id=1868628 > Originator: YES > > I have determined how to reproduce this NPE. > Turn on soft wrap. > Press C-n twice. > Hold down Enter until you've entered a few more lines than will fit in > your window (so it starts scrolling). > Type a long sentence, until it soft wraps to a second line. > Press Enter. > Press Backspace. > Voila, the second line of your two-line sentence disappears off the bottom > of the window, leaving the first line at the bottom, and you cannot scroll > the view to the second line. Press C-Home and C-End a couple times to > convince yourself. Note that at this point there's no NPE. > Press C-` twice, then press C-End, and the glitch is fixed. > Now, press Enter and then Backspace to generate the glitch again, then > AGAIN press Enter then Backspace, and your entire sentence disappears off > the bottom of the window. Now press C-End, and you get the NPE. > Press C-` twice, then press C-End, and the glitch is fixed. > > I've tested this several times and am able to generate the NPE this way > with 100% reliability. > > > ---------------------------------------------------------------------- > > You can respond by visiting: > https://sourceforge.net/tracker/?func=detail&atid=100588&aid=1775258&group_id=588 > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. > Still grepping through log files to find problems? Stop. > Now Search log events and configuration files using AJAX and a browser. > Download your FREE copy of Splunk now >> http://get.splunk.com/ > -- > ----------------------------------------------- > jEdit Developers' List > jEd...@li... > https://lists.sourceforge.net/lists/listinfo/jedit-devel > |