Bug 558434 - Content Assist agonizingly slow in Eclipse 2019-12 (4.14)
Summary: Content Assist agonizingly slow in Eclipse 2019-12 (4.14)
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 4.14   Edit
Hardware: All All
: P3 critical (vote)
Target Milestone: 4.15 M3   Edit
Assignee: Roland Grunberg CLA
QA Contact: Roland Grunberg CLA
URL:
Whiteboard:
Keywords:
Depends on: 550226
Blocks: 553533
  Show dependency tree
 
Reported: 2019-12-18 10:38 EST by Garret Wilson CLA
Modified: 2021-05-14 03:52 EDT (History)
6 users (show)

See Also:


Attachments
screenshot before / after restore defaults (141.28 KB, image/png)
2019-12-18 11:27 EST, Andrey Loskutov CLA
no flags Details
Integer-assist-1.png (10.99 KB, image/png)
2019-12-18 12:13 EST, Garret Wilson CLA
no flags Details
Integer-assist-5.png (10.35 KB, image/png)
2019-12-18 12:13 EST, Garret Wilson CLA
no flags Details
screen shots of buggy Content Assist with Integer (50.81 KB, application/x-zip-compressed)
2019-12-18 12:25 EST, Garret Wilson CLA
no flags Details
log exerpt (24.28 KB, application/octet-stream)
2019-12-19 09:39 EST, Garret Wilson CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Garret Wilson CLA 2019-12-18 10:38:28 EST
I've been using Eclipse for over a decade, and as of this morning I was running Eclipse 2019-09 (4.13) Enterprise (unzipped from the package, not installed). As soon as 2019-12 (4.14) Enterprise was released this morning, I installed it and it updated my workspace.

But Content Assist is unacceptably slow!!

For example if I type `Integer.` expecting the list of `Integer` static methods, I now must wait around two seconds before the list of methods appear. (Before it has always been almost instantaneous.) And during this time the cursor turns into a spinning circle.

I work day in and day out with Content Assist, usually every few seconds. My productivity will grind to a halt if I have to wait for Content Assist like this. In over a decade I have never seen behavior like this.

Please fix this, and please, please don't make us wait until a 2020-XX milestone before publishing a fix.

In the meantime, how can I revert my workspace so it will work with Eclipse 2019-09 again?
Comment 1 Garret Wilson CLA 2019-12-18 10:55:00 EST
Some positive news: I went to "Window > Preferences > Java > Editor > Content Assist > Advanced" and clicked on "Restore Defaults". It removed the "Java Postfix Template Proposals" checkbox in both the upper list and the lower list.

Now I have never changed the options here, except to explicitly reset them (see below), so I don't know why this "Java Postfix Template Proposals" checkbox would have been checked in the first place.

Now after turning off "Java Postfix Template Proposals" I still get a circle mouse pointer every time I use Content Assist (which is irritating but I can't say with 100% confidence that this didn't happen before), and the wait has now been cut down to around half a second. The current lag of half a second still seems slower than it was before, but it's certainly better than two seconds.

Wasn't there a fiasco with an Eclipse release a year or two ago when one of these Content Assist settings things was half-baked or something, and it got turned on when it wasn't supposed to in one of the milestones, so it broke Content Assist altogether? I don't remember the details, but I do remember I had to explicitly go turn one of these off to get Content Assist back.

And I also remember about a year ago when I did an update, it would actually have a message that would tell me to go reset my Content Assist settings.

So it seems there is a history of troubles with Content Assist settings. In any case, I had certainly not turned _on_ any new Content Assist settings.

I'll try it today and see whether the new reduced lag is bearable. I'm running Windows 10 64-bit by the way.
Comment 2 Garret Wilson CLA 2019-12-18 11:02:47 EST
For the bugs I mentioned from memory in my comments above, see Bug 547959, especially the following comments:

* https://bugs.eclipse.org/bugs/show_bug.cgi?id=547959#c3
* https://bugs.eclipse.org/bugs/show_bug.cgi?id=547959#c7

See also Bug 542925, and also note https://bugs.eclipse.org/bugs/show_bug.cgi?id=542925#c3 .

So is this another (a third? a fourth?) case of some Content Assist feature that wasn't ready accidentally getting released?
Comment 3 Andrey Loskutov CLA 2019-12-18 11:19:18 EST
Same tragedy as before, now due bug 458804 (postfix content assist).

