Bug 118789 - IJavaProject#findType(String) returns null for secondary type quickly after creation
Summary: IJavaProject#findType(String) returns null for secondary type quickly after c...
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.2   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.2 M4   Edit
Assignee: Frederic Fusier CLA
QA Contact:
URL:
Whiteboard:
Keywords:
: 5076 (view as bug list)
Depends on: 36032
Blocks:
  Show dependency tree
 
Reported: 2005-12-01 04:35 EST by Markus Keller CLA
Modified: 2012-10-19 11:56 EDT (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Markus Keller CLA 2005-12-01 04:35:04 EST
I20051130-1215

With the fix for bug 36032, we tried to remove our workaround for finding secondary types. It worked fine except for one problem. It seems to be a timing issue with updating the secondary type cache.

Steps:
- Set a breakpoint in JavaModelUtil#findType(IJavaProject, String) after the first return statement on the line
IPackageFragmentRoot[] roots= jproject.getPackageFragmentRoots();
(line 99 in rev 1.108 / I20051130-1215)
- debug UseSupertypeWherePossibleTests
=> The breakpoint should never be reached, but in testNew17(), the seconday type p.C is not found.

- While still hanging in the breakpoint, select the expression "jproject.findType(fullyQualifiedName)" and choose Run > Inspect.
=> Now, the type is found.

What's strange is that the type is also found when you just run testNew17() alone.
Comment 1 Frederic Fusier CLA 2005-12-01 07:21:55 EST
Unfortunately, we won't be able to address this issue without huge performance hits. As it is currenlty designed, secondary types search relies on indexes contents and so, to get correct result, clients need to wait that these indexes are ready.
If we do it all the times, then we'll slow all other type search which do not really need it and this would not be acceptable.

So, the solution for this failing test is to call performDummySearch() after having created the cu...
Comment 2 Markus Keller CLA 2005-12-01 08:39:36 EST
Hm, but then bug 36032 is not fixed for me. If clients have to do some dance like performDummySearch(), then you just move the burden to the client. If it's really not possible to find secondary types reliably in findType(String), then we maybe need another API findType(String fqn, boolean findSecondaryTypes) that clients can use.

The implementation could work like our current workaround:
First try to resolve as main type. If not found, wait for the index, then search again.
Comment 3 Frederic Fusier CLA 2005-12-01 08:56:45 EST
Arglll do not say hat the bug is not fixed, after all the time I spent on this... ;-)
I would say that is fixed due to the fact that problem described in this bug and all duplicate ones are now addressed correctly.
You have found a unresolved scenario but it's not an usual one as no user got the same problem since 2 years and a half...

I agree that we can add another API to _explicitely_ wait for indexes and finally fix your problem => so I reopen this bug...
Comment 4 Frederic Fusier CLA 2005-12-01 09:00:21 EST
This new API would be more findType(String fqn, IProgressMonitor monitor) which will wait for indexes _only_ if monitor is not null. This would give a chance to user to cancel in case indexing takes too much time...
Comment 5 Martin Aeschlimann CLA 2005-12-01 09:50:11 EST
The API has to give a deterministic result. Finding a secondary type only when the search index happens to be up-to-date makes it hard to use this API.

I'm fine with an API that takes the IProgressMonitor. I don't like the suggestion that passing 'null' would not wait for the index. As said, the result should be deterministic. 'null' is normally a valid replacement of a NullProgressMonitor. We should not introduce a new notation here. Always waiting for the search index seems the right thing here.
If you don't want to force all clients into searching for secondary types, better introduce an extra boolean 'includeSecondaryTypes'
-> findType(String qualifiedName, boolean includeSecondaryTypes, IProgressMonitor)
The client can set this to false if he has more information of what he's looking for.
Comment 6 Frederic Fusier CLA 2005-12-01 09:56:51 EST
OK, agreed that null for monitor was not a good idea.
Current API will do thta: ie. just return the content of existing cache and never wait if not thre or indexes not ready.
New API method will, instead, _always_ wait for indexes if cache not is there. If null is given for monitor, it will only signify that client does not need a way to cancel this operation...
Comment 7 Martin Aeschlimann CLA 2005-12-01 10:10:09 EST
I'm concerned that we get random test failures if you implement to never wait for the index with the old code.

