1

Eclipse Java コンパイラ (JDT.rsc) によって生成される構文ツリーにアクセスするために、Rascal ライブラリを使用しています。

抽象構文ツリーがどのように機能するかを修正しようとしています。私が見逃していることの1つは、「variableBinding」です。変数宣言という 1 つのステートメントを含む 1MyClassつのメソッドを持つ非常に単純なクラスを想像してください。文字列変数の宣言は、以下の AST 抜粋で表されます。doNothing()myVarmyVar

@bindings注釈内のvariableBindingキーの下に、変数へのパスの連続するコンポーネントを表すリストがありますmyVar。最後の項目は、 Id コンストラクターによって表される実際の変数自体を表しvariable(str name, int id)ます。

質問: ID の意味は何ですか?

doNothing()メソッドを複製して名前を付けると、AST でandがdoNothing2()見つかるため、これは確かに一意ではありません。それは正確に何を識別しますか?variable("doNothing",0)variable("doNothing2",0)

...
variableDeclarationFragment(
  "myVar",
  none())[
  @bindings=(
    "typeBinding":entity([
        package("java"),
        package("lang"),
        class("String")
      ]),
    "variableBinding":entity([
        class("MyClass"),
        method(
          "doNothing",
          [],
          entity([primitive(void())])),
        variable("myVar",0) // Here it's 0, but 
      ])
  ),
  @javaType=entity([
      package("java"),
      package("lang"),
      class("String")
    ]),
  @location=|project://my-project/src/MyClass.java|(60,5,<4,15>,<4,19>)
]
...
4

1 に答える 1

3

この id フィールドは、実際には Eclipse によって内部的に割り当てられた識別子のようです。ID のソースである IVariableBinding インターフェースの JavaDoc をここで見ることができます。

http://help.eclipse.org/indigo/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/dom/IVariableBinding.html#getVariableId()

getVariableId()そこに移動しない場合はリンクをクリックするだけで、代わりにインターフェースのページに移動します. これは、ID を取得するために呼び出されるメソッドです。私が知る限り、これはあまり有用ではなく、ほとんどの場合無視しても問題ありません。

于 2013-08-15T02:32:04.467 に答える