The root cause is bug 550226 that is still open.

Interestingly, I do NOT see any problems with content assist on Integer.|, I assume this is classpath related.
Comment 4 Andrey Loskutov CLA 2019-12-18 11:27:08 EST
Created attachment 281263 [details]
screenshot before / after restore defaults

Same here, I have never enabled "Postfix" proposals, but they were ON in my existing workspace. Clicking on "Restore Defaults" shows them deselected.
Comment 5 Andrey Loskutov CLA 2019-12-18 11:58:02 EST
Garret, could you share the screenshot of proposal list for Integer.| ?
Just curious which types cause the slowdown here.
Comment 6 Garret Wilson CLA 2019-12-18 12:13:12 EST
Created attachment 281265 [details]
Integer-assist-1.png
Comment 7 Garret Wilson CLA 2019-12-18 12:13:38 EST
Created attachment 281266 [details]
Integer-assist-5.png
Comment 8 Roland Grunberg CLA 2019-12-18 12:15:07 EST
Is there any possibility of reproducing this on some project that can be shared ? I've tried on a large file and that slows the completion a little bit, and points to the problem being ASTParser.createAST(..) and ASTParser.createBindings(..) in PostfixCompletionProposalComputer.updateTemplateEngine(..) .
Comment 9 Garret Wilson CLA 2019-12-18 12:19:24 EST
> Garret, could you share the screenshot of proposal list for Integer?

Sure, but that was just an example off the top of my head. It happened with anything, not just `Integer`. And in fact `Integer` isn't the thing I was even using it with. I just picked a class to give as an example.

It's a long list of suggestions so I had to do several screen shots.

P.S. Arg, this hideous Bugzilla interface doesn't even permit selecting multiple files at the same time. And to top it off it forced me to type a description for each one. I'm not going to waste the rest of my day laboriously adding each screen shot; I've already wasted a large chunk of my morning tracking down this problem, working around this problem, and filing the bug. If the thing you're looking for isn't in the first or last screen shot, let me know and I'll attach one of the middle ones.

P.P.S. And stupid Bugzilla thought I had a "mid-air collision" with my comment with someone else's comment. Can't it figure out I'm just adding a comment? Puleeze, time to upgrade to a better issue tracker.

P.P.P.S. Obviously the Bugzilla complaints aren't directed at any person in particular. It's just an indication of one more impediment on top of another. It sort of ruins the excitement of waiting to get the new Eclipse the past few days. Seriously, I was hitting `F5` over and over this morning until it appeared. Now I haven't gained anything and just wasted time I could have been working. Arg.
Comment 10 Lars Vogel CLA 2019-12-18 12:23:28 EST
Garret, you could maybe upload a zip file with all screenshots?
Comment 11 Garret Wilson CLA 2019-12-18 12:25:26 EST
Created attachment 281267 [details]
screen shots of buggy Content Assist with Integer
Comment 12 Eclipse Genie CLA 2019-12-18 14:39:34 EST
New Gerrit change created: https://git.eclipse.org/r/154752
Comment 13 Roland Grunberg CLA 2019-12-18 14:47:54 EST
I was able to eliminate the usage of the createBindings(..) call which seems to improve the situation, but we still are doing createAST(..). I'm not sure if there's a way to avoid the latter.

It would be great if someone could confirm whether the patch improves the situation for them. I only tested by opening up 'LocalCorrectionsQuickFixTest' (~11k lines) and calling Integer.| somewhere inside as this was the only thing I've observed that will slow down the completion.
Comment 14 Lars Vogel CLA 2019-12-19 06:58:33 EST
Garret, could you activate the freeze reporting and paste the stack traces from the freeze to this bug? 

