根据offset、offsetLen查找节点
IASTNode iastNode = fileParserUnit.getIastTranslationUnit().getNodeSelector(null).findNode(168, 4);
if (iastNode!=null){
String cls = iastNode.getClass().getName();
String str = iastNode.getRawSignature();
int line = iastNode.getFileLocation().getStartingLineNumber();
System.out.println();
}
a
#include<stdio.h>
#include<stdbool.h>
//上面#include中不存在,为了编译通过加上,不然bool不可识别标识符
#define IF_X(x) if(x){
/***********
*禁止定义不象函数的宏
**********/
void static_p (void)
{
bool test=true;
IF_X(test)
test=!test;
}
if(test){
test=!test;
}
}
a
IASTNodeSelector iastNodeSelector = fileParserUnit.getIastTranslationUnit().getNodeSelector(null);
// IASTNode iastNode = iastNodeSelector.findNode(168, 4);
IASTNode iastNode = iastNodeSelector.findEnclosingName(181, 4);
if (iastNode!=null){
if (iastNode instanceof ASTPreprocessorName) {
ASTPreprocessorName astPreprocessorName = (ASTPreprocessorName) iastNode;
IBinding iBinding = astPreprocessorName.resolveBinding();
if (iBinding!=null && !(iBinding instanceof IProblemBinding)) {
IASTName[] iastNames = fileParserUnit.getIastTranslationUnit().getDeclarationsInAST(iBinding);
if (iastNames!=null){
Arrays.stream(iastNames).forEach(iastName -> {
String iastNameStr = iastName.getClass().getName();
if (iastName instanceof ASTPreprocessorName) {
ASTPreprocessorName astPreprocessorName1 = (ASTPreprocessorName) iastName;
String file = astPreprocessorName1.getFileLocation().getFileName();
int line = astPreprocessorName1.getFileLocation().getStartingLineNumber();
System.out.println();
}
System.out.println();
});
}
}
}