Web-разработка, иностранные языки, Eclipse и разные разности

Zygo Profile

Санскрит - словоформы

Verbos Irregulares

8. Добавляем поддержку "Перехода на строку" (Run to line)

08.11.2015
Специализированную поддержку перехода на строку осуществить достаточно просто. Большая часть обеспечивается фреймворком отладчика, все что нам нужно, это правильно воспользоваться этим.

Шаг 1. Осуществление поддержки редактора.


Чтобы использовать функционал перехода на строку из фреймворка отладчика, редактор исходного кода должен осуществлять интерфейс IRunToLineTarget.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.codeandme.textinterpreter.debugger;  
  
public class RunToLineTarget implements IRunToLineTarget {  
  
 @Override  
 public void runToLine(IWorkbenchPart part, ISelection selection, ISuspendResume target) throws CoreException {  
  if (target instanceof TextStackFrame) {  
   IDebugTarget debugTarget = (IDebugTarget) ((IAdaptable) target).getAdapter(IDebugTarget.class);  
   if (debugTarget instanceof TextDebugTarget) {  
    IBreakpoint breakpoint = new TextRunToLineBreakpoint(((TextDebugTarget) debugTarget).getFile(), getLineNumber(selection));  
    RunToLineHandler handler = new RunToLineHandler(debugTarget, target, breakpoint);  
    handler.run(new NullProgressMonitor());  
   }  
  }  
 }  
  
 @Override  
 public boolean canRunToLine(IWorkbenchPart part, ISelection selection, ISuspendResume target) {  
  return (target instanceof TextStackFrame);  
 }  
  
 private static int getLineNumber(ISelection selection) {  
  if (selection instanceof ITextSelection)  
   // text selections are 0 based  
   return ((ITextSelection) selection).getStartLine() + 1;  
  
  return 0;  
 }  
}  


В вызове runToLine() мы создаем новый  TextRunToLineBreakpoint, автоматически активируемый разработчиком. Единственное отличие от TextLineBreakpoint заключается в том, что мы устанавливаем его флаг PERSISTED в false.

Реализация отладочного фреймворка так же учитывает установки предпочтений точек останова Run/Debug / Skip в течение обработки 'Перехода на Строку'. Хотя мне такая реализация кажется немного некорректной. Поскольку демо-интерпретатор работает молниеносно, обычные точки останова временами не будут отключаться достаточно быстро и могут даже сработать.

Шаг 2. Регистрация интеграции UI.


Чтобы добавить действие (action) в контекстное меню редактора, нам нужно добавить новую точку расширения org.eclipse.ui.popupMenus. Добавьте viewerContribution с значением id равным "textEditor.editorActions" и targetID - "#TextEditorContext". Теперь добавьте действие перехода на строку (Run to line) таким образом, как показано на скриншоте



Кроме того, нам необходимо зарегистрировать адаптер для текстового редактора, поскольку он изначально не осуществляет интерфейс IRunToLineTarget. RunToLineAdapter всего лишь превращает редакторы в IRunToLineTargets.

Облако тегов
Меню
Архив
© Psytronica.ru. Блог существа SherZa. 2015-2017 Наверх