<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-19277826</id><updated>2011-12-03T08:51:15.194-05:00</updated><title type='text'>desudation - eclipse</title><subtitle type='html'>Eclipse, Platform/UI&lt;br&gt;
commands, contexts, contributions, editor management, key bindings, builds</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://eclipse-desudation.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19277826/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://eclipse-desudation.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>desudation</name><uri>http://www.blogger.com/profile/13194961248414387789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://lh4.google.com/image/douglas.pollock/RTVkO26PABI/AAAAAAAAATk/jvrTKXkUDik/IMG_0962.jpg?imgmax=912'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-19277826.post-113658336670720676</id><published>2006-01-06T16:28:00.000-05:00</published><updated>2006-10-18T08:40:47.097-04:00</updated><title type='text'>My Key Bindings Don't Work</title><content type='html'>In 3.2 M4, some of you may have noticed that some of your key bindings weren't working as you would expected.  This was entirely my fault.  I was fiddling with converting the old action-based extension points into a pure command representation.  So now, even actions without an action definition id will get a command automatically generated.  This is great fun, but it led to some conflicts between handlers.  This should be fixed in I20060110-0800 and later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19277826-113658336670720676?l=eclipse-desudation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-desudation.blogspot.com/feeds/113658336670720676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19277826&amp;postID=113658336670720676' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19277826/posts/default/113658336670720676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19277826/posts/default/113658336670720676'/><link rel='alternate' type='text/html' href='http://eclipse-desudation.blogspot.com/2006/01/my-key-bindings-dont-work.html' title='My Key Bindings Don&apos;t Work'/><author><name>desudation</name><uri>http://www.blogger.com/profile/13194961248414387789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://lh4.google.com/image/douglas.pollock/RTVkO26PABI/AAAAAAAAATk/jvrTKXkUDik/IMG_0962.jpg?imgmax=912'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19277826.post-113416444756448159</id><published>2005-12-09T16:19:00.000-05:00</published><updated>2006-10-18T08:40:47.039-04:00</updated><title type='text'>Linkability and Commands</title><content type='html'>I've spent a fair amount of time in the past few weeks talking with Christopher Daly in Beaverton.  We're working on a way to integrate the cheatsheet linking mechanism with commands.  It looks like we will expand how parameterized commands work.  Currently, a parameter is just a string.  Our proposal is to provide a typing mechanism on parameters that allows us to convert the strings into objects (and vice versa).  This would allow someone, for example, to create handlers that work on domain-specific objects, rather than every handler needing to do some conversion on their own&lt;span style="font-style: italic;"&gt;&lt;/span&gt;.  It would also allow someone to find all commands that work on a particular object type (e.g., all commands that take a java element as a parameter).&lt;br /&gt;&lt;br /&gt;Commands and parameters are becoming remarkably similar to Java methods and parameters, except specified in XML.  The command definition becomes like an interface, which the handlers all must implement.  Then the binding is done dynamically at run-time based on the &lt;span style="font-style: italic;"&gt;activeWhen&lt;/span&gt; expression.  It's interesting because we can make our language different (i.e., more powerful) than the Java language.  Should we allow the type look-up to be more flexible (e.g., allow things like &lt;span style="font-style: italic;"&gt;or&lt;/span&gt; or &lt;span style="font-style: italic;"&gt;adapt&lt;/span&gt;)?&lt;br /&gt;&lt;br /&gt;It also highlights some of the weaknesses of extensions as API.  As it stands right now, most ids defined in extensions become equivalent to API (e.g., view id, command id, editor id, etc.).  But there is no real means to provide documentation.  So, if the parameters for a command define an API contract, where does one put the documentation?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19277826-113416444756448159?l=eclipse-desudation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-desudation.blogspot.com/feeds/113416444756448159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19277826&amp;postID=113416444756448159' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19277826/posts/default/113416444756448159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19277826/posts/default/113416444756448159'/><link rel='alternate' type='text/html' href='http://eclipse-desudation.blogspot.com/2005/12/linkability-and-commands.html' title='Linkability and Commands'/><author><name>desudation</name><uri>http://www.blogger.com/profile/13194961248414387789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://lh4.google.com/image/douglas.pollock/RTVkO26PABI/AAAAAAAAATk/jvrTKXkUDik/IMG_0962.jpg?imgmax=912'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19277826.post-113416281758198091</id><published>2005-12-09T16:10:00.000-05:00</published><updated>2006-10-18T08:40:46.978-04:00</updated><title type='text'>EclipseCon Talks</title><content type='html'>My &lt;a href="http://canuck.gda.itesm.mx/eclipsezilla/show_bug.cgi?id=93"&gt;talk&lt;/a&gt; got accepted!  The list of tutorials are finalized and scheduled, and the acceptances for long talks are starting to go out.  I'm happy, 'cause it looks like we'll actually be able to put together a decent &lt;a href="http://canuck.gda.itesm.mx/eclipsezilla/show_bug.cgi?id=113"&gt;Halo team&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19277826-113416281758198091?l=eclipse-desudation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-desudation.blogspot.com/feeds/113416281758198091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19277826&amp;postID=113416281758198091' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19277826/posts/default/113416281758198091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19277826/posts/default/113416281758198091'/><link rel='alternate' type='text/html' href='http://eclipse-desudation.blogspot.com/2005/12/eclipsecon-talks.html' title='EclipseCon Talks'/><author><name>desudation</name><uri>http://www.blogger.com/profile/13194961248414387789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://lh4.google.com/image/douglas.pollock/RTVkO26PABI/AAAAAAAAATk/jvrTKXkUDik/IMG_0962.jpg?imgmax=912'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19277826.post-113327447374806962</id><published>2005-11-29T08:54:00.000-05:00</published><updated>2006-10-18T08:40:46.920-04:00</updated><title type='text'>Platform/UI Tutorials and Talks</title><content type='html'>The Platform/UI team at IBM has proposed several talks and tutorials for EclipseCon 2006. If you're going to be going to EclipseCon, I'd suggest taking a moment to check them out.&lt;br /&gt;&lt;br /&gt;Tutorials:&lt;br /&gt;&lt;ul&gt;      &lt;li&gt;&lt;a href="http://canuck.gda.itesm.mx/eclipsezilla/show_bug.cgi?id=94"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;Foundations of UI Development with Eclipse&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;. This tutorial will teach the UI foundations of the Workbench and JFace to developers with limited experience in this area of plug-in development. Attending this tutorial will also act as preparation for the "Advanced Development with the Eclipse UI" tutorial. This session will give an introduction to the components of the Workbench, such as (views, wizards and menus) writing sample code along the way. At the end of this session attendees will have built a set of samples that exercise the various building blocks of the Workbench and JFace.&lt;/li&gt;   &lt;li&gt;&lt;a href="http://canuck.gda.itesm.mx/eclipsezilla/show_bug.cgi?id=95"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;Advanced UI Development With Eclipse&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;. This tutorial will be a follow on session for "Foundations of UI Development with Eclipse", however the foundations session is not required for developers with sufficient Eclipse experience. While the Foundations session gives an introduction to the components of the Workbench, this session will apply what was learned in the first session in building an application that is tightly integrated with the Eclipse SDK using many key features of the Workbench. At the end of this session attendees will have created an integrated Eclipse UI application.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://canuck.gda.itesm.mx/eclipsezilla/show_bug.cgi?id=92"&gt;&lt;span style="font-weight: bold;"&gt;At Your Command: Migrating From Actions To Commands&lt;/span&gt;&lt;/a&gt;. In 3.2, actions and action-based extension points are becoming deprecated. This tutorial will discuss the new commands architecture. Commands allow plugins to extend the Eclipse menus, toolbars, and status line -- as well as providing hooks for undo/redo support and key bindings. This tutorial will start with the basic uses of commands, and move on to more advanced features: undo/redo support, key bindings, parameterized commands, dynamic menus, and contributing arbitrary controls to toolbars and the status line. The tutorial will focus on uses of the existing actions API, and show how these can be migrated to commands.&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://canuck.gda.itesm.mx/eclipsezilla/show_bug.cgi?id=151"&gt;Designing Eclipse APIs&lt;/a&gt;.  Good APIs are critical to the long-term success of any Eclipse project. Over the last years, the Eclipse Platform team learned many lessons on API design, which we would like to share with the other Eclipse projects. This is a hands-on tutorial with many examples, practical exercises, and enough room for discussion. The covered topics fall into three categories. On the level of Java, we explain how to write maintainable APIs that don't break existing clients. On the level of Javadoc specifications, we teach how to make promises you can keep long-term. On the process level, we tell you about best practices that help you improve the quality of the API you are developing.  This tutorial is targeted at Eclipse committers.&lt;/li&gt;  &lt;/ul&gt;&lt;br /&gt;Long Talks:&lt;br /&gt;&lt;ul&gt;    &lt;li&gt;&lt;a href="http://canuck.gda.itesm.mx/eclipsezilla/show_bug.cgi?id=83"&gt;Smaller, Faster, More Responsive - Performance Tuning Using the Eclipse Platform&lt;/a&gt;.&lt;/li&gt;  &lt;li&gt;&lt;a href="http://canuck.gda.itesm.mx/eclipsezilla/show_bug.cgi?id=85"&gt;Redoing Undo: Eclipse 3.1 Undoable Operation Support&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://canuck.gda.itesm.mx/eclipsezilla/show_bug.cgi?id=89"&gt;Data Binding with the Eclipse Platform&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://canuck.gda.itesm.mx/eclipsezilla/show_bug.cgi?id=93"&gt;Your action is my command&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://canuck.gda.itesm.mx/eclipsezilla/show_bug.cgi?id=96"&gt;Customizing UI Look and Feel with Eclipse&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://canuck.gda.itesm.mx/eclipsezilla/show_bug.cgi?id=97"&gt;Everything Changes: Dynamic Plug-in Support in Eclipse&lt;/a&gt;&lt;input name="abstract" value="The combination of features provided by the OSGi, runtime, and  workbench components in the Eclipse 3.1 release allow for the dynamic  loading and unloading of plug-ins at runtime.  While this support is  not often used in the IDE space it can be of tremendous use to RCP  application developers.  This talk will begin by covering the  improvements at all applicable layers relating to dynamic plug-in  support and will then show how this support may be  used in the context of your RCP application.  Possible examples include push update, extreme self- hosting, and local/remote provisioning scenarios." type="hidden"&gt;.&lt;/li&gt;         &lt;li&gt;&lt;a href="http://canuck.gda.itesm.mx/eclipsezilla/show_bug.cgi?id=204"&gt;Go Wild with RCP: Anatomy of an RCP-based Smart Client Application&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://canuck.gda.itesm.mx/eclipsezilla/show_bug.cgi?id=248"&gt;Practical Accessibility in Eclipse&lt;/a&gt;.&lt;/li&gt; &lt;/ul&gt;&lt;br /&gt;Events:&lt;br /&gt;&lt;ul&gt;    &lt;li&gt;&lt;a style="font-style: italic;" href="http://canuck.gda.itesm.mx/eclipsezilla/show_bug.cgi?id=113"&gt;Halo Feature Challenge&lt;/a&gt;. Want a particular feature in Eclipse? Challenge 4 Platform/UI committers for the right to get your feature or bug fix into Eclipse. Scratch games are also available if you just want to meet the Platform/UI team. Challenging teams can be two to four people. The feature or bug fix must be reasonable: this means not too big and not too controversial. It will likely also have to be in the Platform itself, just because we don't have commit rights anywhere else. The match will be three games. One selected by the challenger, one selected by us, and one will be Team Slayer on Blood Gulch.&lt;/li&gt;   &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19277826-113327447374806962?l=eclipse-desudation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-desudation.blogspot.com/feeds/113327447374806962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19277826&amp;postID=113327447374806962' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19277826/posts/default/113327447374806962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19277826/posts/default/113327447374806962'/><link rel='alternate' type='text/html' href='http://eclipse-desudation.blogspot.com/2005/11/platformui-tutorials-and-talks.html' title='Platform/UI Tutorials and Talks'/><author><name>desudation</name><uri>http://www.blogger.com/profile/13194961248414387789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://lh4.google.com/image/douglas.pollock/RTVkO26PABI/AAAAAAAAATk/jvrTKXkUDik/IMG_0962.jpg?imgmax=912'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19277826.post-113295131854542207</id><published>2005-11-25T14:44:00.000-05:00</published><updated>2006-10-18T08:40:46.862-04:00</updated><title type='text'>Why GtkFileChooserDialog Sucks</title><content type='html'>Some people say that the native file dialog is a key aspect of "native integration".  It can be very frustrating to have some feature supported in one file dialog, but not in another.  Eclipse is largely a GNOME application.  We try to integrate as well as possible with KDE, but ... well, we're written on top of GTK+.  There's only so much you can do.  So, our file dialog should be the GNOME file dialog (i.e., GtkFileChooserDialog).&lt;br /&gt;&lt;br /&gt;But, the average Linux user is used to many different file dialogs.  KDE and GNOME applications use different file dialogs, and then some applications write their own custom dialog (e.g., OpenOffice, Firefox, xine, etc.).  And what happens if you want to innovate (e.g., Microsoft Word 12)?  And what do you do if the native dialog just isn't all that good?&lt;br /&gt;&lt;br /&gt;This is where I'm stepping up.  I feel the GtkFileChooserDialog is somewhat behind in "state-of-the-art" file chooser dialogs.  Here's why (flame bait):&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;File Manipulation&lt;/span&gt;.  When I'm in a file dialog, I generally expect to be able to manipulate the file system.  I want to be able to create and delete files and folders (including trash can support).  The only thing I can do is create a folder when saving something.&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Key Bindings&lt;/span&gt;.  "Alt+Back", "Alt+Forward", "Alt+Up/Backspace".  These three key bindings can do wonders for making the dialog easy to navigate with a keyboard.&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Limited Breadcrumbs&lt;/span&gt;.  The breadcrumb support is a little bit limited.  I can only jump up a fixed number of levels.  It also isn't possible to jump up from "home" to a more general location.&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Hidden Files&lt;/span&gt;.  If I decide to show hidden files in the dialog, it does not remember this the next time it is opened.&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Wasted Space&lt;/span&gt;.  There is significant wasted space on the left-hand side of the dialog.  All the items are one word, but yet there is space enough for several words.&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Single List&lt;/span&gt;.  The single list format is fine for small directories.  It gets a bit burdensome for directories that have hundreds of files in them.  It's not just about finding the file (which the type-ahead handles well), but about getting a feel for the state of the directory.  It helps the user sense what other things are in the same directory, as well as giving them an indication if the directory is getting out of control.&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Open Location&lt;/span&gt;.  This function is hard to understand as it stands right now.  It only appears in the context menu and by pressing "Ctrl+L".  It's not clear what it's going to do.  Once open, there's a race condition on the auto-complete.  If you type '/h' and wait too long before pressing 'o', then the auto-complete pop-up is triggered and immediately fills in the rest of '/home'.  Conversely, if I press '/ho' close enough together, then it fills it in, leaves the cursor after the 'o', and selects the rest of the text ('me/').&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Icons&lt;/span&gt;.  Icons would be nice.  It makes it easier to quickly identify files.  It's especially nice for the quick navigation bar on the left, at least from an aesthetic perspective.&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Modified Column&lt;/span&gt;.  This is an excessive default.  It is something that is useful infrequently, and so perhaps better as an option that can be turned on.&lt;br /&gt;  &lt;/li&gt; &lt;/ol&gt;&lt;br /&gt;Just so you know, I'm talking about the file chooser dialog as it appears in Eclipse 3.2 (under development) and GTK+ 2.6.10.  I run KDE as my desktop environment.  If some of these things have changed, that's great.  If some of these things are just SWT (i.e., Eclipse's layer on top of GTK+) being suboptimal, then I'd like to know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19277826-113295131854542207?l=eclipse-desudation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-desudation.blogspot.com/feeds/113295131854542207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19277826&amp;postID=113295131854542207' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19277826/posts/default/113295131854542207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19277826/posts/default/113295131854542207'/><link rel='alternate' type='text/html' href='http://eclipse-desudation.blogspot.com/2005/11/why-gtkfilechooserdialog-sucks.html' title='Why GtkFileChooserDialog Sucks'/><author><name>desudation</name><uri>http://www.blogger.com/profile/13194961248414387789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://lh4.google.com/image/douglas.pollock/RTVkO26PABI/AAAAAAAAATk/jvrTKXkUDik/IMG_0962.jpg?imgmax=912'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19277826.post-113293203485815378</id><published>2005-11-25T09:44:00.000-05:00</published><updated>2006-10-18T08:40:46.807-04:00</updated><title type='text'>Things I Have Learned About API</title><content type='html'>It seems like I'm always learning new things about API -- especially with regards to Eclipse and Java.  Here are some of the tidbits I've picked up.&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Avoid Interfaces&lt;/span&gt;.  It is good to avoid interfaces which you allow others to implement.  Abstract super classes allow you more flexibility in the future.  You can, for example, add new methods to an abstract super class, but you can't add to an interface.&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Avoid Exposing Dependencies&lt;/span&gt;.  It is good to try to avoid exposing anything you're dependent on.  If I am writing a plug-in &lt;span style="font-style: italic;"&gt;B&lt;/span&gt; that depends on &lt;span style="font-style: italic;"&gt;A&lt;/span&gt;, then it best to avoid a couple of things.  First of all, try not to have any of the classes in &lt;span style="font-style: italic;"&gt;A&lt;/span&gt; appear in the API for&lt;span style="font-style: italic;"&gt; B&lt;/span&gt;.  If you need to expose classes from &lt;span style="font-style: italic;"&gt;A&lt;/span&gt;, then it is good to try to avoid re-exporting the whole plug-in in your &lt;span style="font-style: italic;"&gt;MANIFEST.MF&lt;/span&gt;.&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Isolate Dependencies&lt;/span&gt;.  Any time you are dependent on someone else's code, it is a good idea to try to isolate that dependency to a single place.  This way, if you need to change the dependency at some point in the future, it is easy to do (rather than painful).&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Minimal Commitment&lt;/span&gt;.  If you never expose something as API, then you don't need to support it as API in the future.  Releasing a minimal API at first gives you a chance to judge weaknesses and make changes.  And, when specifying API through documentation, it's a good idea to only promise what is necessary to make the API useful (i.e., hide implementation details).&lt;br /&gt;  &lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Be Precise&lt;/span&gt;.  While the specification should promise little, the constraints on the parameters accepted should be very precise.  This generally means indicating whether &lt;span style="font-style: italic;"&gt;null&lt;/span&gt; is accepted or not, whether collections can be empty, and what types of elements are allowed within the collection.  Enforce these constraints at the top of the method, so that implementation details don't allow people to get away with things.  &lt;span style="font-style: italic;"&gt;Expect lots, promise little&lt;/span&gt;.&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Tiny Plug-ins&lt;/span&gt;.  It's generally good to try to keep your plug-ins small -- containing only one functionality group.  You can then use "glue" plug-ins to group functionality into logical combinations.  I say this not from experience of doing, but from experience of regret.  It's hard to predict what downstream clients might want or not want; you make their lives easier by keeping things in small modules.&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Avoid Methods With The Same Name&lt;/span&gt;.  If you are creating methods (public, private, whatever), it is generally a good idea to avoid methods with the same name and the same number of arguments.  This avoids problems where &lt;span style="font-style: italic;"&gt;YourClass.method(null)&lt;/span&gt; stops working because &lt;span style="font-style: italic;"&gt;null&lt;/span&gt; is no longer precise enough.  It also helps you avoid quirks in your compiler.&lt;/li&gt; &lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19277826-113293203485815378?l=eclipse-desudation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-desudation.blogspot.com/feeds/113293203485815378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19277826&amp;postID=113293203485815378' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19277826/posts/default/113293203485815378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19277826/posts/default/113293203485815378'/><link rel='alternate' type='text/html' href='http://eclipse-desudation.blogspot.com/2005/11/things-i-have-learned-about-api.html' title='Things I Have Learned About API'/><author><name>desudation</name><uri>http://www.blogger.com/profile/13194961248414387789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://lh4.google.com/image/douglas.pollock/RTVkO26PABI/AAAAAAAAATk/jvrTKXkUDik/IMG_0962.jpg?imgmax=912'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19277826.post-113285083883447522</id><published>2005-11-24T11:11:00.000-05:00</published><updated>2006-10-18T08:40:46.742-04:00</updated><title type='text'>JFace and SWT Standalone</title><content type='html'>Significant steps have been taken to provide an easy way for developers to write JFace+SWT standalone applications. We've removed the dependency on &lt;span style="font-style: italic;"&gt;org.eclipse.core.runtime&lt;/span&gt; and replaced it with a dependency on &lt;span style="font-style: italic;"&gt;org.eclipse.equinox.common&lt;/span&gt; (which is much smaller). This allows you to use things like viewers, dialogs, wizards, commands and actions on top of the bare-bones SWT, while avoiding support for things like the registry and jobs.&lt;br /&gt;&lt;br /&gt;This gives us three different bases on which applications can be built. Note that the sizes vary slightly from platform to platform. Also, this includes the default build of all these pieces. If you're willing to hack out pieces you don't need, then you can further reduce the size.&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;SWT&lt;/span&gt; (~2.2MB)&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;JFace and SWT&lt;/span&gt; (~3.0MB)&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Rich Client Platform (RCP)&lt;/span&gt; (~7.5MB)&lt;/li&gt; &lt;/ul&gt; I've opened a new &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=117914"&gt;bug&lt;/a&gt; about the possibility of providing a JFace and SWT standalone download, similar to the SWT standalone download that is currently available.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19277826-113285083883447522?l=eclipse-desudation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-desudation.blogspot.com/feeds/113285083883447522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19277826&amp;postID=113285083883447522' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19277826/posts/default/113285083883447522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19277826/posts/default/113285083883447522'/><link rel='alternate' type='text/html' href='http://eclipse-desudation.blogspot.com/2005/11/jface-and-swt-standalone.html' title='JFace and SWT Standalone'/><author><name>desudation</name><uri>http://www.blogger.com/profile/13194961248414387789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://lh4.google.com/image/douglas.pollock/RTVkO26PABI/AAAAAAAAATk/jvrTKXkUDik/IMG_0962.jpg?imgmax=912'/></author><thr:total>3</thr:total></entry></feed>
