1
0
Fork 0
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:
Mikhail Sennikovsky 2007-05-07 16:11:18 +00:00
parent cace97bf36
commit 155cfd6798
2 changed files with 45 additions and 17 deletions

View file

@ -11,13 +11,15 @@
package org.eclipse.cdt.managedbuilder.internal.core; package org.eclipse.cdt.managedbuilder.internal.core;
import org.eclipse.cdt.managedbuilder.core.IBuildObject; import org.eclipse.cdt.managedbuilder.core.IBuildObject;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IConfigurationElement;
public class ConverterInfo { public class ConverterInfo {
IBuildObject fFromObject; private IBuildObject fFromObject;
IBuildObject fToObject; private IBuildObject fConvertedFromObject;
IConfigurationElement fConverterElement; private IBuildObject fToObject;
boolean fIsConversionPerformed; private IConfigurationElement fConverterElement;
private boolean fIsConversionPerformed;
public ConverterInfo(IBuildObject fromObject, IBuildObject toObject, IConfigurationElement el){ public ConverterInfo(IBuildObject fromObject, IBuildObject toObject, IConfigurationElement el){
fFromObject = fromObject; fFromObject = fromObject;
@ -36,4 +38,12 @@ public class ConverterInfo {
public IConfigurationElement getConverterElement(){ public IConfigurationElement getConverterElement(){
return fConverterElement; return fConverterElement;
} }
public IBuildObject getConvertedFromObject(){
if(!fIsConversionPerformed){
fConvertedFromObject = ManagedBuildManager.convert(fFromObject, fToObject.getId(), true);
fIsConversionPerformed = true;
}
return fConvertedFromObject;
}
} }

View file

@ -732,7 +732,7 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
boolean compatible = false; boolean compatible = false;
if(tCh != null){ if(tCh != null){
if(getToolChainConverterElement(tCh) != null) if(getToolChainConverterInfo(tCh) != null)
compatible = true; compatible = true;
if(!compatible) if(!compatible)
@ -769,11 +769,11 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
if(extTc != null) if(extTc != null)
newSuperClass = extTc; newSuperClass = extTc;
ToolChain oldToolChain = toolChain; ToolChain oldToolChain = toolChain;
IConfigurationElement el = getToolChainConverterElement(newSuperClass); ConverterInfo cInfo = getToolChainConverterInfo(newSuperClass);
ITool oldTools[] = oldToolChain.getTools(); ITool oldTools[] = oldToolChain.getTools();
if(el != null){ if(cInfo != null){
updateToolChainWithConverter(el, newSuperClass, Id, name); updateToolChainWithConverter(cInfo, Id, name);
} else { } else {
updateToolChainWithProperties(usePrefTc ? null : newSuperClass, Id, name); updateToolChainWithProperties(usePrefTc ? null : newSuperClass, Id, name);
} }
@ -841,8 +841,8 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
toolChain.propertiesChanged(); toolChain.propertiesChanged();
} }
void updateToolChainWithConverter(IConfigurationElement el, IToolChain newSuperClass, String Id, String name) throws BuildException{ void updateToolChainWithConverter(ConverterInfo cInfo, String Id, String name) throws BuildException{
IBuildObject bo = ManagedBuildManager.convert(getToolChain(), newSuperClass.getId(), true); IBuildObject bo = cInfo.getConvertedFromObject();
if(!(bo instanceof ToolChain)){ if(!(bo instanceof ToolChain)){
throw new BuildException(ManagedMakeMessages.getResourceString("FolderInfo.4")); //$NON-NLS-1$ throw new BuildException(ManagedMakeMessages.getResourceString("FolderInfo.4")); //$NON-NLS-1$
} }
@ -857,6 +857,27 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
toolChain = tch; toolChain = tch;
tch.updateParentFolderInfo(this); 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){ private IConfigurationElement getToolChainConverterElement(IToolChain tCh){
if(tCh == null) if(tCh == null)
@ -922,12 +943,12 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
List newTools = new ArrayList(added.length); List newTools = new ArrayList(added.length);
for(Iterator iter = converterMap.values().iterator(); iter.hasNext();){ for(Iterator iter = converterMap.values().iterator(); iter.hasNext();){
ConverterInfo info = (ConverterInfo)iter.next(); ConverterInfo info = (ConverterInfo)iter.next();
if(info.fIsConversionPerformed){ if(info.getConvertedFromObject() instanceof Tool){
Tool newTool = (Tool)info.fToObject; Tool newTool = (Tool)info.getConvertedFromObject();
newTool.updateParent(getToolChain()); newTool.updateParent(getToolChain());
newTools.add(newTool); newTools.add(newTool);
} else { } else {
remainingAdded.add(info.fToObject); remainingAdded.add(info.getToObject());
} }
} }
@ -1057,12 +1078,9 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
List failed = new ArrayList(); List failed = new ArrayList();
for(Iterator iter = converterMap.values().iterator();iter.hasNext();){ for(Iterator iter = converterMap.values().iterator();iter.hasNext();){
ConverterInfo info = (ConverterInfo)iter.next(); 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())){ if(converted == null || !converted.getClass().equals(info.getFromObject().getClass())){
failed.add(info); failed.add(info);
} else {
info.fToObject = converted;
info.fIsConversionPerformed = true;
} }
} }
return failed; return failed;