mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-23 17:05:26 +02:00
Tool-chain modification functionality fixes
This commit is contained in:
parent
aa41a5b6c7
commit
9e3821985f
6 changed files with 76 additions and 33 deletions
|
@ -4063,6 +4063,12 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
|
|||
}
|
||||
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){
|
||||
IToolChain extTc = tc;
|
||||
|
|
|
@ -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();
|
||||
// IManagedProject manProj = getParent().getManagedProject();
|
||||
if (manProj == null) {
|
||||
|
@ -265,8 +265,8 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
|
|||
IProject project = (IProject)manProj.getOwner();
|
||||
Vector tools = new Vector(localTools.length);
|
||||
for (int i = 0; i < localTools.length; i++) {
|
||||
ITool tool = localTools[i];
|
||||
if(!tool.isEnabled())
|
||||
Tool tool = (Tool)localTools[i];
|
||||
if(!tool.isEnabled(this))
|
||||
continue;
|
||||
|
||||
try {
|
||||
|
@ -743,6 +743,9 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
|
|||
IToolChain newReal = ManagedBuildManager.getRealToolChain(newSuperClass);
|
||||
|
||||
if(newReal != curReal){
|
||||
IToolChain extTc = ManagedBuildManager.getExtensionToolChain(newSuperClass);
|
||||
if(extTc != null)
|
||||
newSuperClass = extTc;
|
||||
ToolChain oldToolChain = toolChain;
|
||||
IConfigurationElement el = getToolChainConverterElement(newSuperClass);
|
||||
ITool oldTools[] = oldToolChain.getTools();
|
||||
|
@ -802,18 +805,22 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
|
|||
}
|
||||
|
||||
private ITool[][] checkDups(ITool[] removed, ITool[] added){
|
||||
LinkedHashMap removedMap = createRealMap(removed);
|
||||
LinkedHashMap addedMap = createRealMap(added);
|
||||
LinkedHashMap removedMap = createRealToExtToolMap(removed, false);
|
||||
LinkedHashMap addedMap = createRealToExtToolMap(added, true);
|
||||
LinkedHashMap rmCopy = (LinkedHashMap)removedMap.clone();
|
||||
|
||||
removedMap.keySet().removeAll(addedMap.keySet());
|
||||
addedMap.keySet().removeAll(rmCopy.keySet());
|
||||
|
||||
if(removedMap.size() != 0){
|
||||
LinkedHashMap curMap = createRealMap(getTools());
|
||||
for(Iterator iter = removedMap.keySet().iterator(); iter.hasNext();){
|
||||
Object key = iter.next();
|
||||
if(!curMap.containsKey(key))
|
||||
LinkedHashMap curMap = createRealToExtToolMap(getTools(), false);
|
||||
for(Iterator iter = removedMap.entrySet().iterator(); iter.hasNext();){
|
||||
Map.Entry entry = (Map.Entry)iter.next();
|
||||
Object key = entry.getKey();
|
||||
Object curTool = curMap.get(key);
|
||||
if(curTool != null)
|
||||
entry.setValue(curTool);
|
||||
else
|
||||
iter.remove();
|
||||
}
|
||||
}
|
||||
|
@ -823,12 +830,14 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
|
|||
return result;
|
||||
}
|
||||
|
||||
private LinkedHashMap createRealMap(ITool[] tools){
|
||||
private LinkedHashMap createRealToExtToolMap(ITool[] tools, boolean extValues){
|
||||
LinkedHashMap map = new LinkedHashMap();
|
||||
for(int i = 0; i < tools.length; i++){
|
||||
Tool realTool = (Tool)ManagedBuildManager.getRealTool(tools[i]);
|
||||
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;
|
||||
|
@ -1040,29 +1049,32 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
|
|||
|
||||
private ITool[] calculateToolsArray(ITool[] removed, ITool[] added){
|
||||
ITool tools[] = getTools();
|
||||
Map map = calcExtToolIdToToolMap(tools);
|
||||
Map removedMap = calcExtToolIdToToolMap(removed);
|
||||
for(Iterator iter = removedMap.keySet().iterator(); iter.hasNext();){
|
||||
map.remove(iter.next());
|
||||
}
|
||||
map.putAll(calcExtToolIdToToolMap(added));
|
||||
LinkedHashMap map = createRealToExtToolMap(tools, false);
|
||||
LinkedHashMap removedMap = createRealToExtToolMap(removed, false);
|
||||
map.keySet().removeAll(removedMap.keySet());
|
||||
//
|
||||
// for(Iterator iter = removedMap.keySet().iterator(); iter.hasNext();){
|
||||
// map.remove(iter.next());
|
||||
// }
|
||||
map.putAll(createRealToExtToolMap(added, true));
|
||||
|
||||
|
||||
return (ITool[])map.values().toArray(new ITool[map.size()]);
|
||||
}
|
||||
|
||||
private Map calcExtToolIdToToolMap(ITool tools[]){
|
||||
Map map = new HashMap();
|
||||
for(int i = 0; i < tools.length; i++){
|
||||
ITool tool = tools[i];
|
||||
ITool extTool = ManagedBuildManager.getExtensionTool(tool);
|
||||
if(extTool == null)
|
||||
extTool = tool;
|
||||
|
||||
map.put(extTool.getId(), tool);
|
||||
}
|
||||
|
||||
return map;
|
||||
}
|
||||
// private Map calcExtToolIdToToolMap(ITool tools[]){
|
||||
// Map map = new HashMap();
|
||||
// for(int i = 0; i < tools.length; i++){
|
||||
// ITool tool = tools[i];
|
||||
// ITool extTool = ManagedBuildManager.getExtensionTool(tool);
|
||||
// if(extTool == null)
|
||||
// extTool = tool;
|
||||
//
|
||||
// map.put(extTool.getId(), tool);
|
||||
// }
|
||||
//
|
||||
// return map;
|
||||
// }
|
||||
|
||||
private ITool[][] calculateConflictingTools(ITool[] newTools){
|
||||
HashSet set = new HashSet();
|
||||
|
@ -1108,6 +1120,9 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
|
|||
|
||||
|
||||
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);
|
||||
ITool newTools[] = calculateToolsArray(removed, added);
|
||||
ITool[][] conflicting = calculateConflictingTools(filtereTools(newTools, getParent().getManagedProject()));
|
||||
|
|
|
@ -249,7 +249,8 @@ public abstract class HoldsOptions extends BuildObject implements IHoldsOptions,
|
|||
*/
|
||||
public void removeOption(IOption option) {
|
||||
if(option.getParent() != this)
|
||||
throw new IllegalArgumentException();
|
||||
return;
|
||||
// throw new IllegalArgumentException();
|
||||
|
||||
getOptionList().remove(option);
|
||||
getOptionMap().remove(option.getId());
|
||||
|
|
|
@ -3603,11 +3603,16 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch
|
|||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
return isEnabled(getParentResourceInfo());
|
||||
}
|
||||
|
||||
public boolean isEnabled(IResourceInfo rcInfo) {
|
||||
|
||||
BooleanExpressionApplicabilityCalculator calc = getBooleanExpressionCalculator();
|
||||
if(calc == null)
|
||||
return true;
|
||||
|
||||
return calc.isToolUsedInCommandLine(getParentResourceInfo(), this);
|
||||
return calc.isToolUsedInCommandLine(rcInfo, this);
|
||||
}
|
||||
|
||||
public boolean matches(ITool tool){
|
||||
|
|
|
@ -1019,6 +1019,21 @@ public class ToolChain extends HoldsOptions implements IToolChain, IBuildPropert
|
|||
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 {
|
||||
tools = new ITool[getToolList().size()];
|
||||
Iterator iter = getToolList().listIterator();
|
||||
|
|
|
@ -235,7 +235,8 @@ public class ToolSelectionDialog extends Dialog {
|
|||
s = s + Messages.getString("ToolSelectionDialog.11"); //$NON-NLS-1$
|
||||
}
|
||||
errorLabel.setText(s);
|
||||
getButton(IDialogConstants.OK_ID).setEnabled(false);
|
||||
if(getButton(IDialogConstants.OK_ID) != null)
|
||||
getButton(IDialogConstants.OK_ID).setEnabled(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue