CDT: Как я могу проанализировать AST файла c / c ++, который не связан с каким-либо проектом в рабочей области Eclipse - PullRequest
1 голос
/ 25 ноября 2011

В моем проекте Eclipse RCP для анализа исходного кода я хочу, чтобы getAST анализировал AST некоторых файлов c / c ++, которые не являются ни исходным файлом проекта в рабочей области eclipse, ни ссылочными ресурсами проекта внутри рабочее пространство затмения. По сути, у меня нет рабочих областей в моем приложении RCP. Любые предложения будут оценены!

ура

Ответы [ 2 ]

0 голосов
/ 29 августа 2014

Я нашел более простой способ, если у вас есть этот файл в редакторе, тогда вы можете использовать метод getEditorInput в части редактора, чтобы получить ITranslationUnit, т.е.

// here is how you can get the active editor IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); IEditorPart editorPart = window.getActivePage().getActiveEditor();

// for an external file the editor input will be of type ITranslationUnitEditorInput IEditorInput input = editorPart.getEditorInput(); if (input instanceof ITranslationUnitEditorInput) { ITranslationUnit externalTU = ((ITranslationUnitEditorInput) input).getTranslationUnit(); }

0 голосов
/ 02 мая 2013

Вам необходимо программно создать новый проект из папки источников (убедитесь, что у вас есть какой-то базовый файл .cproject внутри с правильным корнем источника):

IWorkspace workspace = ResourcesPlugin.getWorkspace();
project = workspace.getRoot().getProject("project");
if (!project.exists()) {
    IProjectDescription description = workspace.newProjectDescription("project");
    CCorePlugin.getDefault().createCDTProject(description, project, null);
} else {
    project.refreshLocal(IResource.DEPTH_INFINITE, null);
}

После того, как вы можете использовать AST:

ITranslationUnit translationUnit = (ITranslationUnit) CoreModel.getDefault().create(file);
IASTTranslationUnit ast = translationUnit.getAST();
...