我想写一个eclipse插件,它从编辑器窗口读取内容并显示给我。在我发现如何在Adding item to Eclipse text viewer context menu
上发布这个帖子之后,这应该是一个非常简单的任务在我陈述我的问题之前,先说明我到目前为止做了什么:
我正在开发eclipse 3.7并且我创建了一个简单的hello world插件,其代码由eclipse为我自动生成。
这是运行功能:
public void run(IAction action) {
MessageDialog.openInformation(
window.getShell(),
"AnirudhPlugin",
"Hello, Eclipse world");
try {
IEditorPart part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
if(part instanceof IReusableEditor){
System.out.println("is of type reusable editor");
final IReusableEditor editor = (IReusableEditor)part;
if(editor instanceof AbstractTextEditor){
System.out.println("abstract");
}
if(editor instanceof StatusTextEditor){
System.out.println("status");
}
if(editor instanceof TextEditor){
System.out.println("text");
}
if(editor instanceof AbstractDecoratedTextEditor){
System.out.println("abs dec");
}
if(editor instanceof CommonSourceNotFoundEditor){
System.out.println("comm");
}
}
if ( part instanceof ITextEditor ) {
final ITextEditor editor = (ITextEditor)part;
IDocumentProvider prov = editor.getDocumentProvider();
IDocument doc = prov.getDocument( editor.getEditorInput() );
ISelection sel = editor.getSelectionProvider().getSelection();
if ( sel instanceof TextSelection ) {
final TextSelection textSel = (TextSelection)sel;
String newText = "/*" + textSel.getText() + "*/";
MessageDialog.openInformation(
window.getShell(),
"AnirudhPlugin",
newText);
doc.replace( textSel.getOffset(), textSel.getLength(), newText );
}
}else{
MessageDialog.openInformation(
window.getShell(),
"AnirudhPlugin",
"Not ITextEditor");
}
} catch ( Exception ex ) {
ex.printStackTrace();
}
}
现在当我运行这段代码时,我得到的输出是“可重复使用的编辑器”类型,不像它应该是“ITextEditor”(请纠正我,因为我是eclipse插件中的新手,我做了一些愚蠢的陈述DEV)。我试图检查IReusableEditor实例类型(正如你在上面的代码中看到的那样,我试图通过使用“instance of”来检查)但令我惊讶的是它没有指向任何实现IReusableEditor接口的类。
我试图阅读的编辑器是一个简单的编辑器窗口,我在其中编写了一些java代码。
此外,我将以下
的doc2变量值设为nullfinal IDocument doc2 = (IDocument) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor().getAdapter(IDocument.class);
请提前告知我,我在哪里犯错误。
答案 0 :(得分:1)
好的,我从编辑器窗口中了解了如何阅读
if (editor instanceof CompilationUnitEditor) {
CompilationUnitEditor compEditor = (CompilationUnitEditor)editor;
IEditorInput input = compEditor.getEditorInput();
IDocumentProvider provider = compEditor.getDocumentProvider();
IDocument document = provider.getDocument(input);
if (document != null) {
System.out.println("document contents:" + document.get());
}
}