3

我正在开发一个 eclipse-java 插件以编程方式将包含路径添加到项目中。我使用的代码部分如下。

String includePath = null;
ICProjectDescription projectDescription = CoreModel.getDefault().getProjectDescription(project, true);
ICConfigurationDescription configDecriptions[] = projectDescription.getConfigurations();
for (ICConfigurationDescription configDescription : configDecriptions) {
ICFolderDescription projectRoot = configDescription.getRootFolderDescription();
ICLanguageSetting[] settings = projectRoot.getLanguageSettings();
for (ICLanguageSetting setting : settings) {
    if (!"org.eclipse.cdt.core.gcc".equals(setting.getLanguageId())) {
    continue;
    }
    List<ICLanguageSettingEntry> includes = new ArrayList<ICLanguageSettingEntry>();
        includes.addAll(setting.getSettingEntriesList(ICSettingEntry.INCLUDE_PATH));
    for (int i = 0; i < tableViewer.getTable().getItemCount(); i++) {
        includePath = tableViewer.getTable().getItem(i).getText();
        includes.add(new CIncludePathEntry(includePath, ICSettingEntry.LOCAL));
    }
    setting.setSettingEntries(ICSettingEntry.INCLUDE_PATH, includes);
    }
}
CoreModel.getDefault().setProjectDescription(project, projectDescription);

当我打印从 ICLanguageSetting.getSettingEntries() 返回的值时,包含路径已成功添加。但它们不会反映在属性->C/C++General->Paths&Symbols 对话框或 Project Explorer 视图中。

我是否缺少任何 update() 或 refresh() ?

4

1 回答 1

1

我知道这已经 3 个月了,所以希望它仍然相关。

我的代码看起来与您的几乎相同,但包含路径显示在 properties->C/C++General->Paths&Symbols and work 中。所以我浏览了每一行,我只能看到一个很大的不同:

对于构造 new CIncludePathEntry,我传入的第一个参数是 a IFolder,而不是 a String,所以我使用了不同的构造函数。我不确定您的程序的其余部分是如何构建的,但也许您可以调用IProject.getFolder(String)并使用它来代替。

于 2013-01-11T16:12:59.697 回答