The thought the old API specified that it wouldn't find secondary types. Why not keep it that way?
Comment 8 Philipe Mulet CLA 2005-12-01 10:16:04 EST
I like Martin suggestion for an extra flag. We also want a mode where we can quickly guess (and usually right) like when reconciling. Either the old API is the quick and dirty solution, or the new API provides a way to do so.
Comment 9 Markus Keller CLA 2005-12-01 10:43:37 EST
I don't know in what scenarios clients would want to use the quick-and-dirty approach. Usually, they're either interested in secondary types all the time, or they don't care since they know that the type is a main type.

For JDT/UI, that would in most cases mean that we will call the considerSecondaryTypes version.
Comment 10 Frederic Fusier CLA 2005-12-01 12:53:38 EST
I don't think additional flag is really necessary. If the problem is the fact that findType result may be not always the same as it can find secondary types or not, then we can just revert on 3.1 behavior and make this API method to _never_ consider secondary types.

Then, we add a new API method findType(String fqn, IProgressMonitor monitor) on IJavaProject which will _ever_ consider secondary types.

Both methods will have deterministic results and user can decide which one to use depending on his/her needs...
Comment 11 Martin Aeschlimann CLA 2005-12-01 13:19:09 EST
comment 10 makes sense to me!
Comment 12 Philipe Mulet CLA 2005-12-02 12:56:10 EST
To emphasize the need for reconciler to obtain fast answer for secondary types (even if not optimal until the indexing is finished), here is an example of VM dump obtained when moving workspace to latest I-build, and after importing all binary projects, and a couple minutes after build is finished, indexing is still really busy then I performed a source cleanup action, which got blocked with no visual clue (waiting on indexing ...). After 5 min. at same point, it still doesn't show any progress...

Full thread dump Java HotSpot(TM) Client VM (1.4.2_09-b03 mixed mode):

"ModalContext" prio=7 tid=0x06bdb708 nid=0xb54 waiting on condition [778f000..778fd68]
        at java.lang.Thread.sleep(Native Method)
        at org.eclipse.jdt.internal.core.search.processing.JobManager.performConcurrentJob(JobManager.java:245)
        at org.eclipse.jdt.internal.core.search.BasicSearchEngine.searchAllSecondaryTypeNames(BasicSearchEngine.java:789)
        at org.eclipse.jdt.internal.core.JavaModelManager.getSecondaryTypes(JavaModelManager.java:1476)
        at org.eclipse.jdt.internal.core.NameLookup.findSecondaryType(NameLookup.java:496)
        at org.eclipse.jdt.internal.core.NameLookup.findType(NameLookup.java:545)
        at org.eclipse.jdt.internal.core.SearchableEnvironment.find(SearchableEnvironment.java:85)
        at org.eclipse.jdt.internal.core.SearchableEnvironment.findType(SearchableEnvironment.java:188)
        at org.eclipse.jdt.internal.core.CancelableNameEnvironment.findType(CancelableNameEnvironment.java:45)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:119)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.Scope.getTypeOrPackage(Scope.java:2556)
        at org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2295)
        at org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding(SingleTypeReference.java:41)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:150)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType(TypeReference.java:107)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype(ClassScope.java:1106)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperclass(ClassScope.java:766)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy(ClassScope.java:946)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierarchy(CompilationUnitScope.java:266)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:195)
        at org.eclipse.jdt.core.dom.CompilationUnitResolver.beginToCompile(CompilationUnitResolver.java:225)
        at org.eclipse.jdt.core.dom.CompilationUnitResolver.resolve(CompilationUnitResolver.java:661)
        at org.eclipse.jdt.core.dom.CompilationUnitResolver.resolve(CompilationUnitResolver.java:455)
        at org.eclipse.jdt.core.dom.ASTParser.createASTs(ASTParser.java:664)
        at org.eclipse.jdt.internal.corext.fix.CleanUpRefactoring.parse(CleanUpRefactoring.java:298)
        at org.eclipse.jdt.internal.corext.fix.CleanUpRefactoring.createChange(CleanUpRefactoring.java:238)
        at org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:120)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1714)
        at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:86)
        at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:113)

