Eclipse插件读取编辑器的内容

时间:2011-11-27 08:17:45

标签: java eclipse eclipse-plugin

我想写一个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变量值设为null
final IDocument doc2 = (IDocument) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor().getAdapter(IDocument.class);

请提前告知我,我在哪里犯错误。

1 个答案:

答案 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());

            }

     }