ここには、クラスのソースコードを含むStringがあります。今私は、このクラスのメソッドのフルネームを含む別のStringを持っています。メソッド名は、例えば、。クラスソースコードファイルからメソッドのソースコードを取得します。
public void (java.lang.String test)
ここで、このメソッドのソースコードを、クラスのソースコードを持つ文字列から見直したいと思います。どうやってやるの? String#indexOf(methodName)
私は方法のソースコードの開始を見つけることができますが、私はどのように最後を見つけるのですか?
==== ==== EDIT
私は、カウントカーリーブレースのアプローチを使用:
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);
}
方法は、本体なしで定義されている場合、これは、しかし、多かれ少なかれ、正常に動作し、それは失敗する。どのようにそれを解決するためのヒント?
あなたが解析しているコードの言語に完全に依存しているとします。Javaのように見えますが、その場合は中括弧を数えることになります。 – lesscode
これはjavaです。だからあなたは開いたカールを数えることをお勧めします、そして、これが0ならば、方法は完了ですか? –
これはikvmを使用していますか? – IanNorton