"Worker-18" daemon prio=5 tid=0x06a31b70 nid=0xa28 in Object.wait() [788f000..788fd68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173)
        - locked <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:205)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-17" daemon prio=5 tid=0x06c054a0 nid=0xdac in Object.wait() [768f000..768fd68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173)
        - locked <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:205)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Text Viewer Hover Presenter" daemon prio=2 tid=0x06994550 nid=0x4b4 in Object.wait() [758f000..758fd68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x1572a9a0> (a java.lang.Object)
        at java.lang.Object.wait(Object.java:429)
        at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.getAST(ASTProvider.java:470)
        - locked <0x1572a9a0> (a java.lang.Object)
        at org.eclipse.jdt.internal.ui.text.java.hover.NLSStringHover.getHoverInfo(NLSStringHover.java:84)
        at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo(BestMatchHover.java:102)
        at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo(JavaEditorTextHoverProxy.java:69)
        at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:160)

"Worker-16" daemon prio=5 tid=0x067bde00 nid=0x4f8 in Object.wait() [748f000..748fd68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173)
        - locked <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:205)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-15" daemon prio=5 tid=0x067bc6f8 nid=0x580 in Object.wait() [738f000..738fd68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173)
        - locked <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:205)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-14" prio=5 tid=0x0665e330 nid=0xe24 in Object.wait() [618f000..618fd68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173)
        - locked <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:205)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-13" daemon prio=5 tid=0x033cd7f0 nid=0xab4 in Object.wait() [608f000..608fd68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173)
        - locked <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:205)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"YJP Listener Thread" daemon prio=5 tid=0x00a5f650 nid=0xd40 runnable [628f000..628fd68]
        at java.net.PlainSocketImpl.socketAccept(Native Method)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:353)
        - locked <0x15ecb258> (a java.net.PlainSocketImpl)
        at java.net.ServerSocket.implAccept(ServerSocket.java:448)
        at java.net.ServerSocket.accept(ServerSocket.java:419)
        at com.yourkit.b.a.a(a:142)
        at com.yourkit.b.a.run(a:133)

"Worker-10" daemon prio=5 tid=0x04257e68 nid=0xd2c waiting for monitor entry [5f8f000..5f8fd68]
        at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$3.run(SelectionListenerWithASTManager.java:142)
        - waiting to lock <0x1595fb90> (a java.lang.Object)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:58)

"Worker-9" daemon prio=5 tid=0x043611a0 nid=0xa48 in Object.wait() [5e8f000..5e8fd68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173)
        - locked <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:205)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-8" daemon prio=5 tid=0x04437638 nid=0xd10 in Object.wait() [5d8f000..5d8fd68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173)
        - locked <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:205)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-7" daemon prio=5 tid=0x04424158 nid=0xd4c waiting on condition [5c8f000..5c8fd68]
        at java.lang.Thread.sleep(Native Method)
        at org.eclipse.jdt.internal.core.search.processing.JobManager.performConcurrentJob(JobManager.java:245)
        at org.eclipse.jdt.internal.core.search.BasicSearchEngine.searchAllSecondaryTypeNames(BasicSearchEngine.java:789)
        at org.eclipse.jdt.internal.core.JavaModelManager.getSecondaryTypes(JavaModelManager.java:1476)
        at org.eclipse.jdt.internal.core.NameLookup.findSecondaryType(NameLookup.java:496)
        at org.eclipse.jdt.internal.core.NameLookup.findType(NameLookup.java:545)
        at org.eclipse.jdt.internal.core.SearchableEnvironment.find(SearchableEnvironment.java:85)
        at org.eclipse.jdt.internal.core.SearchableEnvironment.findType(SearchableEnvironment.java:188)
        at org.eclipse.jdt.internal.core.CancelableNameEnvironment.findType(CancelableNameEnvironment.java:45)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:119)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.Scope.getTypeOrPackage(Scope.java:2556)
        at org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2295)
        at org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding(SingleTypeReference.java:41)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:150)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType(TypeReference.java:107)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype(ClassScope.java:1106)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperclass(ClassScope.java:766)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy(ClassScope.java:946)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierarchy(CompilationUnitScope.java:266)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:195)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:226)
        at org.eclipse.jdt.internal.compiler.Compiler.accept(Compiler.java:225)
        at org.eclipse.jdt.core.dom.CompilationUnitResolver.accept(CompilationUnitResolver.java:147)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:131)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findImport(CompilationUnitScope.java:415)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findSingleImport(CompilationUnitScope.java:469)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.faultInImports(CompilationUnitScope.java:333)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.faultInTypes(CompilationUnitScope.java:402)
        at org.eclipse.jdt.core.dom.CompilationUnitResolver.resolve(CompilationUnitResolver.java:862)
        at org.eclipse.jdt.core.dom.CompilationUnitResolver.resolve(CompilationUnitResolver.java:498)
        at org.eclipse.jdt.core.dom.ASTParser.internalCreateAST(ASTParser.java:789)
        at org.eclipse.jdt.core.dom.ASTParser.createAST(ASTParser.java:588)
        at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider$1.run(ASTProvider.java:572)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
        at org.eclipse.core.runtime.Platform.run(Platform.java:785)
        at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.createAST(ASTProvider.java:569)
        at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.getAST(ASTProvider.java:493)
        at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$PartListenerGroup.calculateASTandInform(SelectionListenerWithAST
165)
        at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$3.run(SelectionListenerWithASTManager.java:142)
        - locked <0x1595fb90> (a java.lang.Object)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:58)

