Bug 27294

Summary: Performance - getTypeSignature should not rescan element names
Product: [Eclipse Project] JDT Reporter: Philipe Mulet <philippe_mulet>
Component: CoreAssignee: Jerome Lanneluc <jerome_lanneluc>
Status: VERIFIED FIXED QA Contact:
Severity: critical    
Priority: P3 CC: akiezun
Version: 2.1Keywords: performance
Target Milestone: 2.1 M4   
Hardware: PC   
OS: Windows 2000   
Whiteboard:

Description Philipe Mulet CLA 2002-11-28 06:00:25 EST
Build 2.1-M3

Accessing the signature of a field member uses a public Signature entry point, 
and thus ends up rescanning the signature to check it is valid.
However, since it came through an info, it is guaranteed to be already correct.

Trusted clients should benefit from priviledged signature computation.

==================
        at org.eclipse.jdt.internal.compiler.parser.Scanner.<init>
(Scanner.java:134)
        at org.eclipse.jdt.internal.compiler.parser.Scanner.<init>
(Scanner.java:169)
        at org.eclipse.jdt.core.Signature.createCharArrayTypeSignature
(Signature.java:438)
        at org.eclipse.jdt.core.Signature.createTypeSignature
(Signature.java:417)
        at org.eclipse.jdt.internal.core.SourceFieldElementInfo.getTypeSignature
(SourceFieldElementInfo.java:51)
        at org.eclipse.jdt.internal.core.SourceField.getTypeSignature
(SourceField.java:55)
        at 
org.eclipse.jdt.internal.ui.viewsupport.JavaElementLabels.getFieldLabel
(JavaElementLabels.java:426)
        at 
org.eclipse.jdt.internal.ui.viewsupport.JavaElementLabels.getElementLabel
(JavaElementLabels.java:295)
        at 
org.eclipse.jdt.internal.ui.viewsupport.JavaElementLabels.getElementLabel
(JavaElementLabels.java:272)
        at 
org.eclipse.jdt.internal.ui.viewsupport.JavaElementLabels.getTextLabel
(JavaElementLabels.java:257)
        at org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider.getText
(JavaUILabelProvider.java:118)
        at org.eclipse.jface.viewers.DecoratingLabelProvider.getText
(DecoratingLabelProvider.java:100)
        at org.eclipse.jface.viewers.TreeViewer.doUpdateItem(TreeViewer.java:82)
        at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem
(AbstractTreeViewer.java:353)
        at org.eclipse.jface.viewers.StructuredViewer.updateItem
(StructuredViewer.java:1132)
        at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh
(AbstractTreeViewer.java:833)
        at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh
(AbstractTreeViewer.java:847)
        at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh
(AbstractTreeViewer.java:847)
        at org.eclipse.jface.viewers.AbstractTreeViewer.labelProviderChanged
(AbstractTreeViewer.java:935)
        at org.eclipse.jface.viewers.ContentViewer.handleLabelProviderChanged
(ContentViewer.java:155)
        at org.eclipse.jface.viewers.StructuredViewer.handleLabelProviderChanged
(StructuredViewer.java:524)
        at 
org.eclipse.jdt.internal.ui.javaeditor.JavaOutlinePage$JavaOutlineViewer.handleL
abelProviderChanged(JavaOutlinePage.java:635)
        at org.eclipse.jface.viewers.ContentViewer$1.labelProviderChanged
(ContentViewer.java:68)
        at org.eclipse.ui.internal.DecoratorManager.fireListeners
(DecoratorManager.java:141)
        at org.eclipse.ui.internal.DecoratorManager.labelProviderChanged
(DecoratorManager.java:431)
        at org.eclipse.jface.viewers.LabelProvider.fireLabelProviderChanged
(LabelProvider.java:54)
        at org.eclipse.team.internal.ccvs.ui.CVSDecorator.access$2
(CVSDecorator.java:1)
        at org.eclipse.team.internal.ccvs.ui.CVSDecorator$3.run
