mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Additional core fix for [bug 205840] Should file-level tool be updated when project toolchain changes?
This commit is contained in:
parent
6fb8484d00
commit
b8a19bed37
16 changed files with 212 additions and 63 deletions
|
@ -63,7 +63,7 @@ public class ToolChainModificationTests extends BasicTestCase {
|
||||||
IConfiguration cfg = ManagedBuildManager.getConfigurationForDescription(des.getConfigurations()[0]);
|
IConfiguration cfg = ManagedBuildManager.getConfigurationForDescription(des.getConfigurations()[0]);
|
||||||
IToolChainModificationManager mngr = ManagedBuildManager.getToolChainModificationManager();
|
IToolChainModificationManager mngr = ManagedBuildManager.getToolChainModificationManager();
|
||||||
|
|
||||||
IConfigurationModification cfgM = (IConfigurationModification)mngr.getModification(cfg.getRootFolderInfo());
|
IConfigurationModification cfgM = (IConfigurationModification)mngr.createModification(cfg.getRootFolderInfo());
|
||||||
assertTrue(cfgM.isToolChainCompatible());
|
assertTrue(cfgM.isToolChainCompatible());
|
||||||
assertTrue(cfgM.isBuilderCompatible());
|
assertTrue(cfgM.isBuilderCompatible());
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ public class ToolChainModificationTests extends BasicTestCase {
|
||||||
IConfiguration cfg = ManagedBuildManager.getConfigurationForDescription(des.getConfigurations()[0]);
|
IConfiguration cfg = ManagedBuildManager.getConfigurationForDescription(des.getConfigurations()[0]);
|
||||||
IToolChainModificationManager mngr = ManagedBuildManager.getToolChainModificationManager();
|
IToolChainModificationManager mngr = ManagedBuildManager.getToolChainModificationManager();
|
||||||
|
|
||||||
IConfigurationModification cfgM = (IConfigurationModification)mngr.getModification(cfg.getRootFolderInfo());
|
IConfigurationModification cfgM = (IConfigurationModification)mngr.createModification(cfg.getRootFolderInfo());
|
||||||
assertEquals(cfgM.getToolChain(), cfg.getToolChain());
|
assertEquals(cfgM.getToolChain(), cfg.getToolChain());
|
||||||
assertTrue(cfgM.isToolChainCompatible());
|
assertTrue(cfgM.isToolChainCompatible());
|
||||||
assertTrue(cfgM.isBuilderCompatible());
|
assertTrue(cfgM.isBuilderCompatible());
|
||||||
|
@ -142,11 +142,11 @@ public class ToolChainModificationTests extends BasicTestCase {
|
||||||
fo.create(true, true, null);
|
fo.create(true, true, null);
|
||||||
|
|
||||||
IFolderInfo foInfo = cfg.createFolderInfo(foPath);
|
IFolderInfo foInfo = cfg.createFolderInfo(foPath);
|
||||||
IFolderInfoModification foM = mngr.getModification(foInfo);
|
IFolderInfoModification foM = mngr.createModification(foInfo);
|
||||||
assertEquals(foM.getToolChain(), foInfo.getToolChain());
|
assertEquals(foM.getToolChain(), foInfo.getToolChain());
|
||||||
assertTrue(foM.isToolChainCompatible());
|
assertTrue(foM.isToolChainCompatible());
|
||||||
|
|
||||||
cfgM = (IConfigurationModification)mngr.getModification(cfg.getRootFolderInfo());
|
cfgM = (IConfigurationModification)mngr.createModification(cfg.getRootFolderInfo());
|
||||||
assertEquals(cfgM.getToolChain(), cfg.getToolChain());
|
assertEquals(cfgM.getToolChain(), cfg.getToolChain());
|
||||||
assertTrue(cfgM.isToolChainCompatible());
|
assertTrue(cfgM.isToolChainCompatible());
|
||||||
assertTrue(cfgM.isBuilderCompatible());
|
assertTrue(cfgM.isBuilderCompatible());
|
||||||
|
@ -165,9 +165,9 @@ public class ToolChainModificationTests extends BasicTestCase {
|
||||||
foM.setToolChain(incompatibleTc);
|
foM.setToolChain(incompatibleTc);
|
||||||
assertFalse(foM.isToolChainCompatible());
|
assertFalse(foM.isToolChainCompatible());
|
||||||
foInfo.changeToolChain(incompatibleTc, CDataUtil.genId("blah.blah"), incompatibleTc.getName());
|
foInfo.changeToolChain(incompatibleTc, CDataUtil.genId("blah.blah"), incompatibleTc.getName());
|
||||||
cfgM = (IConfigurationModification)mngr.getModification(cfg.getRootFolderInfo());
|
cfgM = (IConfigurationModification)mngr.createModification(cfg.getRootFolderInfo());
|
||||||
assertTrue(cfgM.isToolChainCompatible());
|
assertTrue(cfgM.isToolChainCompatible());
|
||||||
foM = mngr.getModification(foInfo);
|
foM = mngr.createModification(foInfo);
|
||||||
assertFalse(foM.isToolChainCompatible());
|
assertFalse(foM.isToolChainCompatible());
|
||||||
|
|
||||||
project.delete(true, null);
|
project.delete(true, null);
|
||||||
|
@ -183,7 +183,7 @@ public class ToolChainModificationTests extends BasicTestCase {
|
||||||
IConfiguration cfg = ManagedBuildManager.getConfigurationForDescription(des.getConfigurations()[0]);
|
IConfiguration cfg = ManagedBuildManager.getConfigurationForDescription(des.getConfigurations()[0]);
|
||||||
IToolChainModificationManager mngr = ManagedBuildManager.getToolChainModificationManager();
|
IToolChainModificationManager mngr = ManagedBuildManager.getToolChainModificationManager();
|
||||||
|
|
||||||
IConfigurationModification cfgM = (IConfigurationModification)mngr.getModification(cfg.getRootFolderInfo());
|
IConfigurationModification cfgM = (IConfigurationModification)mngr.createModification(cfg.getRootFolderInfo());
|
||||||
assertEquals(cfgM.getToolChain(), cfg.getToolChain());
|
assertEquals(cfgM.getToolChain(), cfg.getToolChain());
|
||||||
assertTrue(cfgM.isToolChainCompatible());
|
assertTrue(cfgM.isToolChainCompatible());
|
||||||
assertTrue(cfgM.isBuilderCompatible());
|
assertTrue(cfgM.isBuilderCompatible());
|
||||||
|
@ -193,11 +193,11 @@ public class ToolChainModificationTests extends BasicTestCase {
|
||||||
fo.create(true, true, null);
|
fo.create(true, true, null);
|
||||||
|
|
||||||
IFolderInfo foInfo = cfg.createFolderInfo(foPath);
|
IFolderInfo foInfo = cfg.createFolderInfo(foPath);
|
||||||
IFolderInfoModification foM = mngr.getModification(foInfo);
|
IFolderInfoModification foM = mngr.createModification(foInfo);
|
||||||
assertEquals(foM.getToolChain(), foInfo.getToolChain());
|
assertEquals(foM.getToolChain(), foInfo.getToolChain());
|
||||||
assertTrue(foM.isToolChainCompatible());
|
assertTrue(foM.isToolChainCompatible());
|
||||||
|
|
||||||
cfgM = (IConfigurationModification)mngr.getModification(cfg.getRootFolderInfo());
|
cfgM = (IConfigurationModification)mngr.createModification(cfg.getRootFolderInfo());
|
||||||
assertEquals(cfgM.getToolChain(), cfg.getToolChain());
|
assertEquals(cfgM.getToolChain(), cfg.getToolChain());
|
||||||
assertTrue(cfgM.isToolChainCompatible());
|
assertTrue(cfgM.isToolChainCompatible());
|
||||||
assertTrue(cfgM.isBuilderCompatible());
|
assertTrue(cfgM.isBuilderCompatible());
|
||||||
|
@ -222,9 +222,9 @@ public class ToolChainModificationTests extends BasicTestCase {
|
||||||
foM.setToolChain(ManagedBuildManager.getExtensionToolChain("tcm.derive2.tc1"));
|
foM.setToolChain(ManagedBuildManager.getExtensionToolChain("tcm.derive2.tc1"));
|
||||||
assertFalse(foM.isToolChainCompatible());
|
assertFalse(foM.isToolChainCompatible());
|
||||||
foInfo.changeToolChain(ManagedBuildManager.getExtensionToolChain("tcm.derive2.tc1"), CDataUtil.genId("blah.blah"), null);
|
foInfo.changeToolChain(ManagedBuildManager.getExtensionToolChain("tcm.derive2.tc1"), CDataUtil.genId("blah.blah"), null);
|
||||||
cfgM = (IConfigurationModification)mngr.getModification(cfg.getRootFolderInfo());
|
cfgM = (IConfigurationModification)mngr.createModification(cfg.getRootFolderInfo());
|
||||||
assertTrue(cfgM.isToolChainCompatible());
|
assertTrue(cfgM.isToolChainCompatible());
|
||||||
foM = mngr.getModification(foInfo);
|
foM = mngr.createModification(foInfo);
|
||||||
assertFalse(foM.isToolChainCompatible());
|
assertFalse(foM.isToolChainCompatible());
|
||||||
|
|
||||||
project.delete(true, null);
|
project.delete(true, null);
|
||||||
|
@ -324,7 +324,7 @@ public class ToolChainModificationTests extends BasicTestCase {
|
||||||
|
|
||||||
IToolChainModificationManager mngr = ManagedBuildManager.getToolChainModificationManager();
|
IToolChainModificationManager mngr = ManagedBuildManager.getToolChainModificationManager();
|
||||||
|
|
||||||
IConfigurationModification cfgM = (IConfigurationModification)mngr.getModification(cfg.getRootFolderInfo());
|
IConfigurationModification cfgM = (IConfigurationModification)mngr.createModification(cfg.getRootFolderInfo());
|
||||||
assertEquals(cfgM.getToolChain(), cfg.getToolChain());
|
assertEquals(cfgM.getToolChain(), cfg.getToolChain());
|
||||||
assertTrue(cfgM.isToolChainCompatible());
|
assertTrue(cfgM.isToolChainCompatible());
|
||||||
assertTrue(cfgM.isBuilderCompatible());
|
assertTrue(cfgM.isBuilderCompatible());
|
||||||
|
@ -334,11 +334,11 @@ public class ToolChainModificationTests extends BasicTestCase {
|
||||||
fo.create(true, true, null);
|
fo.create(true, true, null);
|
||||||
|
|
||||||
IFolderInfo foInfo = cfg.createFolderInfo(foPath);
|
IFolderInfo foInfo = cfg.createFolderInfo(foPath);
|
||||||
IFolderInfoModification foM = mngr.getModification(foInfo);
|
IFolderInfoModification foM = mngr.createModification(foInfo);
|
||||||
assertEquals(foM.getToolChain(), foInfo.getToolChain());
|
assertEquals(foM.getToolChain(), foInfo.getToolChain());
|
||||||
assertTrue(foM.isToolChainCompatible());
|
assertTrue(foM.isToolChainCompatible());
|
||||||
|
|
||||||
cfgM = (IConfigurationModification)mngr.getModification(cfg.getRootFolderInfo());
|
cfgM = (IConfigurationModification)mngr.createModification(cfg.getRootFolderInfo());
|
||||||
assertEquals(cfgM.getToolChain(), cfg.getToolChain());
|
assertEquals(cfgM.getToolChain(), cfg.getToolChain());
|
||||||
assertTrue(cfgM.isToolChainCompatible());
|
assertTrue(cfgM.isToolChainCompatible());
|
||||||
assertTrue(cfgM.isBuilderCompatible());
|
assertTrue(cfgM.isBuilderCompatible());
|
||||||
|
|
|
@ -2704,4 +2704,8 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
|
||||||
public boolean isRealBuildObject() {
|
public boolean isRealBuildObject() {
|
||||||
return ManagedBuildManager.getRealBuilder(this) == this;
|
return ManagedBuildManager.getRealBuilder(this) == this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isExtensionBuildObject() {
|
||||||
|
return isExtensionElement();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3027,4 +3027,8 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
|
||||||
public String getUniqueRealName() {
|
public String getUniqueRealName() {
|
||||||
return getName();
|
return getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isExtensionBuildObject() {
|
||||||
|
return isExtensionElement();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,8 @@ public interface IRealBuildObjectAssociation extends IBuildObject {
|
||||||
|
|
||||||
boolean isRealBuildObject();
|
boolean isRealBuildObject();
|
||||||
|
|
||||||
|
boolean isExtensionBuildObject();
|
||||||
|
|
||||||
IRealBuildObjectAssociation[] getIdenticBuildObjects();
|
IRealBuildObjectAssociation[] getIdenticBuildObjects();
|
||||||
|
|
||||||
IRealBuildObjectAssociation getSuperClassObject();
|
IRealBuildObjectAssociation getSuperClassObject();
|
||||||
|
|
|
@ -4209,4 +4209,8 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch
|
||||||
public boolean isRealBuildObject() {
|
public boolean isRealBuildObject() {
|
||||||
return getRealBuildObject() == this;
|
return getRealBuildObject() == this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isExtensionBuildObject() {
|
||||||
|
return isExtensionElement();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2796,4 +2796,8 @@ public class ToolChain extends HoldsOptions implements IToolChain, IBuildPropert
|
||||||
public boolean isRealBuildObject() {
|
public boolean isRealBuildObject() {
|
||||||
return getRealBuildObject() == this;
|
return getRealBuildObject() == this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isExtensionBuildObject() {
|
||||||
|
return isExtensionElement();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,6 +79,16 @@ public class ConfigurationModification extends FolderInfoModification implements
|
||||||
setBuilder(foInfo.getParent().getBuilder());
|
setBuilder(foInfo.getParent().getBuilder());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ConfigurationModification(FolderInfo foInfo, ConfigurationModification base) {
|
||||||
|
super(foInfo, base);
|
||||||
|
|
||||||
|
fSelectedBuilder = base.fSelectedBuilder;
|
||||||
|
if(!fSelectedBuilder.isExtensionElement())
|
||||||
|
fSelectedBuilder = ManagedBuildManager.getExtensionBuilder(fSelectedBuilder);
|
||||||
|
|
||||||
|
fRealBuilder = base.fRealBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
public IBuilder getBuilder() {
|
public IBuilder getBuilder() {
|
||||||
return fSelectedBuilder;
|
return fSelectedBuilder;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,10 @@ public class FileInfoModification extends
|
||||||
super(rcInfo, rcInfo.getTools());
|
super(rcInfo, rcInfo.getTools());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public FileInfoModification(ResourceConfiguration rcInfo, FileInfoModification base) {
|
||||||
|
super(rcInfo, base);
|
||||||
|
}
|
||||||
|
|
||||||
protected boolean canRemove(ITool realTool) {
|
protected boolean canRemove(ITool realTool) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,6 +58,15 @@ public class FolderInfoModification extends ToolListModification implements IFol
|
||||||
fRealToolChain = (ToolChain)ManagedBuildManager.getRealToolChain(fSelectedToolChain);
|
fRealToolChain = (ToolChain)ManagedBuildManager.getRealToolChain(fSelectedToolChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public FolderInfoModification(FolderInfo foInfo, FolderInfoModification base) {
|
||||||
|
super(foInfo, base);
|
||||||
|
fSelectedToolChain = base.fSelectedToolChain;
|
||||||
|
if(!fSelectedToolChain.isExtensionElement())
|
||||||
|
fSelectedToolChain = (ToolChain)fSelectedToolChain.getExtensionObject();
|
||||||
|
|
||||||
|
fRealToolChain = base.fRealToolChain;
|
||||||
|
}
|
||||||
|
|
||||||
private ConflictMatchSet getParentConflictMatchSet(){
|
private ConflictMatchSet getParentConflictMatchSet(){
|
||||||
if(fParentConflicts == null){
|
if(fParentConflicts == null){
|
||||||
PerTypeMapStorage storage = getParentObjectStorage();
|
PerTypeMapStorage storage = getParentObjectStorage();
|
||||||
|
|
|
@ -13,7 +13,7 @@ package org.eclipse.cdt.managedbuilder.internal.tcmodification;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class PerTypeMapStorage {
|
public class PerTypeMapStorage implements Cloneable {
|
||||||
private ObjectTypeBasedStorage fStorage = new ObjectTypeBasedStorage();
|
private ObjectTypeBasedStorage fStorage = new ObjectTypeBasedStorage();
|
||||||
|
|
||||||
public Map getMap(int type, boolean create){
|
public Map getMap(int type, boolean create){
|
||||||
|
@ -30,4 +30,20 @@ public class PerTypeMapStorage {
|
||||||
return new HashMap();
|
return new HashMap();
|
||||||
return (Map)((HashMap)map).clone();
|
return (Map)((HashMap)map).clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Object clone(){
|
||||||
|
try {
|
||||||
|
PerTypeMapStorage clone = (PerTypeMapStorage)super.clone();
|
||||||
|
int types[] = ObjectTypeBasedStorage.getSupportedObjectTypes();
|
||||||
|
for(int i = 0; i < types.length; i++){
|
||||||
|
Object o = clone.fStorage.get(types[i]);
|
||||||
|
if(o != null){
|
||||||
|
clone.fStorage.set(types[i], clone.createMap((Map)o));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (CloneNotSupportedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,6 +117,21 @@ public class TcModificationUtil {
|
||||||
return storage;
|
return storage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static PerTypeMapStorage cloneRealToolToPathSet(PerTypeMapStorage starage){
|
||||||
|
starage = (PerTypeMapStorage)starage.clone();
|
||||||
|
int types[] = ObjectTypeBasedStorage.getSupportedObjectTypes();
|
||||||
|
for(int i = 0; i < types.length; i++){
|
||||||
|
Map map = starage.getMap(types[i], false);
|
||||||
|
if(map != null){
|
||||||
|
for(Iterator iter = map.entrySet().iterator(); iter.hasNext(); ){
|
||||||
|
Map.Entry entry = (Map.Entry)iter.next();
|
||||||
|
entry.setValue(((TreeSet)entry.getValue()).clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return starage;
|
||||||
|
}
|
||||||
|
|
||||||
public static PerTypeMapStorage createRealToolToPathSet(IConfiguration cfg, PerTypeMapStorage skipMapStorage, boolean addSkipPaths){
|
public static PerTypeMapStorage createRealToolToPathSet(IConfiguration cfg, PerTypeMapStorage skipMapStorage, boolean addSkipPaths){
|
||||||
PerTypeMapStorage storage = new PerTypeMapStorage();
|
PerTypeMapStorage storage = new PerTypeMapStorage();
|
||||||
|
@ -448,6 +463,17 @@ public class TcModificationUtil {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static TreeMap clonePathMap(TreeMap map){
|
||||||
|
map = (TreeMap)map.clone();
|
||||||
|
|
||||||
|
for(Iterator iter = map.entrySet().iterator(); iter.hasNext(); ){
|
||||||
|
Map.Entry entry = (Map.Entry)iter.next();
|
||||||
|
entry.setValue(((PerTypeSetStorage)entry.getValue()).clone());
|
||||||
|
}
|
||||||
|
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean pathContainsObjects(PerTypeMapStorage storage, IPath path, int type){
|
private static boolean pathContainsObjects(PerTypeMapStorage storage, IPath path, int type){
|
||||||
Map map = storage.getMap(type, false);
|
Map map = storage.getMap(type, false);
|
||||||
if(map == null)
|
if(map == null)
|
||||||
|
|
|
@ -20,8 +20,10 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IFileInfo;
|
import org.eclipse.cdt.managedbuilder.core.IFileInfo;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IFolderInfo;
|
import org.eclipse.cdt.managedbuilder.core.IFolderInfo;
|
||||||
|
import org.eclipse.cdt.managedbuilder.core.IResourceInfo;
|
||||||
import org.eclipse.cdt.managedbuilder.internal.core.FolderInfo;
|
import org.eclipse.cdt.managedbuilder.internal.core.FolderInfo;
|
||||||
import org.eclipse.cdt.managedbuilder.internal.core.IRealBuildObjectAssociation;
|
import org.eclipse.cdt.managedbuilder.internal.core.IRealBuildObjectAssociation;
|
||||||
import org.eclipse.cdt.managedbuilder.internal.core.ResourceConfiguration;
|
import org.eclipse.cdt.managedbuilder.internal.core.ResourceConfiguration;
|
||||||
|
@ -30,6 +32,8 @@ import org.eclipse.cdt.managedbuilder.internal.tcmodification.extension.RulesMan
|
||||||
import org.eclipse.cdt.managedbuilder.tcmodification.IFileInfoModification;
|
import org.eclipse.cdt.managedbuilder.tcmodification.IFileInfoModification;
|
||||||
import org.eclipse.cdt.managedbuilder.tcmodification.IFolderInfoModification;
|
import org.eclipse.cdt.managedbuilder.tcmodification.IFolderInfoModification;
|
||||||
import org.eclipse.cdt.managedbuilder.tcmodification.IToolChainModificationManager;
|
import org.eclipse.cdt.managedbuilder.tcmodification.IToolChainModificationManager;
|
||||||
|
import org.eclipse.cdt.managedbuilder.tcmodification.IToolListModification;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
|
||||||
public class ToolChainModificationManager implements
|
public class ToolChainModificationManager implements
|
||||||
IToolChainModificationManager {
|
IToolChainModificationManager {
|
||||||
|
@ -54,17 +58,57 @@ public class ToolChainModificationManager implements
|
||||||
RulesManager.getInstance().start();
|
RulesManager.getInstance().start();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IFileInfoModification getModification(IFileInfo rcInfo) {
|
public IFileInfoModification createModification(IFileInfo rcInfo) {
|
||||||
return new FileInfoModification((ResourceConfiguration)rcInfo);
|
return new FileInfoModification((ResourceConfiguration)rcInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IFolderInfoModification getModification(IFolderInfo rcInfo) {
|
public IFolderInfoModification createModification(IFolderInfo rcInfo) {
|
||||||
FolderInfo foInfo = (FolderInfo)rcInfo;
|
FolderInfo foInfo = (FolderInfo)rcInfo;
|
||||||
if(foInfo.isRoot())
|
if(foInfo.isRoot())
|
||||||
return new ConfigurationModification(foInfo);
|
return new ConfigurationModification(foInfo);
|
||||||
return new FolderInfoModification(foInfo);
|
return new FolderInfoModification(foInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IFolderInfoModification createModification(IConfiguration cfg,
|
||||||
|
IFolderInfoModification base) throws IllegalArgumentException {
|
||||||
|
IResourceInfo baseRcInfo = base.getResourceInfo();
|
||||||
|
IPath path = baseRcInfo.getPath();
|
||||||
|
IResourceInfo rcInfo = cfg.getResourceInfo(path, true);
|
||||||
|
FolderInfo folderInfo;
|
||||||
|
if(rcInfo != null){
|
||||||
|
if(rcInfo instanceof FolderInfo){
|
||||||
|
folderInfo = (FolderInfo)rcInfo;
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
folderInfo = (FolderInfo)cfg.createFolderInfo(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
return folderInfo.isRoot() ?
|
||||||
|
new ConfigurationModification(folderInfo, (ConfigurationModification)base)
|
||||||
|
: new FolderInfoModification(folderInfo, (FolderInfoModification)base);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IFileInfoModification createModification(IConfiguration cfg,
|
||||||
|
IFileInfoModification base) throws IllegalArgumentException {
|
||||||
|
IResourceInfo baseRcInfo = base.getResourceInfo();
|
||||||
|
IPath path = baseRcInfo.getPath();
|
||||||
|
IResourceInfo rcInfo = cfg.getResourceInfo(path, true);
|
||||||
|
ResourceConfiguration fileInfo;
|
||||||
|
if(rcInfo != null){
|
||||||
|
if(rcInfo instanceof ResourceConfiguration){
|
||||||
|
fileInfo = (ResourceConfiguration)rcInfo;
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fileInfo = (ResourceConfiguration)cfg.createFileInfo(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new FileInfoModification(fileInfo, (FileInfoModification)base);
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean checkFlags(int flags, int value){
|
public static boolean checkFlags(int flags, int value){
|
||||||
return (flags & value) == value;
|
return (flags & value) == value;
|
||||||
}
|
}
|
||||||
|
@ -77,38 +121,6 @@ public class ToolChainModificationManager implements
|
||||||
return flags &= (~value);
|
return flags &= (~value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// public static final int SCOPE_MATCH_EXACT = 1;
|
|
||||||
// public static final int SCOPE_MATCH_PARTIAL = 1 << 1;
|
|
||||||
// public static final int SCOPE_MATCH_SCOPE_COVERS = 1 << 2;
|
|
||||||
// public static final int SCOPE_MATCH_SET_SCOPE_COVERS = 1 << 3;
|
|
||||||
// public static final int SCOPE_MATCH_NO = 1 << 4;
|
|
||||||
// public static final int SCOPE_MATCH_ANY_MATCH =
|
|
||||||
// SCOPE_MATCH_EXACT
|
|
||||||
// | SCOPE_MATCH_PARTIAL
|
|
||||||
// | SCOPE_MATCH_SCOPE_COVERS
|
|
||||||
// | SCOPE_MATCH_SET_SCOPE_COVERS;
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// public static boolean matchScope(int scope, int setScope, int matchType){
|
|
||||||
// int applicableTypes = 0;
|
|
||||||
// if(scope == setScope){
|
|
||||||
// applicableTypes |= SCOPE_MATCH_EXACT;
|
|
||||||
// } else {
|
|
||||||
// int conjunction = scope & setScope;
|
|
||||||
// if(conjunction == scope){
|
|
||||||
// applicableTypes |= SCOPE_MATCH_SET_SCOPE_COVERS;
|
|
||||||
// } else if (conjunction == setScope) {
|
|
||||||
// applicableTypes |= SCOPE_MATCH_SCOPE_COVERS;
|
|
||||||
// } else if (conjunction == 0){
|
|
||||||
// applicableTypes |= SCOPE_MATCH_NO;
|
|
||||||
// } else {
|
|
||||||
// applicableTypes |= SCOPE_MATCH_PARTIAL;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return (applicableTypes & matchType) != 0;
|
|
||||||
// }
|
|
||||||
|
|
||||||
private boolean getMatchingObjects(int type, IObjectSet[] oSets, Set skipSet, IRealBuildObjectAssociation additionalSkip, Set result){
|
private boolean getMatchingObjects(int type, IObjectSet[] oSets, Set skipSet, IRealBuildObjectAssociation additionalSkip, Set result){
|
||||||
Set tmp = null;
|
Set tmp = null;
|
||||||
boolean added = false;
|
boolean added = false;
|
||||||
|
|
|
@ -50,17 +50,17 @@ import org.eclipse.core.runtime.Status;
|
||||||
public abstract class ToolListModification implements
|
public abstract class ToolListModification implements
|
||||||
IToolListModification {
|
IToolListModification {
|
||||||
// private Tool []fTools;
|
// private Tool []fTools;
|
||||||
private Set fInputExtsSet = new HashSet();
|
private HashSet fInputExtsSet = new HashSet();
|
||||||
private ResourceInfo fRcInfo;
|
private ResourceInfo fRcInfo;
|
||||||
private LinkedHashMap fProjCompInfoMap = new LinkedHashMap();
|
private LinkedHashMap fProjCompInfoMap = new LinkedHashMap();
|
||||||
private HashMap fSysCompInfoMap = new HashMap();
|
private HashMap fSysCompInfoMap = new HashMap();
|
||||||
private Tool[] fAllSysTools;
|
private Tool[] fAllSysTools;
|
||||||
private Set fFilteredOutSysTools;
|
private HashSet fFilteredOutSysTools;
|
||||||
// private LinkedHashMap fRealToToolMap = new LinkedHashMap();
|
// private LinkedHashMap fRealToToolMap = new LinkedHashMap();
|
||||||
// private boolean fSysInfoMapInited;
|
// private boolean fSysInfoMapInited;
|
||||||
private PerTypeMapStorage fCompleteObjectStorage;
|
private PerTypeMapStorage fCompleteObjectStorage;
|
||||||
private TreeMap fCompletePathMapStorage;
|
private TreeMap fCompletePathMapStorage;
|
||||||
private Set fAddCapableTools;
|
private HashSet fAddCapableTools;
|
||||||
private Map fFilteredOutTools;
|
private Map fFilteredOutTools;
|
||||||
|
|
||||||
private ToolListModificationInfo fModificationInfo;
|
private ToolListModificationInfo fModificationInfo;
|
||||||
|
@ -378,6 +378,55 @@ public abstract class ToolListModification implements
|
||||||
clearToolInfo(tools);
|
clearToolInfo(tools);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ToolListModification(ResourceInfo rcInfo, ToolListModification base){
|
||||||
|
fRcInfo = rcInfo;
|
||||||
|
Tool[] initialTools = (Tool[])rcInfo.getTools();
|
||||||
|
Map initRealToToolMap = TcModificationUtil.getRealToObjectsMap(initialTools, new LinkedHashMap());
|
||||||
|
Tool[] updatedTools = base.getTools(true, false);
|
||||||
|
Map updatedRealToToolMap = TcModificationUtil.getRealToObjectsMap(updatedTools, new LinkedHashMap());
|
||||||
|
for(Iterator iter = updatedRealToToolMap.entrySet().iterator(); iter.hasNext(); ){
|
||||||
|
Map.Entry entry = (Map.Entry)iter.next();
|
||||||
|
Object real = entry.getKey();
|
||||||
|
Object initial = initRealToToolMap.get(real);
|
||||||
|
if(initial != null){
|
||||||
|
entry.setValue(initial);
|
||||||
|
} else {
|
||||||
|
IRealBuildObjectAssociation updated = (IRealBuildObjectAssociation)entry.getValue();
|
||||||
|
if(!updated.isExtensionBuildObject()){
|
||||||
|
updated = updated.getExtensionObject();
|
||||||
|
entry.setValue(updated);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updatedRealToToolMap.values().toArray(updatedTools);
|
||||||
|
clearToolInfo(updatedTools);
|
||||||
|
|
||||||
|
// if(base.fInputExtsSet != null)
|
||||||
|
// fInputExtsSet = (HashSet)base.fInputExtsSet.clone();
|
||||||
|
// private LinkedHashMap fProjCompInfoMap = new LinkedHashMap();
|
||||||
|
// private HashMap fSysCompInfoMap = new HashMap();
|
||||||
|
if(base.fAllSysTools != null)
|
||||||
|
fAllSysTools = (Tool[])base.fAllSysTools.clone();
|
||||||
|
|
||||||
|
if(base.fFilteredOutSysTools != null)
|
||||||
|
fFilteredOutSysTools = (HashSet)base.fFilteredOutSysTools.clone();
|
||||||
|
|
||||||
|
if(base.fCompleteObjectStorage != null){
|
||||||
|
fCompleteObjectStorage = TcModificationUtil.cloneRealToolToPathSet(base.fCompleteObjectStorage);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(base.fCompletePathMapStorage != null){
|
||||||
|
fCompletePathMapStorage = base.fCompletePathMapStorage;
|
||||||
|
}
|
||||||
|
// if(base.fAddCapableTools)
|
||||||
|
// fAddCapableTools = (HashSet)base.fAddCapableTools.clone();
|
||||||
|
//private Map fFilteredOutTools;
|
||||||
|
|
||||||
|
// private ToolListModificationInfo fModificationInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public IResourceInfo getResourceInfo(){
|
public IResourceInfo getResourceInfo(){
|
||||||
return fRcInfo;
|
return fRcInfo;
|
||||||
}
|
}
|
||||||
|
@ -440,7 +489,7 @@ public abstract class ToolListModification implements
|
||||||
if(fAllSysTools == null){
|
if(fAllSysTools == null){
|
||||||
ITool[] allSys = ManagedBuildManager.getRealTools();
|
ITool[] allSys = ManagedBuildManager.getRealTools();
|
||||||
fAllSysTools = filterTools((Tool[])allSys);
|
fAllSysTools = filterTools((Tool[])allSys);
|
||||||
Set set = new HashSet(Arrays.asList(allSys));
|
HashSet set = new HashSet(Arrays.asList(allSys));
|
||||||
set.removeAll(Arrays.asList(fAllSysTools));
|
set.removeAll(Arrays.asList(fAllSysTools));
|
||||||
fFilteredOutSysTools = set;
|
fFilteredOutSysTools = set;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.managedbuilder.tcmodification;
|
package org.eclipse.cdt.managedbuilder.tcmodification;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IFileInfo;
|
import org.eclipse.cdt.managedbuilder.core.IFileInfo;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IFolderInfo;
|
import org.eclipse.cdt.managedbuilder.core.IFolderInfo;
|
||||||
import org.eclipse.cdt.managedbuilder.internal.core.IRealBuildObjectAssociation;
|
import org.eclipse.cdt.managedbuilder.internal.core.IRealBuildObjectAssociation;
|
||||||
|
@ -28,7 +29,7 @@ public interface IToolChainModificationManager {
|
||||||
* @param rcInfo
|
* @param rcInfo
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
IFolderInfoModification getModification(IFolderInfo rcInfo);
|
IFolderInfoModification createModification(IFolderInfo rcInfo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns the modification info calculator for the given file info
|
* returns the modification info calculator for the given file info
|
||||||
|
@ -36,5 +37,9 @@ public interface IToolChainModificationManager {
|
||||||
* @param rcInfo
|
* @param rcInfo
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
IFileInfoModification getModification(IFileInfo rcInfo);
|
IFileInfoModification createModification(IFileInfo rcInfo);
|
||||||
|
|
||||||
|
IFolderInfoModification createModification(IConfiguration cfg, IFolderInfoModification base) throws IllegalArgumentException;
|
||||||
|
|
||||||
|
IFileInfoModification createModification(IConfiguration cfg, IFileInfoModification base) throws IllegalArgumentException;
|
||||||
}
|
}
|
||||||
|
|
|
@ -167,7 +167,7 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab {
|
||||||
|
|
||||||
private void showErrorMessage() {
|
private void showErrorMessage() {
|
||||||
if (ri instanceof IFolderInfo) {
|
if (ri instanceof IFolderInfo) {
|
||||||
IFolderInfoModification foim = tcmm.getModification((IFolderInfo)ri);
|
IFolderInfoModification foim = tcmm.createModification((IFolderInfo)ri);
|
||||||
if (foim.isToolChainCompatible()) {
|
if (foim.isToolChainCompatible()) {
|
||||||
st_toolchain.setText(EMPTY_STR);
|
st_toolchain.setText(EMPTY_STR);
|
||||||
} else {
|
} else {
|
||||||
|
@ -186,7 +186,7 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // FileInfo
|
} else { // FileInfo
|
||||||
IFileInfoModification fim = tcmm.getModification((IFileInfo)ri);
|
IFileInfoModification fim = tcmm.createModification((IFileInfo)ri);
|
||||||
fim.getProjectToolModifications();
|
fim.getProjectToolModifications();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -202,7 +202,7 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab {
|
||||||
|
|
||||||
IToolChain[] tcs = r_tcs;
|
IToolChain[] tcs = r_tcs;
|
||||||
if (b_dispCompatible.getSelection() && (ri instanceof IFolderInfo)) {
|
if (b_dispCompatible.getSelection() && (ri instanceof IFolderInfo)) {
|
||||||
IFolderInfoModification fim = tcmm.getModification((IFolderInfo)ri);
|
IFolderInfoModification fim = tcmm.createModification((IFolderInfo)ri);
|
||||||
tcs = fim.getCompatibleToolChains();
|
tcs = fim.getCompatibleToolChains();
|
||||||
IToolChain[] tcs1 = new IToolChain[tcs.length + 1];
|
IToolChain[] tcs1 = new IToolChain[tcs.length + 1];
|
||||||
System.arraycopy(tcs, 0, tcs1, 0, tcs.length);
|
System.arraycopy(tcs, 0, tcs1, 0, tcs.length);
|
||||||
|
@ -245,7 +245,7 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab {
|
||||||
IBuilder[] bs = r_bs;
|
IBuilder[] bs = r_bs;
|
||||||
|
|
||||||
if (b_dispCompatible.getSelection() && (ri instanceof IFolderInfo)) {
|
if (b_dispCompatible.getSelection() && (ri instanceof IFolderInfo)) {
|
||||||
IFolderInfoModification fim = tcmm.getModification((IFolderInfo)ri);
|
IFolderInfoModification fim = tcmm.createModification((IFolderInfo)ri);
|
||||||
if (fim instanceof IConfigurationModification) {
|
if (fim instanceof IConfigurationModification) {
|
||||||
IBuilder[] bs1 = ((IConfigurationModification)fim).getCompatibleBuilders();
|
IBuilder[] bs1 = ((IConfigurationModification)fim).getCompatibleBuilders();
|
||||||
bs = new IBuilder[bs1.length + 1];
|
bs = new IBuilder[bs1.length + 1];
|
||||||
|
@ -347,7 +347,7 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab {
|
||||||
st_tool.setImage(null);
|
st_tool.setImage(null);
|
||||||
if (tool == null)
|
if (tool == null)
|
||||||
return;
|
return;
|
||||||
IFileInfoModification fim = tcmm.getModification((IFileInfo)ri);
|
IFileInfoModification fim = tcmm.createModification((IFileInfo)ri);
|
||||||
IToolModification tm = fim.getToolModification(tool);
|
IToolModification tm = fim.getToolModification(tool);
|
||||||
if (tm != null && !tm.isCompatible()) {
|
if (tm != null && !tm.isCompatible()) {
|
||||||
CompatibilityStatus cs = tm.getCompatibilityStatus();
|
CompatibilityStatus cs = tm.getCompatibilityStatus();
|
||||||
|
@ -361,7 +361,7 @@ public class ToolChainEditTab extends AbstractCBuildPropertyTab {
|
||||||
private boolean updateCompatibleTools(ITool real) {
|
private boolean updateCompatibleTools(ITool real) {
|
||||||
boolean result = false;
|
boolean result = false;
|
||||||
ArrayList list = new ArrayList();
|
ArrayList list = new ArrayList();
|
||||||
IFileInfoModification fim = tcmm.getModification((IFileInfo)ri);
|
IFileInfoModification fim = tcmm.createModification((IFileInfo)ri);
|
||||||
|
|
||||||
if (real != null) { // Current tool exists
|
if (real != null) { // Current tool exists
|
||||||
real = ManagedBuildManager.getRealTool(real);
|
real = ManagedBuildManager.getRealTool(real);
|
||||||
|
|
|
@ -72,9 +72,9 @@ public class ToolSelectionDialog extends Dialog {
|
||||||
setShellStyle(getShellStyle() | SWT.RESIZE);
|
setShellStyle(getShellStyle() | SWT.RESIZE);
|
||||||
|
|
||||||
if (ri instanceof IFolderInfo)
|
if (ri instanceof IFolderInfo)
|
||||||
tmod = ManagedBuildManager.getToolChainModificationManager().getModification((IFolderInfo)ri);
|
tmod = ManagedBuildManager.getToolChainModificationManager().createModification((IFolderInfo)ri);
|
||||||
else
|
else
|
||||||
tmod = ManagedBuildManager.getToolChainModificationManager().getModification((IFileInfo)ri);
|
tmod = ManagedBuildManager.getToolChainModificationManager().createModification((IFileInfo)ri);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
|
Loading…
Add table
Reference in a new issue