"Worker-6" daemon prio=5 tid=0x0442fce8 nid=0xcf0 waiting for monitor entry [5b8f000..5b8fd68]
        at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$3.run(SelectionListenerWithASTManager.java:142)
        - waiting to lock <0x1595fb90> (a java.lang.Object)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:58)

"Worker-5" daemon prio=5 tid=0x04421480 nid=0xefc waiting for monitor entry [5a8f000..5a8fd68]
        at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$3.run(SelectionListenerWithASTManager.java:142)
        - waiting to lock <0x1595fb90> (a java.lang.Object)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:58)

"Worker-4" daemon prio=5 tid=0x0438d670 nid=0xce0 in Object.wait() [598f000..598fd68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173)
        - locked <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:205)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-3" daemon prio=5 tid=0x033bbc60 nid=0xc94 waiting on condition [526f000..526fd68]
        at java.lang.Thread.sleep(Native Method)
        at org.eclipse.jdt.internal.core.search.processing.JobManager$1$ProgressJob.run(JobManager.java:323)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:58)

"org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=2 tid=0x043f2b60 nid=0x31c waiting on condition [588e000..588fd68]
        at java.lang.Thread.sleep(Native Method)
        at org.eclipse.jdt.internal.core.search.processing.JobManager.performConcurrentJob(JobManager.java:245)
        at org.eclipse.jdt.internal.core.search.BasicSearchEngine.searchAllSecondaryTypeNames(BasicSearchEngine.java:789)
        at org.eclipse.jdt.internal.core.JavaModelManager.getSecondaryTypes(JavaModelManager.java:1476)
        at org.eclipse.jdt.internal.core.NameLookup.findSecondaryType(NameLookup.java:496)
        at org.eclipse.jdt.internal.core.NameLookup.findType(NameLookup.java:545)
        at org.eclipse.jdt.internal.core.SearchableEnvironment.find(SearchableEnvironment.java:85)
        at org.eclipse.jdt.internal.core.SearchableEnvironment.findType(SearchableEnvironment.java:188)
        at org.eclipse.jdt.internal.core.CancelableNameEnvironment.findType(CancelableNameEnvironment.java:45)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:119)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.Scope.getTypeOrPackage(Scope.java:2556)
        at org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2295)
        at org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding(SingleTypeReference.java:41)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:150)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType(TypeReference.java:107)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype(ClassScope.java:1106)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperInterfaces(ClassScope.java:846)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchyWithoutMembers(ClassScope.java:979)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectHierarchyCycle(ClassScope.java:1095)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectHierarchyCycle(ClassScope.java:1006)
        at org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding(SingleTypeReference.java:44)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:150)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType(TypeReference.java:107)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype(ClassScope.java:1106)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperclass(ClassScope.java:766)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchyWithoutMembers(ClassScope.java:978)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectHierarchyCycle(ClassScope.java:1095)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectHierarchyCycle(ClassScope.java:1006)
        at org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding(SingleTypeReference.java:44)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:150)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType(TypeReference.java:107)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype(ClassScope.java:1106)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperclass(ClassScope.java:766)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchyWithoutMembers(ClassScope.java:978)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectHierarchyCycle(ClassScope.java:1095)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectHierarchyCycle(ClassScope.java:1006)
        at org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding(SingleTypeReference.java:44)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:150)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType(TypeReference.java:107)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype(ClassScope.java:1106)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperclass(ClassScope.java:766)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchyWithoutMembers(ClassScope.java:978)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectHierarchyCycle(ClassScope.java:1095)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectHierarchyCycle(ClassScope.java:1006)
        at org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding(SingleTypeReference.java:44)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:150)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType(TypeReference.java:107)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype(ClassScope.java:1106)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperclass(ClassScope.java:766)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchyWithoutMembers(ClassScope.java:978)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectHierarchyCycle(ClassScope.java:1095)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.detectHierarchyCycle(ClassScope.java:1006)
        at org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding(SingleTypeReference.java:44)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:150)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType(TypeReference.java:107)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype(ClassScope.java:1106)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperclass(ClassScope.java:766)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy(ClassScope.java:946)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierarchy(CompilationUnitScope.java:266)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:195)
        at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:302)
        at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:549)
        at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:608)
        at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:164)
        at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:227)
        at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:144)
        at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:69)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:720)
        at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:779)
        at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1098)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:97)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
        at org.eclipse.core.runtime.Platform.run(Platform.java:785)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:82)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.initialReconcile(JavaReconcilingStrategy.java:172)
        at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.initialReconcile(CompositeReconcilingStrategy.java:114)
        at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.initialReconcile(JavaCompositeReconcilingStrategy.java:120)
        at org.eclipse.jface.text.reconciler.MonoReconciler.initialProcess(MonoReconciler.java:103)
        at org.eclipse.jdt.internal.ui.text.JavaReconciler.initialProcess(JavaReconciler.java:328)
        - locked <0x15cfb878> (a java.lang.Object)
        at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:170)

