methodLineTables テーブルの各エントリーの値は、
classSourceFile データ・ストリングによって参照されるソース・ファイルの行番号、つまり実行可能単位のソース行番号に対応します。
methodLineTables
ストリングの例を以下に示します。
#51+1201#75+11,41
以下に、ストリングの解釈の方法を示します。
- 番号記号 (「#」) のすぐ後の数字は、クラスのソース・コード内の行番号をそのまま表します。この例では、クラス内の最初のメソッド内の最初の実行可能単位は行 51 にあります。
- 正符号 (「+」) の後の数字一桁一桁は、次の実行可能単位の行番号を生成するために前の行番号に加算する行の数を表します。この例では、正符号の後の数字
(+1201) が、2 番目から 5 番目までの実行可能単位の行番号の計算に使用されます。
- 51 + 1 = 2 番目の実行可能単位の行番号: 52
- 52 + 2 = 3 番目の実行可能単位の行番号: 54
- 54 + 0 = 4 番目の実行可能単位の行番号: 54 (1 つのソース行に 2 つの実行可能単位がある)
- 54 + 1 = 5 番目の実行可能単位の行番号: 55
- 行番号の増分がマイナスになる場合、または 9 より大きい場合は、実行可能単位の行番号をそのまま指定します。この例では、6 番目の実行可能単位は行 75 にあり、前の行番号の 55 より 20 大きくなっています。この場合、6 番目の実行可能単位として行番号をそのまま指定し、その後相対的な行番号の演算を再度開始します (#75+11)。
- 75 = 6 番目の実行可能単位の行番号
- 75 + 1 = 7 番目の実行可能単位の行番号: 76
- 76 + 1 = 8 番目の実行可能単位の行番号: 77
- コンマ (「,」) は、1 つのメソッドの終了と次のメソッドの開始を示します。 コンマの後の数字と記号は、上記と同様に解釈されます。この例では、2 番目のメソッドの最初の実行可能単位の行番号は、前のメソッドの最後に計算された行番号より 4 だけ大きくなります。したがって、相対的な行番号の計算がコンマの後 (,41) で続行します。
- 77 + 4 = 2 番目のメソッドの最初の実行可能単位の行番号 : 81
- 88 + 1 = 2 番目のメソッドの 2 番目の実行可能単位の行番号 : 89
注: すべての実行可能単位がそれに関連するソース情報を持っているとは限りません。
例外処理、初期化、同期のように、Java 言語のセマンティクスのインプリメントのためにコンパイラーによって作成されるものもあります。これらの生成済み実行可能単位は、
methodLineTables ストリング内でゼロの完全な行番号を持ちます。ゼロの完全な行番号は、使用可能な行番号情報がないことを示します。
メソッド全体にソース情報が含まれない場合、メソッドは行番号ゼロに対応する 1 つの実行可能単位を持つものとみなされます。
methodLineTables ストリングのその他の例とその意味を以下に示します。
methodLineTables のストリング |
意味 |
+5 |
最初のメソッドの最初の実行可能単位の行番号が 10 より小さい場合、ストリング全体が正符号で始まり、行ゼロからの増分を始めます。この例では、最初のメソッドの最初の実行可能単位は行 5 で始まります。 |
+0 |
最初のメソッドにソース情報がない場合、ストリングは +0 から始まります。このようなメソッドに適用される executableUnit プローブ・フラグメントは、このメソッドの先頭に 1 度だけ挿入されます。 |
...#437,#457+123... |
メソッドの最初の実行可能単位が直前のメソッドの最後の実行可能単位の 10 行以上後から始まる場合、コンマ、番号記号、および新しいメソッドの最初の実行可能単位の行番号ストリングがパターンとなります。この例では、新しいメソッドの最初の実行可能単位が直前のメソッドの最後の実行可能単位の 20 行後から始まります。 |
...#437,+2... |
メソッドの最後の実行可能単位で
「#」の表記を要求し、次のメソッドの最初の実行可能単位を少し離すように要求することが可能です。
この部分的な例では、1 つのメソッドの最後の実行可能単位が行 437 で始まり、次のメソッドの最初の実行可能単位は行 439 で始まります。 |