title: What is the role of I*Binding in Eclipse JDT?
body: <p>My current understanding is that JDT provides us two different interface and class hierachies for representing and manipulating Java code:</p>
  
  <ul>
  <li><p>Java Model: provides a way of representing a java project. Fast to
  create but does not contain as many information as AST class
  hierachy, for example there are no information available about the
  exact position of each element in the source file (in AST that's
  available)</p></li>
  <li><p>AST: more detailed representation of the source code plus provides
  means for manipulating it.</p></li>
  </ul>
  
  <p>Is that correct?</p>
  
  <p>Now, there is also a hierarchy of interfaces named I*Binding (starting at <a href="http://help.eclipse.org/indigo/index.jsp?topic=/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/dom/IBinding.html">IBinding</a>), for example IMethodBinding. So for example, we have 3 different types for dealing with methods:</p>
  
  <ul>
  <li><a href="http://help.eclipse.org/indigo/index.jsp?topic=/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/IMethod.html">IMethod</a> (from Java Model)</li>
  <li><a href="http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/dom/MethodInvocation.html">MethodInvocation</a> (from AST, could get it from IMethod)</li>
  <li><a href="http://help.eclipse.org/indigo/index.jsp?topic=/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/dom/IBinding.html">IMethodBinding</a></li>
  </ul>
  
  <p>From doc IMethodBinding seems very like MethodInvocation from AST but I don't see a clear distinction and when should I use them. Could someone please clarify this?</p>