2010-04-13 13 views
6

Bir yöntemi ayrıştırmak için JDT AST'nin ASTParser kullanan bir Eclipse eklentisi yazıyorum. Belirli bir nesne türünün oluşturulması için bu yönteme bakıyorum.Neden ASTParser'ımda ResolveBindings (true) ayarlamam olsa da, resolBinding() işlevi null değerini döndürüyor?

Bir ClassInstanceCreation bulduğumda, hangi türün örneklendiğini görmek için üzerine getType() numaralı telefonu arıyorum. Tam olarak çözümlenmekte olan türün orada olduğunu düşündüğümden emin olmak istiyorum, bu yüzden Type nesnesini resolveBinding()'a anlatıyorum. Derleme hataları olmamasına ve ASTParser benim setResolveBindings(true) aramamıza rağmen null geri dönüyorum. Benim yöntemimi içeren ICompilationUnitASTParser (setSource() aracılığıyla) verdi, böylece ayrıştırıcı tüm çalışma alanı içeriğine erişimi vardır.

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()); 

Neden resolveBinding() dönüşü null yapar? Ciltleme bilgilerini nasıl alabilirim? dikkatle resolveBinding() ve setResolveBindings(), sorun giderme insanlardan gizlenmiş ASTParser.setKind() genel bakış, dibinde gizlenmiş

cevap

5

kindK_COMPILATION_UNIT olduğunda

Cilt bilgiler sadece hesaplanır ifadedir.

( the online Javadoc itibaren)

bu durumda olacağını neden hazırlıksız anlamıyorum ama farklı olmak gerekenleri oldukça net bir şekilde işaret etmek görünüyor!

+0

K_COMPILATION_UNIT türünde benzer bir durum var, ancak halaBinding() işlevi null değerini döndürüyor. Bir fikrin neden? – Dana

+0

Yanıt şu şekilde görünüyor: http://stackoverflow.com/a/5803778/48369 – Dana

+1

Sadece "geç bu durumda nasıl olurdu" *: bir derleme biriminden daha küçük bir şeyi ayrıştırırsanız ithalat ifadeleri ve dolayısıyla bağlayıcı çözümün başarısız olması muhtemeldir. –

İlgili konular