Bonjour,
Je voudrais savoir s'il y a un moyen d'écouter Eclipse et de choper toutes les commandes qu'ils executent ?
Les commandes style "make all" ...
D'avance merci, je ne sais vraiment pas dans quel sens chercher !
Version imprimable
Bonjour,
Je voudrais savoir s'il y a un moyen d'écouter Eclipse et de choper toutes les commandes qu'ils executent ?
Les commandes style "make all" ...
D'avance merci, je ne sais vraiment pas dans quel sens chercher !
Salut,
la méthode addExecutionListener(IExecutionListener listener) de la classe ICommandService. te permettra de faire ça.
Bonjour,
suite à ta réponse j'ai ajouté un point d'extension org.eclipse.ui.startup:
Le listener est bien créé au startup de mon appli.Code:
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
36
37
38 public class ActivateListenerCommands implements IStartup { @Override public void earlyStartup() { ICommandService commandService = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class); commandService.addExecutionListener(new IExecutionListener() { @Override public void notHandled(String commandId, NotHandledException exception) { System.out.println("notHandled"); } @Override public void postExecuteFailure(String commandId, ExecutionException exception) { System.out.println("postExecuteFailure"); } @Override public void postExecuteSuccess(String commandId, Object returnValue) { System.out.println("postExecuteSuccess"); } @Override public void preExecute(String commandId, ExecutionEvent event) { System.out.println("preExecute"); } }); } }
Mais je ne passe jamais dans les méthodes du listener... une idée ?
Merci en tout cas :) !
Salut,
À tester aussi, tu as la classe ExternalActionManager (si jamais tu as un mélange d'actions et de commandes dans ton application RCP). Elle te permettra d'ajouter un listener sur les changements de propriétés des actions. Du coup, il te faut voir les états qui sont renvoyés par ce listener (pas testé pour l'instant).
Tu aurais donc un code qui ressemble à ça pour tes actions:Voilà, à+Code:
1
2
3
4
5 ExternalActionManager.getInstance().getCallback().addPropertyChangeListener("my.identifier", new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { ... } });
Gueritarish
Gueritarish,
et si je ne connais pas les actions ?
Parce que ce qui me pose justement problème ce sont les commandes et actions que je n'ai pas développées et que je souhaite tracer quand même.
Je surcharge un IDE eclipse, donc toutes les actions CDT par exemple j'en hérite .. (build project, clean project...)
a+
Ça va être vachement plus délicat...
Je ne connais pas de mécanismes pour accéder à l'ensemble des actions (ce qui ne veut absolument pas dire qu'un tel mécanisme n'existe pas...).
Après, ce que tu peux faire c'est parcourir les extensions pour le point d'extension org.eclipse.ui.actionSets et garder ceux qui concerne CDT, mais ça reste un peu bancal (je pense notamment aux actions qui sont ajouté dans le code)...
J'ai pas mieux pour l'instant :?
Si les actions que tu veux monitorer sont des jobs (généralement le cas pour les builds/refactorings & cie), alors tu peux récupérer le JobManager et y installer un JobChangedListener.
Fais attention en implémentant ce genre de listener globaux, il vont tourner très très très souvent, donc il faut faire attention à ce qu'ils ne soient pas gourmand en temps, surtout si quand ils sont appelés pour rien.
Je récupère bien les jobs de build, clean.... mais je ne récupère que peu d'information sur ce job : Son nom par ex (Rebuilding selected project...), c'est déjà pas mal mais puis-je m'y fier pour récupérer que ceux que je veux logger ?
ex:
en tout cas je vais creuser par là, MerciCode:
1
2
3
4 if(event.getJob().getName().equalsIgnoreCase("Rebuilding selected project...")){ //blabla }
Le nom, je ne pense pas qu'il faut s'y fier, d'autant plus que ca ressemble surtout a un label, qui est internationalisable.
Peut-etre ces actions ont-elles des types specifiques pour leurs job. Auquel cas tu pourrais essayer de regarder le type et de les caster.
Hello !
alors oui les jobs ont des types spécifiques, par exemple : AutoBuildJob MAIS ce sont des types non visibles "The type AutoBuildJob is not visible" :(
Voilà qui clos le débat je crois !
Tant pis ! merci pour votre aide quand même
Chris
Salut,
et en faisant :
est-ce que tu ne pourrais pas faire ce que tu cherches à faire ?Code:
1
2
3
4
5
6
7 org.eclipse.core.resources.ResourcesPlugin.getWorkspace().addResourceChangeListener(new IResourceChangeListener() { public void resourceChanged(IResourceChangeEvent event) { System.out.println(event.getType()); // pour les types d'évenement voir les constantes dans IResourceChangeVent } };
Hello Joel !
Avec ton code, je ne différencie pas le "build" du "rebuild", à la rigueur passe..
Mais je ne vois pas passer le "clean" par exemple, ni le "build all configurations" par exemple.
Mais merci :)
Avec IResourceChangeEvent.getBuildKind(), tu peux connaitre le type de build (AUTO, FULL, INCREMENTAL, ou suite à un CLEAN) : je ne vois pas trop ce que tu appelles rebuid par contre.
Je suppose qu'un type PRE_BUILD avec un buildKind CLEAN_BUILD devrait signifier "après clean" : à vérifier...
le "Build all configurations" doit pouvoir se traiter en trouvant comment récupérer ce qui est buildé (par getResource() je pense) et en le comparant à une liste de projets : à mon avis, tu n'auras pas un type particulier...
getBuildKind()
"Returns the kind of build that caused this event, or 0 if not applicable to this type of event."
J'ai toujours 0 ...
Mmm... c'est censé vouloir dire qu'il n'y a pas de buildKind ?! Du coups je ne sais pas trop ce que ça signifie.
En debug, tu pourrais mettre un break point et regarder d'ou vient l'appel (la stacktrace), c'est peut être normal dans ton cas... et tu pourras l'interpréter du coup.
Si je regardes le code, je vois bien le passage du buildKind adéquate, par exemple pour la build auto.