"org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=2 tid=0x0439a7f0 nid=0x444 waiting on condition [572f000..572fd68]
        at java.lang.Thread.sleep(Native Method)
        at org.eclipse.jdt.internal.core.search.processing.JobManager.performConcurrentJob(JobManager.java:245)
        at org.eclipse.jdt.internal.core.search.BasicSearchEngine.searchAllSecondaryTypeNames(BasicSearchEngine.java:789)
        at org.eclipse.jdt.internal.core.JavaModelManager.getSecondaryTypes(JavaModelManager.java:1476)
        at org.eclipse.jdt.internal.core.NameLookup.findSecondaryType(NameLookup.java:496)
        at org.eclipse.jdt.internal.core.NameLookup.findType(NameLookup.java:545)
        at org.eclipse.jdt.internal.core.SearchableEnvironment.find(SearchableEnvironment.java:85)
        at org.eclipse.jdt.internal.core.SearchableEnvironment.findType(SearchableEnvironment.java:188)
        at org.eclipse.jdt.internal.core.CancelableNameEnvironment.findType(CancelableNameEnvironment.java:45)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:119)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.Scope.getTypeOrPackage(Scope.java:2556)
        at org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2295)
        at org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding(SingleTypeReference.java:41)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:150)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType(TypeReference.java:107)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype(ClassScope.java:1106)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperclass(ClassScope.java:766)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy(ClassScope.java:946)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierarchy(CompilationUnitScope.java:266)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:195)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:226)
        at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.accept(CompilationUnitProblemFinder.java:108)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:131)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findImport(CompilationUnitScope.java:415)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findSingleImport(CompilationUnitScope.java:469)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.faultInImports(CompilationUnitScope.java:333)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.faultInTypes(CompilationUnitScope.java:402)
        at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:562)
        at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:608)
        at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:164)
        at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:227)
        at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:144)
        at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:69)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:720)
        at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:779)
        at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1098)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:97)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
        at org.eclipse.core.runtime.Platform.run(Platform.java:785)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:82)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.initialReconcile(JavaReconcilingStrategy.java:172)
        at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.initialReconcile(CompositeReconcilingStrategy.java:114)
        at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.initialReconcile(JavaCompositeReconcilingStrategy.java:120)
        at org.eclipse.jface.text.reconciler.MonoReconciler.initialProcess(MonoReconciler.java:103)
        at org.eclipse.jdt.internal.ui.text.JavaReconciler.initialProcess(JavaReconciler.java:328)
        - locked <0x15741c70> (a java.lang.Object)
        at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:170)

