Bonjour,
J'utilise l'API Rhino qui est un compilateur de javascript en JAVA.
J'ai des fichiers javascript que je veux compiler et trouver les appels de fonctions dans le code. Est-ce que quelqu'un connait rhino et peu me repondre?
Bonjour,
J'utilise l'API Rhino qui est un compilateur de javascript en JAVA.
J'ai des fichiers javascript que je veux compiler et trouver les appels de fonctions dans le code. Est-ce que quelqu'un connait rhino et peu me repondre?
qu'est ce que ça veux dire :
jusqu'ici tout va bien ...J'ai des fichiers javascript que je veux compiler
mais alors là j'ai du mal .et trouver les appels de fonctions dans le code
Dans le code compilé ?
javascript n'est il pas interprété plutôt ?
Ouais, je ne comprends pas tres bien comment Rhino fonctionne mais je sais qu'apres avoir compilé mes fichiers javascript rhino peut me retourné le nom des fonctions qui sont définies dans mon fichiers Javascript.
Maintenant, je voudrais trouver le nom des fonctions qui sont appellées dans le code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 FileReader lReader; lReader = new FileReader("javascript.js"); Object lResult = cx.evaluateReader(scope, lReader, "Mon Script", 1, null); Object[] fObj = scope.getIds(); Object lFct = scope.get((String)fObj[0],scope); if(lFct instanceof Function){ Function lFunction = (Function)lFct;
Est-ce que tu crois que c'est possible?
Appelées pendant l'éxecution ou appelées dans le code source :Maintenant, je voudrais trouver le nom des fonctions qui sont appellées dans le code.
Autrement dit, tu veux savoir quelles sont les methodes de ton code source qui sont réellement utilisées dans de ce même code.Envoyé par pmartin8
Dans mon environement de développement j'ai ce genre de fonction mais ce n'est pas une fonction du compilateur mais plutôt du builder. C'est à dire que une fois que le code est compilé, on compare le code source et le code compilé pour voir quelles sont les fonctions du code source qui ne sont pas utilisées.
Normalement, si ton compilateur est bien fait, il ne te compile pas les fonctions qui ne sont jamais utilisées.
Tout ce que fait le builder c'est te proposer de nettoyer ton code source des fonctions inutiles. Je travaille sous JSE8 si ça t'intèresse.
ouais c'est exactement ce que je veux faire!! En plus de ca je voudrais savoir les appels à des fonctions qui n'existent pas.
Est-ce que tu peux me dire comment je peux faire ca??
merci
non, en général.
Comment faire :
- trouve (si possible )une bonne interface de développement pour javascript et avec les fonctions de build dont je te parlai.
- Sinon t'as plus qu'a le faire à la main, mais tu as dejà la moitié du boulot qui est faite puisque tu as la liste des fonctions. Aprés c'est de l'analyse syntaxique. Quand tu rentre dans une fonction, tu testes si dans le corps de ta fonction il existe une sous chaine qui corresponfdrait à un element de ta liste.
Le probleme cest que je voudrais trouver s'il y a des appels a des fonctions qui n'exsitent pas...
Ca peu sembler bete comme ca ... mais cest que mes sources Javascript se trouvent dans plusieurs fichiers javascript (une centaine).
Je te donne un exemple. Dans le fichier 645 j'appelle la fonction doIt() qui se est difinie dans le fichier 203. Le programmeur pensait que le fichier 203 etait visible aux yeux du fichiers 645 mais cela est faux. L'erreur sera seulement lancé une fois que le fichier 203 est interprété. Je voudrais pouvoir le détecter avant l'interprétation...
Est-ce que tu penses que cest fesable?
oui,
algorithme simple : On cherche les fonctions inaccessibles du fichier X
parametres :
Soit A l'ensemble des fonctions du fichier X.
Soit B ensemble vide.
Pour chaque fonction f de A on teste si celle-ci est "visible".
sinon on ajoute f a B.
Résultat : B contenant les fonction inaccessibles de X.
Si on fait ça pour chaque fichier on peut savoir quelles sont les fonctions qui pose problème à l'interpretation.
Faudrai savoir ce que tu entends par visible ?
ok ... ton algorithme est simple.. mais il ne permet pas de détecter un appel a une fonction qui n'a jamais été défini.
Par exemple..
Supposons que la fonction "badFunction" est définie nulle part... On ne pourra pas détecter cette erreur.... A moins que j'ailles mal compris ton algorithme...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 function doIt(){ for(i=0; i < 10; i++){ badFunction(); } }
ok je vois,
Algorithme :
Données : A contient toutes les fonctions (déclarées) de tout les fichiers.
Pour chaque fichier faire ceci :
- Analyse syntaxique du fichier qui nous donne B contenant toutes les fonctions utilisées dans le fichiers (par exemple BadFonction mais aussi toutes les autres fonctions utilisées).
- Ensuite on compare A et B pour connaitre les elements de B qui ne sont pas dans A.
Résultat : C contenant les elements de B qui ne sont pas dans A, ou toutes les fonctions (utilisées) qui n'ont jamais étaient déclarées.
tu est obligé de faire une introspection syntaxique pour récupérer le nom des fonctions utilisées.
ahhh voila on s'approche du sujet chaud 8)
J'ai bien aimé ton expression "introspection syntaxique" mais as-tu une idée comment faire ca?
Merci encore!
je te donne quelques mots clés :
- arbre syntaxique.
- expression régulières.
- analyse syntaxique.
- je pense quand java tu dois avoir des outils avec des fonctions avancées.
Demande sur le forum, fait un nouveau post
Salut
ouais en cherchant avec tes mots clés je tombe sur un outil "avancé" Java qui s'appelle Rhino.
Rhino est un interpreteur/compilateur Javascript en Java. C'est la solution pour moi mais je n'ai pas trouvé comment faire un traitement sur le contenu d'une fonction. La fonction Javascript semble etre "l'atome" de Rhino donc elle n'est pas décomposable.
Merci quand meme pour ta tentative d'aide ... Je continues de chercher
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager