mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-30 04:15:35 +02:00
Fix language selection in project description manager, bug 211142.
This commit is contained in:
parent
9626614618
commit
311dea1c0f
1 changed files with 146 additions and 138 deletions
|
@ -159,7 +159,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
private static final QualifiedName LOAD_FLAG = new QualifiedName(CCorePlugin.PLUGIN_ID, "descriptionLoadded"); //$NON-NLS-1$
|
private static final QualifiedName LOAD_FLAG = new QualifiedName(CCorePlugin.PLUGIN_ID, "descriptionLoadded"); //$NON-NLS-1$
|
||||||
|
|
||||||
static class CompositeWorkspaceRunnable implements IWorkspaceRunnable {
|
static class CompositeWorkspaceRunnable implements IWorkspaceRunnable {
|
||||||
private List fRunnables = new ArrayList();
|
private List<IWorkspaceRunnable> fRunnables = new ArrayList<IWorkspaceRunnable>();
|
||||||
private String fName;
|
private String fName;
|
||||||
private boolean fStopOnErr;
|
private boolean fStopOnErr;
|
||||||
|
|
||||||
|
@ -177,8 +177,8 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
try {
|
try {
|
||||||
monitor.beginTask(fName, fRunnables.size());
|
monitor.beginTask(fName, fRunnables.size());
|
||||||
|
|
||||||
for(Iterator iter = fRunnables.iterator(); iter.hasNext();){
|
for(Iterator<IWorkspaceRunnable> iter = fRunnables.iterator(); iter.hasNext();){
|
||||||
IWorkspaceRunnable r = (IWorkspaceRunnable)iter.next();
|
IWorkspaceRunnable r = iter.next();
|
||||||
IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1);
|
IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1);
|
||||||
try {
|
try {
|
||||||
r.run(subMonitor);
|
r.run(subMonitor);
|
||||||
|
@ -237,40 +237,40 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class ThreadInfo {
|
private static class ThreadInfo {
|
||||||
Map fDescriptionLoaddingMap;
|
Map<IProject, ICProjectDescription> fDescriptionLoaddingMap;
|
||||||
Map fDescriptionApplyingMap;
|
Map<IProject, ICProjectDescription> fDescriptionApplyingMap;
|
||||||
Map fProjectFileSerializationMap;
|
Map<IProject, Boolean> fProjectFileSerializationMap;
|
||||||
|
|
||||||
public Map getDescriptionLoaddingMap(boolean create){
|
public Map<IProject, ICProjectDescription> getDescriptionLoaddingMap(boolean create){
|
||||||
if(fDescriptionLoaddingMap == null && create){
|
if(fDescriptionLoaddingMap == null && create){
|
||||||
fDescriptionLoaddingMap = new HashMap();
|
fDescriptionLoaddingMap = new HashMap<IProject, ICProjectDescription>();
|
||||||
}
|
}
|
||||||
return fDescriptionLoaddingMap;
|
return fDescriptionLoaddingMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map getDescriptionApplyingMap(boolean create){
|
public Map<IProject, ICProjectDescription> getDescriptionApplyingMap(boolean create){
|
||||||
if(fDescriptionApplyingMap == null && create){
|
if(fDescriptionApplyingMap == null && create){
|
||||||
fDescriptionApplyingMap = new HashMap();
|
fDescriptionApplyingMap = new HashMap<IProject, ICProjectDescription>();
|
||||||
}
|
}
|
||||||
return fDescriptionApplyingMap;
|
return fDescriptionApplyingMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map getProjectFileSerializationMap(boolean create){
|
public Map<IProject, Boolean> getProjectFileSerializationMap(boolean create){
|
||||||
if(fProjectFileSerializationMap == null && create){
|
if(fProjectFileSerializationMap == null && create){
|
||||||
fProjectFileSerializationMap = new HashMap();
|
fProjectFileSerializationMap = new HashMap<IProject, Boolean>();
|
||||||
}
|
}
|
||||||
return fProjectFileSerializationMap;
|
return fProjectFileSerializationMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map fProviderMap;
|
private Map<String, CConfigurationDataProviderDescriptor> fProviderMap;
|
||||||
private CProjectConverterDesciptor fConverters[];
|
private CProjectConverterDesciptor fConverters[];
|
||||||
private List fListeners = new ArrayList();
|
private List<ListenerDescriptor> fListeners = new ArrayList<ListenerDescriptor>();
|
||||||
private Map fPreferenceMap = new HashMap();
|
private Map<String, CConfigurationDescriptionCache> fPreferenceMap = new HashMap<String, CConfigurationDescriptionCache>();
|
||||||
private CConfigBasedDescriptorManager fDescriptorManager;
|
private CConfigBasedDescriptorManager fDescriptorManager;
|
||||||
private ThreadLocal fThreadInfo = new ThreadLocal();
|
private ThreadLocal<ThreadInfo> fThreadInfo = new ThreadLocal<ThreadInfo>();
|
||||||
private Map fDescriptionMap = new HashMap(); //calls to this map are "manually" synchronized with the CProjectDescriptionManager object lock;
|
private Map<IProject, ICProjectDescription> fDescriptionMap = new HashMap<IProject, ICProjectDescription>(); //calls to this map are "manually" synchronized with the CProjectDescriptionManager object lock;
|
||||||
private ResourceChangeHandler fRcChangeHandler;
|
private ResourceChangeHandler fRcChangeHandler;
|
||||||
private CProjectDescriptionWorkspacePreferences fPreferences;
|
private CProjectDescriptionWorkspacePreferences fPreferences;
|
||||||
private boolean fAllowEmptyCreatingDescription = true; // allowed by default
|
private boolean fAllowEmptyCreatingDescription = true; // allowed by default
|
||||||
|
@ -290,7 +290,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ICSettingObject[] getChildSettings() {
|
public ICSettingObject[] getChildSettings() {
|
||||||
return (ICSettingObject[])fPreferenceMap.values().toArray(new CConfigurationDescriptionCache[fPreferenceMap.size()]);
|
return fPreferenceMap.values().toArray(new CConfigurationDescriptionCache[fPreferenceMap.size()]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -387,9 +387,9 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
private ICProjectDescription getDescriptionLoadding(IProject project){
|
private ICProjectDescription getDescriptionLoadding(IProject project){
|
||||||
Map map = getDescriptionLoaddingMap(false);
|
Map<IProject, ICProjectDescription> map = getDescriptionLoaddingMap(false);
|
||||||
if(map != null)
|
if(map != null)
|
||||||
return (ICProjectDescription)map.get(project);
|
return map.get(project);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -397,33 +397,33 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
if(des == null){
|
if(des == null){
|
||||||
clearDescriptionLoadding(project);
|
clearDescriptionLoadding(project);
|
||||||
} else {
|
} else {
|
||||||
Map map = getDescriptionLoaddingMap(true);
|
Map<IProject, ICProjectDescription> map = getDescriptionLoaddingMap(true);
|
||||||
map.put(project, des);
|
map.put(project, des);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private CProjectDescription clearDescriptionLoadding(IProject project){
|
private CProjectDescription clearDescriptionLoadding(IProject project){
|
||||||
Map map = getDescriptionLoaddingMap(false);
|
Map<IProject, ICProjectDescription> map = getDescriptionLoaddingMap(false);
|
||||||
if(map != null)
|
if(map != null)
|
||||||
return (CProjectDescription)map.remove(project);
|
return (CProjectDescription)map.remove(project);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map getDescriptionLoaddingMap(boolean create){
|
private Map<IProject, ICProjectDescription> getDescriptionLoaddingMap(boolean create){
|
||||||
ThreadInfo info = getThreadInfo(create);
|
ThreadInfo info = getThreadInfo(create);
|
||||||
if(info != null)
|
if(info != null)
|
||||||
return info.getDescriptionLoaddingMap(create);
|
return info.getDescriptionLoaddingMap(create);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map getDescriptionApplyingMap(boolean create){
|
private Map<IProject, ICProjectDescription> getDescriptionApplyingMap(boolean create){
|
||||||
ThreadInfo info = getThreadInfo(create);
|
ThreadInfo info = getThreadInfo(create);
|
||||||
if(info != null)
|
if(info != null)
|
||||||
return info.getDescriptionApplyingMap(create);
|
return info.getDescriptionApplyingMap(create);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map getProjectFileSerializationMap(boolean create){
|
private Map<IProject, Boolean> getProjectFileSerializationMap(boolean create){
|
||||||
ThreadInfo info = getThreadInfo(create);
|
ThreadInfo info = getThreadInfo(create);
|
||||||
if(info != null)
|
if(info != null)
|
||||||
return info.getProjectFileSerializationMap(create);
|
return info.getProjectFileSerializationMap(create);
|
||||||
|
@ -459,7 +459,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
CProjectDescription checkExternalProjectFileModification(IResource rc) throws CoreException{
|
CProjectDescription checkExternalProjectFileModification(IResource rc) throws CoreException{
|
||||||
Map map = getProjectFileSerializationMap(false);
|
Map<IProject, Boolean> map = getProjectFileSerializationMap(false);
|
||||||
IProject project = rc.getProject();
|
IProject project = rc.getProject();
|
||||||
if(map != null){
|
if(map != null){
|
||||||
if(map.remove(project) != null)
|
if(map.remove(project) != null)
|
||||||
|
@ -498,7 +498,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
private ThreadInfo getThreadInfo(boolean create){
|
private ThreadInfo getThreadInfo(boolean create){
|
||||||
ThreadInfo info = (ThreadInfo)fThreadInfo.get();
|
ThreadInfo info = fThreadInfo.get();
|
||||||
if(info == null && create){
|
if(info == null && create){
|
||||||
info = new ThreadInfo();
|
info = new ThreadInfo();
|
||||||
fThreadInfo.set(info);
|
fThreadInfo.set(info);
|
||||||
|
@ -672,7 +672,6 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
des.setLoadding(true);
|
des.setLoadding(true);
|
||||||
} else {
|
} else {
|
||||||
ownerId = null;
|
ownerId = null;
|
||||||
des = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
IProjectDescription eDes = context.getEclipseProjectDescription();
|
IProjectDescription eDes = context.getEclipseProjectDescription();
|
||||||
|
@ -1031,14 +1030,12 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
private ICProjectDescription loadProjectDescription(IProject project) throws CoreException{
|
private ICProjectDescription loadProjectDescription(IProject project) throws CoreException{
|
||||||
ICStorageElement storage = CProjectDescriptionManager.getInstance().createStorage(project, true, false, false);
|
ICStorageElement storage = CProjectDescriptionManager.getInstance().createStorage(project, true, false, false);
|
||||||
CProjectDescription des = new CProjectDescription(project, storage, true, false);
|
CProjectDescription des = new CProjectDescription(project, storage, true, false);
|
||||||
if(des != null){
|
try {
|
||||||
try {
|
setDescriptionLoadding(project, des);
|
||||||
setDescriptionLoadding(project, des);
|
des.loadDatas();
|
||||||
des.loadDatas();
|
des.doneLoadding();
|
||||||
des.doneLoadding();
|
}finally{
|
||||||
}finally{
|
clearDescriptionLoadding(project);
|
||||||
clearDescriptionLoadding(project);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return des;
|
return des;
|
||||||
}
|
}
|
||||||
|
@ -1099,15 +1096,15 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
// return null;
|
// return null;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
private Set projSetFromProjNameSet(Set projNameSet){
|
private Set<IProject> projSetFromProjNameSet(Set<String> projNameSet){
|
||||||
if(projNameSet.size() == 0)
|
if(projNameSet.size() == 0)
|
||||||
return new HashSet(0);
|
return new HashSet<IProject>(0);
|
||||||
|
|
||||||
Set set = new HashSet();
|
Set<IProject> set = new HashSet<IProject>();
|
||||||
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
|
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
|
||||||
|
|
||||||
for(Iterator iter = projNameSet.iterator(); iter.hasNext();){
|
for(Iterator<String> iter = projNameSet.iterator(); iter.hasNext();){
|
||||||
IProject proj = root.getProject((String)iter.next());
|
IProject proj = root.getProject(iter.next());
|
||||||
set.add(proj);
|
set.add(proj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1118,20 +1115,20 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
if(newCfg == null)
|
if(newCfg == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
Map oldMap = oldCfg != null ? oldCfg.getReferenceInfo() : null;
|
Map<String, String> oldMap = oldCfg != null ? oldCfg.getReferenceInfo() : null;
|
||||||
Map newMap = newCfg != null ? newCfg.getReferenceInfo() : null;
|
Map<String, String> newMap = newCfg.getReferenceInfo();
|
||||||
Set oldProjSet = oldMap != null ? projSetFromProjNameSet(oldMap.keySet()) : new HashSet(0);
|
Set<IProject> oldProjSet = oldMap != null ? projSetFromProjNameSet(oldMap.keySet()) : new HashSet<IProject>(0);
|
||||||
Set newProjSet = newMap != null ? projSetFromProjNameSet(newMap.keySet()) : new HashSet(0);
|
Set<IProject> newProjSet = newMap != null ? projSetFromProjNameSet(newMap.keySet()) : new HashSet<IProject>(0);
|
||||||
|
|
||||||
Set tmp = new HashSet(newProjSet);
|
Set<IProject> tmp = new HashSet<IProject>(newProjSet);
|
||||||
newProjSet.removeAll(oldProjSet);
|
newProjSet.removeAll(oldProjSet);
|
||||||
oldProjSet.removeAll(tmp);
|
oldProjSet.removeAll(tmp);
|
||||||
if(oldProjSet.size() != 0 || newProjSet.size() != 0){
|
if(oldProjSet.size() != 0 || newProjSet.size() != 0){
|
||||||
IProject[] refs = des.getReferencedProjects();
|
IProject[] refs = des.getReferencedProjects();
|
||||||
Set set = new HashSet(Arrays.asList(refs));
|
Set<IProject> set = new HashSet<IProject>(Arrays.asList(refs));
|
||||||
set.removeAll(oldProjSet);
|
set.removeAll(oldProjSet);
|
||||||
set.addAll(newProjSet);
|
set.addAll(newProjSet);
|
||||||
des.setReferencedProjects((IProject[])set.toArray(new IProject[set.size()]));
|
des.setReferencedProjects(set.toArray(new IProject[set.size()]));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -1183,10 +1180,10 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
String conflictingNatures[] = newDr != null ? newDr.getConflictingNatureIds() : new String[0];
|
String conflictingNatures[] = newDr != null ? newDr.getConflictingNatureIds() : new String[0];
|
||||||
String natureIds[] = des.getNatureIds();
|
String natureIds[] = des.getNatureIds();
|
||||||
|
|
||||||
Set curSet = new HashSet(Arrays.asList(natureIds));
|
Set<String> curSet = new HashSet<String>(Arrays.asList(natureIds));
|
||||||
// Set newSet = new HashSet(Arrays.asList(newNatures));
|
// Set newSet = new HashSet(Arrays.asList(newNatures));
|
||||||
// Set oldSet = new HashSet(Arrays.asList(oldNatures));
|
// Set oldSet = new HashSet(Arrays.asList(oldNatures));
|
||||||
HashSet newCurSet = new HashSet(curSet);
|
HashSet<String> newCurSet = new HashSet<String>(curSet);
|
||||||
// newSet.removeAll(oldSet);
|
// newSet.removeAll(oldSet);
|
||||||
// oldSet.removeAll(tmp);
|
// oldSet.removeAll(tmp);
|
||||||
|
|
||||||
|
@ -1196,7 +1193,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
newCurSet.removeAll(Arrays.asList(conflictingNatures));
|
newCurSet.removeAll(Arrays.asList(conflictingNatures));
|
||||||
|
|
||||||
if(!newCurSet.equals(curSet)){
|
if(!newCurSet.equals(curSet)){
|
||||||
des.setNatureIds((String[])newCurSet.toArray(new String[newCurSet.size()]));
|
des.setNatureIds(newCurSet.toArray(new String[newCurSet.size()]));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1444,7 +1441,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
private void serialize(IProject project, String file, ICStorageElement element) throws CoreException{
|
private void serialize(IProject project, String file, ICStorageElement element) throws CoreException{
|
||||||
try {
|
try {
|
||||||
IFile projectFile = project.getFile(file);
|
IFile projectFile = project.getFile(file);
|
||||||
ByteArrayOutputStream stream = write(element); //$NON-NLS-1$
|
ByteArrayOutputStream stream = write(element);
|
||||||
|
|
||||||
String utfString = stream.toString("UTF-8"); //$NON-NLS-1$
|
String utfString = stream.toString("UTF-8"); //$NON-NLS-1$
|
||||||
aboutToSaveProjectFile(project);
|
aboutToSaveProjectFile(project);
|
||||||
|
@ -1502,8 +1499,8 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
return ((InternalXmlStorageElement)element).fElement.getOwnerDocument();
|
return ((InternalXmlStorageElement)element).fElement.getOwnerDocument();
|
||||||
}
|
}
|
||||||
|
|
||||||
Map createCfgStorages(ICProjectDescription des) throws CoreException{
|
Map<String, ICStorageElement> createCfgStorages(ICProjectDescription des) throws CoreException{
|
||||||
LinkedHashMap map = new LinkedHashMap();
|
LinkedHashMap<String, ICStorageElement> map = new LinkedHashMap<String, ICStorageElement>();
|
||||||
ICStorageElement rootElement = des.getStorage(MODULE_ID, false);
|
ICStorageElement rootElement = des.getStorage(MODULE_ID, false);
|
||||||
if(rootElement != null){
|
if(rootElement != null){
|
||||||
ICStorageElement children[] = rootElement.getChildren();
|
ICStorageElement children[] = rootElement.getChildren();
|
||||||
|
@ -1552,14 +1549,14 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
if(cType != null){
|
if(cType != null){
|
||||||
String [] exts = cType.getFileSpecs(IContentType.FILE_EXTENSION_SPEC);
|
String [] exts = cType.getFileSpecs(IContentType.FILE_EXTENSION_SPEC);
|
||||||
if(exts != null && exts.length != 0){
|
if(exts != null && exts.length != 0){
|
||||||
List list = new ArrayList();
|
List<ICLanguageSetting> list = new ArrayList<ICLanguageSetting>();
|
||||||
ICLanguageSetting setting;
|
ICLanguageSetting setting;
|
||||||
for(int i = 0; i < exts.length; i++){
|
for(int i = 0; i < exts.length; i++){
|
||||||
setting = findLanguageSettingForExtension(exts[i], settings/*, src*/);
|
setting = findLanguageSettingForExtension(exts[i], settings/*, src*/);
|
||||||
if(setting != null)
|
if(setting != null)
|
||||||
list.add(setting);
|
list.add(setting);
|
||||||
}
|
}
|
||||||
return (ICLanguageSetting[])list.toArray(new ICLanguageSetting[list.size()]);
|
return list.toArray(new ICLanguageSetting[list.size()]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return EMPTY_LANGUAGE_SETTINGS_ARRAY;
|
return EMPTY_LANGUAGE_SETTINGS_ARRAY;
|
||||||
|
@ -1567,6 +1564,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
|
|
||||||
public ICLanguageSetting findLanguageSettingForExtension(String ext, ICLanguageSetting settings[]/*, boolean src*/){
|
public ICLanguageSetting findLanguageSettingForExtension(String ext, ICLanguageSetting settings[]/*, boolean src*/){
|
||||||
ICLanguageSetting setting;
|
ICLanguageSetting setting;
|
||||||
|
ICLanguageSetting insensitiveMatch= null;
|
||||||
for(int i = 0; i < settings.length; i++){
|
for(int i = 0; i < settings.length; i++){
|
||||||
setting = settings[i];
|
setting = settings[i];
|
||||||
String exts[] = setting.getSourceExtensions();
|
String exts[] = setting.getSourceExtensions();
|
||||||
|
@ -1581,14 +1579,23 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
if(exts != null && exts.length != 0){
|
if(exts != null && exts.length != 0){
|
||||||
|
// try case-sensitive first
|
||||||
for(int j = 0; j < exts.length; j++){
|
for(int j = 0; j < exts.length; j++){
|
||||||
// since the file types prefs are not case sensitive, don't be here
|
if(ext.equals(exts[j]))
|
||||||
if(ext.equalsIgnoreCase(exts[j]))
|
|
||||||
return setting;
|
return setting;
|
||||||
}
|
}
|
||||||
|
// no case-sensitive match, since the file types prefs are not case sensitive, don't be here
|
||||||
|
if (insensitiveMatch == null) {
|
||||||
|
for(int j = 0; j < exts.length; j++){
|
||||||
|
if(ext.equalsIgnoreCase(exts[j])) {
|
||||||
|
insensitiveMatch= setting;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return insensitiveMatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
ICStorageElement createStorage(ICSettingsStorage storage, String cfgId) throws CoreException{
|
ICStorageElement createStorage(ICSettingsStorage storage, String cfgId) throws CoreException{
|
||||||
|
@ -1687,7 +1694,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
private CConfigurationDataProviderDescriptor getCfgProviderDescriptor(String id){
|
private CConfigurationDataProviderDescriptor getCfgProviderDescriptor(String id){
|
||||||
initProviderInfo();
|
initProviderInfo();
|
||||||
|
|
||||||
return (CConfigurationDataProviderDescriptor)fProviderMap.get(id);
|
return fProviderMap.get(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void initProviderInfo(){
|
private synchronized void initProviderInfo(){
|
||||||
|
@ -1703,7 +1710,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
|
|
||||||
IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(CConfigurationDataProviderDescriptor.DATA_PROVIDER_EXTPOINT_ID);
|
IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(CConfigurationDataProviderDescriptor.DATA_PROVIDER_EXTPOINT_ID);
|
||||||
IExtension exts[] = extensionPoint.getExtensions();
|
IExtension exts[] = extensionPoint.getExtensions();
|
||||||
fProviderMap = new HashMap(exts.length);
|
fProviderMap = new HashMap<String, CConfigurationDataProviderDescriptor>(exts.length);
|
||||||
|
|
||||||
for(int i = 0; i < exts.length; i++){
|
for(int i = 0; i < exts.length; i++){
|
||||||
CConfigurationDataProviderDescriptor des = new CConfigurationDataProviderDescriptor(exts[i]);
|
CConfigurationDataProviderDescriptor des = new CConfigurationDataProviderDescriptor(exts[i]);
|
||||||
|
@ -1972,10 +1979,9 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
|
|
||||||
if(file != null) {
|
if(file != null) {
|
||||||
info = file.fetchInfo();
|
info = file.fetchInfo();
|
||||||
}
|
if (info != null && info.exists()) {
|
||||||
|
stream = file.openInputStream(EFS.NONE, null);
|
||||||
if (info != null && info.exists()) {
|
}
|
||||||
stream = file.openInputStream(EFS.NONE, null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2076,11 +2082,11 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
if(!CDataUtil.objectsEqual(newId, oldId))
|
if(!CDataUtil.objectsEqual(newId, oldId))
|
||||||
flags |= ICDescriptionDelta.OWNER;
|
flags |= ICDescriptionDelta.OWNER;
|
||||||
|
|
||||||
Map newMap = newSettings.getExtensionMapCopy();
|
Map<?, ?> newMap = newSettings.getExtensionMapCopy();
|
||||||
Map oldMap = oldSettings.getExtensionMapCopy();
|
Map<?, ?> oldMap = oldSettings.getExtensionMapCopy();
|
||||||
|
|
||||||
for(Iterator iter = newMap.entrySet().iterator(); iter.hasNext();){
|
for(Iterator<?> iter = newMap.entrySet().iterator(); iter.hasNext();){
|
||||||
Map.Entry entry = (Map.Entry)iter.next();
|
Map.Entry<?,?> entry = (Map.Entry<?,?>)iter.next();
|
||||||
iter.remove();
|
iter.remove();
|
||||||
CConfigExtensionReference[] oldRefs = (CConfigExtensionReference[])oldMap.remove(entry.getKey());
|
CConfigExtensionReference[] oldRefs = (CConfigExtensionReference[])oldMap.remove(entry.getKey());
|
||||||
if(oldRefs == null){
|
if(oldRefs == null){
|
||||||
|
@ -2094,8 +2100,8 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
Set newSet = new HashSet(Arrays.asList(newRefs));
|
Set<CConfigExtensionReference> newSet = new HashSet<CConfigExtensionReference>(Arrays.asList(newRefs));
|
||||||
Set oldSet = new HashSet(Arrays.asList(oldRefs));
|
Set<CConfigExtensionReference> oldSet = new HashSet<CConfigExtensionReference>(Arrays.asList(oldRefs));
|
||||||
if(newSet.size() != oldSet.size()){
|
if(newSet.size() != oldSet.size()){
|
||||||
flags |= ICDescriptionDelta.EXT_REF;
|
flags |= ICDescriptionDelta.EXT_REF;
|
||||||
break;
|
break;
|
||||||
|
@ -2261,8 +2267,8 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
private int calcRefChangeFlags(ICConfigurationDescription newDes, ICConfigurationDescription oldDes){
|
private int calcRefChangeFlags(ICConfigurationDescription newDes, ICConfigurationDescription oldDes){
|
||||||
Map newMap = newDes != null ? newDes.getReferenceInfo() : null;
|
Map<String, String> newMap = newDes != null ? newDes.getReferenceInfo() : null;
|
||||||
Map oldMap = oldDes != null ? oldDes.getReferenceInfo() : null;
|
Map<String, String> oldMap = oldDes != null ? oldDes.getReferenceInfo() : null;
|
||||||
|
|
||||||
int flags = 0;
|
int flags = 0;
|
||||||
if(newMap == null || newMap.size() == 0){
|
if(newMap == null || newMap.size() == 0){
|
||||||
|
@ -2274,8 +2280,8 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
flags = ICDescriptionDelta.CFG_REF_ADDED;
|
flags = ICDescriptionDelta.CFG_REF_ADDED;
|
||||||
} else {
|
} else {
|
||||||
boolean stop = false;
|
boolean stop = false;
|
||||||
for(Iterator iter = newMap.entrySet().iterator(); iter.hasNext();){
|
for(Iterator<Map.Entry<String,String>> iter = newMap.entrySet().iterator(); iter.hasNext();){
|
||||||
Map.Entry newEntry = (Map.Entry)iter.next();
|
Map.Entry<String,String> newEntry = iter.next();
|
||||||
Object newProj = newEntry.getKey();
|
Object newProj = newEntry.getKey();
|
||||||
Object newCfg = newEntry.getValue();
|
Object newCfg = newEntry.getValue();
|
||||||
Object oldCfg = oldMap.remove(newProj);
|
Object oldCfg = oldMap.remove(newProj);
|
||||||
|
@ -2311,24 +2317,24 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
if(delta.getDeltaKind() == ICDescriptionDelta.CHANGED){
|
if(delta.getDeltaKind() == ICDescriptionDelta.CHANGED){
|
||||||
ICLanguageSetting newLss[] = newFo.getLanguageSettings();
|
ICLanguageSetting newLss[] = newFo.getLanguageSettings();
|
||||||
ICLanguageSetting oldLss[] = oldFo.getLanguageSettings();
|
ICLanguageSetting oldLss[] = oldFo.getLanguageSettings();
|
||||||
List newList = new ArrayList(Arrays.asList(newLss));
|
List<ICLanguageSetting> newList = new ArrayList<ICLanguageSetting>(Arrays.asList(newLss));
|
||||||
List oldList = new ArrayList(Arrays.asList(oldLss));
|
List<ICLanguageSetting> oldList = new ArrayList<ICLanguageSetting>(Arrays.asList(oldLss));
|
||||||
List matched = sortSettings(newList, oldList);
|
List<ICLanguageSetting[]> matched = sortSettings(newList, oldList);
|
||||||
|
|
||||||
for(Iterator iter = matched.iterator(); iter.hasNext();){
|
for(Iterator<ICLanguageSetting[]> iter = matched.iterator(); iter.hasNext();){
|
||||||
ICLanguageSetting[] match = (ICLanguageSetting[])iter.next();
|
ICLanguageSetting[] match = iter.next();
|
||||||
CProjectDescriptionDelta lsDelta = createDelta(match[0], match[1]);
|
CProjectDescriptionDelta lsDelta = createDelta(match[0], match[1]);
|
||||||
if(lsDelta != null)
|
if(lsDelta != null)
|
||||||
delta.addChild(lsDelta);
|
delta.addChild(lsDelta);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(Iterator iter = newList.iterator(); iter.hasNext();){
|
for(Iterator<ICLanguageSetting> iter = newList.iterator(); iter.hasNext();){
|
||||||
ICLanguageSetting added = (ICLanguageSetting)iter.next();
|
ICLanguageSetting added = iter.next();
|
||||||
delta.addChild(createDelta(added, null));
|
delta.addChild(createDelta(added, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
for(Iterator iter = oldList.iterator(); iter.hasNext();){
|
for(Iterator<ICLanguageSetting> iter = oldList.iterator(); iter.hasNext();){
|
||||||
ICLanguageSetting removed = (ICLanguageSetting)iter.next();
|
ICLanguageSetting removed = iter.next();
|
||||||
delta.addChild(createDelta(null, removed));
|
delta.addChild(createDelta(null, removed));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2360,15 +2366,15 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
return delta.isEmpty() ? null : delta;
|
return delta.isEmpty() ? null : delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List sortSettings(List settings1,
|
private List<ICLanguageSetting[]> sortSettings(List<ICLanguageSetting> settings1,
|
||||||
List settings2){
|
List<ICLanguageSetting> settings2){
|
||||||
ICLanguageSetting setting1;
|
ICLanguageSetting setting1;
|
||||||
ICLanguageSetting setting2;
|
ICLanguageSetting setting2;
|
||||||
List result = new ArrayList();
|
List<ICLanguageSetting[]> result = new ArrayList<ICLanguageSetting[]>();
|
||||||
for(Iterator iter1 = settings1.iterator(); iter1.hasNext();){
|
for(Iterator<ICLanguageSetting> iter1 = settings1.iterator(); iter1.hasNext();){
|
||||||
setting1 = (ICLanguageSetting)iter1.next();
|
setting1 = iter1.next();
|
||||||
for(Iterator iter2 = settings2.iterator(); iter2.hasNext();){
|
for(Iterator<ICLanguageSetting> iter2 = settings2.iterator(); iter2.hasNext();){
|
||||||
setting2 = (ICLanguageSetting)iter2.next();
|
setting2 = iter2.next();
|
||||||
|
|
||||||
if(setting2.getId().equals(setting1.getId())){
|
if(setting2.getId().equals(setting1.getId())){
|
||||||
iter1.remove();
|
iter1.remove();
|
||||||
|
@ -2382,12 +2388,12 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(Iterator iter1 = settings1.iterator(); iter1.hasNext();){
|
for(Iterator<ICLanguageSetting> iter1 = settings1.iterator(); iter1.hasNext();){
|
||||||
setting1 = (ICLanguageSetting)iter1.next();
|
setting1 = iter1.next();
|
||||||
String lId = setting1.getLanguageId();
|
String lId = setting1.getLanguageId();
|
||||||
if(lId != null){
|
if(lId != null){
|
||||||
for(Iterator iter2 = settings2.iterator(); iter2.hasNext();){
|
for(Iterator<ICLanguageSetting> iter2 = settings2.iterator(); iter2.hasNext();){
|
||||||
setting2 = (ICLanguageSetting)iter2.next();
|
setting2 = iter2.next();
|
||||||
|
|
||||||
if(lId.equals(setting2.getLanguageId())){
|
if(lId.equals(setting2.getLanguageId())){
|
||||||
iter1.remove();
|
iter1.remove();
|
||||||
|
@ -2402,12 +2408,12 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(Iterator iter1 = settings1.iterator(); iter1.hasNext();){
|
for(Iterator<ICLanguageSetting> iter1 = settings1.iterator(); iter1.hasNext();){
|
||||||
setting1 = (ICLanguageSetting)iter1.next();
|
setting1 = iter1.next();
|
||||||
String cTypeIds1[] = setting1.getSourceContentTypeIds();
|
String cTypeIds1[] = setting1.getSourceContentTypeIds();
|
||||||
if(cTypeIds1.length != 0){
|
if(cTypeIds1.length != 0){
|
||||||
for(Iterator iter2 = settings2.iterator(); iter2.hasNext();){
|
for(Iterator<ICLanguageSetting> iter2 = settings2.iterator(); iter2.hasNext();){
|
||||||
setting2 = (ICLanguageSetting)iter2.next();
|
setting2 = iter2.next();
|
||||||
if(Arrays.equals(cTypeIds1, setting2.getSourceContentTypeIds())){
|
if(Arrays.equals(cTypeIds1, setting2.getSourceContentTypeIds())){
|
||||||
iter1.remove();
|
iter1.remove();
|
||||||
iter2.remove();
|
iter2.remove();
|
||||||
|
@ -2421,13 +2427,13 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(Iterator iter1 = settings1.iterator(); iter1.hasNext();){
|
for(Iterator<ICLanguageSetting> iter1 = settings1.iterator(); iter1.hasNext();){
|
||||||
setting1 = (ICLanguageSetting)iter1.next();
|
setting1 = iter1.next();
|
||||||
if(setting1.getSourceContentTypeIds().length == 0){
|
if(setting1.getSourceContentTypeIds().length == 0){
|
||||||
String srcExts[] = setting1.getSourceExtensions();
|
String srcExts[] = setting1.getSourceExtensions();
|
||||||
if(srcExts.length != 0){
|
if(srcExts.length != 0){
|
||||||
for(Iterator iter2 = settings2.iterator(); iter2.hasNext();){
|
for(Iterator<ICLanguageSetting> iter2 = settings2.iterator(); iter2.hasNext();){
|
||||||
setting2 = (ICLanguageSetting)iter2.next();
|
setting2 = iter2.next();
|
||||||
if(setting2.getSourceContentTypeIds().length == 0){
|
if(setting2.getSourceContentTypeIds().length == 0){
|
||||||
if(Arrays.equals(srcExts, setting2.getSourceExtensions())){
|
if(Arrays.equals(srcExts, setting2.getSourceExtensions())){
|
||||||
iter1.remove();
|
iter1.remove();
|
||||||
|
@ -2624,9 +2630,9 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
indexDelta = createDelta(indexCfg, oldIndexCfg);
|
indexDelta = createDelta(indexCfg, oldIndexCfg);
|
||||||
}
|
}
|
||||||
if(indexDelta != null){
|
if(indexDelta != null){
|
||||||
List list = new ArrayList();
|
List<CElementDelta> list = new ArrayList<CElementDelta>();
|
||||||
generateCElementDeltasFromCfgDelta(cProject, indexDelta, list);
|
generateCElementDeltasFromCfgDelta(cProject, indexDelta, list);
|
||||||
return (ICElementDelta[])list.toArray(new ICElementDelta[list.size()]);
|
return list.toArray(new ICElementDelta[list.size()]);
|
||||||
}
|
}
|
||||||
return EMPTY_CELEMENT_DELTA;
|
return EMPTY_CELEMENT_DELTA;
|
||||||
case ICDescriptionDelta.ADDED:
|
case ICDescriptionDelta.ADDED:
|
||||||
|
@ -2636,7 +2642,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
return EMPTY_CELEMENT_DELTA;
|
return EMPTY_CELEMENT_DELTA;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List generateCElementDeltasFromCfgDelta(ICProject cProject, ICDescriptionDelta cfgDelta, List list){
|
private List<CElementDelta> generateCElementDeltasFromCfgDelta(ICProject cProject, ICDescriptionDelta cfgDelta, List<CElementDelta> list){
|
||||||
int kind = cfgDelta.getDeltaKind();
|
int kind = cfgDelta.getDeltaKind();
|
||||||
switch(kind){
|
switch(kind){
|
||||||
case ICDescriptionDelta.CHANGED:
|
case ICDescriptionDelta.CHANGED:
|
||||||
|
@ -2663,6 +2669,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
generateCElementDeltasFromResourceDelta(cProject, child, list);
|
generateCElementDeltasFromResourceDelta(cProject, child, list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
case ICDescriptionDelta.ADDED:
|
case ICDescriptionDelta.ADDED:
|
||||||
case ICDescriptionDelta.REMOVED:
|
case ICDescriptionDelta.REMOVED:
|
||||||
break;
|
break;
|
||||||
|
@ -2670,7 +2677,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List generateCElementDeltasFromResourceDelta(ICProject cProject, ICDescriptionDelta delta, List list){
|
private List<CElementDelta> generateCElementDeltasFromResourceDelta(ICProject cProject, ICDescriptionDelta delta, List<CElementDelta> list){
|
||||||
int kind = delta.getDeltaKind();
|
int kind = delta.getDeltaKind();
|
||||||
ICDescriptionDelta parentDelta = delta.getParent();
|
ICDescriptionDelta parentDelta = delta.getParent();
|
||||||
ICElement el;
|
ICElement el;
|
||||||
|
@ -2751,7 +2758,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
return ((ICFolderDescription)rcDes).getLanguageSettingForFile(fileName);
|
return ((ICFolderDescription)rcDes).getLanguageSettingForFile(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List generateCElementDeltasFromLanguageDelta(ICElement el, ICDescriptionDelta delta, List list){
|
private List<CElementDelta> generateCElementDeltasFromLanguageDelta(ICElement el, ICDescriptionDelta delta, List<CElementDelta> list){
|
||||||
if(delta == null)
|
if(delta == null)
|
||||||
return list;
|
return list;
|
||||||
|
|
||||||
|
@ -2773,23 +2780,23 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
|
|
||||||
for(int i = 0; i < kindsArray.length; i++){
|
for(int i = 0; i < kindsArray.length; i++){
|
||||||
switch(kindsArray[i]){
|
switch(kindsArray[i]){
|
||||||
case ICLanguageSettingEntry.INCLUDE_PATH:
|
case ICSettingEntry.INCLUDE_PATH:
|
||||||
flags |= ICElementDelta.F_CHANGED_PATHENTRY_INCLUDE;
|
flags |= ICElementDelta.F_CHANGED_PATHENTRY_INCLUDE;
|
||||||
break;
|
break;
|
||||||
case ICLanguageSettingEntry.INCLUDE_FILE:
|
case ICSettingEntry.INCLUDE_FILE:
|
||||||
flags |= ICElementDelta.F_CHANGED_PATHENTRY_INCLUDE;
|
flags |= ICElementDelta.F_CHANGED_PATHENTRY_INCLUDE;
|
||||||
break;
|
break;
|
||||||
case ICLanguageSettingEntry.MACRO:
|
case ICSettingEntry.MACRO:
|
||||||
flags |= ICElementDelta.F_CHANGED_PATHENTRY_MACRO;
|
flags |= ICElementDelta.F_CHANGED_PATHENTRY_MACRO;
|
||||||
break;
|
break;
|
||||||
case ICLanguageSettingEntry.MACRO_FILE:
|
case ICSettingEntry.MACRO_FILE:
|
||||||
flags |= ICElementDelta.F_CHANGED_PATHENTRY_MACRO;
|
flags |= ICElementDelta.F_CHANGED_PATHENTRY_MACRO;
|
||||||
break;
|
break;
|
||||||
case ICLanguageSettingEntry.LIBRARY_PATH:
|
case ICSettingEntry.LIBRARY_PATH:
|
||||||
flags |= added ? ICElementDelta.F_ADDED_PATHENTRY_LIBRARY
|
flags |= added ? ICElementDelta.F_ADDED_PATHENTRY_LIBRARY
|
||||||
: ICElementDelta.F_REMOVED_PATHENTRY_LIBRARY;
|
: ICElementDelta.F_REMOVED_PATHENTRY_LIBRARY;
|
||||||
break;
|
break;
|
||||||
case ICLanguageSettingEntry.LIBRARY_FILE:
|
case ICSettingEntry.LIBRARY_FILE:
|
||||||
flags |= added ? ICElementDelta.F_ADDED_PATHENTRY_LIBRARY
|
flags |= added ? ICElementDelta.F_ADDED_PATHENTRY_LIBRARY
|
||||||
: ICElementDelta.F_REMOVED_PATHENTRY_LIBRARY;
|
: ICElementDelta.F_REMOVED_PATHENTRY_LIBRARY;
|
||||||
break;
|
break;
|
||||||
|
@ -2828,7 +2835,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
int size = fListeners.size();
|
int size = fListeners.size();
|
||||||
ListenerDescriptor des;
|
ListenerDescriptor des;
|
||||||
for(int i = 0; i < size; i++){
|
for(int i = 0; i < size; i++){
|
||||||
des = (ListenerDescriptor)fListeners.get(i);
|
des = fListeners.get(i);
|
||||||
if(des.fListener == listener){
|
if(des.fListener == listener){
|
||||||
fListeners.remove(des);
|
fListeners.remove(des);
|
||||||
break;
|
break;
|
||||||
|
@ -2839,7 +2846,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
|
|
||||||
private ListenerDescriptor[] getListeners(){
|
private ListenerDescriptor[] getListeners(){
|
||||||
synchronized(fListeners){
|
synchronized(fListeners){
|
||||||
return (ListenerDescriptor[])fListeners.toArray(new ListenerDescriptor[fListeners.size()]);
|
return fListeners.toArray(new ListenerDescriptor[fListeners.size()]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3188,7 +3195,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
private CConfigurationDescriptionCache getLoaddedPreference(String buildSystemId){
|
private CConfigurationDescriptionCache getLoaddedPreference(String buildSystemId){
|
||||||
return (CConfigurationDescriptionCache)fPreferenceMap.get(buildSystemId);
|
return fPreferenceMap.get(buildSystemId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setLoaddedPreference(String buildSystemId, CConfigurationDescriptionCache des){
|
private void setLoaddedPreference(String buildSystemId, CConfigurationDescriptionCache des){
|
||||||
|
@ -3288,9 +3295,9 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
// }
|
// }
|
||||||
|
|
||||||
ICProjectDescription getDescriptionApplying(IProject project){
|
ICProjectDescription getDescriptionApplying(IProject project){
|
||||||
Map map = getDescriptionApplyingMap(false);
|
Map<IProject, ICProjectDescription> map = getDescriptionApplyingMap(false);
|
||||||
if(map != null)
|
if(map != null)
|
||||||
return (ICProjectDescription)map.get(project);
|
return map.get(project);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3298,13 +3305,13 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
if(des == null){
|
if(des == null){
|
||||||
clearDescriptionApplying(project);
|
clearDescriptionApplying(project);
|
||||||
} else {
|
} else {
|
||||||
Map map = getDescriptionApplyingMap(true);
|
Map<IProject, ICProjectDescription> map = getDescriptionApplyingMap(true);
|
||||||
map.put(project, des);
|
map.put(project, des);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void clearDescriptionApplying(IProject project){
|
void clearDescriptionApplying(IProject project){
|
||||||
Map map = getDescriptionApplyingMap(false);
|
Map<IProject, ICProjectDescription> map = getDescriptionApplyingMap(false);
|
||||||
if(map != null)
|
if(map != null)
|
||||||
map.remove(project);
|
map.remove(project);
|
||||||
}
|
}
|
||||||
|
@ -3324,13 +3331,13 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
return ((ICFileDescription)rcDes).getLanguageSetting();
|
return ((ICFileDescription)rcDes).getLanguageSetting();
|
||||||
}
|
}
|
||||||
|
|
||||||
static private HashMap createExtSetToLDataMap(IProject project, CLanguageData[] lDatas){
|
static private HashMap<HashSet<String>, CLanguageData> createExtSetToLDataMap(IProject project, CLanguageData[] lDatas){
|
||||||
HashMap map = new HashMap();
|
HashMap<HashSet<String>, CLanguageData> map = new HashMap<HashSet<String>, CLanguageData>();
|
||||||
|
|
||||||
for(int i = 0; i < lDatas.length; i++){
|
for(int i = 0; i < lDatas.length; i++){
|
||||||
CLanguageData lData = lDatas[i];
|
CLanguageData lData = lDatas[i];
|
||||||
String[] exts = CDataUtil.getSourceExtensions(project, lData);
|
String[] exts = CDataUtil.getSourceExtensions(project, lData);
|
||||||
HashSet set = new HashSet(Arrays.asList(exts));
|
HashSet<String> set = new HashSet<String>(Arrays.asList(exts));
|
||||||
map.put(set, lData);
|
map.put(set, lData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3350,14 +3357,15 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
CResourceData parentRcData = null;
|
CResourceData parentRcData = null;
|
||||||
for(parent = child.getParentContainer();
|
for(parent = child.getParentContainer();
|
||||||
(parentRcData = (CResourceData)parent.getValue()).getType() != ICSettingBase.SETTING_FOLDER;
|
(parentRcData = (CResourceData)parent.getValue()).getType() != ICSettingBase.SETTING_FOLDER;
|
||||||
parent = parent.getParentContainer());
|
parent = parent.getParentContainer()) {
|
||||||
if(!settingsCustomized(project, (CFolderData)parentRcData, (CFolderData)childRcData)){
|
if(!settingsCustomized(project, (CFolderData)parentRcData, (CFolderData)childRcData)){
|
||||||
try {
|
try {
|
||||||
data.removeResourceData(childRcData);
|
data.removeResourceData(childRcData);
|
||||||
child.remove();
|
child.remove();
|
||||||
modified = true;
|
modified = true;
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
CCorePlugin.log(e);
|
CCorePlugin.log(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -3388,16 +3396,16 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if(childLDatas.length != 0){
|
if(childLDatas.length != 0){
|
||||||
HashMap parentMap = createExtSetToLDataMap(project, parentLDatas);
|
HashMap<HashSet<String>, CLanguageData> parentMap = createExtSetToLDataMap(project, parentLDatas);
|
||||||
HashMap childMap = createExtSetToLDataMap(project, childLDatas);
|
HashMap<HashSet<String>, CLanguageData> childMap = createExtSetToLDataMap(project, childLDatas);
|
||||||
CLanguageData parentLData, childLData;
|
CLanguageData parentLData, childLData;
|
||||||
for(Iterator iter = parentMap.entrySet().iterator(); iter.hasNext();){
|
for(Iterator<Map.Entry<HashSet<String>, CLanguageData>> iter = parentMap.entrySet().iterator(); iter.hasNext();){
|
||||||
Map.Entry entry = (Map.Entry)iter.next();
|
Map.Entry<HashSet<String>, CLanguageData> entry = iter.next();
|
||||||
childLData = (CLanguageData)childMap.get(entry.getKey());
|
childLData = childMap.get(entry.getKey());
|
||||||
if(childLData == null)
|
if(childLData == null)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
parentLData = (CLanguageData)entry.getValue();
|
parentLData = entry.getValue();
|
||||||
if(!langDatasEqual(parentLData, childLData))
|
if(!langDatasEqual(parentLData, childLData))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue