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

Eclipse Platform Discussion :

[Plug-in] Dériver le search d'Eclipse


Sujet :

Eclipse Platform

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 110
    Points : 75
    Points
    75
    Par défaut [Plug-in] Dériver le search d'Eclipse
    Bonjour,

    Dans l'élaboration de mon plug-in, il m'est nécessaire de chercher dans tous les fichiers Java du Workspace une expression régulière de la forme qui peut se situer n'importe où (bien évidemment dans des commentaires ou de la javadoc).

    Dans un premier temps j'avais pensé passer par l'arbre AST mais malheureusement ce n'est pas possible, AST trouvant bien les commentaires mais ne retournant le contenu que s'il s'agit de javadoc. Bref, la solution retenue ne fût donc plus celle là.

    Je voudrais désormais rechercher cette expression régulière comme-ci nous effectuons un CTRL+H...
    J'ai donc ajouté en dépendance le plug-in "org.eclipse.search".

    A partir d'ici j'ai deux options il me semble (je suis nouveau dans le développement de plug-in) :
    1. Créer une extension "org.eclipse.search.textSearchEngine"
    2. Utiliser directement la classe TextSearchEngine dans le code


    Ne voulant pas étendre la fonctionnalité de recherche je me dis que la solution n°1 n'est pas d'actualité.
    J'ai donc choisi la solution n°2 (je reste ouvert à toutes autres propositions).

    J'ai donc dans mon Handler quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    TextSearchEngine s = TextSearchEngine.create();
    TextSearchScope newSearchScope = TextSearchScope.newSearchScope(null, Pattern.compile("*.java"), true);
     
    TextSearchRequestor textSearchRequestor = new TextSearchRequestor(){
    			// TODO Quelles sont les méthodes à implémenter ?
    			@Override
    			public boolean acceptFile(IFile file) throws CoreException {
    				return true;
    			}
    		};
     
    IStatus search = s.search(newSearchScope, textSearchRequestor, Pattern.compile("#(TEST|IMPL)#.*#[0-9]+"), null);
    D'après ce que j'ai compris dans la documentation, le résultat serait contenu dans l'objet TextSearchRequestor.
    Mais je ne sais pas quelles sont les méthodes à implémenter et comment les implémenter, et je ne sais pas également quoi mettre dans le TextSearchScope.newSearchScope (j'ai mis null pour le tableau des IFile) ...
    Bref je suis un peu perdu.

    Pouvez-vous m'expliquer comment faire, un exemple, ou même me dire si je suis sur le bon chemin ou pas...

    Merci par avance pour votre aide.

  2. #2
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Je tiens à préciser que je n'ai jamais utilisé cette API (de recherche). Donc, il s'agit juste de supposition sur ce que j'ai pu glaner.
    Donc, tout d'abord, il faut que tu indiques sur quels fichiers va porter ta recherche (au lieu de laisser null). Pour récupérer les projets de ton workspace, il te faut dépendre du plug-in org.eclipse.core.resources.
    Ensuite, tu avais une petite erreur dans le pattern de ton expression régulière pour indiquer seulement les fichiers java.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
    IProject[] projects = root.getProjects();
    TextSearchEngine s = TextSearchEngine.create();
    TextSearchScope newSearchScope = TextSearchScope.newSearchScope(projects, Pattern.compile(".*\\.java"), true);
     
    TextSearchRequestor textSearchRequestor = new TextSearchRequestor(){
    	// TODO Quelles sont les méthodes à implémenter ?
    	@Override
    	public boolean acceptFile(IFile file) throws CoreException {
    		return true;
    	}
    };
     
    IStatus search = s.search(newSearchScope, textSearchRequestor, Pattern.compile("#(TEST|IMPL)#.*#[0-9]+"), null);
    A priori, les résultats de ta recherche sont traités dans le TextSearchRequestor (tu peux regarder un exemple d'implémentation fait par Eclipse avec le TextSearchResultCollector et t'en inspiré pour ton cas).

    Voilà quelques pistes, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 110
    Points : 75
    Points
    75
    Par défaut
    Merci c'était une bonne piste.
    Je propose à la suite ce que j'ai fait. C'est primitif car ce que je donne est sorti de mon contexte que je ne peux dévoiler.

    Le handler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class SampleHandler extends AbstractHandler {
     
        public Object execute(ExecutionEvent event) throws ExecutionException {
     
            TextSearchResultCollector textSearchResultCollector = new TextSearchResultCollector();
     
            IStatus search = TextSearchEngine.create().search(FileTextSearchScope.newWorkspaceScope(new String[] { "*" }, false), textSearchResultCollector, Pattern.compile("#(TEST|IMPL)#.*#\\d+"), null);
     
            return null;
        }
    }
    Et le TextSearchResultCollector :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class TextSearchResultCollector extends TextSearchRequestor{
     
     
        @Override
        public boolean acceptPatternMatch(TextSearchMatchAccess matchAccess) throws CoreException {
            String fileContent = matchAccess.getFileContent(matchAccess.getMatchOffset(), matchAccess.getMatchLength());
            return true;
        }
     
     
        @Override
        public boolean reportBinaryFile(IFile file) {
            return false;
        }
     
    }
    Dans ce code si on met un point d'arrêt dans acceptPatternMatch on a le résultat de la recherche, libre à chacun d'en faire ce qu'il en veut.
    Par contre il manque tout simplement la ligne à laquelle a été trouvée l'occurrence, cette information n'étant pas disponible il faut la calculer. Mais bon cela n'a rien à voir avec le framework Eclipse RCP.

    Merci en tout cas.

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

Discussions similaires

  1. Installer le plug-in de modèle UML sur Eclipse Juno
    Par sigway dans le forum Eclipse
    Réponses: 1
    Dernier message: 26/02/2013, 09h46
  2. [Search/Replace] Eclipse fichier xml
    Par GyZmoO dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 09/01/2009, 19h57
  3. Les search dans eclipse
    Par pixelrock dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 26/11/2008, 14h57
  4. incertion de plug-in écrit en c# dans eclipse
    Par Mils-- dans le forum Eclipse
    Réponses: 1
    Dernier message: 09/01/2008, 09h19
  5. [UML] Cherche un plug in uml 2.1 pour eclipse
    Par jlassiramzy dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 03/01/2007, 18h39

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