To activate this go to Preference -> General -> UI Responsiveness and select "Detect periods of unresponsive UI". Redo your slow Java completion afterwards and you should find freeze reports in the Error log.
Comment 15 Garret Wilson CLA 2019-12-19 09:38:45 EST
Here is the summary. (Ironically I got a couple of more copying the error log itself; I'll ignore those.) I'm attaching the details to the ticket.

eclipse.buildId=4.14.0.I20191210-0610
java.version=11.0.5
java.vendor=AdoptOpenJDK
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Framework arguments:  -product org.eclipse.epp.package.jee.product
Command-line arguments:  -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product

org.eclipse.ui.monitoring
Warning
Thu Dec 19 06:30:49 PST 2019
UI freeze of 1.6s at 06:30:48.347
Comment 16 Garret Wilson CLA 2019-12-19 09:39:19 EST
Created attachment 281278 [details]
log exerpt
Comment 17 Garret Wilson CLA 2019-12-20 23:23:10 EST
I wanted to report that I upgraded to Eclipse Enterprise 2019-12 (4.14) on a completely unrelated Ubunto 16.04 machine, with a 100% unrelated (but large) project.

First of all, as seen above, Eclipse automatically added the "Java Postfix Template Proposals", which is incorrect—I had certainly never added it on that machine, and "resetting to defaults" removed it.

But interestingly it only slowed down a Content Assist lookup to (my best guess) about 200ms (compared to about 2 seconds on my Windows machine). When I removed "Java Postfix Template Proposals", the Content Assist popup menu was almost instantaneous, even though on the Windows machine it only went down to around 500ms.

The Windows machine actually has a more recent CPU (i7-7600U) than the Ubuntu machine (i7-7500U). I don't remember the clock speed, but the Windows machine is running at 2.9 GHz.

In short I wouldn't expect such a large difference in Content Assist popup menu display time. Seriously, on the Windows machine I believe the mouse cursor actually briefly turns into a circle pointer, even with "Java Postfix Template Proposals".

Is the difference between running Eclipse on Windows and on Ubuntu really that big!?
Comment 19 Lars Vogel CLA 2020-01-03 04:17:06 EST
(In reply to Garret Wilson from comment #17)
> Is the difference between running Eclipse on Windows and on Ubuntu really
> that big!?

AFAIK (I'm using Linux) the file system access on Windows is super slow (not Eclipse related, it is based on the OS) so any file system access is much slower on Windows. And I believe code completion access JAR files hence the file access.

From your UI freeze, I cannot see an obvious place in which the processor is stuck, it reported several places this means that it it does not hang in a specific place.
Comment 20 Garret Wilson CLA 2020-01-03 08:17:54 EST
> … any file system access is much slower on Windows.
> And I believe code completion access JAR files hence the file access.

If this is a problem, then a solution must be found.

* Maybe Eclipse should preload and prebuild method trees.
* Maybe Eclipse should cache the most recently used APIs.
* Maybe the full tree should be searched asynchronously, populating the popup menu in as more results are found.

That's just off the top of my head. Or maybe the current code needs to be optimized.

Whatever the case, it's bordering on the edge of "it's really too slow to use anymore".

If I can type in a web search and if Google can, in real time, provide me search suggestions across the network based upon billions of other searches, Eclipse should have no trouble giving me some options from a few JAR files.
Comment 21 Lars Vogel CLA 2020-01-06 03:53:29 EST
Garret, can you try with latest I-Build which contains the fix from Roland? https://download.eclipse.org/eclipse/downloads/
Comment 22 Garret Wilson CLA 2020-01-07 08:47:40 EST
> Garret, can you try with latest I-Build which contains the fix from Roland?

Lars, I would love to, but I'm super busy at the moment. I may not get a chance to look at it for several weeks.

Plus I use the Enterprise package for Windows, and in my experience these I builds are broken all over the place with dependency problems or don't even have the Enterprise package. And trying to use the upgrade process with the I builds is even more broken, as we've discussed here and on Stack Overflow.

The last thing I need is to lose an entire day or two just trying to sort out a mess. I may have to wait until a later milestone, sorry.
Comment 23 Lars Vogel CLA 2020-01-07 08:53:11 EST
(In reply to Garret Wilson from comment #22)
> > Garret, can you try with latest I-Build which contains the fix from Roland?

> Plus I use the Enterprise package for Windows, and in my experience these I
> builds are broken all over the place with dependency problems or don't even
> have the Enterprise package. And trying to use the upgrade process with the
> I builds is even more broken, as we've discussed here and on Stack Overflow.

I would not update and risk your real environment in your case rather do a separate download + extract for the test. To test this you should only require the SDK download from https://download.eclipse.org/eclipse/downloads/

> The last thing I need is to lose an entire day or two just trying to sort
> out a mess. I may have to wait until a later milestone, sorry.

Understandable. Thanks for considering testing this in the future. Please note that latest I-Builds (and hence the milestones will also include them) also include async code completion for Java so most likely you will not be able to get a freeze anymore.
Comment 24 Garret Wilson CLA 2020-01-07 08:55:39 EST
> Please note that latest I-Builds (and hence the milestones will also include
> them) also include async code completion for Java so most likely you will not
> be able to get a freeze anymore.

Oh, wow that would be super. I'd love to try it. I'll probably wait for a milestone or two, but then I hope to get a chance. Thank you.
Comment 25 Lars Vogel CLA 2020-01-08 04:51:22 EST
Roland, in Eclipse SDK
Version: 2020-03 (4.15)
Build id: I20200105-1800
OS: Linux, v.5.3.0-24-generic, x86_64 / gtk 3.24.12, WebKit 2.26.2
Java version: 12.0.1


I see UI freezes due to PostfixCompletion.

Stack Trace
	at org.eclipse.jdt.internal.compiler.lookup.Scope.compilationUnitScope(Scope.java:751)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.getMethod(Scope.java:2926)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.findMethodBinding(MessageSend.java:971)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:792)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:696)
	at org.eclipse.jdt.internal.compiler.ast.LocalDeclaration.resolve(LocalDeclaration.java:386)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:641)
	at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:316)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:551)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1293)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1418)
	at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:666)
	at org.eclipse.jdt.core.dom.CompilationUnitResolver.resolve(CompilationUnitResolver.java:1243)
	at org.eclipse.jdt.core.dom.CompilationUnitResolver.resolve(CompilationUnitResolver.java:714)
	at org.eclipse.jdt.core.dom.ASTParser.internalCreateAST(ASTParser.java:1217)
	at org.eclipse.jdt.core.dom.ASTParser.createAST(ASTParser.java:832)
	at org.eclipse.jdt.internal.ui.text.java.PostfixCompletionProposalComputer.updateTemplateEngine(PostfixCompletionProposalComputer.java:146)
	at org.eclipse.jdt.internal.ui.text.java.PostfixCompletionProposalComputer.analyzeCoreContext(PostfixCompletionProposalComputer.java:117)
	at org.eclipse.jdt.internal.ui.text.java.PostfixCompletionProposalComputer.computeCompletionEngine(PostfixCompletionProposalComputer.java:106)
	at org.eclipse.jdt.internal.ui.text.java.AbstractTemplateCompletionProposalComputer.computeCompletionProposals(AbstractTemplateCompletionProposalComputer.java:71)
	at org.eclipse.jdt.internal.ui.text.java.CompletionProposalComputerDescriptor.computeCompletionProposals(CompletionProposalComputerDescriptor.java:345)
	at org.eclipse.jdt.internal.ui.text.java.CompletionProposalCategory.computeCompletionProposals(CompletionProposalCategory.java:340)
	at org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor.collectProposals(ContentAssistProcessor.java:334)
	at org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor.computeCompletionProposals(ContentAssistProcessor.java:291)
	at org.eclipse.jface.text.contentassist.ContentAssistant$2.lambda$0(ContentAssistant.java:2015)
	at org.eclipse.jface.text.contentassist.ContentAssistant$2$$Lambda$1014/0x00000008020aa840.accept(Unknown Source)
	at java.base@12.0.1/java.util.Collections$SingletonSet.forEach(Collections.java:4795)
	at org.eclipse.jface.text.contentassist.ContentAssistant$2.run(ContentAssistant.java:2014)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.jface.text.contentassist.ContentAssistant.computeCompletionProposals(ContentAssistant.java:2011)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup.computeProposals(CompletionProposalPopup.java:578)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup.lambda$0(CompletionProposalPopup.java:508)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup$$Lambda$1013/0x00000008020ab040.run(Unknown Source)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:72)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup.showProposals(CompletionProposalPopup.java:503)
	at org.eclipse.jface.text.contentassist.ContentAssistant$AutoAssistListener.lambda$0(ContentAssistant.java:380)
	at org.eclipse.jface.text.contentassist.ContentAssistant$AutoAssistListener$$Lambda$1011/0x00000008020acc40.run(Unknown Source)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4975)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4496)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:660)
	at org.eclipse.ui.internal.Workbench$$Lambda$204/0x00000008013ef440.run(Unknown Source)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:559)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:154)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
	at java.base@12.0.1/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base@12.0.1/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base@12.0.1/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base@12.0.1/java.lang.reflect.Method.invoke(Method.java:567)
	at app//org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:657)
	at app//org.eclipse.equinox.launcher.Main.basicRun(Main.java:594)
	at app//org.eclipse.equinox.launcher.Main.run(Main.java:1465)
	at app//org.eclipse.equinox.launcher.Main.main(Main.java:1438)
