2013-01-29 34 views
5

hiểu biết hiện tại của tôi là JDT cung cấp cho chúng ta hai giao diện và lớp hierarchies khác nhau cho đại diện và thao tác mã Java:Vai trò của I * Ràng buộc trong JDT Eclipse là gì?

  • Java mẫu: cung cấp một cách để đại diện cho một dự án java. Nhanh để tạo nhưng không chứa nhiều thông tin như lớp AST hệ thống phân cấp, ví dụ như không có thông tin có sẵn về vị trí chính xác của mỗi phần tử trong tập tin nguồn (trong AST đó là sẵn)

  • AST: đại diện chi tiết hơn về mã nguồn cộng với cung cấp có nghĩa là để thao tác nó.

Điều đó có đúng không?

Bây giờ, cũng có một hệ thống phân cấp các giao diện có tên I * Binding (bắt đầu tại IBinding), ví dụ như IMethodBinding. Vì vậy, ví dụ, chúng tôi có 3 loại khác nhau để đối phó với các phương pháp:

Từ doc IMethodBinding dường như rất giống với MethodInvocation từ AST nhưng tôi không thấy sự phân biệt rõ ràng và khi nào tôi nên sử dụng chúng. Ai đó có thể làm rõ điều này?

+1

Bạn có thể nói cách lấy phương thức MethodInvocation từ IMethod không? – berezovskyi

Trả lời

8

Nút AST thô không chứa tham chiếu giữa chúng, ví dụ: từ việc sử dụng biến trở lại khai báo của nó, hoặc từ lời gọi phương thức trở lại khai báo phương thức. Đối tượng MethodInvocation có thể được kiểm tra cho tên phương thức, nhưng bạn không thể tìm hiểu bất kỳ phương thức nào của lớp nào đang được gọi thực sự. phân tích phạm vi được yêu cầu để làm như vậy.

Phân tích này được gọi là độ phân giải ràng buộc. Các đối tượng IBinding được gắn vào các nút AST và bạn có thể sử dụng chúng để tìm ra ví dụ. nút AST MethodDeclaration cho nút AST MethodInvocation đã cho sử dụng CompilationUnit.findDeclaringNode(methodInvocationNode.resolveMethodBidning().getKey())

Hoặc bạn có thể sử dụng CompilationUnit.findDeclaringNode(method.getKey()) để tìm nút AST nào chứa khai báo tương ứng với đối tượng IMethod đã cho.

MethodInvocation.resolveBinding().getKey() == 
MethodDeclaration.resolveBinding().getKey() == 
IMethod.getKey() 
+0

wow, cảm ơn mantrid! Đó là một bước đột phá lớn trong việc hiểu điều này cho tôi! – Janek

Các vấn đề liên quan