| <!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en"><html><head> |
| <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> |
| <meta name="GENERATOR" content="Mozilla/4.76 [en] (Windows NT 5.0; U) [Netscape]"><title>Plug-in Separation Notes</title></head><body> |
| |
| <center> |
| <h1> |
| Splitting org.eclipse.ui</h1></center> |
| |
| <center> |
| <address> Kai-Uwe Maetzel, Daniel Megert</address> |
| <address>23th September 2002</address> |
| <address></address> |
| </center> |
| |
| <h3> |
| Overview</h3> |
| This documents describes how the plug-in <tt>org.eclipse.ui</tt> |
| is split into a combination of plug-ins and fragments. There are three |
| major reasons for splitting the plug-in: |
| <ul> |
| <li> |
| introduce a UI independent text infrastructure</li> |
| |
| <li> |
| decouple the build processes of Platform Text and Platform UI</li> |
| |
| <li> |
| prepare Platform UI to achieve the following midterm goals:</li> |
| |
| <ul> |
| <li> |
| using SWT/JFace for building Eclipse independent applications</li> |
| |
| <li> |
| free the workbench from dependencies from IResource</li> |
| |
| <li> |
| provide the IResource dependent standard components of the workbench as |
| a separate plug-in</li> |
| </ul> |
| </ul> |
| |
| <h3> |
| State of Splitting</h3> |
| The new structure is not yet final. It is a starting point for the Platform |
| UI team and the Platform Text team to evolve the system towards a stable |
| and mature structure. It is expected that the number of plug-ins and fragments |
| can be kept stable whereas package fragments and classes will probably |
| be moved around. For now, the UI independent text infrastructure (org.eclipse.text) should |
| be considered the only new plug-in that can be listed as prerequisite and |
| that offers API. The other plug-ins and fragments are for now implementation |
| details of <tt>org.eclipse.ui</tt>. This will change as the structure becomes |
| more stable i.e. some of the new plug-ins will become API. |
| <h3> |
| Structure</h3>Splitting as been guided by the approach to consider |
| plug-ins as packaging units and therefore to use plug-ins only when an according |
| packaging can be anticipated. Thus, classes that are expected to be shipped |
| together should not be in different plug-ins. This approach keeps the class |
| loading overhead caused by the splitting lower than putting every possible |
| unit into its own plug-in. Classes of a plug-in and its fragments are loaded |
| by the same class loader. Taking this approach we end up having six plug-ins |
| and two fragments.<ul> |
| <li> |
| <b>org.eclipse.text (owned by Platform Text)</b></li> |
| |
| <ul> |
| <li> |
| contains the UI independent text infrastructure, i.e., IDocument and its satellites</li> |
| |
| <li> |
| no prerequisites</li> |
| </ul> |
| |
| <li> |
| <b>org.eclipse.jface (owned by Platform UI)</b></li> |
| |
| <ul> |
| <li> |
| contains everything of JFace that does not depend on IProgressMonitor and |
| IStatus</li> |
| |
| <li>plugin.xml requires:</li> |
| <ul> |
| <li>org.apache.xerces</li> |
| |
| <li>org.eclipse.swt (needs to be exported)<br> |
| </li> |
| </ul> |
| <li> |
| build path dependencies:<br> |
| </li> |
| |
| |
| <ul> |
| <li> |
| org.apache.xerces</li> |
| |
| <li> |
| org.eclipse.swt (needs to be exported)</li> |
| </ul> |
| </ul> |
| |
| <li> |
| <b>org.eclipse.jface.text (Fragment of org.eclipse.jface owned by Platform |
| Text)</b></li> |
| |
| <ul> |
| <li> |
| contains the UI part of the text infrastructure, i.e. TextViewer and its satellites</li> |
| |
| <li> |
| needs to be further cleaned up to remove any dependency on <tt>IProgressMonitor</tt></li><li>plugin.xml requires:</li> |
| <ul> |
| <li>org.eclipse.text<br> |
| </li> |
| </ul> |
| |
| |
| <li>buildpath dependencies:</li> |
| |
| <ul> |
| <li>org.eclipse.jface<br> |
| </li><li> |
| org.eclipse.text</li> |
| |
| |
| <li> |
| org.eclipse.core.runtime</li> |
| </ul> |
| </ul> |
| |
| <li> |
| <b>org.eclipse.ui.workbench (owned by Platform UI)</b></li> |
| |
| <ul> |
| <li> |
| contains Workbench UI framework and the "empty" workbench</li> |
| |
| <li>plugin.xml requires:</li> |
| <ul> |
| <li>org.apache.xerces</li> |
| <li>org.eclipse.core.resources</li> |
| <li>org.eclipse.update.core</li> |
| <li>org.eclipse.help</li> |
| |
| <li>org.eclipse.jface<br> |
| </li> |
| </ul> |
| <li> |
| build path dependencies:<br> |
| </li> |
| |
| |
| <ul> |
| <li> |
| org.apache.xerces</li> |
| |
| <li> |
| org.eclipse.core.boot</li> |
| <li> |
| org.eclipse.core.runtime</li> |
| |
| |
| <li> |
| org.eclipse.core.resources</li> |
| |
| <li> |
| org.eclipse.update.core</li> |
| |
| <li> |
| org.eclipse.help</li> |
| |
| |
| |
| <li> |
| org.eclipse.jface</li> |
| <li>org.eclipse.jface.text<br> |
| </li> |
| |
| </ul> |
| </ul> |
| |
| <li> |
| <b>org.eclipse.ui.workbench.texteditor (Fragment of org.eclipse.workbench |
| owned by Platform Text)</b></li> |
| |
| <ul> |
| <li> |
| contains the text editor framework except three TaskList dependent actions</li><li>plugin.xml requires:</li> |
| <ul> |
| <li> |
| org.eclipse.text</li> |
| </ul> |
| |
| |
| <li> |
| build path dependencies:<br> |
| </li> |
| |
| |
| <ul> |
| <li> |
| org.eclipse.ui.workbench</li> |
| |
| <li> |
| org.eclipse.jface</li> |
| |
| <li> |
| org.eclipse.jface.text</li> |
| |
| |
| |
| <li> |
| org.eclipse.text</li> |
| |
| <li> |
| org.eclipse.core.runtime</li> |
| |
| <li> |
| org.eclipse.core.resources</li> |
| </ul> |
| </ul> |
| |
| <li> |
| <b>org.eclipse.ui.views (owned by Platform UI)</b></li> |
| |
| <ul> |
| <li> |
| contains all the standard view like Navigator and Task List</li><li>plugin.xml requires:</li> |
| <ul> |
| <li>org.eclipse.core.resources</li> |
| <li>org.eclipse.help</li> |
| |
| <li>org.eclipse.jface</li> |
| <li>org.eclipse.ui.workbench<br> |
| </li> |
| </ul> |
| |
| |
| <li> |
| build path dependencies:<br> |
| </li> |
| |
| |
| <ul> |
| <li> |
| org.eclipse.core.resources</li> |
| |
| <li> |
| org.eclipse.core.runtime</li> |
| |
| <li> |
| org.eclipse.help</li> |
| |
| <li> |
| org.eclipse.jface</li> |
| |
| <li> |
| org.eclipse.ui.workbench</li> |
| </ul> |
| </ul> |
| |
| <li> |
| <b>org.eclipse.ui.editors (owned by Platform Text)</b></li> |
| |
| <ul> |
| <li> |
| contains the default text editor plus a few common but Task List dependent |
| actions</li><li>plugin.xml requires:</li> |
| <ul> |
| <li>org.eclipse.ui.views</li> |
| <li>org.eclipse.ui.workbench</li> |
| <li>org.eclipse.jface<br> |
| </li> |
| <li>org.eclipse.core.resources</li> |
| <li>org.eclipse.text</li> |
| <li>org.eclipse.update.core<br> |
| </li> |
| </ul> |
| |
| |
| <li> |
| build path dependencies:<br> |
| </li> |
| |
| |
| <ul> |
| <li> |
| org.eclipse.ui.views</li> |
| <li> |
| org.eclipse.ui.workbench</li> |
| <li> |
| org.eclipse.ui.workbench.texteditor</li> |
| |
| |
| <li> |
| org.eclipse.core.resources</li> |
| |
| <li> |
| org.eclipse.core.runtime</li><li>org.eclipse.core.boot<br> |
| </li> |
| |
| |
| <li> |
| org.eclipse.jface</li> |
| |
| <li> |
| org.eclipse.jface.text</li> |
| |
| <li> |
| org.eclipse.text</li><li>org.eclipse.update.core<br> |
| </li> |
| |
| </ul> |
| </ul> |
| |
| <li> |
| <b>org.eclipse.ui (owned by Platform UI)</b></li> |
| |
| <ul> |
| <li> |
| ensures backward compatibility</li> |
| |
| <li> |
| defines all extension points and contributions</li> |
| |
| <li> |
| build path dependencies:<br> |
| </li> |
| <ul> |
| <li> |
| requires and <i>exports</i> all of the above components</li> |
| <li>org.eclipse.swt (needs to be exported in build path and plugin.xml)</li> |
| <li>org.eclipse.core.runtime<br> |
| </li> |
| </ul> |
| |
| </ul> |
| </ul> |
| |
| <h3> |
| Required Changes</h3> |
| |
| <ul> |
| <li> |
| The Workbench plug-in contains a <tt>SystemSummaryEditor</tt><i> </i>which |
| depends on editor. To fix this the system summary editor and its |
| content provider have been moved to the <b>org.eclipse.ui.editors </b>plug-in |
| while the <tt>SystemSummaryEditorInput</tt> and the <tt>SystemSummaryEditorInputFactory</tt> |
| go to the <b>org.eclipse.ui.workbench</b> plug-in. The system summary editor |
| ID ("<tt>org.eclipse.ui.SystemSummaryEditor</tt>") used in <tt>Workbench.openSystemSummaryEditor()</tt> |
| must be declared inside <tt>Workbench. |
| </tt>In addition this method should |
| show a dialog if the editor for this ID can not be found.</li> |
| |
| <li> |
| Some CUs have unused imports which cause errors. Removing the unused imports |
| solves this problem.</li> |
| |
| <li> |
| The wizards have to be moved from standard components to the <b>org.eclipse.workbench</b> |
| plug-in. The resulting <b>org.eclipse.views</b> plug-in only contains views.</li> |
| |
| <li> |
| The <tt>ResourceSorter</tt> must be <i>copied</i> from the navigator package |
| to the dialogs package in <b>org.eclipse.views</b>. This is needed |
| to break the link from <b>org.eclipse.ui.workbench</b> to <b>org.eclipse.ui.views.</b> |
| Having a navigator package in the workbench plug-in is no option.</li> |
| |
| <li> |
| The visibility of several classes had to be changed from package visible |
| to public because of the resulting package fragments scattered over different |
| plug-ins. Examples are:</li> |
| |
| <ul> |
| <li> |
| <tt>org.eclipse.ui.internal.PlatformUIPreferenceListener</tt></li> |
| |
| <li> |
| <tt>org.eclipse.jface.text.TextUtilities</tt></li> |
| |
| <li> |
| all fields of <tt>org.eclipse.jface.text.DocumentEvent</tt></li> |
| </ul> |
| |
| <li> |
| <tt>org.eclipse.jface.text.DefaultLineTracker </tt>had to be changed to |
| not use SWT constants</li> |
| |
| <li> |
| The text editor framework of org.eclipse.ui.workbench.texteditor may not |
| depend on a view such as the task list. The package must be split and |
| the task list dependent part goes into the <b>org.eclipse.ui.editors</b> plug-in. NLSing has to be split as well.</li> |
| </ul> |
| The following changes need to be made in order to get a JFace framework |
| which only depends on SWT: |
| <ul> |
| <li> |
| move progress monitor code to <b>org.eclipse.ui.workbench</b>:</li> |
| |
| <ul> |
| <li> |
| move <i><tt>wizard</tt> package</i> to <b>org.eclipse.ui.workbench</b> |
| (due to <tt>IProgressMonitor</tt>)</li> |
| </ul> |
| |
| <ul> |
| <li> |
| move <i><tt>operation</tt> package</i> to <b>org.eclipse.ui.workbench</b> |
| (due to <tt>IProgressMonitor</tt>)</li> |
| </ul> |
| |
| <ul> |
| <li> |
| move <i><tt>org.eclipse.jface.window.ApplicationWindow</tt></i> to <b>org.eclipse.ui.workbench</b> |
| (due to <tt>IStatus</tt> and <tt>NullProgressMonitor</tt>)</li> |
| </ul> |
| |
| <li> |
| move <i><tt>org.eclipse.jface.util.SafeRunnable</tt></i> to <b>org.eclipse.workbench</b> |
| (due to <tt>ISafeRunnable</tt>)</li> |
| |
| <li> |
| move <i><tt>org.eclipse.jface.dialogs.ErrorDialog</tt></i> to <b>org.eclipse.workbench</b> |
| (due to <tt>IStatus</tt>)</li> |
| </ul> |
| Note: There remains a dependency to <b>Xcerces</b> due to <i><tt>org.eclipse.jface.dialogs.DialogSettings</tt></i>. |
| <br> |
| <h3> |
| Open Issues</h3> |
| |
| <ul> |
| <li> |
| <tt>Workbench.openSystemSummaryEditor()</tt> use a predefined editor id |
| for the system summary editor. The <tt>SystemSummaryEditor</tt> registers |
| itself under this id. This introduces an implicit upward reference.</li> |
| |
| <li> |
| Because some calls |
| can't be redirected due to their <i>final</i> declaration corresponding <i>stored preferences</i> might get lost .</li> |
| |
| <li> |
| The source folder names are preserved. In the future a source folder can be renamed to |
| "src" if it is the only one in the project.</li> |
| |
| <li> |
| <i>Icons are duplicated</i> in <b>org.eclipse.ui.workbench</b> and <b>org.eclipse.ui</b></li> |
| |
| <li> |
| The <tt>plugin.xml</tt> of <b>org.eclipse.ui<i> </i></b><i>contains all |
| contributions and extension points.</i>. Because of the implicit prefixing |
| of extension point declarations these cannot be moved easily .</li> |
| |
| <li> |
| <b>org.eclipse.ui.workbench</b> is "cluttered" with actions |
| and menus that would more naturally belong to views. Moving those |
| actions has not been investigated.</li> |
| |
| <li> |
| <tt>AbstractTextEditor</tt> does no longer preregister the "Add Task" action</li> |
| |
| <li> |
| The reconciler code in <tt>org.eclipse.jface.text</tt> needs to be freed |
| from its dependency of <tt>IProgressMonitor. </tt>Until then it depends on <code>org.eclipse.core.runtime</code>.</li> |
| |
| <li> |
| The dependencies on <tt>IProgressMonitor</tt>, <tt>IStatus</tt> and <tt>ISafeRunnable</tt> |
| cause the need for splitting JFace and JFace Text: offending code has been moved to <code>org.eclipse.ui.workbench/JFace Extensions</code>. It would also be possible |
| to either accept a dependency on <b>org.eclipse.core.runtime</b> or to |
| move those classes into a separate plug-in.</li> |
| </ul> |
| |
| <h3> |
| Consequences</h3> |
| The consequences of this new structure are mostly visible in the build |
| process and the workspace setup. It is necessary to update all plug-ins and fragments in the |
| map files with the correct version numbers. The build process responsibility |
| is distributed according to the ownership of the plug-ins and fragments. |
| <br> <br> |
| <br> |
| </body></html> |