Comment 26 Eclipse Genie CLA 2020-01-08 12:37:33 EST
New Gerrit change created: https://git.eclipse.org/r/155505
Comment 27 Garret Wilson CLA 2020-01-10 11:08:05 EST
Now (still on 2019-12) I'm getting errors in the middle of content completion.

Yes, it's probably a different bug. Yes, it would probably be best to create a different bug ticket. But I'm extremely busy, and I have to get this work done, and now this basic functionality breaks, and I just don't have time to go do that. So here is the stack trace:

!ENTRY org.eclipse.jdt.ui 4 0 2020-01-10 13:05:30.146
!MESSAGE Error in JDT Core during reconcile
!STACK 1
Java Model Exception: java.lang.NullPointerException
	at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:324)
	at org.eclipse.jdt.internal.core.CompilationUnit.buildStructure(CompilationUnit.java:192)
	at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:268)
	at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:596)
	at org.eclipse.jdt.internal.core.CompilationUnit.makeConsistent(CompilationUnit.java:1138)
	at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:173)
	at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:94)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:736)
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:802)
	at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1315)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:131)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.access$0(JavaReconcilingStrategy.java:113)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:93)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:90)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:157)
	at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:94)
	at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:107)
	at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:76)
	at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:210)
Caused by: java.lang.NullPointerException
	at org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference.optimizedBooleanConstant(QualifiedNameReference.java:931)
	at org.eclipse.jdt.internal.compiler.ast.WhileStatement.doesNotCompleteNormally(WhileStatement.java:309)
	at org.eclipse.jdt.internal.compiler.ast.Block.doesNotCompleteNormally(Block.java:168)
	at org.eclipse.jdt.internal.compiler.ast.LambdaExpression.analyzeShape(LambdaExpression.java:838)
	at org.eclipse.jdt.internal.compiler.ast.LambdaExpression.isPotentiallyCompatibleWith(LambdaExpression.java:861)
	at org.eclipse.jdt.internal.compiler.lookup.PolyTypeBinding.isPotentiallyCompatibleWith(PolyTypeBinding.java:48)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.parameterCompatibilityLevel(Scope.java:4955)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.parameterCompatibilityLevel(Scope.java:4921)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.computeCompatibleMethod(Scope.java:867)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.computeCompatibleMethod(Scope.java:794)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.findMethod0(Scope.java:1750)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.findMethod(Scope.java:1651)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.getMethod(Scope.java:2948)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.findMethodBinding(MessageSend.java:966)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:787)
	at org.eclipse.jdt.internal.compiler.ast.Expression.resolve(Expression.java:1066)
	at org.eclipse.jdt.internal.compiler.ast.Block.resolve(Block.java:125)
	at org.eclipse.jdt.internal.compiler.ast.LambdaExpression.resolveType(LambdaExpression.java:457)
	at org.eclipse.jdt.internal.compiler.ast.ASTNode.resolvePolyExpressionArguments(ASTNode.java:708)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.findMethodBinding(MessageSend.java:973)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:787)
	at org.eclipse.jdt.internal.compiler.ast.Expression.resolve(Expression.java:1066)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:641)
	at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:316)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:551)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1293)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1418)
	at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:666)
	at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:1072)
	at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:272)
	... 19 more
