This is an HTML rendering of a working paper draft that led to a publication. The publication should always be cited in preference to this draft using the following reference:

The document's metadata is available in BibTeX format.

This material is presented to ensure timely dissemination of scholarly and technical work. Copyright and all rights therein are retained by authors or by other copyright holders. All persons copying this information are expected to adhere to the terms and constraints invoked by each author's copyright. In most cases, these works may not be reposted without the explicit permission of the copyright holder.

Diomidis Spinellis Publications

Copyright © 2004 by the Association for Computing Machinery, Inc. Permission to make digital or hard copies of part or all of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, to republish, to post on servers, or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from Publications Dept, ACM Inc., fax +1 (212) 869-0481, or

Book Review: Contributing to Eclipse: Principles, Patterns, and Plug-Ins

Diomidis Spinellis
Athens University of Economics and Business

Erich Gamma and Kent Beck
Contributing to Eclipse: Principles, Patterns, and Plug-Ins
Addison-Wesley, Boston, 2004
395 pp.

The Eclipse platform can best be described as a meta-IDE: a platform designed for building integrated development environments. As its developers point out, “The Eclipse Platform is an IDE for anything, and nothing in particular.” A notable and important part of the platform is the Plug-in Development Environment. This allows programmers working, for example, with Eclipse’s Java Development Tools, to turn themselves from plain Users and Configurers of their environment into sophisticated Extenders, Publishers, and Enablers. These roles form an important part of what Gamma and Beck term “Contribution Circle”, so it is worth expanding on them. Configurers are simply users who customize their experience of Eclipse, changing their programming environment in ways envisioned by the original developer. Extenders, on the other hand, make changes to their Eclipse environment by developing plug-ins providing new functionality. Interestingly, Eclipse is almost entirely built by plugging in functionality. Extenders can graduate as Publishers by bundling their extensions in a form that other fellow programmers can load and use. Finally, by equipping their plug-ins with places where new functionality can be provided, the so-called extension points, Publishers become Enablers: users who consciously enrich the extension modalities of the Eclipse ecosystem. The roles we examined actually form a circle, because Enablers will become users of their own work.

Fittingly for a work co-authored by the evangelist of extreme programming, the book is organized around four concentric circles, each following the Contribution Circle in increasing detail. The first circle (circle zero in programmer-speak) describes a simple “hello world” plug-in. Here the authors present the basic tasks for developing a plug-in and integrating it with Eclipse. Circle one moves away from the toy example, and describes the development of a plug-in for running test cases, based on Gamma and Beck’s famous JUnit tool. Circle two expands the plug-in’s functionality adding all the capabilities expected from mature Eclipse contributions: views, context menus, builders, an editor, perspectives, help, internationalization, and an extension point. The book’s, Circle three part, departs from the detailed step-by-step “here is how to do it” approach of the previous parts, and in a form of design stories based on patterns provides additional insights behind Eclipse’s components. Many readers of this review, who know Erich Gamma from his work on design patterns, will doubtlessly enjoy reading the clearly illustrated descriptions of existing patterns in the context of the Eclipse framework.

Although the prescriptive style adopted in the book’s first three parts can sometimes be tiring and appear shallow, programmers who wish to extend Eclipse will probably appreciate the detailed instructions, the code samples, and the corresponding screen dumps. Others, (this reviewer included) might have preferred the writing to have been more analytical, descriptive, and organized and less prescriptive and (at places) unapologetically utilitarian.

Eclipse brings to IDEs what Unix brought to programmer toolboxes: a rich, intellectually fulfilling, development environment that individual programmers can extend and build upon. “Contributing to Eclipse” will probably be a valuable guide for a brave new generation of tool builders.