引入org.eclipse.cdt.core的插件包后.通過如下代碼則可獲得某個(gè)C++源文件的解析結(jié)果
public static IASTTranslationUnit getAST( IFile file) {
ITranslationUnit tu = CoreModelUtil.findTranslationUnit(file);
ICProject project= tu.getCProject();
IASTTranslationUnit ast=null;
try {
IIndex index = CCorePlugin.getIndexManager().getIndex(project,
IIndexManager.ADD_DEPENDENCIES | IIndexManager.ADD_DEPENDENT);
index.acquireReadLock();
try {
ast=tu.getAST(index, 0);
} finally {
index.releaseReadLock();
}
} catch (InterruptedException e) {
//log(e);
} catch (CoreException e) {
//log(e);
}
return ast;
}
再對IASTTranslatonUnit ast調(diào)用 getDeclarations()方法即可獲得所有的聲明信息CCorePlugin和CoreModelUtil是CDT Core提供的最重要的入口.
TranslatonUnit表示一個(gè)編譯單元.可以是一個(gè)項(xiàng)目.一個(gè)文件.文件的一個(gè)代碼塊ASTTranslatonUnit 是編譯單元的AST表示.里面包含了所有的信息。
public static IASTTranslationUnit getAST( IFile file) {
ITranslationUnit tu = CoreModelUtil.findTranslationUnit(file);
ICProject project= tu.getCProject();
IASTTranslationUnit ast=null;
try {
IIndex index = CCorePlugin.getIndexManager().getIndex(project,
IIndexManager.ADD_DEPENDENCIES | IIndexManager.ADD_DEPENDENT);
index.acquireReadLock();
try {
ast=tu.getAST(index, 0);
} finally {
index.releaseReadLock();
}
} catch (InterruptedException e) {
//log(e);
} catch (CoreException e) {
//log(e);
}
return ast;
}
再對IASTTranslatonUnit ast調(diào)用 getDeclarations()方法即可獲得所有的聲明信息CCorePlugin和CoreModelUtil是CDT Core提供的最重要的入口.
TranslatonUnit表示一個(gè)編譯單元.可以是一個(gè)項(xiàng)目.一個(gè)文件.文件的一個(gè)代碼塊ASTTranslatonUnit 是編譯單元的AST表示.里面包含了所有的信息。