"Java indexing" daemon prio=7 tid=0x0345c4d8 nid=0xc30 runnable [547f000..547fd68]
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at org.eclipse.core.internal.filesystem.local.LocalFile.openInputStream(LocalFile.java:313)
        at org.eclipse.core.internal.resources.ContentDescriptionManager$LazyFileInputStream.ensureOpened(ContentDescriptionManager.java:154)
        at org.eclipse.core.internal.resources.ContentDescriptionManager$LazyFileInputStream.read(ContentDescriptionManager.java:166)
        at java.io.InputStream.read(InputStream.java:89)
        at org.eclipse.core.internal.content.LazyInputStream.loadBlock(LazyInputStream.java:99)
        at org.eclipse.core.internal.content.LazyInputStream.ensureAvailable(LazyInputStream.java:64)
        at org.eclipse.core.internal.content.LazyInputStream.read(LazyInputStream.java:119)
        at org.eclipse.core.internal.content.TextContentDescriber.getByteOrderMark(TextContentDescriber.java:65)
        at org.eclipse.core.internal.content.TextContentDescriber.describe(TextContentDescriber.java:49)
        at org.eclipse.core.internal.content.ContentType.describe(ContentType.java:162)
        at org.eclipse.core.internal.content.ContentType.internalGetDescriptionFor(ContentType.java:459)
        at org.eclipse.core.internal.content.ContentTypeCatalog.getDescriptionFor(ContentTypeCatalog.java:314)
        at org.eclipse.core.internal.content.ContentTypeCatalog.getDescriptionFor(ContentTypeCatalog.java:318)
        at org.eclipse.core.internal.content.ContentTypeMatcher.getDescriptionFor(ContentTypeMatcher.java:86)
        at org.eclipse.core.internal.resources.ContentDescriptionManager.readDescription(ContentDescriptionManager.java:400)
        at org.eclipse.core.internal.resources.ContentDescriptionManager.getDescriptionFor(ContentDescriptionManager.java:339)
        - locked <0x15469e58> (a org.eclipse.core.internal.resources.ContentDescriptionManager)
        at org.eclipse.core.internal.resources.File.internalGetCharset(File.java:253)
        at org.eclipse.core.internal.resources.File.getCharset(File.java:214)
        at org.eclipse.core.internal.resources.File.getCharset(File.java:201)
        at org.eclipse.jdt.internal.core.search.JavaSearchDocument.getEncoding(JavaSearchDocument.java:66)
        at org.eclipse.jdt.internal.core.search.JavaSearchDocument.getCharContents(JavaSearchDocument.java:53)
        at org.eclipse.jdt.internal.core.search.indexing.SourceIndexer.indexDocument(SourceIndexer.java:75)
        at org.eclipse.jdt.internal.core.search.JavaSearchParticipant.indexDocument(JavaSearchParticipant.java:72)
        at org.eclipse.jdt.internal.core.search.indexing.IndexManager.indexDocument(IndexManager.java:297)
        at org.eclipse.jdt.internal.core.search.indexing.IndexManager$1.execute(IndexManager.java:608)
        at org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobManager.java:372)
        at java.lang.Thread.run(Thread.java:534)

"Worker-2" daemon prio=5 tid=0x040afea0 nid=0xbb8 waiting for monitor entry [49af000..49afd68]
        at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$3.run(SelectionListenerWithASTManager.java:142)
        - waiting to lock <0x1595fb90> (a java.lang.Object)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:58)

