Contributing to Eclipse: Understanding and Writing Plug-ins Tutorial Outline • Understanding the Contribution Cycle • • • • Introducing the technical side of Eclipse Using Eclipse to explore Eclipse Becoming an Extender Becoming an Enabler Eclipse is an IDE framework • Is more than a Java IDE – ƒEclipse + JDT = Java IDE – Eclipse + CDT = C/C++ IDE – Eclipse + PHP = PHP IDE • Language Editor/Debugger/Refractor Eclipse is a Tools Framework • Tools extend the Eclipse platform using plugins – Business Intelligence and Reporting Tools (BIRT) – Eclipse Communications Framework (ECF) – Web Tools Project (WTP) – Eclipse Modelling Framework (EMF) – Graphical Editing Framework (GEF) – Test and Performance Tooling Project (TPTP) Eclipse is a Rich Client Platform Platform vs. Extensible Application Platform Implications • Everybody can contribute plug-ins – Every programmer can be a tool smith • Creating opportunities for further extension makes it possible for the tool smith to benefit from the work of others • It has to be easy to install and manage plugins Eclipse Involvements Eclipse Involvements • Users – Users of Eclipse • Extenders – Providers of extensions to existing extension points • Enablers – Providers of extension points others provide extensions for As an eclipse user • common user interface paradigm – – – – – Workbench Views – navigation support, properties Editors – edit files, e.g. Java Editor Perspectives – arrangement of views and editors Preference / Property – Global/Local settings • Hot Keys for Java developer – – – – Ctrl+Shift T Ctrl+Shift M Ctrl+Shift F Ctrl 1 Find Type Find Import Format Quick Fix Tutorial Outline • Understanding the Contribution Cycle • Introducing the technical side of Eclipse • Using Eclipse to explore Eclipse • Becoming an Extender • Becoming an Enabler Eclipse Plug-in Architecture • Plug-in – set of contributions – ƒSmallest unit of Eclipse functionality – ƒBig example: HTML editor – ƒSmall example: Action to create zip files • Extension point - named entity for collecting contributions – Example: extension point for workbench preference UI • Extension - a contribution – Example: specific HTML editor preferences Contribution Rule • Everything is a contribution. • Each plug-in – – – – – – Contributes to 1 or more extension points Optionally declares new extension points Depends on a set of other plug-ins Optionally contains Java code libraries and other files May export Java-based APIs for downstream plug-ins Lives in its own plug-in subdirectory • Theoretically unbound number of plug-ins Eclipse Plug-in Architecture • Allow for loading on demand by separating declaration and implementation: – Declaration of plug-in contributions • • • • Describes plug-in functionality Describes UI elements to present plug-in functionality Used by the platform to render parts of the plug-in’s UI Specifies implementation classes – Implementation of plug-in contributions • Implemented in Java and provided as Java archive • ƒIs loaded on demand Tip of the Iceberg • Startup time: O(#used plug-ins), not O(# installed plug-ins) Eclipse Plug-in Architecture • Plug-in details spelled out in the plug-in manifest – Manifest declares contributions – Code implements contributions and provides API – plugin.xml file in root of plug-in subdirectory Plug-in Manifest Eclipse Platform • Eclipse Platform is the common base • Consists of several key components Strata Rule • Separate core functionality from UI functionality. – Workspace Component – Workbench Component Workspace Component • Project – Folder – Files termed resources • ƒMeta data management: – Natures (e.g., Web, Java) – Markers • Incremental builders • Local history Workbench Component • SWT – generic low-level graphics and widget toolkit • JFace – UI frameworks for common UI tasks • Workbench – UI personality of Eclipse Platform SWT • A portable widget set – OS-independent API – Uses native widgets where available – Emulates widgets where unavailable • Supported platforms – – – – Win32, WinCE Linux/Motif, Solaris/Motif, AIX/Motif, HP-UX/Motif,… QNX/Photon, Linux/GTK, Mac OS X/Carbon JFace • UI framework built on top of SWT – Viewers • Model aware adapters for SWT widgets • Trees, tables, lists, styled text, .. – Dialog, Preference and Wizard frameworks – Actions • Location-independent user commands • Contribute action to menu, tool bar, or status line Workbench • Defines common user interface paradigm – Workbench – Views – navigation support, properties – Editors – edit files, e.g. Java Editor – Perspectives – arrangement of views and editors • Extended by contributing – Views, editors, preference pages, wizards, … Tutorial Outline • Understanding the Contribution Cycle • Introducing the technical side of Eclipse • Using Eclipse to explore Eclipse • Becoming an Extender • Becoming an Enabler Explore Eclipse with Eclipse • The Plug-in Development Environment • Explore a running Eclipse installation • Create a self-hosting workspace Plug-in Development Support Plug-in Development Environment • • • • • Extenders use PDE to implement plug-ins PDE = Plug-in development environment Specialized tools for developing Eclipse plug-ins Built atop Eclipse Platform and JDT Features – Specialized views to explore a running Eclipse installation – Specialized PDE editor for plug-in manifest files – Templates for new plug-ins – PDE runs and debugs another Eclipse workbench Available and Activated Plug-ins Self-hosting Workspace • PDE allows to import the plugins of a running Eclipse installation into an Eclipse workspace • Locate implementation class using plugin spy Self-hosting Workspace • P ƒ lug-ins correspond to Java projects • Source projects “projects you are working on” • Binary projects “projects you are browsing only” – Source can be inspected Tutorial Outline • Understanding the Contribution Cycle • Introducing the technical side of Eclipse • Using Eclipse to explore Eclipse • Becoming an Extender • Becoming an Enabler Becoming an Extender • Contributions do not – Override existing behavior – Remove or replace existing components – Harm existing or future contributions Becoming an Extender • Create the Course Explorer plug-in • Import the business layer source to workspace • Declare and sketch the implementation of the Course Explorer View • Create a PDE launch configuration • Run the Course Explorer • Finalize the implementation Create a PDE launch configuration Viewer Details • Adapt domain model to a Viewer View Details Becoming an Extender • Another example: – Popup qualified Java class file Name and show java structure view • Step: – – – – Create an eclipse plug-in project Add dependencies(org.eclipse.jdt.core, org.eclipse.jdt.ui) Copy qualified name of (org.eclipse.jdt.core.ICompilationUnit) Add a popup extension. • Name with ~ShowJavaTreeViewAction~Test the action – Create a tree view – Reuse JavaElementLabelProvider and StandardJavaContentProvier Tutorial Outline • • • • Understanding the Contribution Cycle Introducing the technical side of Eclipse Using Eclipse to explore Eclipse Becoming an Extender • Becoming an Enabler Tutorial Outline • Identify the scope of contributions to your plug-in • Declare the extension points • Implement the extension points • Consume the new extension points 作业 • 自行实现课堂上讲解的拼写检查的示例 – 提示:三个主要的类型: • SpellChecker/IDictionary/IWordIterator • 利用上述的组件,实现一个具有以下功能的 Eclipse 插件: – 在PackageExplorer视图中选取一个文件,在右键菜 单中增加OOADSpell Check菜单项。 – 选中后,根据选中文件的类型,选取适当的拼写检 查器进行检查,并将检查的结果以表格的形式显示 在一个名为Spell Check Result的视图中。表格包括 两栏:错误单词和错误次数。 作业 • 需要支持对文本文件(.txt)和(.xml)文件的检查,XML 文件检查时需要简单地忽略掉’<‘和’>’之间的内容 (不必考虑特殊情况,如xml文件的格式错误)。 • 可选: – 对于有能力的同学,可以考虑定义扩展点,使得第三 方开发者能够提供对其它文件格式的拼写检查的支持。 • 可参考的资料: – 示例 – Platform Plug-in Developer Guide(Eclipse Help) – The Official Eclipse FAQs: http://wiki.eclipse.org/The_Official_Eclipse_FAQs 作业讲解 主要问题 • 包含统计的概念 • 有些过度设计的内容 – 如包含了Project/Schedule • 依然有将用例和概念模型混杂在一起的情 况 – 如包含执行任务/登录系统的概念