Java 如何以编程方式打开启用编辑功能的eclipse比较编辑器?

Java 如何以编程方式打开启用编辑功能的eclipse比较编辑器?,java,eclipse,compare,editor,filecompare,Java,Eclipse,Compare,Editor,Filecompare,我试图使用eclipse比较编辑器(org.eclipse.compare)来比较两个文件。比较编辑器打开并显示差异。但在比较编辑器中未启用任何编辑或合并。首先,我准备输入并调用CompareUI.openCompareEditor(输入) 这将打开eclipse比较编辑器,如屏幕截图()所示,但无法在比较编辑器中编辑(不允许添加或删除任何字符)左侧文件或右侧文件。如屏幕截图所示,“从左向右复制更改”和“从右向左复制更改”按钮也被禁用 如何在此编辑器中启用编辑功能?查看源代码,内容查看器必须是扩

我试图使用eclipse比较编辑器(org.eclipse.compare)来比较两个文件。比较编辑器打开并显示差异。但在比较编辑器中未启用任何编辑或合并。首先,我准备输入并调用
CompareUI.openCompareEditor(输入)

这将打开eclipse比较编辑器,如屏幕截图()所示,但无法在比较编辑器中编辑(不允许添加或删除任何字符)左侧文件或右侧文件。如屏幕截图所示,“从左向右复制更改”和“从右向左复制更改”按钮也被禁用


如何在此编辑器中启用编辑功能?

查看源代码,内容查看器必须是扩展了
ContentMergeViewer
的内容,而不仅仅是
ContentViewer
,例如
textmmergeviewer
。如何确定这一点很复杂,请看
CompareUIPlugin.findContentViewerDescriptor
@greg-449在我的案例中,我没有实现ContentViewer。我认为内容视图总是由比较编辑器在内部使用。ITypedElements决定使用哪一个。@greg-449那么我如何使它工作呢?我可以做什么改变谢谢我不知道,我很久没有使用比较编辑器了。尝试调试FindContentViewDescriptor调用。
public class CompareItem implements IStreamContentAccessor, ITypedElement, IModificationDate {

private File content;
private long modifiedDate;
private String fileName;

public CompareItem(File left, long lastModified, String name) {
    content = left;
    modifiedDate = lastModified;
    fileName = name;
}
@Override
public long getModificationDate() {
    return modifiedDate;
}
@Override
public String getName() {
    return fileName;
}
@Override
public String getType() {
    return "JAVA";
}
@Override
public InputStream getContents() {
    try {
        return new FileInputStream(content);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    return null;
}
@Override
public Image getImage() {
    return null;
}

}


public class CompareInput extends CompareEditorInput {

public CompareInput() {
    super(new CompareConfiguration());
}

protected Object prepareInput(IProgressMonitor pm) {
    File file1 = new File("D:\\hello.txt");
    File file2 = new File("D:\\hello2.txt");
    
    CompareItem ancestor = 
       new CompareItem(file1, file1.lastModified(), file1.getName());
    CompareItem left = 
       new CompareItem(file1, file1.lastModified(), file1.getName());
    CompareItem right = 
       new CompareItem(file2, file2.lastModified(), file2.getName());
    
    return new DiffNode(Differencer.CHANGE, ancestor, left, right);
 }

}


public class SampleHandler extends AbstractHandler {

@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
    
    CompareInput input = new CompareInput();
    CompareConfiguration compareConfiguration = input.getCompareConfiguration();
    compareConfiguration.setLeftEditable(true);
    compareConfiguration.setRightEditable(true);
    
    CompareUI.openCompareEditor(input);
    return null;
}

}