2011-04-19 1 views
1

J'utilise IntelliJ IDEA Community Edition 10 pour développer un projet Java SE. Mon application prend beaucoup de temps à démarrer, donc mon moyen préféré de déboguer le code est Lancer -> Arrêter à un point d'arrêt -> Ouvrez la fenêtre d'évaluation du code -> tapez du code et voyez ce qu'il renvoie.Comment puis-je étendre la fonction d'évaluation de code IntelliJ IDEA CE?

Mais le problème se pose lorsque mon code renvoie un grand tableau/collection d'objets. Ce que je veux, c'est filtrer les objets par la valeur d'un champ ou d'autres critères.

Je pourrais utiliser Apache Commons Collections ou Google Guava pour faire le filtrage, mais l'évaluation de code d'IntelliJ IDEA ne permet pas la création de classes anonymes à la volée, que j'ai besoin de définir Predicates.

Je pourrais aussi utiliser lambdaJ, mais les classes d'objets dans mes immenses collections sont déclarées finales (et je ne peux pas changer ça), donc lambdaJ ne peut pas étendre ces classes pour son fonctionnement.

J'ai également essayé d'utiliser BeanShell, mais cela nécessite que je passe le code sous forme de chaîne, ce qui tue le code-achèvement d'IDEA. De plus, bsh ne peut pas utiliser les variables locales dans le processus en cours de débogage. Enfin, je dois spécifier des noms de classe complets à chaque fois.

Quelqu'un peut-il aider à trouver une solution à ce problème? Cela peut être un moyen magique d'étendre l'évaluation de code d'IntelliJ IDEA pour prendre en charge des classes anonymes ou un autre moyen de filtrer les collections qui fonctionneront dans cette situation.

+0

Il y a une demande de fonctionnalité sur tracker question JetBrains, [feuille d'évaluation pour Java] (http://youtrack.jetbrains.com/issue/IDEABKL-6587). Je suggère de le remettre en question si vous avez des préoccupations semblables à celles que j'ai décrites ici. Ce n'est pas exactement la même chose, mais c'est un pas dans la bonne direction. – vadipp

Répondre

0

Vous pouvez toujours utiliser lambdaj en étendant ses fonctionnalités avec vos propres convertisseurs, agrégateurs et Matchers comme décrit ici:

http://code.google.com/p/lambdaj/wiki/LambdajExtensibility

+0

Merci @MarioFusco et @PeterLawrey, mais de cette façon, je vais devoir créer ces fonctionnalités de filtrage avant de démarrer le programme. Dans mon cas, il est important de commencer le programme et de commencer à expérimenter - appeler des méthodes et voir les résultats. – vadipp

0

Vous pouvez vous écrire vos propres méthodes pour filtrer les résultats que vous voulez. Tant qu'ils sont compilés avant de commencer le débogage, ils peuvent être utilisés dans l'évaluation. par exemple.

MyFilter.filter(result()).from(1).to(10) // etc 
Questions connexes