2 votes

Plugin Eclipse pour lire le contenu d'un éditeur

Je veux écrire un plugin eclipse qui lit le contenu de la fenêtre de l'éditeur et l'affiche pour moi. Cela aurait dû être une tâche très simple après que j'ai trouvé comment le faire sur cet article. Ajout d'un élément au menu contextuel du visualiseur de texte d'Eclipse

Avant d'exposer mon problème, permettez-moi d'exposer ce que j'ai fait jusqu'à présent :

Je développe sur eclipse 3.7 et j'ai créé un simple plugin hello world dont le code a été auto-généré par eclipse pour moi.

Voici la fonction d'exécution :

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();
        }

    }

Maintenant, lorsque j'exécute ce code, j'obtiens la sortie que son type est "reusable editor" contrairement à ce qu'il aurait dû être "ITextEditor" (s'il vous plaît, corrigez-moi si je fais une déclaration stupide puisque je suis un novice dans le développement de plugins eclipse). J'ai essayé de vérifier le type d'instance de IReusableEditor (comme vous pouvez le voir dans le code ci-dessus, j'ai essayé de vérifier en utilisant "instance of") mais à ma grande surprise, il ne pointe vers aucune des classes qui implémentent l'interface IReusableEditor.

L'éditeur à partir duquel j'essayais de lire était une simple fenêtre d'éditeur dans laquelle j'avais écrit un peu de code java.

J'obtiens également une valeur nulle pour la variable doc2 dans les cas suivants

final IDocument doc2 = (IDocument) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor().getAdapter(IDocument.class);

Veuillez me dire où je fais l'erreur, merci d'avance.

1voto

Durin Points 511

Ok, j'ai compris comment lire depuis la fenêtre de l'éditeur.

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

            }

     }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X