Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 311569

Summary: [performance][explorer] expanding JavaScript Resources node is unbearably slow
Product: [WebTools] JSDT Reporter: Nitin Dahyabhai <thatnitind>
Component: GeneralAssignee: Nitin Dahyabhai <thatnitind>
Status: RESOLVED FIXED QA Contact: Nitin Dahyabhai <thatnitind>
Severity: major    
Priority: P3 Keywords: performance
Version: 3.2   
Target Milestone: 3.2 RC1   
Hardware: All   
OS: All   
Whiteboard:
Attachments:
Description Flags
proposed patch none

Description Nitin Dahyabhai CLA 2010-05-04 11:24:04 EDT
The common navigator is asking whether each of the elements in the JavaScript Resources node has children, which is severely not optimized, and ends up reading files to answer the call.

Thread [main] (Suspended)	
	FileInputStream.open(String) line: not available [native method]	
	FileInputStream.<init>(File) line: 106	
	Util.getFileCharContent(File, String) line: 77	
	ClassFile.getContents() line: 848	
	SourceElementParser(Parser).parse(ICompilationUnit, CompilationResult, int, int) line: 5973	
	SourceElementParser(Parser).parse(ICompilationUnit, CompilationResult) line: 5942	
	SourceElementParser.parseCompilationUnit(ICompilationUnit, boolean) line: 1310	
	ClassFile.buildStructure(OpenableElementInfo, IProgressMonitor, Map, IResource) line: 173	
	ClassFile(Openable).generateInfos(Object, HashMap, IProgressMonitor) line: 241	
	ClassFile(JavaElement).openWhenClosed(Object, IProgressMonitor) line: 538	
	ClassFile(JavaElement).getElementInfo(IProgressMonitor) line: 282	
	ClassFile(JavaElement).getElementInfo() line: 268	
	ClassFile(JavaElement).getChildren() line: 216	
	JavaNavigatorContentProvider(PackageExplorerContentProvider).getContainerPackageFragmentRoots(PackageFragmentRootContainer, boolean, NamespaceGroup) line: 684	
	JavaNavigatorContentProvider(PackageExplorerContentProvider).getChildren(Object) line: 292	
	JavaNavigatorContentProvider.getChildren(Object) line: 154	
	JavaNavigatorContentProvider(StandardJavaScriptElementContentProvider).hasChildren(Object) line: 284	
	JavaNavigatorContentProvider.hasChildren(Object) line: 140	
	SafeDelegateTreeContentProvider.hasChildren(Object) line: 110	
	NavigatorContentServiceContentProvider.callNormalHasChildren(Object, Object, SafeDelegateTreeContentProvider) line: 428	
	NavigatorContentServiceContentProvider.access$4(NavigatorContentServiceContentProvider, Object, Object, SafeDelegateTreeContentProvider) line: 423	
	NavigatorContentServiceContentProvider$3.run() line: 393	
	SafeRunner.run(ISafeRunnable) line: 42	
	NavigatorContentServiceContentProvider.hasChildren(Object) line: 379	
	NavigatorContentServiceContentProvider.hasChildren(TreePath) line: 420	
	SDFilteredTree$SDNotifyingTreeViewer(AbstractTreeViewer).isExpandable(Object) line: 2064	
	SDFilteredTree$SDNotifyingTreeViewer(TreeViewer).isExpandable(Object) line: 588	
	SDFilteredTree$SDNotifyingTreeViewer.isExpandable(Object) line: 335	
	SDFilteredTree$SDNotifyingTreeViewer(AbstractTreeViewer).isExpandable(Item, TreePath, Object) line: 2094	
	SDFilteredTree$SDNotifyingTreeViewer(AbstractTreeViewer).updatePlus(Item, Object) line: 2776	
	SDFilteredTree$SDNotifyingTreeViewer(TreeViewer).updatePlus(Item, Object) line: 848	
	SDFilteredTree$SDNotifyingTreeViewer(AbstractTreeViewer).createTreeItem(Widget, Object, int) line: 812	
	AbstractTreeViewer$1.run() line: 786	
	BusyIndicator.showWhile(Display, Runnable) line: 70	
	SDFilteredTree$SDNotifyingTreeViewer(AbstractTreeViewer).createChildren(Widget) line: 760	
	SDFilteredTree$SDNotifyingTreeViewer(TreeViewer).createChildren(Widget) line: 640	
	SDFilteredTree$SDNotifyingTreeViewer(AbstractTreeViewer).handleTreeExpand(TreeEvent) line: 1426	
	SDFilteredTree$SDNotifyingTreeViewer(TreeViewer).handleTreeExpand(TreeEvent) line: 948	
	SDFilteredTree$SDNotifyingTreeViewer.superExpandTree(TreeEvent) line: 191	
	SDFilteredTree$SDNotifyingTreeViewer.access$2(SDFilteredTree$SDNotifyingTreeViewer, TreeEvent) line: 187	
	SDFilteredTree$SDNotifyingTreeViewer$HandleTreeExpandJob.runInUIThread(IProgressMonitor) line: 133	
	UIJob$1.run() line: 95	
	RunnableLock.run() line: 35	
	UISynchronizer(Synchronizer).runAsyncMessages(boolean) line: 134	
	Display.runAsyncMessages(boolean) line: 4041	
	Display.readAndDispatch() line: 3660	
	Workbench.runEventLoop(Window$IExceptionHandler, Display) line: 2601	
	Workbench.runUI() line: 2565	
	Workbench.access$4(Workbench) line: 2399	
	Workbench$7.run() line: 669	
	Realm.runWithDefault(Realm, Runnable) line: 332	
	Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 662	
	PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 149	
	IDEApplication.start(IApplicationContext) line: 115	
	EclipseAppHandle.run(Object) line: 196	
	EclipseAppLauncher.runApplication(Object) line: 110	
	EclipseAppLauncher.start(Object) line: 79	
	EclipseStarter.run(Object) line: 369	
	EclipseStarter.run(String[], Runnable) line: 179	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25	
	Method.invoke(Object, Object...) line: 597	
	Main.invokeFramework(String[], URL[]) line: 619	
	Main.basicRun(String[]) line: 574	
	Main.run(String[]) line: 1407	
	Main.main(String[]) line: 1383
Comment 1 Nitin Dahyabhai CLA 2010-05-04 11:26:53 EDT
Created attachment 166969 [details]
proposed patch
Comment 2 Nitin Dahyabhai CLA 2010-05-04 11:27:43 EDT
Applied