IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

[regex] pattern pour une methode publique


Sujet :

Collection et Stream Java

  1. #1
    Invité
    Invité(e)
    Par défaut [regex] pattern pour une methode publique
    Bonjour,

    J'essaye de créer un pattern qui me permettrais d'extraire des methodes.
    Mon but est de lire des .java, et de récupèrer le nom et les paramètres des methodes.
    Pour l'instant j'essaye simplement de récupèrer les lignes contenant une méthode, j'ai donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String expr = "^(.*public ).*[{$]";
    if ( line.matches(expr) )
      System.out.println(line);
    ce qui me donne :
    public interface Actions {
    public class Worker extends Thread {
    public Worker(Socket client) {
    public void run() {
    public static void main(String[] args) {
    public int getId() {
    public int setId(int id) {
    Je voudrais encore nettoyer le résultat des classes, interfaces, constructeurs et main mais je n'y arrive pas..

    Pouvez-vous m'aider pour créer mes expressions ?

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    Un truc du genre :
    ^\p{Space}*public\p{Space}+\p{Alpha}+(\[\])?\p{Space}+\p{Alpha}+\p{Space}*\(.*\)$
    non testé mais garde que les fonctions ayant un 'retour' (donc pas les constructeurs) et n'ayant pas de 'mots additionnels' tels que static.

    En sachant que l'interieur des parenthèses pourrait etre plus precis. Apres tout depend de ce que tu veux faire. Si le code a été compilé, on est sur qu'il est valide et c'est deja plus facile. Apres s'il a été compilé tu pourrais utilisé l'API de reflexion à la place de regex.
    Et si tu utilise les generiques, je ne pense pas que ma regle fonctionne.

    Une solution plus simple a mettre en oeuvre est d'utiliser plusieurs regles basiques de suites au lieu d'une seule très complexe.

    EDIT : ne fonctionne également pas si il y a des /* commentaires */ dans la declaration.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par TabrisLeFol
    Si le code a été compilé, on est sur qu'il est valide et c'est deja plus facile. Apres s'il a été compilé tu pourrais utilisé l'API de reflexion à la place de regex.
    ...
    Une solution plus simple a mettre en oeuvre est d'utiliser plusieurs regles basiques de suites au lieu d'une seule très complexe.
    Oui je pourrais utilise la réflexion sauf que l'utitilitaire ira slire ces patterns dans un fichier ".properties" histoire d'être bein evolutif et de pouvoir fonctionner éhalement pour du php ou asp ou autres..

    Mon objectif est de collecter tous les fichiers portants une extension donnée, d'y récupèrer les methode, fonctions et de pouvoir faire un résumé de qui utilise quoi.. Pour avoir un résultat comme ceci :
    GroupeDao utilise MysqlPool.getConnexion() sur la ligne 51 : 'connexion = MysqlPool.getConnexion();'

  4. #4
    Invité
    Invité(e)
    Par défaut
    ceci semble fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    patterns=^(.*)public(.*)[^main](.*)[\(.*\)](.*)[{]$
    et ne me donne que des lignes de ce genre pour un listing de différentes classes et interfaces :
    (résultat aprèstrim() )
    public DaoException(String msg) {
    public DaoException(String msg, Throwable cause) {
    public DaoException(Exception e) {
    public Throwable getCause() {
    public void printStackTrace() {
    public void printStackTrace(PrintStream s) {
    public void printStackTrace(PrintWriter s) {
    public String getMessage() {
    public String getLocalizedMessage() {
    public StackTraceElement[] getStackTrace() {
    public synchronized Throwable fillInStackTrace() {
    public synchronized Throwable initCause(Throwable cause) {
    public void setStackTrace(StackTraceElement[] stackTrace) {
    public String toString() {
    public Exception getBasicException() {
    public Categorie[] listeCategories() throws DaoException {
    public Categorie[] listeCategories(Categorie pattern) throws DaoException {
    public boolean sauveCategorie(Categorie categorie) throws DaoException {
    public Categorie rechercheCategorie(Categorie pattern) throws DaoException {

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Recherche du bon pattern pour une expression régulière
    Par erehcab dans le forum Langage
    Réponses: 9
    Dernier message: 17/03/2010, 13h06
  2. comment creer un backgroundWorker pour une methode ?
    Par alaa_85 dans le forum VB.NET
    Réponses: 2
    Dernier message: 04/06/2007, 21h43
  3. [RegEx] Aide pour une REGEX
    Par Death83 dans le forum Langage
    Réponses: 6
    Dernier message: 28/06/2006, 15h50
  4. Réponses: 1
    Dernier message: 15/05/2006, 18h43
  5. Quel design pattern pour réaliser une synthèse
    Par jbwan dans le forum Design Patterns
    Réponses: 3
    Dernier message: 21/04/2006, 12h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo