Salut,
Un plugin Eclipse RCP peut démarrer de lui-même (il suffit qu'il ait un Activator (une classe), qu'on peut indiquer dans le formulaire qu'on remplit lorsqu'on créé le plugin). A partir du moment où le plugin est installé (mis dans le dossier plugins de Eclipse, ou via le dossier dropins).
Pour écouter la console, il y a apparement une extension : voir la doc. Il n'y donc à priori pas besoin d'activator, l'extension se chargeant toute seule d'installer le ConsoleLineTracker, mais ça ne coûte rien d'en avoir un (il est créé automatiquement).
Il faut un Eclipse RCP pour pouvoir faire un plugin. Tu fais "New Plug-in Project", tu remplis le formulaire qui s'affiche (le nom du plugin, la version de java, etc...), tu vas sur l'onglet Dependencies et tu y ajoutes une dépendance vers le plugin org.eclipse.debug.ui, qui définit le point d'extension ConsoleLineTracker. Il faut également ajouter une dépendance sur org.eclipse.jface.text, qui est utilisé par le ConsoleLineTracker. Ensuite, tu vas dans l'onglet Extensions, tu ajoutes une extension de type org.eclipse.debug.ui.consoleLineTrackers, et tu indiques le nom d'une classe, qui doit implémenter org.eclipse.debug.ui.console.IConsoleLineTracker (il suffit de cliquer sur class, et tu vas pouvoir directement créer la classe). Tu dois indiquer le processType java.
Ensuite tu peux y mettre le code que tu veux.
Pour tester ton plugin, tu fais Run as / Eclipse Application, qui va te lancer un nouvel eclipse, dans lequel tu pourras exécuter une classe Java pour tester le ConsoleTracker.
Pour déployer ton plugin, passe par le menu Export, Deployabel Plug-ins and Fragments, tu choisis un dossier, tu laisses générer le plugin, tu vas dans le dossier, et tu vas y trouver un dossier plugins, avec un jar : tu le copies dans le dossier plugins de ton Eclipse, et tu le redémarres.
Pour en savoir plus sur le dévellopement du plug-ins, voir le tutoriel de Lars Vogel. Tu pourrais, par exemple, faire une vue (View), pour y afficher les exceptions détectées dans la console.
Voici un exemple bidon (j'affiche chaque ligne détectée dans la console dans une boite de dialogue) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| public class DemoConsoleTracker implements IConsoleLineTracker {
private Shell shell;
private IConsole console;
@Override
public void init(IConsole console) {
this.console = console;
Display display = Display.getDefault();
display.syncExec(()->shell = new Shell(display));
}
@Override
public void lineAppended(IRegion line) {
Display.getDefault().syncExec(()-> handleMessage(line));
}
private void handleMessage(IRegion line) {
int offset = line.getOffset();
int length = line.getLength();
try {
String text = console.getDocument().get(offset, length);
MessageDialog.openInformation(shell, "Line appended in console", text);
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void dispose() {
Display.getDefault().syncExec(()-> shell.dispose());
}
} |
Ici, text contient la ligne ajoutée dans la console, il suffit de la parser, pour déterminer si elle contient un message du type stackTrace, par exemple. Ensuite, il y a plein de possibilités, comme utiliser des outils de JDT (pour accèder au contenu des classes), ou l'extensions ConsolsePatternMatchListeners, ou peut-être simple ajouter un IPatternMatchListener à l'instance de console.
Pour la configuration de l'extension :
En conclusion, je dirais que 2 semaines pour aborder tout ça quand on en a jamais fait peut être assez juste. Tout dépend de l'ambition. Je pense qu'afficher une vue, avec un TableViewer JFACE dans lequel vous affichez simplement les noms des exceptions peut-être fait assez rapidement, et ne fait pas appel à beaucoup de connaissance. Commencez déjà par ça. Vous jugerez sur le temps passé pour voir si vous voulez aller plus loin (par exemple, en cliquant sur une ligne, ouvrir la classe et se positionner sur la ligne dans le source).
[EDIT] J'ajoute le résultat du test, fait avec la classe bidon suivante :
1 2 3 4 5 6 7 8 9 10 11
|
public class Test {
public static void main(String[] args) {
try {
throw new Throwable("blah blah");
}
catch(Throwable t) {
t.printStackTrace();
}
}
} |
Et qui m'affiche dans la console :
java.lang.Throwable: blah blah
at Test.main(Test.java:5)
Mon plugin affiche donc :
Puis
Puis (probablement un \n final)
Partager