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:
parent
aa41a5b6c7
commit
9e3821985f
6 changed files with 76 additions and 33 deletions
|
@ -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;
|
||||||
|
|
|
@ -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()));
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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){
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue