310 likes | 585 Views
SPb JUG, 26.03.2005. JetBrains и .NET – IDEA Reloaded. Дмитрий Ломов Senior Software Developer dmitry.lomov@jetbrains.com http://www.jetbrains.com. План. SPb JUG, 26.03.2005. Что мы делаем? Наши продукты для .NET разработчиков Как мы делаем? Наша «методология» разработки
E N D
SPb JUG, 26.03.2005 JetBrains и .NET – IDEA Reloaded Дмитрий Ломов Senior Software Developer dmitry.lomov@jetbrains.com http://www.jetbrains.com
План SPb JUG, 26.03.2005 • Что мы делаем? Наши продукты для .NET разработчиков • Как мы делаем? Наша «методология» разработки • А что внутри?Архитектура, OpenAPI, новые языки, плагины
Что мы делаем SPb JUG, 26.03.2005
Настоящее SPb JUG, 26.03.2005 • JetBrains ReSharper 1.5 http://www.jetbrains.com/resharper • Add-On для Microsoft Visual Studio 2003 • Основная функциональность IntelliJ IDEA: рефакторинги, подсветка и исправление ошибок, live templates, productivity features… - для .NET Framework 1.1 и только для C#. • Большой успех • Всего $149!
SPb JUG, 26.03.2005 Highlight Usages Smart completion Refactorings Quick Fixes
Скоро SPb JUG, 26.03.2005 • ReSharper 2.0 • Add-In для VS 2003: VB, ASP, кросс-языковая функциональность: рефакторинги и т.д. • Add-In для VS 2005: .NET Framework 2.0 (C#, VB, ASP) • Своя IDE: отладчик, удобная интеграция с VCS, … • OpenAPI: вплоть до поддержки других языков(например F#)
Скоро SPb JUG, 26.03.2005 • JetBrains .NET Profiler http://www.jetbrains.net/netprofiler • в 1.0 – только performance profiling • замедление – в 2-5 раз (ANTS – 10-20раз) • удобный интерфейс: Profile with Pleasure! • Следите за рекламой!
Как мы делаем SPb JUG, 26.03.2005
Цикл разработки SPb JUG, 26.03.2005 • Начало: планирование, старт разработки, развал всего • Внутренний релиз – eating own dog’s food • Early Access Program (EAP) • public build раз в неделю или чаще • Стабилизация (исправляются только stopshipSCRs) • Релиз (0 stopship SCRs) • Поддержка (версии x.y.k – шаги 3-5)
EAP SPb JUG, 26.03.2005 • “Closed source, open mind” • Регулярно обновляемые версии • Не кривые, поскольку используются внутри фирмы • Форум – прямой контакт с разработчиками • Bug Tracker – прямой контакт с разработчиками • http://www.jetbrains.net/ • Добро пожаловать!
Процесс разработки(1) SPb JUG, 26.03.2005 • Команда – 7 человек • Планирование – Bug Tracker • Ежедневный stand-up meeting • Минимум формальных правил
Процесс разработки(2) SPb JUG, 26.03.2005 • Unit-тестированиеТесты пишут разработчики • Непрерывная интеграцияПосле каждого commitа строится полная версия программы, запускаются все тесты • Тестирование производительности • Нет отдела QA
Непрерывная интеграция SPb JUG, 26.03.2005
Performance Tests SPb JUG, 26.03.2005
А что внутри? SPb JUG, 26.03.2005
Основные принципы SPb JUG, 26.03.2005 • Компонентная модель • Использование мета-данных • Генерация кода
Компонентная модель(1) Component(Config.All) EditorManager IEditor EditFile(IProjectFile) static EditorManager Instance SPb JUG, 26.03.2005 Editor.dll Component(Config.STANDALONE) Component(Config.VS2003) EditorManagerImpl VSEditorManagerImpl IEditor EditFile(IProjectFile) IEditor EditFile(IProjectFile)
Компонентная модель(2) Shell object GetComponent(Type) SPb JUG, 26.03.2005 public static void Main() { new Shell(Config.STANDALONE, ”Assembly.xml”); ... } ... IEditor editor = EditorManager.Instance.EditFile(projectItem); editor.CaretModel.MoveTo(classDeclaration.StartOffset); ... EditorManager.dll static EditorManager Instance { get { return (EditorManager) Shell.ActiveShell.GetCoponent(typeof(EditorManager)); } }
Компонентная модель(3) SPb JUG, 26.03.2005 • Компоненты разных уровней (Shell, Solution, Project) • Автоматическая сериализация (XML) • Возможность загрузки/выгрузки => Plugins • Обширные возможности переиспользования • Легко настраивается на разные «окружения»один и тот же клиентский код в IDE, VS2003, VS2005тестовые реализации компонент (Config.TESTS)
Использование мета-данных SPb JUG, 26.03.2005 • Мета-данные - это удобно! • При загрузке assembly автоматически добавляются • Компоненты • Окна (Tool Windows) • Команды (Actions) • Поддержка языков • И проч.
Команды (Actions) SPb JUG, 26.03.2005 Action 1:n IActionHandler bool Update(IDataContext) void Execute(IDataContext) Shortcut Menu item DataConstant: FILE, EDITOR, PROJECT... IDataContext object GetData(DataConstant) • Как узнать, активна ли команда: • Контролы выдают контексты (реализуют IDataProvider) • Контекст собирается от сфокусированного контрола вверх • У обработчиков вызывается Update
Команды (2) SPb JUG, 26.03.2005 [ActionHandler(“OpenFile”)] class OpenFileHandler : IActionHandler { publicbool Update(IDataContext context){ return context.GetData(DataConst.FILE) != null; } publicvoid Execute(IDataContext context){ EditorManager.Instance.EditFile( (IProjectFile) context.GetData(DataConst.FILE) ); } }
Архитектура Рефакторинги Редактор Синтаксическое дерево Понятия CLR(межязыковые) ProjectModel Document SPb JUG, 26.03.2005 Подсветка ошибок (демон) … Program Structure Interface (PSI) Ядро
Как добавить новый язык SPb JUG, 26.03.2005 • Лексический анализатор (lexer)подсветка в редакторе • Синтаксический разбор, дерево Ctrl+W, keyword completion, подсветка синтаксических ошибок • Разрешение ссылок (resolve)поиск использований, переход на декларацию, переименование • Отображение в понятия CLRто же, что и в п.3 из других языков • Языковые вставки в другую функциональность (подсветка ошибок, рефакторинги и т.д.)
Генерация PSI SPb JUG, 26.03.2005 ifStatement : IF expression<Condition> statement<ThenBranch> (ELSE statement<ElseBranch>)? ; IIfStatement IfStatementStub IExpression Condition() IStatement ThenBranch() IStatement ElseBranch() void SetCondition(IExpression) void SetThenBranch(IStatement) void SetElseBranch(IStatement) IExpression Condition() IStatement ThenBranch() IStatement ElseBranch() void SetCondition(IExpression) void SetThenBranch(IStatement) void SetElseBranch(IStatement) CSharpParser ... IIfStatement ParseIfStatement() ...
Генерация кода SPb JUG, 26.03.2005 • Меньше рутинной работы • Легко менять дизайн • Генерируемый код расширяется наследованиембудет лучше, когда появятся partial классы • Используется не только для PSI: • Типы подсвечиваемых ошибок • Локализуемые строчки (resource bundle)
SPb JUG, 26.03.2005 JetBrains. Develop with Pleasure. JetCerveau. Développez-vous avec le Plaisir. Спасибо! JetGehizn. Entwicklung mit Vergnügen. Струйные Мозги. Проявлять под кайфом.