我正在为 Eclipse 开发插件。它将运行我的 clang 工具。在 clang 工具中,我正在编写简单的传递来检查每个 case 和 default 语句都必须有 break 语句。
我正在使用进程生成器运行我的 clang 工具。 我正在使用作业 API 来运行我的工具并使用 Display 类来打印错误。
当我运行我的插件时,我遇到了一些问题。 假设我评论了 case 或default 语句之一的break 语句,它应该在控制台中打印错误,即每个case 和default 语句都必须有break 语句。 在我输入其他内容或一些空格或尝试在我的评论后取消注释后,出现打印错误。 同样,当我取消注释时,它不应该打印错误,但它正在打印,但是当我输入某些内容或一些空格或尝试注释时,错误就会消失。
以下是我的代码的链接
下图显示了我正在开发插件的 Eclipse 控制台上未打印错误的第一种情况。 这显示了我正在开发插件的 Eclipse 控制台上的第二个案例打印错误。
这方面有什么帮助吗?
编辑: 我希望我的插件在控制台 View 上(而不是在开发控制台上)输出一些内容,或者在文本编辑器的装订线上输出一些点类型的内容,当我单击或悬停在该点上时,我想显示一些带有错误消息的弹出窗口.
我尝试通过使用此链接 https://wiki.eclipse.org/FAQ_How_do_I_write_to_the_console_from_a_plug-in%3F 打包控制台来在控制台 View 上打印消息 它有效,但新问题是,我将焦点从文本编辑器转移到了我创建的控制台,因此我无法测试我提到的问题。
对不起,我太期待了。
下图显示文本编辑器失去了对控制台 View 的焦点,并且您提到的按钮不在控制台 View 中,但在我正在编写代码的 Eclipse 控制台中。
最佳答案
当我按下 Ctrl+s 时,以下按键方法和 addKeyListener 不起作用。为了获取保存事件,我们必须使用带有保存命令的 ICommandService。
((StyledText) editor.getAdapter(Control.class)).addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent keyEvent) {
if (((keyEvent.stateMask & SWT.CTRL) == SWT.CTRL) && (keyEvent.keyCode == 's')) {
// System.out.println("From Display I am the Key down !!" + keyEvent.keyCode);
Job job = new Job("My job") {
@Override
protected IStatus run(IProgressMonitor arg0) {
// TODO Auto-generated method stub
StringBuilder builder = runCCChecker(path);
syncWithUi(builder);
return Status.OK_STATUS;
}
};
job.setUser(true);
job.schedule();
}
}
@Override
public void keyReleased(KeyEvent arg0) {
}
});
为了在每一行显示警告,我使用 IMarker 界面。 为了仅在我正在触发保存命令的 Eclipse 编辑器的当前 Activity 文件上运行我的工具,我正在使用 IPartService 服务。
以下是我的代码链接
工作正常。如果有人发现任何问题请告诉我。
关于java - 工具在 Eclipse 插件开发中延迟输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59985275/