Caused by: java.lang.NullPointerException
	at org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference.optimizedBooleanConstant(QualifiedNameReference.java:931)
	at org.eclipse.jdt.internal.compiler.ast.WhileStatement.doesNotCompleteNormally(WhileStatement.java:309)
	at org.eclipse.jdt.internal.compiler.ast.Block.doesNotCompleteNormally(Block.java:168)
	at org.eclipse.jdt.internal.compiler.ast.LambdaExpression.analyzeShape(LambdaExpression.java:838)
	at org.eclipse.jdt.internal.compiler.ast.LambdaExpression.isPotentiallyCompatibleWith(LambdaExpression.java:861)
	at org.eclipse.jdt.internal.compiler.lookup.PolyTypeBinding.isPotentiallyCompatibleWith(PolyTypeBinding.java:48)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.parameterCompatibilityLevel(Scope.java:4955)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.parameterCompatibilityLevel(Scope.java:4921)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.computeCompatibleMethod(Scope.java:867)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.computeCompatibleMethod(Scope.java:794)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.findMethod0(Scope.java:1750)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.findMethod(Scope.java:1651)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.getMethod(Scope.java:2948)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.findMethodBinding(MessageSend.java:966)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:787)
	at org.eclipse.jdt.internal.compiler.ast.Expression.resolve(Expression.java:1066)
	at org.eclipse.jdt.internal.compiler.ast.Block.resolve(Block.java:125)
	at org.eclipse.jdt.internal.compiler.ast.LambdaExpression.resolveType(LambdaExpression.java:457)
	at org.eclipse.jdt.internal.compiler.ast.ASTNode.resolvePolyExpressionArguments(ASTNode.java:708)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.findMethodBinding(MessageSend.java:973)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:787)
	at org.eclipse.jdt.internal.compiler.ast.Expression.resolve(Expression.java:1066)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:641)
	at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:316)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:551)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1293)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1418)
	at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:666)
	at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:1072)
	at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:272)
	at org.eclipse.jdt.internal.core.CompilationUnit.buildStructure(CompilationUnit.java:192)
	at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:268)
	at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:596)
	at org.eclipse.jdt.internal.core.CompilationUnit.makeConsistent(CompilationUnit.java:1138)
	at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:173)
	at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:94)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:736)
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:802)
	at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1315)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:131)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.access$0(JavaReconcilingStrategy.java:113)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:93)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:90)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:157)
	at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:94)
	at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:107)
	at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:76)
	at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:210)
