我在这里为Eclipse创建自己的编辑器并发现了一个问题。 如果我打开一个文件并且它已经打开,Eclipse会打开一个新的编辑器。
所以,我需要避免这种情况,或者在编辑器打开后立即关闭它。
我的编辑器类是MultiPageEditorPart的子代,它有2个选项卡:第一个是Java编辑器,第二个是文本编辑器。 Java编辑器打开一个.java文件,文本编辑器打开我自己的文件。 我看到一些帖子说如何解决这个问题,但是我没有在这里的任何地方实现IEditorInput接口。
任何人都可以帮我吗? 非常感谢
这是我的编辑定义:
<extension point="org.eclipse.ui.editors">
<editor id="br.com.senior.wb.asas.editor.AsasEditor"
class="br.com.senior.wb.asas.editor.AsasEditor"
contributorClass="br.com.senior.wb.asas.editor.AsasEditorContributor"
extensions="java, afm"
icon="icons/editor_asas.png" name="Editor ASAS">
</editor>
</extension>
答案 0 :(得分:0)
如果您想要在另一个文件已经打开时打开java或afm文件时打开一个编辑器,那么您需要使用编辑器定义的matchingStrategy属性来定义编辑器匹配策略。
类似的东西:
<extension point="org.eclipse.ui.editors">
<editor id="br.com.senior.wb.asas.editor.AsasEditor"
class="br.com.senior.wb.asas.editor.AsasEditor"
contributorClass="br.com.senior.wb.asas.editor.AsasEditorContributor"
matchingStrategy="br.com.senior.wb.asas.editor.AsasEditorMatchingStrategy"
extensions="java, afm"
icon="icons/editor_asas.png" name="Editor ASAS">
</editor>
</extension>
public class AsasEditorMatchingStrategy implements IEditorMatchingStrategy
{
public boolean matches(IEditorReference editorRef, IEditorInput input)
{
if (!(input instanceof IFileEditorInput))
return false;
IFile inputFile = (IFile)input.getAdapter(IFile.class);
if (inputFile == null)
return false;
IFile currInputFile = (IFile)editorRef.getEditorInput().getAdapter(IFile.class);
if (currInputFile == null)
return false;
if (!inputFile.getProject().equals(currInputFile.getProject()))
return false;
// TODO add more checks that 'inputFile' and 'currInputFile' are a matching pair of files
}