"Worker-1" daemon prio=5 tid=0x04031460 nid=0xb64 waiting on condition [48ae000..48afd68]
        at java.lang.Thread.sleep(Native Method)
        at org.eclipse.jdt.internal.core.search.processing.JobManager.performConcurrentJob(JobManager.java:245)
        at org.eclipse.jdt.internal.core.search.BasicSearchEngine.searchAllSecondaryTypeNames(BasicSearchEngine.java:789)
        at org.eclipse.jdt.internal.core.JavaModelManager.getSecondaryTypes(JavaModelManager.java:1476)
        at org.eclipse.jdt.internal.core.NameLookup.findSecondaryType(NameLookup.java:496)
        at org.eclipse.jdt.internal.core.NameLookup.findType(NameLookup.java:545)
        at org.eclipse.jdt.internal.core.SearchableEnvironment.find(SearchableEnvironment.java:85)
        at org.eclipse.jdt.internal.core.SearchableEnvironment.findType(SearchableEnvironment.java:188)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:119)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.Scope.getTypeOrPackage(Scope.java:2556)
        at org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2295)
        at org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding(SingleTypeReference.java:41)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:150)
        at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType(TypeReference.java:107)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype(ClassScope.java:1106)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperclass(ClassScope.java:766)
        at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy(ClassScope.java:946)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierarchy(CompilationUnitScope.java:266)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:251)
        at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.accept(HierarchyResolver.java:153)
        at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:131)
        at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findImport(CompilationUnitScope.java:415)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findSingleImport(CompilationUnitScope.java:469)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.faultInImports(CompilationUnitScope.java:333)
        at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.faultInTypes(CompilationUnitScope.java:402)
        at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.resolve(HierarchyResolver.java:667)
        at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.resolve(HierarchyResolver.java:485)
        at org.eclipse.jdt.internal.core.hierarchy.HierarchyBuilder.buildSupertypes(HierarchyBuilder.java:110)
        at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.build(IndexBasedHierarchyBuilder.java:130)
        at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.compute(TypeHierarchy.java:320)
        at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.refresh(TypeHierarchy.java:1255)
        - locked <0x17285d48> (a org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy)
        at org.eclipse.jdt.internal.core.CreateTypeHierarchyOperation.executeOperation(CreateTypeHierarchyOperation.java:90)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:720)
        at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:779)
        at org.eclipse.jdt.internal.core.SourceType.newSupertypeHierarchy(SourceType.java:701)
        at org.eclipse.jdt.internal.core.SourceType.newSupertypeHierarchy(SourceType.java:653)
        at org.eclipse.jdt.internal.corext.util.SuperTypeHierarchyCache.getTypeHierarchy(SuperTypeHierarchyCache.java:120)
        at org.eclipse.jdt.internal.corext.util.SuperTypeHierarchyCache.getTypeHierarchy(SuperTypeHierarchyCache.java:80)
        at org.eclipse.jdt.internal.corext.util.SuperTypeHierarchyCache.getMethodOverrideTester(SuperTypeHierarchyCache.java:89)
        at org.eclipse.jdt.ui.OverrideIndicatorLabelDecorator.getOverrideIndicators(OverrideIndicatorLabelDecorator.java:162)
        at org.eclipse.jdt.ui.OverrideIndicatorLabelDecorator.computeAdornmentFlags(OverrideIndicatorLabelDecorator.java:129)
        at org.eclipse.jdt.ui.OverrideIndicatorLabelDecorator.decorate(OverrideIndicatorLabelDecorator.java:261)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorDefinition.decorate(LightweightDecoratorDefinition.java:249)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorManager$LightweightRunnable.run(LightweightDecoratorManager.java:66)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
        at org.eclipse.core.runtime.Platform.run(Platform.java:785)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.decorate(LightweightDecoratorManager.java:323)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.getDecorations(LightweightDecoratorManager.java:309)
        at org.eclipse.ui.internal.decorators.DecorationScheduler$1.run(DecorationScheduler.java:292)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:58)

"Worker-0" daemon prio=5 tid=0x0352ee30 nid=0xb58 in Object.wait() [3faf000..3fafd68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173)
        - locked <0x127c40b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:205)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Start Level Event Dispatcher" daemon prio=5 tid=0x034bebe0 nid=0x920 in Object.wait() [399f000..399fd68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x127b2b90> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at java.lang.Object.wait(Object.java:429)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:349)
        - locked <0x127b2b90> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:287)

"Framework Event Dispatcher" daemon prio=5 tid=0x00a50e70 nid=0xb20 in Object.wait() [369f000..369fd68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x1279b910> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at java.lang.Object.wait(Object.java:429)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:349)
        - locked <0x1279b910> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:287)

"Signal Dispatcher" daemon prio=10 tid=0x00a237f0 nid=0xafc waiting on condition [0..0]

"Finalizer" daemon prio=9 tid=0x00a20510 nid=0x56c in Object.wait() [2f9f000..2f9fd68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x1277ba00> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
        - locked <0x1277ba00> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=10 tid=0x00a12f18 nid=0x568 in Object.wait() [2e9f000..2e9fd68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x1277ba68> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:429)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:115)
        - locked <0x1277ba68> (a java.lang.ref.Reference$Lock)