!SUBENTRY 1 org.eclipse.jdt.core 4 1005 2020-01-10 13:05:30.146
!MESSAGE java.lang.NullPointerException
!STACK 0
java.lang.NullPointerException
	at org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference.optimizedBooleanConstant(QualifiedNameReference.java:931)
	at org.eclipse.jdt.internal.compiler.ast.WhileStatement.doesNotCompleteNormally(WhileStatement.java:309)
	at org.eclipse.jdt.internal.compiler.ast.Block.doesNotCompleteNormally(Block.java:168)
	at org.eclipse.jdt.internal.compiler.ast.LambdaExpression.analyzeShape(LambdaExpression.java:838)
	at org.eclipse.jdt.internal.compiler.ast.LambdaExpression.isPotentiallyCompatibleWith(LambdaExpression.java:861)
	at org.eclipse.jdt.internal.compiler.lookup.PolyTypeBinding.isPotentiallyCompatibleWith(PolyTypeBinding.java:48)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.parameterCompatibilityLevel(Scope.java:4955)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.parameterCompatibilityLevel(Scope.java:4921)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.computeCompatibleMethod(Scope.java:867)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.computeCompatibleMethod(Scope.java:794)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.findMethod0(Scope.java:1750)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.findMethod(Scope.java:1651)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.getMethod(Scope.java:2948)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.findMethodBinding(MessageSend.java:966)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:787)
	at org.eclipse.jdt.internal.compiler.ast.Expression.resolve(Expression.java:1066)
	at org.eclipse.jdt.internal.compiler.ast.Block.resolve(Block.java:125)
	at org.eclipse.jdt.internal.compiler.ast.LambdaExpression.resolveType(LambdaExpression.java:457)
	at org.eclipse.jdt.internal.compiler.ast.ASTNode.resolvePolyExpressionArguments(ASTNode.java:708)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.findMethodBinding(MessageSend.java:973)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:787)
	at org.eclipse.jdt.internal.compiler.ast.Expression.resolve(Expression.java:1066)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:641)
	at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:316)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:551)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1293)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1418)
	at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:666)
	at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:1072)
	at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:272)
	at org.eclipse.jdt.internal.core.CompilationUnit.buildStructure(CompilationUnit.java:192)
	at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:268)
	at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:596)
	at org.eclipse.jdt.internal.core.CompilationUnit.makeConsistent(CompilationUnit.java:1138)
	at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:173)
	at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:94)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:736)
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:802)
	at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1315)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:131)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.access$0(JavaReconcilingStrategy.java:113)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:93)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:90)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:157)
	at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:94)
	at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:107)
	at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:76)
	at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:210)