(CVSDecorator.java:406)
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:31)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages
(Synchronizer.java:94)
        - locked <07BD91D8> (a org.eclipse.swt.widgets.RunnableLock)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:1669)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1414)
        at org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.runEventLoop
(EventLoopProgressMonitor.java:88)
        at org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.subTask
(EventLoopProgressMonitor.java:118)
        at org.eclipse.core.runtime.ProgressMonitorWrapper.subTask
(ProgressMonitorWrapper.java:120)
        at org.eclipse.core.runtime.SubProgressMonitor.subTask
(SubProgressMonitor.java:161)
        at org.eclipse.core.internal.resources.Workspace.endOperation
(Workspace.java:890)
        at org.eclipse.core.internal.resources.Workspace.run
(Workspace.java:1585)
        at org.eclipse.ui.actions.WorkspaceModifyOperation.run
(WorkspaceModifyOperation.java:79)
        - locked <0760E278> (a org.eclipse.ui.texteditor.AbstractTextEditor$10)
        at org.eclipse.ui.texteditor.AbstractTextEditor.performSaveOperation
(AbstractTextEditor.java:2596)
        at 
org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.performSaveOperatio
n(CompilationUnitEditor.java:799)
        at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSave
(CompilationUnitEditor.java:849)
        - locked <052D8F08> (a org.eclipse.jdt.internal.core.WorkingCopy)
        at org.eclipse.ui.internal.EditorManager$11.run(EditorManager.java:1015)
        at org.eclipse.ui.internal.EditorManager$8.run(EditorManager.java:884)
        at org.eclipse.jface.operation.ModalContext.runInCurrentThread
(ModalContext.java:296)
        at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:246)
        at org.eclipse.jface.window.ApplicationWindow$1.run
(ApplicationWindow.java:391)
        at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:65)
        at org.eclipse.jface.window.ApplicationWindow.run
(ApplicationWindow.java:388)
        at org.eclipse.ui.internal.WorkbenchWindow.run
(WorkbenchWindow.java:1146)
        at org.eclipse.ui.internal.EditorManager.runProgressMonitorOperation
(EditorManager.java:890)
        at org.eclipse.ui.internal.EditorManager.saveEditor
(EditorManager.java:1020)
        at org.eclipse.ui.internal.WorkbenchPage.saveEditor
(WorkbenchPage.java:2050)
        at org.eclipse.ui.internal.SaveAction.run(SaveAction.java:30)
        at org.eclipse.jface.action.Action.runWithEvent(Action.java:769)
        at org.eclipse.ui.internal.WWinKeyBindingService.invoke
(WWinKeyBindingService.java:138)
        at org.eclipse.ui.internal.WWinKeyBindingService.pressed
(WWinKeyBindingService.java:119)
        at org.eclipse.ui.internal.WWinKeyBindingService$5.widgetSelected
(WWinKeyBindingService.java:366)
        at org.eclipse.ui.internal.AcceleratorMenu$2.handleEvent
(AcceleratorMenu.java:55)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:77)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:825)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:1692)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1410)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1435)
        at org.eclipse.ui.internal.Workbench.run(Workbench.java:1418)
        at org.eclipse.core.internal.boot.InternalBootLoader.run
(InternalBootLoader.java:831)
        at org.eclipse.core.boot.BootLoader.run(BootLoader.java:462)
        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.basicRun(Main.java:247)
        at org.eclipse.core.launcher.Main.run(Main.java:703)
        at org.eclipse.core.launcher.Main.main(Main.java:539)
Comment 1 Philipe Mulet CLA 2002-11-29 08:59:45 EST
*** Bug 27330 has been marked as a duplicate of this bug. ***
Comment 2 Adam Kiezun CLA 2002-12-03 08:57:18 EST
this would be a nice improvement
calls to Scanner() (via getTypeSignature) account for 23% of time needed to 
open a java editor
Comment 3 Jerome Lanneluc CLA 2002-12-04 12:04:25 EST
Changed implementation to not use Scanner at all and to not create unneeded 
objects.
Comment 4 David Audel CLA 2002-12-18 09:41:44 EST
Verified.