J'ai ici une chaîne qui contient le code source d'une classe. Maintenant j'ai une autre chaîne qui contient le nom complet d'une méthode dans cette classe. Le nom de la méthode est par exempleRécupérer le code source de la méthode à partir du fichier de code source de la classe
public void (java.lang.String test)
Maintenant, je veux récupérer le code source de cette méthode à partir de la chaîne avec le code source de la classe. Comment puis je faire ça? Avec String#indexOf(methodName)
je peux trouver le début du code source de la méthode, mais comment puis-je trouver la fin?
==== ==== EDIT
je le compte approcher des accolades:
internal void retrieveSourceCode()
{
int startPosition = parentClass.getSourceCode().IndexOf(this.getName());
if (startPosition != -1)
{
String subCode = parentClass.getSourceCode().Substring(startPosition, parentClass.getSourceCode().Length - startPosition);
for (int i = 0; i < subCode.Length; i++)
{
String c = subCode.Substring(0, i);
int open = c.Split('{').Count() - 1;
int close = c.Split('}').Count() - 1;
if (open == close && open != 0)
{
sourceCode = c;
break;
}
}
}
Console.WriteLine("SourceCode for " + this.getName() + "\n" + sourceCode);
}
Cela fonctionne plus ou moins bien, mais, si une méthode est définie sans corps, il échoue. Des allusions comment résoudre cela?
Supposons que cela dépend entièrement de la langue du code que vous analysez.Il ressemble à Java, auquel cas vous comptez des accolades. – lesscode
C'est java. Alors suggérez-vous de compter les boucles ouvertes et si c'est 0, la méthode est terminée? –
est-ce en utilisant ikvm? – IanNorton