Comment 28 Dani Megert CLA 2020-01-10 12:12:41 EST
(In reply to Garret Wilson from comment #27)
> Now (still on 2019-12) I'm getting errors in the middle of content
> completion.
This is a trade-off. I've you can live with the bug, then don't report a new bug and live with it. Otherwise, you have to file a new bug report.
Comment 29 Garret Wilson CLA 2020-01-10 12:14:59 EST
> This is a trade-off. I've you can live with the bug, then don't report a new
> bug and live with it. Otherwise, you have to file a new bug report.

I understand. I really will try to file a bug report, but it's simply not possible now with my limited time (in the minutes now) today. Since it is related to content completion, I thought it best at least to record the stack trace. Perhaps in the least someone would think a null pointer exception important enough to investigate anyway.

Have a great weekend.
Comment 30 Lars Vogel CLA 2020-01-10 12:18:13 EST
(In reply to Garret Wilson from comment #29)

> I really will try to file a bug report, but it's simply not
> possible now with my limited time (in the minutes now) today. Since it is
> related to content completion, I thought it best at least to record the
> stack trace. Perhaps in the least someone would think a null pointer
> exception important enough to investigate anyway.
> 
> Have a great weekend.

Thanks Garret for the report, I extracted your comment into Bug 559038.
Comment 31 Dani Megert CLA 2020-01-11 03:33:05 EST
(In reply to Lars Vogel from comment #30)
> Thanks Garret for the report, I extracted your comment into Bug 559038.
Thanks to both of you!
Comment 33 Roland Grunberg CLA 2020-01-16 16:01:49 EST
@Garret, @Lars, are you able to confirm with one of the recent I-builds that postfix completion is no longer slow ?
Comment 34 Garret Wilson CLA 2020-01-20 12:46:02 EST
I had just a few minutes free so I was going to test this as you requested in 2020-03 M1, which according to https://wiki.eclipse.org/Category:SimRel-2020-03 should have been released on 2020-01-17. But I can't find it at https://www.eclipse.org/downloads/packages/release/2020-03/ .
Comment 35 Roland Grunberg CLA 2020-01-21 12:01:08 EST
(In reply to Garret Wilson from comment #34)
> I had just a few minutes free so I was going to test this as you requested
> in 2020-03 M1, which according to
> https://wiki.eclipse.org/Category:SimRel-2020-03 should have been released
> on 2020-01-17. But I can't find it at
> https://www.eclipse.org/downloads/packages/release/2020-03/ .

Can you try from one of the recent Integration Builds (I) at https://download.eclipse.org/eclipse/downloads/ ? It's usually easier to test against one of those as opposed to waiting for a milestone build.
Comment 36 Garret Wilson CLA 2020-01-21 12:46:20 EST
(In reply to Roland Grunberg from comment #35)
> (In reply to Garret Wilson from comment #34)
> > I had just a few minutes free so I was going to test this as you requested
> > in 2020-03 M1, which according to
> > https://wiki.eclipse.org/Category:SimRel-2020-03 should have been released
> > on 2020-01-17. But I can't find it at
> > https://www.eclipse.org/downloads/packages/release/2020-03/ .
> 
> Can you try from one of the recent Integration Builds (I) at
> https://download.eclipse.org/eclipse/downloads/ ? It's usually easier to
> test against one of those as opposed to waiting for a milestone build.

See comment #22.
Comment 37 Garret Wilson CLA 2020-01-23 10:09:09 EST
I see that 2020-03 M1 finally appeared. I'll gladly install it and try it out, but first can someone tell me whether it's going to change my workspace format/version so that I can't easily revert back to 2019-12? I'm in the middle of a pretty big task for weeks, and the last thing I need is for something to go wrong and waste a morning trying to restore force the workspace back to the old version or restore stuff from backups. Any info would be appreciated.
Comment 38 Lars Vogel CLA 2020-01-23 10:28:07 EST
(In reply to Garret Wilson from comment #37)
> I see that 2020-03 M1 finally appeared. I'll gladly install it and try it
> out, but first can someone tell me whether it's going to change my workspace
> format/version so that I can't easily revert back to 2019-12? I'm in the
> middle of a pretty big task for weeks, and the last thing I need is for
> something to go wrong and waste a morning trying to restore force the
> workspace back to the old version or restore stuff from backups. Any info
> would be appreciated.

To be save, make a ws copy and use this one for testing.
Comment 39 Garret Wilson CLA 2020-01-23 10:31:17 EST
> To be save, make a ws copy and use this one for testing.

I forgot to add the line, "and yes, I know I can make copies of stuff and spend half my day puttering around, but I just don't have the time".

Sorry, I'm really, really busy. I really, really want to help you fix these problems. I just need to do it in a way that doesn't interrupt my work. Hence my question.

So I take it you don't know the answer to the question?
Comment 40 Garret Wilson CLA 2020-01-23 10:33:48 EST
> To be save, make a ws copy and use this one for testing.

But I don't have time to "play test". I would be installing 2020-03 M1 to "for real test" on my real data. If it works, I keep it and report back. If it doesn't work, I revert back to 2019-12, still using my real data.
Comment 41 Lars Vogel CLA 2020-01-23 11:07:09 EST
(In reply to Garret Wilson from comment #40)
> > To be save, make a ws copy and use this one for testing.
> 
> But I don't have time to "play test". I would be installing 2020-03 M1 to
> "for real test" on my real data. If it works, I keep it and report back. If
> it doesn't work, I revert back to 2019-12, still using my real data.

It should work without issues, I do it all the time but I don't know your installation nor do I have the same plugins installed. Platform ws is stable since several releases.
Comment 42 Garret Wilson CLA 2020-01-23 11:11:00 EST
I'm pretty sure either 2019-12 or 2019-09 gave me the "we're changing the format of your workspace, and you can't go back" warning. So I was just asking if the same thing would happen with 2020-03. See e.g. Bug 538830 (courtesy a Google search).

Is there a list of workspace versions and associated Eclipse releases, so I could know? I would think this is something that should be published and tracked.
Comment 43 Lars Vogel CLA 2020-01-23 11:16:05 EST
The warning is unconditional given.

Btw. a ws copy might be done by now I guess.
Comment 44 Garret Wilson CLA 2020-01-28 10:58:45 EST
(In reply to Lars Vogel from comment #43)
> …
> Btw. a ws copy might be done by now I guess.


You're not getting it. Installing integration builds or even milestone builds has the potential of severely interrupting my work because of the bugs, the rollbacks, the changes, etc. It's not just the simple workspace backup and restore; that's just part of it (although it is significant).

For example I went ahead and installed 2020-03 M1 Enterprise, and already a large chunk of my time has been finding workarounds and filing tickets for Bug 559629 and Bug 559638. All these little interruptions together cut out more than the sum of the time each takes, because each interruption breaks the flow of creativity and I have to start over and it takes a while to get back to the place I was at.

Nevertheless I installed 2020-03 M1 Enterprise as I mentioned, and I turned "Java Postfix Template Proposals" back on, and so far I can see no apparent slowdown more than when it was turned off, so that's good news.
Comment 45 Roland Grunberg CLA 2020-01-31 10:40:06 EST
I'm going to mark this as RESOLVED (FIXED) as we have multiple people indicating the issue with postfix completion is improved. Garret, and Julian have mentioned M1 (containing https://git.eclipse.org/r/154752 ) improved the situation for them. Additionally, Lars and Julian have also tested https://git.eclipse.org/r/155505 which should further improve things for M2. Thanks to everyone for taking the time to test things out.

There are also separate bugs to track the other issues discussed in this bug.
Comment 46 Lars Vogel CLA 2020-01-31 10:51:45 EST
Thanks, Roland
Comment 47 Roland Grunberg CLA 2020-02-19 14:09:09 EST
Verified for 4.15 M3 using I20200219-0600 build

Thanks everyone who helped in testing/discussing this issue. In addition to the performance for this computation being greatly improved, enabling asynchronous content assist completely spares users from the inconvenience of having completions freeze the UI.
Comment 48 Peter Gazdik CLA 2021-01-27 06:51:26 EST
I had the same issue with 2020-12 version.

Restoring defaults helped, as it unchecked the "Chain Template Proposals".

Not sure what it is, but it's time varies for different classes and can get up to seconds.
Comment 49 Dennis CLA 2021-05-14 03:52:49 EDT
Could you re-open this bug or shall I report a new agonizingly bug ? 

The java source editor in eclipse is unusable and freeze few *seconds* for every keystrokes or even "mouse click" yesterday until I found this bug report to disable the annotation processing.

https://twitter.com/hkdennis2k/status/1392718818087084039