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 ICompilationUnit
ASTParser
(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ş
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
Yanıt şu şekilde görünüyor: http://stackoverflow.com/a/5803778/48369 – Dana
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. –