Tôi đang viết một trình cắm thêm Eclipse sử dụng JD2 AST ASTParser
để phân tích cú pháp phương pháp. Tôi đang tìm trong phương pháp đó để tạo ra một loại đối tượng cụ thể.Tại sao solutionBinding() trả về null mặc dù tôi setResolveBindings (true) trên ASTParser của tôi?
Khi tôi tìm thấy ClassInstanceCreation
, tôi gọi getType()
trên đó để xem loại nào đang được khởi tạo. Tôi muốn chắc chắn rằng loại được giải quyết hoàn toàn đang được xử lý có một cái tôi nghĩ là vậy, vì vậy tôi nói đối tượng Type
kết quả là resolveBinding()
. Tôi nhận được null
trở lại mặc dù không có lỗi biên dịch và mặc dù tôi đã gọi số setResolveBindings(true)
trên số ASTParser
của mình. Tôi đã cung cấp ASTParser
(thông qua setSource()
) ICompilationUnit
chứa phương pháp của tôi, do đó trình phân tích cú pháp có quyền truy cập vào toàn bộ bối cảnh không gian làm việc.
final IMethod method = ...;
final ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setResolveBindings(true);
parser.setSource(method.getCompilationUnit());
parser.setSourceRange(method.getSourceRange().getOffset(), method.getSourceRange().getLength());
parser.setKind(ASTParser.K_CLASS_BODY_DECLARATIONS);
final TypeDeclaration astRoot = (TypeDeclaration) parser.createAST(null);
final ClassInstanceCreation classInstanceCreation = walkAstAndFindMyExpression(astRoot);
final Type instantiatedType = classInstanceCreation.getType();
System.out.println("BINDING: " + instantiatedType.resolveBinding());
Tại sao resolveBinding()
trả lại null
? Làm thế nào tôi có thể nhận được thông tin ràng buộc?
Tôi có trường hợp tương tự với loại K_COMPILATION_UNIT nhưng vẫn resolveBinding() trả về giá trị rỗng. Bất kỳ ý tưởng tại sao? – Dana
Câu trả lời có vẻ là: http://stackoverflow.com/a/5803778/48369 – Dana
Chỉ cần một bình luận muộn về * "tại sao đây là trường hợp" *: nếu bạn phân tích cú pháp nhỏ hơn một đơn vị biên dịch thì bạn không có báo cáo nhập khẩu và do đó độ phân giải ràng buộc có thể không thành công. –