mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-08 02:06:01 +02:00
Fix to the tool-chain modification functionality
This commit is contained in:
parent
cace97bf36
commit
155cfd6798
2 changed files with 45 additions and 17 deletions
|
@ -11,13 +11,15 @@
|
|||
package org.eclipse.cdt.managedbuilder.internal.core;
|
||||
|
||||
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
|
||||
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
|
||||
import org.eclipse.core.runtime.IConfigurationElement;
|
||||
|
||||
public class ConverterInfo {
|
||||
IBuildObject fFromObject;
|
||||
IBuildObject fToObject;
|
||||
IConfigurationElement fConverterElement;
|
||||
boolean fIsConversionPerformed;
|
||||
private IBuildObject fFromObject;
|
||||
private IBuildObject fConvertedFromObject;
|
||||
private IBuildObject fToObject;
|
||||
private IConfigurationElement fConverterElement;
|
||||
private boolean fIsConversionPerformed;
|
||||
|
||||
public ConverterInfo(IBuildObject fromObject, IBuildObject toObject, IConfigurationElement el){
|
||||
fFromObject = fromObject;
|
||||
|
@ -36,4 +38,12 @@ public class ConverterInfo {
|
|||
public IConfigurationElement getConverterElement(){
|
||||
return fConverterElement;
|
||||
}
|
||||
|
||||
public IBuildObject getConvertedFromObject(){
|
||||
if(!fIsConversionPerformed){
|
||||
fConvertedFromObject = ManagedBuildManager.convert(fFromObject, fToObject.getId(), true);
|
||||
fIsConversionPerformed = true;
|
||||
}
|
||||
return fConvertedFromObject;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -732,7 +732,7 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
|
|||
boolean compatible = false;
|
||||
|
||||
if(tCh != null){
|
||||
if(getToolChainConverterElement(tCh) != null)
|
||||
if(getToolChainConverterInfo(tCh) != null)
|
||||
compatible = true;
|
||||
|
||||
if(!compatible)
|
||||
|
@ -769,11 +769,11 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
|
|||
if(extTc != null)
|
||||
newSuperClass = extTc;
|
||||
ToolChain oldToolChain = toolChain;
|
||||
IConfigurationElement el = getToolChainConverterElement(newSuperClass);
|
||||
ConverterInfo cInfo = getToolChainConverterInfo(newSuperClass);
|
||||
ITool oldTools[] = oldToolChain.getTools();
|
||||
|
||||
if(el != null){
|
||||
updateToolChainWithConverter(el, newSuperClass, Id, name);
|
||||
if(cInfo != null){
|
||||
updateToolChainWithConverter(cInfo, Id, name);
|
||||
} else {
|
||||
updateToolChainWithProperties(usePrefTc ? null : newSuperClass, Id, name);
|
||||
}
|
||||
|
@ -841,8 +841,8 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
|
|||
toolChain.propertiesChanged();
|
||||
}
|
||||
|
||||
void updateToolChainWithConverter(IConfigurationElement el, IToolChain newSuperClass, String Id, String name) throws BuildException{
|
||||
IBuildObject bo = ManagedBuildManager.convert(getToolChain(), newSuperClass.getId(), true);
|
||||
void updateToolChainWithConverter(ConverterInfo cInfo, String Id, String name) throws BuildException{
|
||||
IBuildObject bo = cInfo.getConvertedFromObject();
|
||||
if(!(bo instanceof ToolChain)){
|
||||
throw new BuildException(ManagedMakeMessages.getResourceString("FolderInfo.4")); //$NON-NLS-1$
|
||||
}
|
||||
|
@ -857,6 +857,27 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
|
|||
toolChain = tch;
|
||||
tch.updateParentFolderInfo(this);
|
||||
}
|
||||
|
||||
private ConverterInfo getToolChainConverterInfo(IToolChain toTc){
|
||||
IConfigurationElement el = getToolChainConverterElement(toTc);
|
||||
IToolChain foundToTc = toTc;
|
||||
if(el == null){
|
||||
IToolChain[] tcs = ManagedBuildManager.findIdenticalToolChains(toTc);
|
||||
for(int i = 0; i < tcs.length; i++){
|
||||
foundToTc = tcs[i];
|
||||
if(foundToTc == toTc)
|
||||
continue;
|
||||
|
||||
el = getToolChainConverterElement(foundToTc);
|
||||
if(el != null)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(el != null)
|
||||
return new ConverterInfo(getToolChain(), foundToTc, el);
|
||||
return null;
|
||||
}
|
||||
|
||||
private IConfigurationElement getToolChainConverterElement(IToolChain tCh){
|
||||
if(tCh == null)
|
||||
|
@ -922,12 +943,12 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
|
|||
List newTools = new ArrayList(added.length);
|
||||
for(Iterator iter = converterMap.values().iterator(); iter.hasNext();){
|
||||
ConverterInfo info = (ConverterInfo)iter.next();
|
||||
if(info.fIsConversionPerformed){
|
||||
Tool newTool = (Tool)info.fToObject;
|
||||
if(info.getConvertedFromObject() instanceof Tool){
|
||||
Tool newTool = (Tool)info.getConvertedFromObject();
|
||||
newTool.updateParent(getToolChain());
|
||||
newTools.add(newTool);
|
||||
} else {
|
||||
remainingAdded.add(info.fToObject);
|
||||
remainingAdded.add(info.getToObject());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1057,12 +1078,9 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
|
|||
List failed = new ArrayList();
|
||||
for(Iterator iter = converterMap.values().iterator();iter.hasNext();){
|
||||
ConverterInfo info = (ConverterInfo)iter.next();
|
||||
IBuildObject converted = ManagedBuildManager.convert(info.getFromObject(), info.getToObject().getId(), true);
|
||||
IBuildObject converted = info.getConvertedFromObject();
|
||||
if(converted == null || !converted.getClass().equals(info.getFromObject().getClass())){
|
||||
failed.add(info);
|
||||
} else {
|
||||
info.fToObject = converted;
|
||||
info.fIsConversionPerformed = true;
|
||||
}
|
||||
}
|
||||
return failed;
|
||||
|
|
Loading…
Add table
Reference in a new issue