我似乎遇到了将问题标记与资源相关联的问题;就我而言,我正在尝试为编辑器创建问题标记。
为实现这一目标,我尝试了以下方法:
public class MyEditor extends TextEditor{
private ColorManager colorManager;
public MyEditor() {
super();
...
IResource resource = (IResource) getEditorInput().getAdapter(IResource.class);
try
{
marker = resource.createMarker(IMarker.PROBLEM);
}
catch (CoreException e)
{
e.printStackTrace();
}
}
然而,问题是getEditorInput()一直返回null。我假设我没有在正确的位置调用它。我认为在设置编辑器后创建标记是理想的,但这证明不是这样。
有没有人有任何建议来获取我想要的正确资源,以便我可以创建问题标记?我想在编辑器中显示错误等。
我在线查看了创建标记的示例,但大多数只是显示传递ITextEditor对象的方法,而不显示方法调用的位置。 (例如:Creating Error Marker for Compiler -- see reportError method)
谢谢。 保罗
编辑: 我还查看了有关问题标记的以下链接,但同样,它从资源调用createMarker(在本例中为res),但没有显示它的设置。 见Show Syntax Errors in An Eclipse Editor Plugin
答案 0 :(得分:1)
EditorInput在init方法中初始化 您可以覆盖init或
public class MyEditor extends TextEditor{
private ColorManager colorManager;
public MyEditor() {
super();
...
}
public void init(IEditorSite site, IEditorInput input)
throws PartInitException {
super.init(site, input);
IResource resource = (IResource) getEditorInput().getAdapter(IResource.class);
try
{
marker = resource.createMarker(IMarker.PROBLEM);
}
catch (CoreException e)
{
e.printStackTrace();
}
}
答案 1 :(得分:0)
我从getEditorInput()
对象的run()
方法创建了一个标记(包括对Action
的调用)。
public class MyAction extends Action {
...
public void run() {
...
int line = ...;
IEditorInput ei = editor.getEditorInput()
if (ei != null)
createMarkerAt(line, ei);
}
}
加法(关注保罗的评论)如何获得编辑?
好吧,在我的应用程序中,我通过重写AbstractRulerActionDelegate
方法(其中,BTW,必须 - 这个方法是抽象的)来继承createAction(ITextEditor e, IVerticalRulerInfo ri)
,我的应用程序可以获得相关的{{1}对象。