1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-12 18:55:38 +02:00

Tool-chain modification functionality fixes

This commit is contained in:
Mikhail Sennikovsky 2007-03-27 03:15:15 +00:00
parent aa41a5b6c7
commit 9e3821985f
6 changed files with 76 additions and 33 deletions

View file

@ -4064,6 +4064,12 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
return realTool; return realTool;
} }
public static IToolChain getExtensionToolChain(IToolChain tc){
IToolChain extTc = tc;
for(;extTc != null && !extTc.isExtensionElement(); extTc= extTc.getSuperClass());
return extTc;
}
public static IToolChain getRealToolChain(IToolChain tc){ public static IToolChain getRealToolChain(IToolChain tc){
IToolChain extTc = tc; IToolChain extTc = tc;
IToolChain realTc = null; IToolChain realTc = null;

View file

@ -255,7 +255,7 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
} }
public static ITool[] filtereTools(ITool localTools[], IManagedProject manProj) { public ITool[] filtereTools(ITool localTools[], IManagedProject manProj) {
// ITool[] localTools = toolChain.getTools(); // ITool[] localTools = toolChain.getTools();
// IManagedProject manProj = getParent().getManagedProject(); // IManagedProject manProj = getParent().getManagedProject();
if (manProj == null) { if (manProj == null) {
@ -265,8 +265,8 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
IProject project = (IProject)manProj.getOwner(); IProject project = (IProject)manProj.getOwner();
Vector tools = new Vector(localTools.length); Vector tools = new Vector(localTools.length);
for (int i = 0; i < localTools.length; i++) { for (int i = 0; i < localTools.length; i++) {
ITool tool = localTools[i]; Tool tool = (Tool)localTools[i];
if(!tool.isEnabled()) if(!tool.isEnabled(this))
continue; continue;
try { try {
@ -743,6 +743,9 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
IToolChain newReal = ManagedBuildManager.getRealToolChain(newSuperClass); IToolChain newReal = ManagedBuildManager.getRealToolChain(newSuperClass);
if(newReal != curReal){ if(newReal != curReal){
IToolChain extTc = ManagedBuildManager.getExtensionToolChain(newSuperClass);
if(extTc != null)
newSuperClass = extTc;
ToolChain oldToolChain = toolChain; ToolChain oldToolChain = toolChain;
IConfigurationElement el = getToolChainConverterElement(newSuperClass); IConfigurationElement el = getToolChainConverterElement(newSuperClass);
ITool oldTools[] = oldToolChain.getTools(); ITool oldTools[] = oldToolChain.getTools();
@ -802,18 +805,22 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
} }
private ITool[][] checkDups(ITool[] removed, ITool[] added){ private ITool[][] checkDups(ITool[] removed, ITool[] added){
LinkedHashMap removedMap = createRealMap(removed); LinkedHashMap removedMap = createRealToExtToolMap(removed, false);
LinkedHashMap addedMap = createRealMap(added); LinkedHashMap addedMap = createRealToExtToolMap(added, true);
LinkedHashMap rmCopy = (LinkedHashMap)removedMap.clone(); LinkedHashMap rmCopy = (LinkedHashMap)removedMap.clone();
removedMap.keySet().removeAll(addedMap.keySet()); removedMap.keySet().removeAll(addedMap.keySet());
addedMap.keySet().removeAll(rmCopy.keySet()); addedMap.keySet().removeAll(rmCopy.keySet());
if(removedMap.size() != 0){ if(removedMap.size() != 0){
LinkedHashMap curMap = createRealMap(getTools()); LinkedHashMap curMap = createRealToExtToolMap(getTools(), false);
for(Iterator iter = removedMap.keySet().iterator(); iter.hasNext();){ for(Iterator iter = removedMap.entrySet().iterator(); iter.hasNext();){
Object key = iter.next(); Map.Entry entry = (Map.Entry)iter.next();
if(!curMap.containsKey(key)) Object key = entry.getKey();
Object curTool = curMap.get(key);
if(curTool != null)
entry.setValue(curTool);
else
iter.remove(); iter.remove();
} }
} }
@ -823,12 +830,14 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
return result; return result;
} }
private LinkedHashMap createRealMap(ITool[] tools){ private LinkedHashMap createRealToExtToolMap(ITool[] tools, boolean extValues){
LinkedHashMap map = new LinkedHashMap(); LinkedHashMap map = new LinkedHashMap();
for(int i = 0; i < tools.length; i++){ for(int i = 0; i < tools.length; i++){
Tool realTool = (Tool)ManagedBuildManager.getRealTool(tools[i]); Tool realTool = (Tool)ManagedBuildManager.getRealTool(tools[i]);
Object key = realTool.getMatchKey(); Object key = realTool.getMatchKey();
map.put(key, tools[i]); ITool toolValue = extValues ? ManagedBuildManager.getExtensionTool(tools[i]) : tools[i];
if(toolValue != null)
map.put(key, toolValue);
} }
return map; return map;
@ -1040,29 +1049,32 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
private ITool[] calculateToolsArray(ITool[] removed, ITool[] added){ private ITool[] calculateToolsArray(ITool[] removed, ITool[] added){
ITool tools[] = getTools(); ITool tools[] = getTools();
Map map = calcExtToolIdToToolMap(tools); LinkedHashMap map = createRealToExtToolMap(tools, false);
Map removedMap = calcExtToolIdToToolMap(removed); LinkedHashMap removedMap = createRealToExtToolMap(removed, false);
for(Iterator iter = removedMap.keySet().iterator(); iter.hasNext();){ map.keySet().removeAll(removedMap.keySet());
map.remove(iter.next()); //
} // for(Iterator iter = removedMap.keySet().iterator(); iter.hasNext();){
map.putAll(calcExtToolIdToToolMap(added)); // map.remove(iter.next());
// }
map.putAll(createRealToExtToolMap(added, true));
return (ITool[])map.values().toArray(new ITool[map.size()]); return (ITool[])map.values().toArray(new ITool[map.size()]);
} }
private Map calcExtToolIdToToolMap(ITool tools[]){ // private Map calcExtToolIdToToolMap(ITool tools[]){
Map map = new HashMap(); // Map map = new HashMap();
for(int i = 0; i < tools.length; i++){ // for(int i = 0; i < tools.length; i++){
ITool tool = tools[i]; // ITool tool = tools[i];
ITool extTool = ManagedBuildManager.getExtensionTool(tool); // ITool extTool = ManagedBuildManager.getExtensionTool(tool);
if(extTool == null) // if(extTool == null)
extTool = tool; // extTool = tool;
//
map.put(extTool.getId(), tool); // map.put(extTool.getId(), tool);
} // }
//
return map; // return map;
} // }
private ITool[][] calculateConflictingTools(ITool[] newTools){ private ITool[][] calculateConflictingTools(ITool[] newTools){
HashSet set = new HashSet(); HashSet set = new HashSet();
@ -1108,6 +1120,9 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
public IModificationStatus getToolChainModificationStatus(ITool[] removed, ITool[] added){ public IModificationStatus getToolChainModificationStatus(ITool[] removed, ITool[] added){
ITool[][] checked = checkDups(removed, added);
removed = checked[0];
added = checked[1];
// Map converterMap = calculateConverterTools(removed, added, null, null); // Map converterMap = calculateConverterTools(removed, added, null, null);
ITool newTools[] = calculateToolsArray(removed, added); ITool newTools[] = calculateToolsArray(removed, added);
ITool[][] conflicting = calculateConflictingTools(filtereTools(newTools, getParent().getManagedProject())); ITool[][] conflicting = calculateConflictingTools(filtereTools(newTools, getParent().getManagedProject()));

View file

@ -249,7 +249,8 @@ public abstract class HoldsOptions extends BuildObject implements IHoldsOptions,
*/ */
public void removeOption(IOption option) { public void removeOption(IOption option) {
if(option.getParent() != this) if(option.getParent() != this)
throw new IllegalArgumentException(); return;
// throw new IllegalArgumentException();
getOptionList().remove(option); getOptionList().remove(option);
getOptionMap().remove(option.getId()); getOptionMap().remove(option.getId());

View file

@ -3603,11 +3603,16 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch
} }
public boolean isEnabled() { public boolean isEnabled() {
return isEnabled(getParentResourceInfo());
}
public boolean isEnabled(IResourceInfo rcInfo) {
BooleanExpressionApplicabilityCalculator calc = getBooleanExpressionCalculator(); BooleanExpressionApplicabilityCalculator calc = getBooleanExpressionCalculator();
if(calc == null) if(calc == null)
return true; return true;
return calc.isToolUsedInCommandLine(getParentResourceInfo(), this); return calc.isToolUsedInCommandLine(rcInfo, this);
} }
public boolean matches(ITool tool){ public boolean matches(ITool tool){

View file

@ -1019,6 +1019,21 @@ public class ToolChain extends HoldsOptions implements IToolChain, IBuildPropert
tools = newTools; tools = newTools;
} }
} }
if(!isExtensionToolChain){
for(int i = 0; i < tools.length; i++){
if(tools[i].getParent() != this){
ArrayList list = new ArrayList(Arrays.asList(tools));
for(int k = 0; k < list.size(); k++){
if(((ITool)list.get(k)).getParent() != this){
list.remove(k);
}
}
tools = (ITool[])list.toArray(new ITool[list.size()]);
break;
}
}
}
} else { } else {
tools = new ITool[getToolList().size()]; tools = new ITool[getToolList().size()];
Iterator iter = getToolList().listIterator(); Iterator iter = getToolList().listIterator();

View file

@ -235,7 +235,8 @@ public class ToolSelectionDialog extends Dialog {
s = s + Messages.getString("ToolSelectionDialog.11"); //$NON-NLS-1$ s = s + Messages.getString("ToolSelectionDialog.11"); //$NON-NLS-1$
} }
errorLabel.setText(s); errorLabel.setText(s);
getButton(IDialogConstants.OK_ID).setEnabled(false); if(getButton(IDialogConstants.OK_ID) != null)
getButton(IDialogConstants.OK_ID).setEnabled(false);
} }
} }
} }