1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Small changes made while Multi-cfg implementation

This commit is contained in:
Oleg Krasilnikov 2008-02-13 11:27:44 +00:00
parent 51beaeaa42
commit 466f54cc91
4 changed files with 157 additions and 511 deletions

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others. * Copyright (c) 2007, 2008 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -12,12 +12,10 @@ package org.eclipse.cdt.managedbuilder.internal.core;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator;
import java.util.Set; import java.util.Set;
import org.eclipse.cdt.managedbuilder.core.IBuildObject; import org.eclipse.cdt.managedbuilder.core.IBuildObject;
import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IManagedProject;
import org.eclipse.cdt.managedbuilder.core.IResourceInfo; import org.eclipse.cdt.managedbuilder.core.IResourceInfo;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IConfigurationElement;
@ -26,15 +24,12 @@ public class ConverterInfo {
private IBuildObject fFromObject; private IBuildObject fFromObject;
private IBuildObject fConvertedFromObject; private IBuildObject fConvertedFromObject;
private IBuildObject fToObject; private IBuildObject fToObject;
private IConfigurationElement fConverterElement;
private boolean fIsConversionPerformed; private boolean fIsConversionPerformed;
private IResourceInfo fRcInfo; private IResourceInfo fRcInfo;
// private IManagedProject fMProj;
public ConverterInfo(IResourceInfo rcInfo, IBuildObject fromObject, IBuildObject toObject, IConfigurationElement el){ public ConverterInfo(IResourceInfo rcInfo, IBuildObject fromObject, IBuildObject toObject, IConfigurationElement el){
fFromObject = fromObject; fFromObject = fromObject;
fToObject = toObject; fToObject = toObject;
fConverterElement = el;
fRcInfo = rcInfo; fRcInfo = rcInfo;
} }
@ -46,32 +41,23 @@ public class ConverterInfo {
return fToObject; return fToObject;
} }
public IConfigurationElement getConverterElement(){
return fConverterElement;
}
public IBuildObject getConvertedFromObject(){ public IBuildObject getConvertedFromObject(){
if(!fIsConversionPerformed){ if(!fIsConversionPerformed){
ManagedProject mProj = getManagedProject(); ManagedProject mProj = getManagedProject();
IConfiguration[] cfgs = mProj.getConfigurations(); IConfiguration[] cfgs = mProj.getConfigurations();
fConvertedFromObject = ManagedBuildManager.convert(fFromObject, fToObject.getId(), true); fConvertedFromObject = ManagedBuildManager.convert(fFromObject, fToObject.getId(), true);
IConfiguration[] updatedCfgs = mProj.getConfigurations(); IConfiguration[] updatedCfgs = mProj.getConfigurations();
Set oldSet = new HashSet(Arrays.asList(cfgs)); Set<IConfiguration> oldSet = new HashSet<IConfiguration>(Arrays.asList(cfgs));
Set updatedSet = new HashSet(Arrays.asList(updatedCfgs)); Set<IConfiguration> updatedSet = new HashSet<IConfiguration>(Arrays.asList(updatedCfgs));
Set oldSetCopy = new HashSet(oldSet); Set<IConfiguration> oldSetCopy = new HashSet<IConfiguration>(oldSet);
oldSet.removeAll(updatedSet); oldSet.removeAll(updatedSet);
updatedSet.removeAll(oldSetCopy); updatedSet.removeAll(oldSetCopy);
if(updatedSet.size() != 0){ if(updatedSet.size() != 0)
for(Iterator iter = updatedSet.iterator(); iter.hasNext();){ for(IConfiguration cfg : updatedSet)
Configuration cfg = (Configuration)iter.next();
mProj.removeConfiguration(cfg.getId()); mProj.removeConfiguration(cfg.getId());
} if(oldSet.size() != 0)
} for(IConfiguration cfg : oldSet)
if(oldSet.size() != 0){ mProj.applyConfiguration((Configuration)cfg);
for(Iterator iter = oldSet.iterator(); iter.hasNext();){
mProj.applyConfiguration((Configuration)iter.next());
}
}
fIsConversionPerformed = true; fIsConversionPerformed = true;
} }
return fConvertedFromObject; return fConvertedFromObject;

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others. * Copyright (c) 2007, 2008 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -64,8 +64,6 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
public FolderInfo(FolderInfo folderInfo, String id, String resourceName, IPath path){ public FolderInfo(FolderInfo folderInfo, String id, String resourceName, IPath path){
super(folderInfo, path, id, resourceName); super(folderInfo, path, id, resourceName);
// setParentFolder(folderInfo);
// setParentFolderId(folderInfo.getId());
isExtensionElement = folderInfo.isExtensionElement(); isExtensionElement = folderInfo.isExtensionElement();
if(!isExtensionElement) if(!isExtensionElement)
@ -98,8 +96,6 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
subId = ManagedBuildManager.calculateChildId(extTool.getId(), null); subId = ManagedBuildManager.calculateChildId(extTool.getId(), null);
toolChain.createTool(tool, subId, tool.getName(), false); toolChain.createTool(tool, subId, tool.getName(), false);
} }
setDirty(true); setDirty(true);
setRebuildState(true); setRebuildState(true);
} }
@ -162,18 +158,13 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
} }
/* public IToolChain setToolChain(IToolChain toolChain, String id, String name){ public FolderInfo(IConfiguration cfg, FolderInfo cloneInfo, String id, Map<IPath, Map<String, String>> superIdMap, boolean cloneChildren) {
if
}
*/
public FolderInfo(IConfiguration cfg, FolderInfo cloneInfo, String id, Map superIdMap, boolean cloneChildren) {
super(cfg, cloneInfo, id); super(cfg, cloneInfo, id);
isExtensionElement = cfg.isExtensionElement(); isExtensionElement = cfg.isExtensionElement();
if(!isExtensionElement) if(!isExtensionElement)
setResourceData(new BuildFolderData(this)); setResourceData(new BuildFolderData(this));
// String subId;
String subName; String subName;
if(!cloneInfo.isExtensionElement) if(!cloneInfo.isExtensionElement)
cloneChildren = true; cloneChildren = true;
@ -184,18 +175,6 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
IToolChain extToolChain = cloneToolChain; IToolChain extToolChain = cloneToolChain;
for(; !extToolChain.isExtensionElement(); extToolChain = extToolChain.getSuperClass()); for(; !extToolChain.isExtensionElement(); extToolChain = extToolChain.getSuperClass());
// if(cloneInfo.isParentInfoInherited()){
// IFolderInfo parent = (IFolderInfo)cfg.getResourceInfo(cloneInfo.getPath().removeLastSegments(1), false);
// baseToolChain = parent.getToolChain();
// } else {
// for(baseToolChain = cloneInfo.getToolChain();
// !baseToolChain.isExtensionElement();
// baseToolChain=baseToolChain.getSuperClass());
// }
//getParentFolderInfo() != null ?
// cloneInfo.getParentFolderInfo().getToolChain() : cloneInfo.getToolChain();
subName = cloneToolChain.getName(); subName = cloneToolChain.getName();
if (cloneChildren) { if (cloneChildren) {
@ -206,12 +185,9 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
} else { } else {
// Add a tool-chain element that specifies as its superClass the // Add a tool-chain element that specifies as its superClass the
// tool-chain that is the child of the configuration. // tool-chain that is the child of the configuration.
// ToolChain superChain = (ToolChain)cloneInfo.getToolChain();
String subId = ManagedBuildManager.calculateChildId( String subId = ManagedBuildManager.calculateChildId(
extToolChain.getId(), extToolChain.getId(),
null); null);
// for(; !superChain.isExtensionElement(); superChain = (ToolChain)superChain.getSuperClass());
IToolChain newChain = createToolChain(extToolChain, subId, extToolChain.getName(), false); IToolChain newChain = createToolChain(extToolChain, subId, extToolChain.getName(), false);
// For each option/option category child of the tool-chain that is // For each option/option category child of the tool-chain that is
@ -239,7 +215,6 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
if(extTp != null){ if(extTp != null){
int nnn = ManagedBuildManager.getRandomNumber(); int nnn = ManagedBuildManager.getRandomNumber();
subId = copyIds ? tpBase.getId() : extTp.getId() + "." + nnn; //$NON-NLS-1$ subId = copyIds ? tpBase.getId() : extTp.getId() + "." + nnn; //$NON-NLS-1$
// subName = tpBase.getName();
tp = new TargetPlatform(newChain, subId, tpBase.getName(), (TargetPlatform)tpBase); tp = new TargetPlatform(newChain, subId, tpBase.getName(), (TargetPlatform)tpBase);
} else { } else {
subId = copyIds ? tpBase.getId() : ManagedBuildManager.calculateChildId(getId(), null); subId = copyIds ? tpBase.getId() : ManagedBuildManager.calculateChildId(getId(), null);
@ -302,16 +277,14 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
} }
public ITool[] filterTools(ITool localTools[], IManagedProject manProj) { public ITool[] filterTools(ITool localTools[], IManagedProject manProj) {
// ITool[] localTools = toolChain.getTools();
// IManagedProject manProj = getParent().getManagedProject();
if (manProj == null) { if (manProj == null) {
// If this is not associated with a project, then there is nothing to filter with // If this is not associated with a project, then there is nothing to filter with
return localTools; return localTools;
} }
IProject project = (IProject)manProj.getOwner(); IProject project = (IProject)manProj.getOwner();
Vector tools = new Vector(localTools.length); Vector<Tool> tools = new Vector<Tool>(localTools.length);
for (int i = 0; i < localTools.length; i++) { for (ITool t : localTools) {
Tool tool = (Tool)localTools[i]; Tool tool = (Tool)t;
if(!tool.isEnabled(this)) if(!tool.isEnabled(this))
continue; continue;
@ -353,43 +326,6 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
ITool[] localTools = toolChain.getTools(); ITool[] localTools = toolChain.getTools();
IManagedProject manProj = getParent().getManagedProject(); IManagedProject manProj = getParent().getManagedProject();
return filterTools(localTools, manProj); return filterTools(localTools, manProj);
// if (manProj == null) {
// // If this is not associated with a project, then there is nothing to filter with
// return localTools;
// }
// 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())
// continue;
//
// try {
// // Make sure the tool is right for the project
// switch (tool.getNatureFilter()) {
// case ITool.FILTER_C:
// if (project.hasNature(CProjectNature.C_NATURE_ID) && !project.hasNature(CCProjectNature.CC_NATURE_ID)) {
// tools.add(tool);
// }
// break;
// case ITool.FILTER_CC:
// if (project.hasNature(CCProjectNature.CC_NATURE_ID)) {
// tools.add(tool);
// }
// break;
// case ITool.FILTER_BOTH:
// tools.add(tool);
// break;
// default:
// break;
// }
// } catch (CoreException e) {
// continue;
// }
// }
//
// // Answer the filtered tools as an array
// return (ITool[])tools.toArray(new ITool[tools.size()]);
} }
public final int getKind() { public final int getKind() {
@ -406,34 +342,17 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
} }
public boolean needsRebuild() { public boolean needsRebuild() {
if(super.needsRebuild()) if(super.needsRebuild() || toolChain.needsRebuild())
return true; return true;
else
if(toolChain.needsRebuild()) return false;
return true;
// ITool tools[] = getFilteredTools();
// for(int i = 0; i < tools.length; i++){
// if(tools[i].needsRebuild())
// return true;
// }
return false;
} }
public void setRebuildState(boolean rebuild) { public void setRebuildState(boolean rebuild) {
super.setRebuildState(rebuild); super.setRebuildState(rebuild);
if(!rebuild){ if(!rebuild)
toolChain.setRebuildState(false); toolChain.setRebuildState(false);
// ITool tools[] = getFilteredTools();
// for(int i = 0; i < tools.length; i++){
// tools[i].setRebuildState(false);
// }
}
} }
public IToolChain getToolChain() { public IToolChain getToolChain() {
@ -466,7 +385,6 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
} }
void resolveReferences(){ void resolveReferences(){
// super.resolveReferences();
if(toolChain != null) if(toolChain != null)
toolChain.resolveReferences(); toolChain.resolveReferences();
} }
@ -493,15 +411,11 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
} }
public CLanguageData[] getCLanguageDatas() { public CLanguageData[] getCLanguageDatas() {
ITool tools[] = getFilteredTools(); List<CLanguageData> list = new ArrayList<CLanguageData>();
List list = new ArrayList(); for(ITool t : getFilteredTools())
for(int i = 0; i < tools.length; i++){ for(CLanguageData d : t.getCLanguageDatas())
CLanguageData datas[] = tools[i].getCLanguageDatas(); list.add(d);
for(int j = 0; j < datas.length; j++){ return list.toArray(new BuildLanguageData[list.size()]);
list.add(datas[j]);
}
}
return (BuildLanguageData[])list.toArray(new BuildLanguageData[list.size()]);
} }
public ITool getToolFromOutputExtension(String extension) { public ITool getToolFromOutputExtension(String extension) {
@ -533,19 +447,10 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
public void propertiesChanged() { public void propertiesChanged() {
if(isExtensionElement) if(isExtensionElement)
return; return;
toolChain.propertiesChanged(); toolChain.propertiesChanged();
super.propertiesChanged(); super.propertiesChanged();
} }
/* public IToolChain getBaseToolChain() {
if(toolChain.isExtensionElement())
return toolChain;
return toolChain.getSuperClass();
}
*/
public void setDirty(boolean isDirty) { public void setDirty(boolean isDirty) {
if (isExtensionElement && isDirty) return; if (isExtensionElement && isDirty) return;
@ -558,27 +463,23 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
} }
} }
private Map typeIdsToMap(String [] ids, IBuildObjectProperties props){ private Map<String, String> typeIdsToMap(String [] ids, IBuildObjectProperties props){
Map map = new HashMap(ids.length); Map<String, String> map = new HashMap<String, String>(ids.length);
for(int i = 0; i < ids.length; i++){ for(String id : ids){
String id = ids[i];
IBuildProperty prop = props.getProperty(id); IBuildProperty prop = props.getProperty(id);
map.put(id, props != null ? prop.getValue().getId() : null); map.put(id, props != null ? prop.getValue().getId() : null);
} }
return map; return map;
} }
private Map propsToMap(IBuildProperty props[]){ private Map<String, String> propsToMap(IBuildProperty props[]){
Map map = new HashMap(props.length); Map<String, String> map = new HashMap<String, String>(props.length);
for(int i = 0; i < props.length; i++){ for(IBuildProperty p : props)
map.put(props[i].getPropertyType().getId(), props[i].getValue().getId()); map.put(p.getPropertyType().getId(), p.getValue().getId());
}
return map; return map;
} }
private boolean checkPropertiesModificationCompatibility(IBuildPropertiesRestriction r, Map unspecifiedRequiredProps, Map unspecifiedProps, Set undefinedSet){ private boolean checkPropertiesModificationCompatibility(IBuildPropertiesRestriction r, Map<String, String> unspecifiedRequiredProps, Map<String, String> unspecifiedProps, Set<String> undefinedSet){
IBuildObjectProperties props = null; IBuildObjectProperties props = null;
IConfiguration cfg = getParent(); IConfiguration cfg = getParent();
if(cfg != null){ if(cfg != null){
@ -599,12 +500,12 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
} }
} }
Map requiredMap = typeIdsToMap(requiredIds, props); Map<String, String> requiredMap = typeIdsToMap(requiredIds, props);
getUnsupportedProperties(requiredMap, r, unspecifiedRequiredProps, undefinedSet); getUnsupportedProperties(requiredMap, r, unspecifiedRequiredProps, undefinedSet);
unspecifiedProps.putAll(unspecifiedRequiredProps); unspecifiedProps.putAll(unspecifiedRequiredProps);
IBuildProperty[] ps = props.getProperties(); IBuildProperty[] ps = props.getProperties();
Map propsMap = propsToMap(ps); Map<String, String> propsMap = propsToMap(ps);
getUnsupportedProperties(propsMap, r, unspecifiedProps, undefinedSet); getUnsupportedProperties(propsMap, r, unspecifiedProps, undefinedSet);
} }
return unspecifiedRequiredProps.size() == 0; return unspecifiedRequiredProps.size() == 0;
@ -612,12 +513,11 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
return false; return false;
} }
private void getUnsupportedProperties(Map props, IBuildPropertiesRestriction restriction, Map unsupported, Set inexistent){ private void getUnsupportedProperties(Map<String, String> props, IBuildPropertiesRestriction restriction, Map<String, String> unsupported, Set<String> inexistent){
BuildPropertyManager mngr = BuildPropertyManager.getInstance(); BuildPropertyManager mngr = BuildPropertyManager.getInstance();
for(Iterator iter = props.entrySet().iterator(); iter.hasNext();){ for(Map.Entry<String, String> entry : props.entrySet()){
Map.Entry entry = (Map.Entry)iter.next(); String propId = entry.getKey();
String propId = (String)entry.getKey(); String valueId = entry.getValue();
String valueId = (String)entry.getValue();
IBuildPropertyType type = mngr.getPropertyType(propId); IBuildPropertyType type = mngr.getPropertyType(propId);
if(type == null){ if(type == null){
if(inexistent != null){ if(inexistent != null){
@ -633,7 +533,7 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
} }
} }
public void checkPropertiesModificationCompatibility(final ITool tools[], Map unspecifiedRequiredProps, Map unspecifiedProps, Set undefinedSet){ public void checkPropertiesModificationCompatibility(final ITool tools[], Map<String, String> unspecifiedRequiredProps, Map<String, String> unspecifiedProps, Set<String> undefinedSet){
final ToolChain tc = (ToolChain)getToolChain(); final ToolChain tc = (ToolChain)getToolChain();
IBuildPropertiesRestriction r = new IBuildPropertiesRestriction(){ IBuildPropertiesRestriction r = new IBuildPropertiesRestriction(){
public boolean supportsType(String typeId) { public boolean supportsType(String typeId) {
@ -659,7 +559,7 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
} }
public String[] getRequiredTypeIds() { public String[] getRequiredTypeIds() {
List list = new ArrayList(); List<String> list = new ArrayList<String>();
list.addAll(Arrays.asList(tc.getRequiredTypeIds(false))); list.addAll(Arrays.asList(tc.getRequiredTypeIds(false)));
@ -667,11 +567,11 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
list.addAll(Arrays.asList(((Tool)tools[i]).getRequiredTypeIds())); list.addAll(Arrays.asList(((Tool)tools[i]).getRequiredTypeIds()));
} }
return (String[])list.toArray(new String[list.size()]); return list.toArray(new String[list.size()]);
} }
public String[] getSupportedTypeIds() { public String[] getSupportedTypeIds() {
List list = new ArrayList(); List<String> list = new ArrayList<String>();
list.addAll(Arrays.asList(tc.getSupportedTypeIds(false))); list.addAll(Arrays.asList(tc.getSupportedTypeIds(false)));
@ -679,11 +579,11 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
list.addAll(Arrays.asList(((Tool)tools[i]).getSupportedTypeIds())); list.addAll(Arrays.asList(((Tool)tools[i]).getSupportedTypeIds()));
} }
return (String[])list.toArray(new String[list.size()]); return list.toArray(new String[list.size()]);
} }
public String[] getSupportedValueIds(String typeId) { public String[] getSupportedValueIds(String typeId) {
List list = new ArrayList(); List<String> list = new ArrayList<String>();
list.addAll(Arrays.asList(tc.getSupportedValueIds(typeId, false))); list.addAll(Arrays.asList(tc.getSupportedValueIds(typeId, false)));
@ -691,7 +591,7 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
list.addAll(Arrays.asList(((Tool)tools[i]).getSupportedValueIds(typeId))); list.addAll(Arrays.asList(((Tool)tools[i]).getSupportedValueIds(typeId)));
} }
return (String[])list.toArray(new String[list.size()]); return list.toArray(new String[list.size()]);
} }
public boolean requiresType(String typeId) { public boolean requiresType(String typeId) {
@ -709,76 +609,32 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
checkPropertiesModificationCompatibility(r, unspecifiedRequiredProps, unspecifiedProps, undefinedSet); checkPropertiesModificationCompatibility(r, unspecifiedRequiredProps, unspecifiedProps, undefinedSet);
} }
public boolean checkPropertiesModificationCompatibility(IToolChain tc, Map unspecifiedRequiredProps, Map unspecifiedProps, Set undefinedSet){ public boolean checkPropertiesModificationCompatibility(IToolChain tc, Map<String, String> unspecifiedRequiredProps, Map<String, String> unspecifiedProps, Set<String> undefinedSet){
return checkPropertiesModificationCompatibility((IBuildPropertiesRestriction)tc, unspecifiedRequiredProps, unspecifiedProps, undefinedSet); return checkPropertiesModificationCompatibility((IBuildPropertiesRestriction)tc, unspecifiedRequiredProps, unspecifiedProps, undefinedSet);
} }
public boolean isPropertiesModificationCompatible(IToolChain tc){ public boolean isPropertiesModificationCompatible(IToolChain tc){
Map requiredMap = new HashMap(); Map<String, String> requiredMap = new HashMap<String, String>();
Map unsupportedMap = new HashMap(); Map<String, String> unsupportedMap = new HashMap<String, String>();
Set undefinedSet = new HashSet(); Set<String> undefinedSet = new HashSet<String>();
if(!checkPropertiesModificationCompatibility(tc, requiredMap, unsupportedMap, undefinedSet)) if(!checkPropertiesModificationCompatibility(tc, requiredMap, unsupportedMap, undefinedSet))
return false; return false;
return true; return true;
// boolean compatible = false;
//
// IBuildObjectProperties props = null;
// IConfiguration cfg = getParent();
// if(cfg != null){
// props = cfg.getBuildProperties();
// }
//
// if(props != null){
// String[] requiredIds = props.getRequiredTypeIds();
// IBuildPropertyType[] supportedTypes = props.getSupportedTypes();
// if(supportedTypes.length != 0 || requiredIds.length != 0){
// ToolChain toolChain = (ToolChain)tc;
// if(requiredIds.length != 0){
// int i = 0;
// for(; i < requiredIds.length; i++){
// IBuildPropertyType type = BuildPropertyManager.getInstance().getPropertyType(requiredIds[i]);
// if(type == null)
// break;
//
// if(!toolChain.supportsType(type))
// break;
// }
//
// if(i == requiredIds.length)
// compatible = true;
// } else {
// int i = 0;
// for(; i < supportedTypes.length; i++){
// if(!toolChain.supportsType(supportedTypes[i]))
// break;
// }
// if(i == supportedTypes.length)
// compatible = true;
// }
// }
// }
// return compatible;
} }
private Set getRequiredUnspecifiedProperties(){ private Set<String> getRequiredUnspecifiedProperties(){
IBuildObjectProperties props = null; IBuildObjectProperties props = null;
Set<String> set = new HashSet<String>();
IConfiguration cfg = getParent(); IConfiguration cfg = getParent();
if(cfg != null){
if(cfg != null)
props = cfg.getBuildProperties(); props = cfg.getBuildProperties();
}
Set set = new HashSet();
if(props != null){
String[] requiredIds = props.getRequiredTypeIds();
for(int i = 0; i < requiredIds.length; i++){
if(props.getProperty(requiredIds[i]) == null)
set.add(requiredIds[i]);
}
}
if(props != null)
for(String s : props.getRequiredTypeIds())
if(props.getProperty(s) == null)
set.add(s);
return set; return set;
} }
public boolean isToolChainCompatible(IToolChain tCh){ public boolean isToolChainCompatible(IToolChain tCh){
@ -849,7 +705,6 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
} else { } else {
updateToolChainWithProperties(usePrefTc ? null : newSuperClass, Id, name); updateToolChainWithProperties(usePrefTc ? null : newSuperClass, Id, name);
} }
BuildSettingsUtil.disconnectDepentents(getParent(), oldTools); BuildSettingsUtil.disconnectDepentents(getParent(), oldTools);
} }
return toolChain; return toolChain;
@ -877,29 +732,15 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
subId = ManagedBuildManager.calculateChildId(toolChild.getId(),null); subId = ManagedBuildManager.calculateChildId(toolChild.getId(),null);
toolChain.createTool(toolChild, subId, toolChild.getName(), false); toolChain.createTool(toolChild, subId, toolChild.getName(), false);
} }
// ITargetPlatform tpBase = oldTc.getTargetPlatform();
// ITargetPlatform extTp = tpBase;
// for(;extTp != null && !extTp.isExtensionElement();extTp = extTp.getSuperClass());
//
// TargetPlatform tp;
// if(extTp != null){
// int nnn = ManagedBuildManager.getRandomNumber();
// subId = extTp.getId() + "." + nnn; //$NON-NLS-1$
//// subName = tpBase.getName();
// tp = new TargetPlatform(toolChain, subId, tpBase.getName(), (TargetPlatform)tpBase);
// } else {
// subId = ManagedBuildManager.calculateChildId(getId(), null);
// String subName = tpBase != null ? tpBase.getName() : ""; //$NON-NLS-1$
// tp = new TargetPlatform(toolChain, null, subId, subName, false);
// }
//
// toolChain.setTargetPlatform(tp);
} else { } else {
Configuration cfg = ConfigurationDataProvider.getClearPreference(null); Configuration cfg = ConfigurationDataProvider.getClearPreference(null);
ToolChain prefTch = (ToolChain)cfg.getRootFolderInfo().getToolChain(); ToolChain prefTch = (ToolChain)cfg.getRootFolderInfo().getToolChain();
toolChain = new ToolChain(this, ManagedBuildManager.calculateChildId(prefTch.getSuperClass().getId(), null), prefTch.getName(), new HashMap(), (ToolChain)prefTch); toolChain = new ToolChain(this,
ManagedBuildManager.calculateChildId(prefTch.getSuperClass().getId(), null),
prefTch.getName(),
new HashMap<IPath, Map<String, String>>(),
(ToolChain)prefTch);
} }
if(isRoot()){ if(isRoot()){
@ -981,6 +822,7 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
} }
void setUpdatedToolChain(ToolChain tch){ void setUpdatedToolChain(ToolChain tch){
tch.copyNonoverriddenSettings(toolChain);
toolChain = tch; toolChain = tch;
tch.updateParentFolderInfo(this); tch.updateParentFolderInfo(this);
} }
@ -1010,29 +852,29 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
if(tCh == null) if(tCh == null)
return null; return null;
// ToolChain curTc = (ToolChain)getToolChain(); if(fromTc != null)
if(fromTc != null){
return fromTc.getConverterModificationElement(tCh); return fromTc.getConverterModificationElement(tCh);
} else
return null; return null;
} }
@SuppressWarnings("unchecked")
private ITool[][] checkDups(ITool[] removed, ITool[] added){ private ITool[][] checkDups(ITool[] removed, ITool[] added){
LinkedHashMap removedMap = createRealToExtToolMap(removed, false); LinkedHashMap<Object, ITool> removedMap = createRealToExtToolMap(removed, false);
LinkedHashMap addedMap = createRealToExtToolMap(added, true); LinkedHashMap<Object, ITool> addedMap = createRealToExtToolMap(added, true);
LinkedHashMap rmCopy = (LinkedHashMap)removedMap.clone(); LinkedHashMap<Object, ITool> rmCopy = (LinkedHashMap<Object, ITool>)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 = createRealToExtToolMap(getTools(), false); LinkedHashMap<Object, ITool> curMap = createRealToExtToolMap(getTools(), false);
for(Iterator iter = removedMap.entrySet().iterator(); iter.hasNext();){ for(Iterator<Map.Entry<Object, ITool>> iter = removedMap.entrySet().iterator(); iter.hasNext();){
Map.Entry entry = (Map.Entry)iter.next(); Map.Entry<Object, ITool> entry = (Map.Entry<Object, ITool>)iter.next();
Object key = entry.getKey(); Object key = entry.getKey();
Object curTool = curMap.get(key); Object curTool = curMap.get(key);
if(curTool != null) if(curTool != null)
entry.setValue(curTool); entry.setValue((ITool)curTool);
else else
iter.remove(); iter.remove();
} }
@ -1043,16 +885,15 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
return result; return result;
} }
private LinkedHashMap createRealToExtToolMap(ITool[] tools, boolean extValues){ private LinkedHashMap<Object, ITool> createRealToExtToolMap(ITool[] tools, boolean extValues){
LinkedHashMap map = new LinkedHashMap(); LinkedHashMap<Object, ITool> map = new LinkedHashMap<Object, ITool>();
for(int i = 0; i < tools.length; i++){ for(ITool t : tools){
Tool realTool = (Tool)ManagedBuildManager.getRealTool(tools[i]); Tool realTool = (Tool)ManagedBuildManager.getRealTool(t);
Object key = realTool.getMatchKey(); Object key = realTool.getMatchKey();
ITool toolValue = extValues ? ManagedBuildManager.getExtensionTool(tools[i]) : tools[i]; ITool toolValue = extValues ? ManagedBuildManager.getExtensionTool(t) : t;
if(toolValue != null) if(toolValue != null)
map.put(key, toolValue); map.put(key, toolValue);
} }
return map; return map;
} }
@ -1068,26 +909,31 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
if(added.length == 0 && removed.length == 0) if(added.length == 0 && removed.length == 0)
return; return;
List remainingRemoved = new ArrayList(); List<ITool> remainingRemoved = new ArrayList<ITool>();
List remainingAdded = new ArrayList(); List<ITool> remainingAdded = new ArrayList<ITool>();
Map converterMap = calculateConverterTools(removed, added, remainingRemoved, remainingAdded); Map<ITool, ConverterInfo> converterMap =
calculateConverterTools(removed, added, remainingRemoved, remainingAdded);
invokeConverters(converterMap); invokeConverters(converterMap);
List newTools = new ArrayList(added.length); List<Tool> newTools = new ArrayList<Tool>(added.length);
for(Iterator iter = converterMap.values().iterator(); iter.hasNext();){ for(ConverterInfo info : converterMap.values()){
ConverterInfo info = (ConverterInfo)iter.next();
if(info.getConvertedFromObject() instanceof Tool){ if(info.getConvertedFromObject() instanceof Tool){
Tool newTool = (Tool)info.getConvertedFromObject(); Tool newTool = (Tool)info.getConvertedFromObject();
newTool.updateParent(getToolChain()); newTool.updateParent(getToolChain());
newTools.add(newTool); newTools.add(newTool);
} else { } else {
remainingAdded.add(info.getToObject()); remainingAdded.add((ITool)info.getToObject());
} }
} }
for(Iterator iter = remainingAdded.iterator(); iter.hasNext();){ for(ITool t : remainingAdded){
Tool tool = (Tool)iter.next(); newTools.add(
Tool newTool = new Tool(toolChain, tool, ManagedBuildManager.calculateChildId(tool.getId(), null), tool.getName(), false); new Tool(
newTools.add(newTool); toolChain,
t,
ManagedBuildManager.calculateChildId(t.getId(), null),
t.getName(),
false)
);
} }
performToolChainModification(removed, (Tool[])newTools.toArray(new Tool[newTools.size()])); performToolChainModification(removed, (Tool[])newTools.toArray(new Tool[newTools.size()]));
@ -1113,7 +959,7 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
if(!isRoot()) if(!isRoot())
return; return;
Set set = new HashSet(); Set<String> set = new HashSet<String>();
String [] ids = toolChain.getTargetToolList(); String [] ids = toolChain.getTargetToolList();
boolean targetToolsModified = false; boolean targetToolsModified = false;
set.addAll(Arrays.asList(ids)); set.addAll(Arrays.asList(ids));
@ -1127,8 +973,7 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
ITool target = (ITool)tInfo[0]; ITool target = (ITool)tInfo[0];
String tId = (String)tInfo[1]; String tId = (String)tInfo[1];
List list = BuildSettingsUtil.calcDependentTools(added, target, null); if(BuildSettingsUtil.calcDependentTools(added, target, null).size() != 0)
if(list.size() != 0)
continue; continue;
ITool newTargetTool = findCompatibleTargetTool(target, added); ITool newTargetTool = findCompatibleTargetTool(target, added);
@ -1152,7 +997,7 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
private ITool findCompatibleTargetTool(ITool tool, ITool allTools[]){ private ITool findCompatibleTargetTool(ITool tool, ITool allTools[]){
IProject project = getParent().getOwner().getProject(); IProject project = getParent().getOwner().getProject();
String exts[] = ((Tool)tool).getAllOutputExtensions(project); String exts[] = ((Tool)tool).getAllOutputExtensions(project);
Set extsSet = new HashSet(Arrays.asList(exts)); Set<String> extsSet = new HashSet<String>(Arrays.asList(exts));
ITool compatibleTool = null; ITool compatibleTool = null;
for(int i = 0; i < allTools.length; i++){ for(int i = 0; i < allTools.length; i++){
String otherExts[] = ((Tool)allTools[i]).getAllOutputExtensions(project); String otherExts[] = ((Tool)allTools[i]).getAllOutputExtensions(project);
@ -1168,7 +1013,7 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
if(compatibleTool == null){ if(compatibleTool == null){
//try to match build output variable //try to match build output variable
Set set = getToolOutputVars(tool); Set<String> set = getToolOutputVars(tool);
for(int i = 0; i < allTools.length; i++){ for(int i = 0; i < allTools.length; i++){
IOutputType types[] = allTools[i].getOutputTypes(); IOutputType types[] = allTools[i].getOutputTypes();
for(int k = 0; k < types.length; k++){ for(int k = 0; k < types.length; k++){
@ -1188,8 +1033,8 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
return compatibleTool; return compatibleTool;
} }
private Set getToolOutputVars(ITool tool){ private Set<String> getToolOutputVars(ITool tool){
Set set = new HashSet(); Set<String> set = new HashSet<String>();
IOutputType types[] = tool.getOutputTypes(); IOutputType types[] = tool.getOutputTypes();
for(int k = 0; k < types.length; k++){ for(int k = 0; k < types.length; k++){
@ -1219,51 +1064,23 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
return null; return null;
} }
// private void disconnectDepentents(ITool[] tools){ private List<ConverterInfo> invokeConverters(Map<?, ConverterInfo> converterMap){
// for(int i = 0; i < tools.length; i++){ List<ConverterInfo> failed = new ArrayList<ConverterInfo>();
// disconnectDepentents(tools[i]); for(ConverterInfo info : converterMap.values()){
// }
// }
//
// private void disconnectDepentents(ITool tool){
// ITool deps[] = ManagedBuildManager.getDependentTools(getParent(), tool);
// for(int i = 0; i < deps.length; i++){
// disconnect(deps[i], tool);
// }
// }
//
// private void disconnect(ITool child, ITool superClass){
// ITool directChild = child;
// for(;directChild != null; directChild = directChild.getSuperClass()){
// if(superClass.equals(directChild.getSuperClass()))
// break;
// }
//
// if(directChild == null)
// return;
//
// ((Tool)directChild).copyNonoverriddenSettings((Tool)superClass);
// ((Tool)directChild).setSuperClass(superClass.getSuperClass());
// }
//
private List invokeConverters(Map converterMap){
List failed = new ArrayList();
for(Iterator iter = converterMap.values().iterator();iter.hasNext();){
ConverterInfo info = (ConverterInfo)iter.next();
IBuildObject converted = info.getConvertedFromObject(); 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);
} }
} }
return failed; return failed;
} }
private Map calculateConverterTools(ITool[] removed, ITool[] added, List remainingRemoved, List remainingAdded){ private Map<ITool, ConverterInfo> calculateConverterTools(ITool[] removed, ITool[] added, List<ITool> remainingRemoved, List<ITool> remainingAdded){
if(remainingAdded == null) if(remainingAdded == null)
remainingAdded = new ArrayList(added.length); remainingAdded = new ArrayList<ITool>(added.length);
if(remainingRemoved == null) if(remainingRemoved == null)
remainingRemoved = new ArrayList(removed.length); remainingRemoved = new ArrayList<ITool>(removed.length);
remainingAdded.clear(); remainingAdded.clear();
remainingRemoved.clear(); remainingRemoved.clear();
@ -1271,20 +1088,18 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
remainingAdded.addAll(Arrays.asList(added)); remainingAdded.addAll(Arrays.asList(added));
remainingRemoved.addAll(Arrays.asList(removed)); remainingRemoved.addAll(Arrays.asList(removed));
Map resultMap = new HashMap(); Map<ITool, ConverterInfo> resultMap = new HashMap<ITool, ConverterInfo>();
for(Iterator rIter = remainingRemoved.iterator(); rIter.hasNext();){ for(Iterator<ITool> rIter = remainingRemoved.iterator(); rIter.hasNext();){
ITool r = (ITool)rIter.next(); ITool r = (ITool)rIter.next();
if(r.getParentResourceInfo() != this) if(r.getParentResourceInfo() != this)
continue; continue;
if(ManagedBuildManager.getConversionElements(r).size() == 0)
Map map = ManagedBuildManager.getConversionElements(r);
if(map.size() == 0)
continue; continue;
for(Iterator aIter = remainingAdded.iterator(); aIter.hasNext();){ for(Iterator<ITool> aIter = remainingAdded.iterator(); aIter.hasNext();){
ITool a = (ITool)aIter.next(); ITool a = (ITool)aIter.next();
if(a.getParentResourceInfo() == this) if(a.getParentResourceInfo() == this)
@ -1304,44 +1119,26 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
} }
private ITool[] calculateToolsArray(ITool[] removed, ITool[] added){ private ITool[] calculateToolsArray(ITool[] removed, ITool[] added){
ITool tools[] = getTools(); LinkedHashMap<Object, ITool> map = createRealToExtToolMap(getTools(), false);
LinkedHashMap map = createRealToExtToolMap(tools, false); LinkedHashMap<Object, ITool> removedMap = createRealToExtToolMap(removed, 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));
map.keySet().removeAll(removedMap.keySet());
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[]){ @SuppressWarnings("unchecked")
// 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){ private ITool[][] calculateConflictingTools(ITool[] newTools){
HashSet set = new HashSet(); HashSet<ITool> set = new HashSet<ITool>();
set.addAll(Arrays.asList(newTools)); set.addAll(Arrays.asList(newTools));
List result = new ArrayList(); List<ITool[]> result = new ArrayList<ITool[]>();
for(Iterator iter = set.iterator(); iter.hasNext();){ for(Iterator<ITool> iter = set.iterator(); iter.hasNext();){
ITool t = (ITool)iter.next(); ITool t = (ITool)iter.next();
iter.remove(); iter.remove();
HashSet tmp = (HashSet)set.clone(); HashSet<ITool> tmp = (HashSet<ITool>)set.clone();
List list = new ArrayList(); List<ITool> list = new ArrayList<ITool>();
for(Iterator tmpIt = tmp.iterator(); tmpIt.hasNext();){ for(Iterator<ITool> tmpIt = tmp.iterator(); tmpIt.hasNext();){
ITool other = (ITool)tmpIt.next(); ITool other = (ITool)tmpIt.next();
String conflicts[] = getConflictingInputExts(t, other); String conflicts[] = getConflictingInputExts(t, other);
if(conflicts.length != 0){ if(conflicts.length != 0){
@ -1365,13 +1162,13 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
IProject project = getParent().getOwner().getProject(); IProject project = getParent().getOwner().getProject();
String ext1[] = ((Tool)tool1).getAllInputExtensions(project); String ext1[] = ((Tool)tool1).getAllInputExtensions(project);
String ext2[] = ((Tool)tool2).getAllInputExtensions(project); String ext2[] = ((Tool)tool2).getAllInputExtensions(project);
Set set1 = new HashSet(Arrays.asList(ext1)); Set<String> set1 = new HashSet<String>(Arrays.asList(ext1));
Set result = new HashSet(); Set<String> result = new HashSet<String>();
for(int i = 0; i < ext2.length; i++){ for(String e : ext2){
if(set1.remove(ext2[i])) if(set1.remove(e))
result.add(ext2[i]); result.add(e);
} }
return (String[])result.toArray(new String[result.size()]); return result.toArray(new String[result.size()]);
} }
@ -1379,39 +1176,26 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
ITool[][] checked = checkDups(removed, added); ITool[][] checked = checkDups(removed, added);
removed = checked[0]; removed = checked[0];
added = checked[1]; added = checked[1];
// Map converterMap = calculateConverterTools(removed, added, null, null);
ITool newTools[] = calculateToolsArray(removed, added); ITool newTools[] = calculateToolsArray(removed, added);
ITool[][] conflicting = calculateConflictingTools(filterTools(newTools, getParent().getManagedProject())); ITool[][] conflicting = calculateConflictingTools(filterTools(newTools, getParent().getManagedProject()));
Map unspecifiedRequiredProps = new HashMap(); Map<String, String> unspecifiedRequiredProps = new HashMap<String, String>();
Map unspecifiedProps = new HashMap(); Map<String, String> unspecifiedProps = new HashMap<String, String>();
Set undefinedSet = new HashSet(); Set<String> undefinedSet = new HashSet<String>();
IConfiguration cfg = getParent(); IConfiguration cfg = getParent();
ITool[] nonManagedTools = null; ITool[] nonManagedTools = null;
if(cfg.isManagedBuildOn() && cfg.supportsBuild(true)){ if(cfg.isManagedBuildOn() && cfg.supportsBuild(true)){
List list = new ArrayList(); List<ITool> list = new ArrayList<ITool>();
for(int i = 0; i < newTools.length; i++){ for(ITool t : newTools)
if(!newTools[i].supportsBuild(true)){ if(!t.supportsBuild(true))
list.add(newTools[i]); list.add(t);
} if(list.size() != 0)
} nonManagedTools = list.toArray(new Tool[list.size()]);
if(list.size() != 0){
nonManagedTools = (ITool[])list.toArray(new Tool[list.size()]);
}
} }
return new ModificationStatus(unspecifiedRequiredProps, unspecifiedProps, undefinedSet, conflicting, nonManagedTools); return new ModificationStatus(unspecifiedRequiredProps, unspecifiedProps, undefinedSet, conflicting, nonManagedTools);
} }
private IConfigurationElement getToolConverterElement(ITool fromTool, ITool toTool){
ToolChain curTc = (ToolChain)getToolChain();
if(curTc != null){
return curTc.getConverterModificationElement(fromTool, toTool);
}
return null;
}
public boolean supportsBuild(boolean managed) { public boolean supportsBuild(boolean managed) {
Set set = getRequiredUnspecifiedProperties(); if(getRequiredUnspecifiedProperties().size() != 0)
if(set.size() != 0)
return false; return false;
ToolChain tCh = (ToolChain)getToolChain(); ToolChain tCh = (ToolChain)getToolChain();
@ -1489,13 +1273,9 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
return false; return false;
} }
public Set contributeErrorParsers(Set set){ public Set<String> contributeErrorParsers(Set<String> set){
// if(set == null)
// set = new HashSet();
if(toolChain != null) if(toolChain != null)
set = toolChain.contributeErrorParsers(this, set, true); set = toolChain.contributeErrorParsers(this, set, true);
return set; return set;
} }
@ -1504,7 +1284,7 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
toolChain.resetErrorParsers(this); toolChain.resetErrorParsers(this);
} }
void removeErrorParsers(Set set) { void removeErrorParsers(Set<String> set) {
if(toolChain != null) if(toolChain != null)
toolChain.removeErrorParsers(this, set); toolChain.removeErrorParsers(this, set);
} }
@ -1598,4 +1378,12 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo {
return toolChain.isSupported(); return toolChain.isSupported();
return false; return false;
} }
private IConfigurationElement getToolConverterElement(ITool fromTool, ITool toTool){
ToolChain curTc = (ToolChain)getToolChain();
if(curTc != null){
return curTc.getConverterModificationElement(fromTool, toTool);
}
return null;
}
} }

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others. * Copyright (c) 2007, 2008 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -14,6 +14,7 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.settings.model.ICSettingBase; import org.eclipse.cdt.core.settings.model.ICSettingBase;
import org.eclipse.cdt.core.settings.model.ICStorageElement; import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.core.settings.model.extension.CResourceData; import org.eclipse.cdt.core.settings.model.extension.CResourceData;
@ -34,18 +35,12 @@ import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Path;
public abstract class ResourceInfo extends BuildObject implements IResourceInfo { public abstract class ResourceInfo extends BuildObject implements IResourceInfo {
// private IFolderInfo parentFolderInfo;
// private String parentFolderInfoId;
private Configuration config; private Configuration config;
private IPath path; private IPath path;
boolean isDirty; boolean isDirty;
// private boolean isExcluded;
boolean needsRebuild; boolean needsRebuild;
private ResourceInfoContainer rcInfo; private ResourceInfoContainer rcInfo;
private CResourceData resourceData; private CResourceData resourceData;
// private boolean inheritParentInfo;
// private IToolChain baseToolChain;
// private String baseToolChainId;
ResourceInfo(IConfiguration cfg, IManagedConfigElement element, boolean hasBody){ ResourceInfo(IConfiguration cfg, IManagedConfigElement element, boolean hasBody){
config = (Configuration)cfg; config = (Configuration)cfg;
@ -56,28 +51,10 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
ResourceInfo(IConfiguration cfg, ResourceInfo base, String id) { ResourceInfo(IConfiguration cfg, ResourceInfo base, String id) {
config = (Configuration)cfg; config = (Configuration)cfg;
path = normalizePath(base.path); path = normalizePath(base.path);
// internalSetExclude(base.isExcluded);
setId(id); setId(id);
setName(base.getName()); setName(base.getName());
// inheritParentInfo = base.inheritParentInfo;
/* if(!isRoot()){
IFolderInfo pfi = base.getParentFolderInfo();
IResourceInfo pf = null;
if(pfi != null){
pf = config.getResourceInfo(pfi.getPath(), true);
}
if(pf instanceof IFolderInfo)
this.parentFolderInfo = (IFolderInfo)pf;
else
this.parentFolderInfo = config.getRootFolderInfo();
// if()
this.parentFolderInfoId = this.parentFolderInfo.getId();
}
*/
if(id.equals(base.getId())){ if(id.equals(base.getId())){
isDirty = base.isDirty; isDirty = base.isDirty;
needsRebuild = base.needsRebuild; needsRebuild = base.needsRebuild;
@ -96,7 +73,6 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
path = normalizePath(path); path = normalizePath(path);
this.path = path; this.path = path;
// inheritParentInfo = inherit;
setId(id); setId(id);
setName(name); setName(name);
} }
@ -106,14 +82,9 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
setId(id); setId(id);
setName(name); setName(name);
path = normalizePath(path); path = normalizePath(path);
this.path = path; this.path = path;
// internalSetExclude(base.isExcluded());
// parentFolderInfoId = base.getId();
// parentFolderInfo = base;
// inheritParentInfo = false;
needsRebuild = true; needsRebuild = true;
isDirty = true; isDirty = true;
} }
@ -123,14 +94,9 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
setId(id); setId(id);
setName(name); setName(name);
path = normalizePath(path); path = normalizePath(path);
this.path = path; this.path = path;
// internalSetExclude(base.isExcluded());
// parentFolderInfoId = base.getId();
// parentFolderInfo = base;
// inheritParentInfo = base.getPath().isPrefixOf(path);
needsRebuild = true; needsRebuild = true;
isDirty = true; isDirty = true;
} }
@ -149,9 +115,6 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
// Get the name // Get the name
setName(element.getAttribute(NAME)); setName(element.getAttribute(NAME));
// parentFolderInfoId = element.getAttribute(PARENT_FOLDER_INFO_ID);
// baseToolChainId = element.getAttribute(BASE_TOOLCHAIN_ID);
// resourcePath // resourcePath
String tmp = element.getAttribute(RESOURCE_PATH); String tmp = element.getAttribute(RESOURCE_PATH);
if(tmp != null){ if(tmp != null){
@ -161,11 +124,9 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
} }
path = normalizePath(path); path = normalizePath(path);
} else { } else {
//TODO CCorePlugin.log("ResourceInfo.loadFromManifest() : resourcePath is NULL");
} }
// inheritParentInfo = "true".equals(element.getAttribute(INHERIT_PARENT_INFO));
// exclude // exclude
String excludeStr = element.getAttribute(EXCLUDE); String excludeStr = element.getAttribute(EXCLUDE);
if (excludeStr != null){ if (excludeStr != null){
@ -193,7 +154,7 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
} }
path = normalizePath(path); path = normalizePath(path);
} else { } else {
//TODO CCorePlugin.log("ResourceInfo.loadFromProject() : resourcePath is NULL");
} }
} }
@ -204,11 +165,6 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
config.setExcluded(getPath(), isFolderInfo(), ("true".equals(excludeStr))); //$NON-NLS-1$ config.setExcluded(getPath(), isFolderInfo(), ("true".equals(excludeStr))); //$NON-NLS-1$
} }
} }
// inheritParentInfo = "true".equals(element.getAttribute(INHERIT_PARENT_INFO));
// parentFolderInfoId = element.getAttribute(PARENT_FOLDER_INFO_ID);
// baseToolChainId = element.getAttribute(BASE_TOOLCHAIN_ID);
} }
@ -216,17 +172,6 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
return config; return config;
} }
/* public IFolderInfo getParentFolderInfo() {
if(parentFolderInfo == null && parentFolderInfoId != null){
IResourceInfo rcInfo = config.getResourceInfoById(parentFolderInfoId);
if(rcInfo instanceof IFolderInfo)
parentFolderInfo = (IFolderInfo)rcInfo;
else
parentFolderInfo = config.getRootFolderInfo();
}
return parentFolderInfo;
}
*/
public IPath getPath() { public IPath getPath() {
return normalizePath(path); return normalizePath(path);
} }
@ -263,12 +208,6 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
public abstract boolean isFolderInfo(); public abstract boolean isFolderInfo();
// private boolean internalSetExclude(boolean excluded){
//// if(excluded/* && isRoot()*/)
//// return isExcluded;
// return isExcluded = excluded;
// }
public void setPath(IPath p) { public void setPath(IPath p) {
p = normalizePath(p); p = normalizePath(p);
if(path == null) if(path == null)
@ -300,34 +239,12 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
element.setAttribute(IBuildObject.NAME, name); element.setAttribute(IBuildObject.NAME, name);
} }
// if (isExcluded) {
// element.setAttribute(IResourceInfo.EXCLUDE, "true"); //$NON-NLS-1$
// }
if (path != null) { if (path != null) {
element.setAttribute(IResourceInfo.RESOURCE_PATH, path.toString()); element.setAttribute(IResourceInfo.RESOURCE_PATH, path.toString());
} }
// if(parentFolderInfoId != null){
// element.setAttribute(IResourceInfo.PARENT_FOLDER_INFO_ID, parentFolderInfoId);
// }
// if(baseToolChainId != null){
// element.setAttribute(IResourceInfo.BASE_TOOLCHAIN_ID, baseToolChainId);
// }
} }
void resolveReferences(){ void resolveReferences() {}
// getParentFolderInfo();
}
// void setParentFolderId(String id){
// parentFolderInfoId = id;
// }
// void setParentFolder(IFolderInfo info){
// parentFolderInfo = info;
// }
public CResourceData getResourceData(){ public CResourceData getResourceData(){
return resourceData; return resourceData;
@ -345,10 +262,6 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
return config != null; return config != null;
} }
// public boolean isParentInfoInherited() {
// return inheritParentInfo;
// }
public IOption setOption(IHoldsOptions parent, IOption option, boolean value) throws BuildException { public IOption setOption(IHoldsOptions parent, IOption option, boolean value) throws BuildException {
// Is there a change? // Is there a change?
IOption retOpt = option; IOption retOpt = option;
@ -356,10 +269,7 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
if (oldVal != value) { if (oldVal != value) {
retOpt = parent.getOptionToSet(option, false); retOpt = parent.getOptionToSet(option, false);
retOpt.setValue(value); retOpt.setValue(value);
// if(resourceData != null)
// ((ISettingsChangeListener)resourceData).optionChanged(this, parent, option, new Boolean(oldVal));
NotificationManager.getInstance().optionChanged(this, parent, option, new Boolean(oldVal)); NotificationManager.getInstance().optionChanged(this, parent, option, new Boolean(oldVal));
// rebuildNeeded = true;
} }
return retOpt; return retOpt;
} }
@ -387,21 +297,6 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
case IOption.STRING_LIST : case IOption.STRING_LIST :
oldValue = option.getBasicStringListValue(); oldValue = option.getBasicStringListValue();
break; break;
// case IOption.STRING_LIST :
// oldValue = option.getStringListValue();
// break;
// case IOption.INCLUDE_PATH :
// oldValue = option.getIncludePaths();
// break;
// case IOption.PREPROCESSOR_SYMBOLS :
// oldValue = option.getDefinedSymbols();
// break;
// case IOption.LIBRARIES :
// oldValue = option.getLibraries();
// break;
// case IOption.OBJECTS :
// oldValue = option.getUserObjects();
// break;
default : default :
oldValue = new String[0]; oldValue = new String[0];
break; break;
@ -409,10 +304,7 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
if(!Arrays.equals(value, oldValue)) { if(!Arrays.equals(value, oldValue)) {
retOpt = parent.getOptionToSet(option, false); retOpt = parent.getOptionToSet(option, false);
retOpt.setValue(value); retOpt.setValue(value);
// if(resourceData != null)
// ((ISettingsChangeListener)resourceData).optionChanged(this, parent, option, oldValue);
NotificationManager.getInstance().optionChanged(this, parent, option, oldValue); NotificationManager.getInstance().optionChanged(this, parent, option, oldValue);
// rebuildNeeded = true;
} }
return retOpt; return retOpt;
} }
@ -425,21 +317,6 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
case IOption.STRING_LIST : case IOption.STRING_LIST :
oldValue = ((Option)option).getBasicStringListValueElements(); oldValue = ((Option)option).getBasicStringListValueElements();
break; break;
// case IOption.STRING_LIST :
// oldValue = option.getStringListValue();
// break;
// case IOption.INCLUDE_PATH :
// oldValue = option.getIncludePaths();
// break;
// case IOption.PREPROCESSOR_SYMBOLS :
// oldValue = option.getDefinedSymbols();
// break;
// case IOption.LIBRARIES :
// oldValue = option.getLibraries();
// break;
// case IOption.OBJECTS :
// oldValue = option.getUserObjects();
// break;
default : default :
oldValue = new OptionStringValue[0]; oldValue = new OptionStringValue[0];
break; break;
@ -447,10 +324,7 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
if(!Arrays.equals(value, oldValue)) { if(!Arrays.equals(value, oldValue)) {
retOpt = parent.getOptionToSet(option, false); retOpt = parent.getOptionToSet(option, false);
((Option)retOpt).setValue(value); ((Option)retOpt).setValue(value);
// if(resourceData != null)
// ((ISettingsChangeListener)resourceData).optionChanged(this, parent, option, oldValue);
NotificationManager.getInstance().optionChanged(this, parent, option, oldValue); NotificationManager.getInstance().optionChanged(this, parent, option, oldValue);
// rebuildNeeded = true;
} }
return retOpt; return retOpt;
} }
@ -471,8 +345,6 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
public abstract Set<String> contributeErrorParsers(Set<String> set); public abstract Set<String> contributeErrorParsers(Set<String> set);
protected Set<String> contributeErrorParsers(ITool[] tools, Set<String> set){ protected Set<String> contributeErrorParsers(ITool[] tools, Set<String> set){
// if(set == null)
// set = new HashSet();
for(int i = 0; i < tools.length; i++){ for(int i = 0; i < tools.length; i++){
Tool tool = (Tool)tools[i]; Tool tool = (Tool)tools[i];
set = tool.contributeErrorParsers(set); set = tool.contributeErrorParsers(set);
@ -580,4 +452,5 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
public List<IResourceInfo> getChildResourceInfoList(boolean includeCurrent){ public List<IResourceInfo> getChildResourceInfoList(boolean includeCurrent){
return getRcInfo().getRcInfoList(ICSettingBase.SETTING_FILE | ICSettingBase.SETTING_FOLDER, includeCurrent); return getRcInfo().getRcInfoList(ICSettingBase.SETTING_FILE | ICSettingBase.SETTING_FOLDER, includeCurrent);
} }
} }

View file

@ -65,15 +65,15 @@ public class SymbolTab extends AbstractLangsListTab {
return null; return null;
} }
public int getKind() { return ICSettingEntry.MACRO; } public int getKind() {
return ICSettingEntry.MACRO;
}
// Specific version of "update()" for Symbols tab only // Specific version of "update()" for Symbols tab only
public void update() { public void update() {
if (lang != null) { if (lang != null) {
int x = table.getSelectionIndex(); int x = table.getSelectionIndex();
if (x == -1) x = 0; if (x == -1) x = 0;
// incs = new LinkedList<ICLanguageSettingEntry>(lang.getSettingEntriesList(getKind()));
incs = getIncs(); incs = getIncs();
ArrayList<ICLanguageSettingEntry> lst = new ArrayList<ICLanguageSettingEntry>(); ArrayList<ICLanguageSettingEntry> lst = new ArrayList<ICLanguageSettingEntry>();
if (incs != null) { if (incs != null) {
@ -91,5 +91,4 @@ public class SymbolTab extends AbstractLangsListTab {
updateLbs(lb1, lb2); updateLbs(lb1, lb2);
updateButtons(); updateButtons();
} }
} }