"main" prio=7 tid=0x00035ee0 nid=0x45c runnable [7e000..7fc3c]
        at org.eclipse.swt.internal.win32.OS.WaitMessage(Native Method)
        at org.eclipse.swt.widgets.Display.sleep(Display.java:3629)
        at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:154)
        at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:303)
        at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:843)
        at org.eclipse.ltk.ui.refactoring.RefactoringWizard.createChange(RefactoringWizard.java:571)
        at org.eclipse.ltk.ui.refactoring.RefactoringWizard.computeUserInputSuccessorPage(RefactoringWizard.java:414)
        at org.eclipse.ltk.ui.refactoring.UserInputWizardPage.computeSuccessorPage(UserInputWizardPage.java:75)
        at org.eclipse.ltk.ui.refactoring.UserInputWizardPage.getNextPage(UserInputWizardPage.java:115)
        at org.eclipse.jdt.internal.ui.fix.CleanUpRefactoringWizard$SelectCleanUpPage.getNextPage(CleanUpRefactoringWizard.java:261)
        at org.eclipse.jface.wizard.WizardDialog.nextPressed(WizardDialog.java:747)
        at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:345)
        at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:607)
        at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:90)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:906)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3241)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2861)
        at org.eclipse.jface.window.Window.runEventLoop(Window.java:808)
        at org.eclipse.jface.window.Window.open(Window.java:786)
        at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation$1.run(RefactoringWizardOpenOperation.java:131)
        at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
        at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:144)
        at org.eclipse.jdt.internal.ui.refactoring.actions.RefactoringStarter.activate(RefactoringStarter.java:40)
        at org.eclipse.jdt.internal.ui.actions.CleanUpAction.runOnMultiple(CleanUpAction.java:197)
        at org.eclipse.jdt.internal.ui.actions.CleanUpAction.run(CleanUpAction.java:96)
        at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:249)
        at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:225)
        at org.eclipse.jface.action.Action.runWithEvent(Action.java:492)
        at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:530)
        at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:480)
        at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:392)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:906)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3241)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2861)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1763)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1727)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:396)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143)
        at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:106)
        at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:109)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:167)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at org.eclipse.core.launcher.Main.invokeFramework(Main.java:338)
        at org.eclipse.core.launcher.Main.basicRun(Main.java:282)
        at org.eclipse.core.launcher.Main.run(Main.java:977)
        at org.eclipse.core.launcher.Main.main(Main.java:952)

"VM Thread" prio=5 tid=0x009cb0d0 nid=0x1e0 runnable

"VM Periodic Task Thread" prio=10 tid=0x00a2c668 nid=0xb0c waiting on condition
"Suspend Checker Thread" prio=10 tid=0x00a138b8 nid=0x600 runnable
Comment 13 Frederic Fusier CLA 2005-12-05 11:08:36 EST
Fixed and released in HEAD.

To summarize changes:
1) IJavaProject API methods findType(String), findType(String,WorkingCopyOwner), findType(String,String) and findType(String,String,WorkingCopyOwner) have been reverted to 3.1 behavior (ie. they do _not_ find secondary types).
2) 4 new corresponding API methods have added on IJavaProject which find 
   secondary types:
    - findType(String, IProgressMonitor)
    - findType(String, WorkingCopyOwner, IProgressMonitor)
    - findType(String, String, IProgressMonitor)
    - findType(String, String, WorkingCopyOwner, IProgressMonitor)
  Note that these methods wait for indexes to be ready before return the answer.
  Then we have a deterministic result but which may be delayed for a while if
  indexes are not ready.

NameLookup findType public internal methods have been modified to consider secondary types or not as well as to wait for indexes or not. For obvious performance potential issues, all JDT/Core tools (eg. code assist, reconciler, etc.) consider secondary types now but do _not_ wait for indexes...

I run performance tests and didn't get noticeable regression.

No test case added, just modify existing ones as they did not longer work with old findType API methods...
Comment 14 Jerome Lanneluc CLA 2005-12-13 11:59:21 EST
Verified for 3.2 M4 using build I20051213-0010
Comment 15 David Audel CLA 2007-04-03 06:17:01 EDT
*** Bug 5076 has been marked as a duplicate of this bug. ***