[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| 
Re: [platform-ui-dev] Lazy creating editors / Changes to getEditors().
 | 
Have appropriate bugs been opened in the affected components? Not all Eclipse 
developers are subscribed to this mailing list.
Also, were these changes included in today's (20020514) build?
Thanks,
- Jared
On Monday 13 May 2002 09:37 am, you wrote:
> In order to lazy create editors on startup some changes to org.eclipse.ui
> have happened. This changes will improve the startup time in case the user
> has many open editors and in case he has editors from different plugins.
>
> The API getEditors() was deprecated and the APIs getEditorReferences(),
> getDirtyEditors (convenience API) and findEditor(input) were added to
> IWorkbenchPage. To keep backward compatibility, getEditors() was changed
> to initialize/instanciate all editors before returning them. So
> getEditors() should be avoided otherwise the first caller will pay the
> time saved from the startup.
>
> The API getViews was deprecated as well. The intention is to lazy create
> views so that views hidden on a tab folder are not going to be
> instanciated until they are made visible. The API getViewReferences was
> added to IWorkbenchPage but the implementation has not changed yet.
>
> Here is a list of senders of getEditors() from Eclipse Platform and JDT. I
> have changed most of them in order to test it. It is important that these
> methods are changed specially if they get called on startup. Any operation
> that includes a call to getEditors may take seconds instead of
> milliseconds since it is going to activate plugins and create editors.
>
> Thanks.
> Eduardo.
>
> 1) run() - org.eclipse.ant.internal.ui.AntAction -> Use saveAllEditors
> instead.
> public void run() {
>         if (file == null)
>                 return;
>
>         // save the modified files if required by the user
>         if
> (AntUIPlugin.getPlugin().getPreferenceStore().getBoolean(IAntPreferenceCons
>tants.AUTO_SAVE)) {
>
> PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().saveAl
>lEditors(false); }
>
>         Project project = extractProject(file);
>         if (project == null)
>                 return;
>
>         AntLaunchWizard wizard = new AntLaunchWizard(project,file);
>         wizard.setNeedsProgressMonitor(true);
>         WizardDialog dialog = new
> WizardDialog(AntUIPlugin.getPlugin().getWorkbench().getActiveWorkbenchWindo
>w().getShell(),wizard); dialog.create();
>         dialog.open();
> }
>
> 2) getDirtyEditors() - org.eclipse.compare.internal.CompareUIPlugin: Use
> getDirtyEditors() instead of getEditors();
>         public static IEditorPart[] getDirtyEditors();
>
> 3) getDocument(IFile) - org.eclipse.compare.internal.EditionAction: Use
> findEditor instead
>         private IDocument getDocument(IFile file) {
>                 IWorkbench wb= PlatformUI.getWorkbench();
>                 if (wb == null)
>                         return null;
>                 IWorkbenchWindow[] ws= wb.getWorkbenchWindows();
>                 if (ws == null)
>                         return null;
>
>                 FileEditorInput test= new FileEditorInput(file);
>
>                 for (int i= 0; i < ws.length; i++) {
>                         IWorkbenchWindow w= ws[i];
>                         IWorkbenchPage[] wps= w.getPages();
>                         if (wps != null) {
>                                 for (int j= 0; j < wps.length; j++) {
>                                         IWorkbenchPage wp= wps[j];
>                                         IEditorPart ep =
> wp.findEditor(test);
>                                         if (ep != null && ep instanceof
> ITextEditor) {
>                                                 ITextEditor te=
> (ITextEditor) ep;
>                                                 IDocumentProvider dp=
> te.getDocumentProvider();
>                                                 if (dp != null) {
>                                                         IDocument doc=
> dp.getDocument(ep.getEditorInput());
>                                                         if (doc != null)
>                                                         return doc;
>                                                 }
>                                         }
>                                 }
>                         }
>                 }
>                 return null;
>         }
>
>
> 4) openEditorAndSetMarker(IEditorInput, String, int, int, int) -
> org.eclipse.debug.internal.ui.views.LaunchView (2 matches)
>         page.getEditorReferences();
> 5) saveState(IMemento) - org.eclipse.debug.internal.ui.views.LaunchView
>         page.getEditorReferences();
> 6) linkToEditor(IStructuredSelection) -
> org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart
>         create inputs and use findEditor(IEditorInput) instead
> 7) isOpenInEditor(Object) -
> org.eclipse.jdt.internal.ui.javaeditor.EditorUtility
>         public static IEditorPart isOpenInEditor(Object inputElement) {
>                 IEditorInput input= null;
>
>                 try {
>                         input= getEditorInput(inputElement);
>                 } catch (JavaModelException x) {
>                         JavaPlugin.log(x.getStatus());
>                 }
>
>                 if (input != null) {
>                         IWorkbenchPage p=
> JavaPlugin.getDefault().getActivePage();
>                         if (p != null) {
>                                 return p.findEditor(input);
>                         }
>                 }
>
>                 return null;
>         }
> 8) getDirtyEditors() - org.eclipse.jdt.internal.ui.JavaPlugin
>         Use getDirtyEditors instead of getEditors()
> 9) linkToEditor(IStructuredSelection) -
> org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart
>         Use findEditor instead
> 10) selectAndReveal(Object) -
> org.eclipse.jdt.internal.ui.refactoring.RefactoringSupportFactory.RenameSup
>port IEditorReference refs[] = page.getEditorReferences();
>         for (int i = 0; i < refs.length; i++) {
>                 if(refs[i].getPart(false) != null)
>                         parts.add(refs[i].getPart(false));
>         }
> 11) showInEditor(IMarker, IWorkbenchPage, IEditorInput, String) -
> org.eclipse.jdt.internal.ui.search.GotoMarkerAction
>         private void showInEditor(IMarker marker, IWorkbenchPage page,
> IEditorInput input, String editorId) {
>                 IEditorPart editor= page.findEditor(input);
>                 if (editor == null) {
>                         if (fEditor != null && !fEditor.isDirty())
>                                         page.closeEditor(fEditor, false);
>                         try {
>                                 editor= page.openEditor(input, editorId,
> false);
>                         } catch (PartInitException ex) {
>                                 ExceptionHandler.handle(ex,
> SearchMessages.getString("Search.Error.openEditor.title"),
> SearchMessages.getString("Search.Error.openEditor.message"));
> //$NON-NLS-2$ //$NON-NLS-1$
>                                 return;
>                         }
>                 } else {
>                         page.bringToTop(editor);
>                 }
>                 if (editor != null) {
>                         editor.gotoMarker(marker);
>                         fEditor = editor;
>                 }
>         }
> 12) getEditors() - org.eclipse.jdt.internal.ui.search.SearchUtil
>         public static IEditorPart[] getEditors() {
>                 final Set inputs= new HashSet(7);
>                 final List result= new ArrayList(0);
>                 IWorkbench workbench=
> JavaPlugin.getDefault().getWorkbench();
>                 IWorkbenchWindow[] windows=
> workbench.getWorkbenchWindows();
>                 for (int i= 0; i < windows.length; i++) {
>                         IWorkbenchPage[] pages= windows[i].getPages();
>                         for (int x= 0; x < pages.length; x++) {
>                                 IEditorReference[] editors=
> pages[x].getEditorReferences();
>                                 for (int z= 0; z < editors.length; z++) {
>                                         IEditorPart editor=
> editors[z].getEditor(false);
>                                         if(editor == null)
>                                                 continue;
>                                         IEditorInput input=
> editor.getEditorInput();
>                                         if (!inputs.contains(input)) {
>                                                 inputs.add(input);
>                                                 result.add(editor);
>                                         }
>                                 }
>                         }
>                 }
>                 return (IEditorPart[])result.toArray(new
> IEditorPart[result.size()]);
>         }
> 13) getDirtyEditors() -
> org.eclipse.search.internal.core.text.TextSearchVisitor
>         Use getDirtyEditors() instead of getEditors()
> 14) showWithReuse(IMarker) -
> org.eclipse.search.internal.ui.text.GotoMarkerAction
>         Use findEditor instead of getEditors();
> _______________________________________________
> platform-ui-dev mailing list
> platform-ui-dev@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/platform-ui-dev