Creating IDEs for the Eclipse Platform Survey de Introdução à Investigação Motivação Porquê uma IDE? Uma IDE é um componente fundamental do toolchain de uma linguagem. Influencia bastante a productividade do programador. Porquê o Eclipse? Muita infra-estructura e funcionalidades disponiveis, trabalho poupado. Integração com outras ferramentas de desenvolvimento. IDE Features Code editor. Syntax highlighting. File/project explorer. Program builder. Outline. Debugger. Code completion. Code formatting. Refactoring. Eclipse Platform Extendido através de plug-ins. Cada plug-in implementa um conjunto de extensões a extension points pré-definidos. O próprio Eclipse é composto por plug-ins. Uma IDE do Eclipse: Separada em components como o Core, User Interface, Debug, Build, etc., cada uma correspondendo a uma plug-in. Core Component Project Description Project Builder Invoca o compilador, constrói o projecto. Parser & Language Model Descreve os ficheiros e directórios do projecto, opções de compilador, condicionais, etc. Cria uma representação estruturada do código. Project Nature Associa o projecto à IDE. Basic IDE Architecture UI Component Consiste em vários elementos como: Editor Views Outline Dialogs Wizards Preferences Actions (buttons e menus) Em geral simples de implementar, o editor e a text framework é que são um pouco mais complicados. UI Component UI Component Text Framework Editor Document Source Viewer UI Component Eclipse Workbench Text Framework Editor Document Provider Document Source Viewer StyledText Source Viewer Configuration Advanced Concepts AST Advanced Parser Functionality Conter toda a informação relevante ao utilizador. Arvore heterogénea com bom mecanismos de navegação. Permitir recuperação de erros. Parsing parcial (de um sub-elemento da unidade de compilação). Entity References Mecanismo para poder navegar de um elementoreferência da AST, para o elemento-definição. Advanced Concepts DOM AST Estruturar a AST como o DOM de XML/HTML. É um mecanismo mais rico para manipular a AST (bom para refactoring). Model scalability Permitir que a UI continue usável (responsive) em projectos muito grandes. Criar um modelo mais simples e mais lightweight que a AST, para a estrutura de nomes do programa. Gerir os elementos desse modelo através duma cache. Advanced Concepts Model updating Definir como actualizar o modelo após mudanças textuais do código. Solução ideal: actualizar numa background thread, 2 a 5 vezes por segundo. Refactoring A “ultimate” feature duma IDE, tanto em utilidade como complexidade. Eclipse oferece algum suporte através do LTK ( Language Toolkit). Mas cabe ao developer implementar a lógica de cada operação.