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.