Я хочу добавить пользовательское действие, когда пользователь нажимает на маркер в левой вертикальной линейке редактора
Мне удалось запустить пользовательское действие, добавив в plugin.xml
следующий код:
<extension point="org.eclipse.ui.editorActions">
<editorContribution targetID="org.eclipse.cdt.ui.editor.CEditor"
id="org.eclipse.cdt.debug.ui.CEditor.MyRulerActions">
<action label="%Dummy.label"
class="com.example.MarkerClickAction"
actionID="RulerClick"
id="com.example.MarkerClickAction">
</action>
</editorContribution>
</extension>
Я хочу вызвать пользовательскую реализацию IQuickFixProcessor
, но реализованный метод getCorrections
требует IInvocationContext
и IProblemLocation[]
.
Как я могу получить эту информацию?
Действительно плохая имплантация, о которой я подумал, состояла в том, чтобы смоделировать горячее нажатие Ctrl+1
, но если каретка не располагается на одной линии с маркером, на который нажали, она покажет быстрые исправления для метки из кареты:
public class MarkerClickAction implements IEditorActionDelegate {
@Override
public void run(IAction action) {
Robot robot = null;
try {
robot = new Robot();
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_1);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_1);
}
@Override
public void selectionChanged(IAction action, ISelection selection) {
// TODO Auto-generated method stub
}
@Override
public void setActiveEditor(IAction action, IEditorPart targetEditor) {
// TODO Auto-generated method stub
}
}
Если невозможно вызвать методы, стоящие за ярлыком Ctrl + 1
, как я могу расположить carret к линии маркера?