1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Binary parsers were reported wrong by ICDescriptor.

This commit is contained in:
Oleg Krasilnikov 2007-10-09 10:02:45 +00:00
parent d4a03b962f
commit 6d456f9e7e
3 changed files with 58 additions and 8 deletions

View file

@ -22,6 +22,7 @@ import org.eclipse.cdt.core.index.IIndexFileLocation;
import org.eclipse.cdt.core.index.IndexLocationFactory;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.settings.model.ICTargetPlatformSetting;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
@ -718,4 +719,37 @@ public class CoreModelUtil {
return (ICConfigurationDescription[]) result.toArray(new ICConfigurationDescription[result.size()]);
}
/**
* Returns binary parser IDs for configurations
* @param cfgs - array of configurations where we need search
* @return - array of binary parser ids (Strings)
*/
public static String[] getBinaryParserIds(ICConfigurationDescription[] cfgs) {
if (cfgs == null || cfgs.length == 0)
return null;
ArrayList pids = new ArrayList();
for (int i=0; i<cfgs.length; i++) {
ICTargetPlatformSetting tps = cfgs[i].getTargetPlatformSetting();
String[] ids = tps.getBinaryParserIds();
for (int j = 0; j < ids.length; j++) {
if (!pids.contains(ids[j]))
pids.add(ids[j]);
}
}
return (String[])pids.toArray(new String[pids.size()]);
}
/**
* Sets binary parser ID list to given configurations
* @param cfgs - array of configurations where we need search
* @param pids - array of binary parser ids (Strings)
*/
public static void setBinaryParserIds(ICConfigurationDescription[] cfgs, String[] pids) {
if (cfgs == null || cfgs.length == 0)
return;
for (int i=0; i<cfgs.length; i++) {
cfgs[i].getTargetPlatformSetting().setBinaryParserIds(pids);
}
}
}

View file

@ -203,7 +203,26 @@ public class CConfigBasedDescriptor implements ICDescriptor {
}
public ICExtensionReference[] get(String extensionPoint) {
ICConfigExtensionReference cfgRefs[] = fCfgDes.get(extensionPoint);
ICConfigExtensionReference[] rs = fCfgDes.get(extensionPoint);
ArrayList refs = new ArrayList();
refs.addAll(Arrays.asList(rs));
ICConfigurationDescription[] cfgs =
fCfgDes.getProjectDescription().getConfigurations();
for (int i=0; i<cfgs.length; i++) {
if (!fCfgDes.equals(cfgs[i])) {
rs = cfgs[i].get(extensionPoint);
for (int j=0; j<rs.length; j++) {
if (!refs.contains(rs[j]))
refs.add(rs[j]);
}
}
}
ICConfigExtensionReference cfgRefs[] =
(ICConfigExtensionReference[])refs.toArray(
new ICConfigExtensionReference[refs.size()]);
if(cfgRefs.length == 0){
return new ICExtensionReference[0];
}

View file

@ -37,6 +37,7 @@ import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.PlatformUI;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.model.CoreModelUtil;
import org.eclipse.cdt.core.settings.model.ICResourceDescription;
import org.eclipse.cdt.core.settings.model.ICTargetPlatformSetting;
import org.eclipse.cdt.ui.CUIPlugin;
@ -71,8 +72,6 @@ public class BinaryParsTab extends AbstractCPropertyTab {
protected CheckboxTableViewer tv;
protected Composite parserGroup;
private ICTargetPlatformSetting tps;
protected class BinaryParserConfiguration {
IExtension fExtension;
public BinaryParserConfiguration(IExtension extension) { fExtension = extension; }
@ -168,8 +167,7 @@ public class BinaryParsTab extends AbstractCPropertyTab {
}
public void updateData(ICResourceDescription cfgd) {
tps = cfgd.getConfiguration().getTargetPlatformSetting();
String[] ids = tps.getBinaryParserIds();
String[] ids = CoreModelUtil.getBinaryParserIds(page.getCfgsEditable());
Object[] data = new Object[configMap.size()];
HashMap clone = new HashMap(configMap);
// add checked elements
@ -295,7 +293,7 @@ public class BinaryParsTab extends AbstractCPropertyTab {
}
protected void performDefaults() {
tps.setBinaryParserIds(null);
CoreModelUtil.setBinaryParserIds(page.getCfgsEditable(), null);
informPages(false);
updateData(getResDesc());
}
@ -304,7 +302,6 @@ public class BinaryParsTab extends AbstractCPropertyTab {
IProgressMonitor mon = new NullProgressMonitor();
Iterator it = fParserPageMap.values().iterator();
while (it.hasNext()) {
try {
ICOptionPage dynamicPage = ((BinaryParserPageConfiguration)it.next()).getPage();
@ -358,7 +355,7 @@ public class BinaryParsTab extends AbstractCPropertyTab {
ids[i] = ((BinaryParserConfiguration)objs[i]).getID();
}
}
if (tps != null) tps.setBinaryParserIds(ids);
CoreModelUtil.setBinaryParserIds(page.getCfgsEditable(), ids);
}
// This page can be displayed for project only
public boolean canBeVisible() {