From 66c3bdc8698a186b63f7d4179d5c08314aca77b9 Mon Sep 17 00:00:00 2001 From: Mikhail Sennikovsky Date: Wed, 18 Apr 2007 07:58:51 +0000 Subject: [PATCH] Fix for [Bug 182573] tool specific optionPathConverter is no longer called when updating CDT 3.1.2 to CDT 4.0.0 --- .../managedbuilder/internal/core/Tool.java | 4 +- .../dataprovider/BuildEntryStorage.java | 332 ++++++++++++ .../dataprovider/BuildLanguageData.java | 160 +----- .../internal/dataprovider/EntryInfo.java | 105 ---- .../internal/dataprovider/EntryListMap.java | 88 --- .../internal/dataprovider/EntryStorage.java | 501 ------------------ .../dataprovider/ProfileInfoProvider.java | 212 ++------ .../internal/dataprovider/SettingsSet.java | 274 ---------- .../core/settings/model/util/EntryInfo.java | 44 -- .../core/settings/model/util/SettingsSet.java | 83 ++- 10 files changed, 480 insertions(+), 1323 deletions(-) create mode 100644 build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/BuildEntryStorage.java delete mode 100644 build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/EntryInfo.java delete mode 100644 build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/EntryListMap.java delete mode 100644 build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/EntryStorage.java delete mode 100644 build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/SettingsSet.java delete mode 100644 core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/util/EntryInfo.java diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java index b0cbcef4ddc..24288f2be85 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java @@ -54,8 +54,8 @@ import org.eclipse.cdt.managedbuilder.core.ITool; import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin; +import org.eclipse.cdt.managedbuilder.internal.dataprovider.BuildEntryStorage; import org.eclipse.cdt.managedbuilder.internal.dataprovider.BuildLanguageData; -import org.eclipse.cdt.managedbuilder.internal.dataprovider.EntryStorage; import org.eclipse.cdt.managedbuilder.internal.enablement.OptionEnablementExpression; import org.eclipse.cdt.managedbuilder.internal.macros.BuildMacroProvider; import org.eclipse.cdt.managedbuilder.internal.macros.BuildfileMacroSubstitutor; @@ -4073,7 +4073,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch for(int i = 0; i < values.size(); i++){ oVal = values.get(i); if(type == IOption.PREPROCESSOR_SYMBOLS){ - String[] nameVal = EntryStorage.macroNameValueFromValue((String)oVal); + String[] nameVal = BuildEntryStorage.macroNameValueFromValue((String)oVal); oVal = nameVal[0]; } if(filterSet.contains(oVal)) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/BuildEntryStorage.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/BuildEntryStorage.java new file mode 100644 index 00000000000..7a293cfe0b2 --- /dev/null +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/BuildEntryStorage.java @@ -0,0 +1,332 @@ +/******************************************************************************* + * Copyright (c) 2007 Intel Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Intel Corporation - Initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.managedbuilder.internal.dataprovider; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.eclipse.cdt.core.settings.model.CMacroEntry; +import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; +import org.eclipse.cdt.core.settings.model.ICLanguageSettingPathEntry; +import org.eclipse.cdt.core.settings.model.ICSettingEntry; +import org.eclipse.cdt.core.settings.model.util.AbstractEntryStorage; +import org.eclipse.cdt.core.settings.model.util.CDataUtil; +import org.eclipse.cdt.core.settings.model.util.SettingsSet; +import org.eclipse.cdt.core.settings.model.util.SettingsSet.EntryInfo; +import org.eclipse.cdt.core.settings.model.util.SettingsSet.SettingLevel; +import org.eclipse.cdt.managedbuilder.core.IEnvVarBuildPath; +import org.eclipse.cdt.managedbuilder.core.IOption; +import org.eclipse.cdt.managedbuilder.core.IOptionPathConverter; +import org.eclipse.cdt.managedbuilder.core.IResourceInfo; +import org.eclipse.cdt.managedbuilder.core.ITool; +import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; +import org.eclipse.cdt.managedbuilder.envvar.IEnvironmentVariableProvider; +import org.eclipse.core.runtime.IPath; + +public class BuildEntryStorage extends AbstractEntryStorage { + private BuildLanguageData fLangData; + + private static class UserEntryInfo { + private ICLanguageSettingEntry fEntry; + private String fOptionValue; + + UserEntryInfo(ICLanguageSettingEntry entry, String optionValue){ + fEntry = entry; + fOptionValue = optionValue; + } + } + public BuildEntryStorage(int kind, BuildLanguageData lData) { + super(kind); + fLangData = lData; + } + + protected SettingsSet createEmptySettings() { + SettingsSet settings = new SettingsSet(3); + SettingLevel levels[] = settings.getLevels(); + + boolean override = isDiscoveredEntriesOverridable(); + int readOnlyFlag = override ? 0 : ICSettingEntry.READONLY; + levels[0].setFlagsToClear(ICSettingEntry.READONLY | ICSettingEntry.BUILTIN); + levels[0].setFlagsToSet(0); + levels[0].setReadOnly(false); + levels[0].setOverrideSupported(override); + + levels[1].setFlagsToClear(ICSettingEntry.BUILTIN); + levels[1].setFlagsToSet(readOnlyFlag | ICSettingEntry.RESOLVED); + levels[1].setReadOnly(true); + levels[1].setOverrideSupported(false); + + levels[2].setFlagsToClear(0); + levels[2].setFlagsToSet(readOnlyFlag | ICSettingEntry.BUILTIN | ICSettingEntry.RESOLVED); + levels[2].setReadOnly(true); + levels[2].setOverrideSupported(false); + + return settings; + } + + private boolean isDiscoveredEntriesOverridable(){ + return fLangData.getUndefOptionsForKind(getKind()).length != 0; + } + + protected void obtainEntriesFromLevel(int levelNum, SettingLevel level) { + switch(levelNum){ + case 0: + if(level == null) + restoreDefaults(); + else { + EntryInfo infos[] = level.getInfos(); + UserEntryInfo[] userInfos = new UserEntryInfo[infos.length]; + for(int i = 0; i < infos.length; i++){ + userInfos[i] = new UserEntryInfo(infos[i].getEntry(), (String)infos[i].getCustomInfo()); + } + setUserEntries(userInfos); + setUserUndefinedStringSet(level.containsOverrideInfo() ? level.getOverrideSet() : null); + } + break; + } + } + + private void restoreDefaults(){ + IOption options[] = fLangData.getOptionsForKind(getKind()); + ITool tool = fLangData.getTool(); + for(int i = 0; i < options.length; i++){ + IOption option = options[i]; + if(option.getParent() == tool){ + tool.removeOption(option); + } + } + + options = fLangData.getUndefOptionsForKind(getKind()); + for(int i = 0; i < options.length; i++){ + IOption option = options[i]; + if(option.getParent() == tool){ + tool.removeOption(option); + } + } + } + + protected void putEntriesToLevel(int levelNum, SettingLevel level) { + switch(levelNum){ + case 0: + UserEntryInfo[] userEntries = getUserEntries(level.getFlags(0)); + for(int i = 0; i < userEntries.length; i++){ + level.addEntry(userEntries[i].fEntry, userEntries[i].fOptionValue); + } + level.addOverrideNameSet(getUserUndefinedStringSet()); + break; + case 1: + ICLanguageSettingEntry[] envEntries = getEnvEntries(level.getFlags(0)); + level.addEntries(envEntries); + break; + case 2: + ICLanguageSettingEntry[] discoveredEntries = getDiscoveredEntries(level.getFlags(0)); + level.addEntries(discoveredEntries); + break; + } + } + + private ICLanguageSettingEntry[] getDiscoveredEntries(int flags){ + return ProfileInfoProvider.getInstance().getEntryValues(fLangData, getKind(), flags); + } + + private UserEntryInfo[] getUserEntries(int flags){ + IOption options[] = fLangData.getOptionsForKind(getKind()); + if(options.length > 0){ + List entryList = new ArrayList(); + for(int i = 0; i < options.length; i++){ + IOption option = options[i]; + List list = (List)option.getValue(); + int size = list.size(); + if(size > 0){ + for(int j = 0; j < size; j++){ + String value = (String)list.get(j); + if(value.indexOf('"') == 0 && value.lastIndexOf('"') == value.length() - 1 && value.length() != 1){ + value = value.substring(1, value.length() - 1); + } + ICLanguageSettingEntry entry = createUserEntry(value, flags); + entryList.add(new UserEntryInfo(entry, value)); + } + } + } + + return (UserEntryInfo[])entryList.toArray(new UserEntryInfo[entryList.size()]); + } + return new UserEntryInfo[0]; + } + + private HashSet getUserUndefinedStringSet(){ + HashSet set = null; + IOption options[] = fLangData.getUndefOptionsForKind(getKind()); + if(options.length > 0){ + for(int i = 0; i < options.length; i++){ + IOption option = options[i]; + List list = (List)option.getValue(); + if(list.size() != 0){ + if(set == null) + set = new HashSet(); + set.addAll(list); + } + } + } + return set; + } + + private ICLanguageSettingEntry[] getEnvEntries(int flags){ + String paths[] = null; + int kind = getKind(); + switch(kind){ + case ICLanguageSettingEntry.INCLUDE_PATH:{ + IEnvironmentVariableProvider provider = ManagedBuildManager.getEnvironmentVariableProvider(); + paths = provider.getBuildPaths(fLangData.getConfiguration(), IEnvVarBuildPath.BUILDPATH_INCLUDE); + } + break; + case ICLanguageSettingEntry.LIBRARY_PATH:{ + IEnvironmentVariableProvider provider = ManagedBuildManager.getEnvironmentVariableProvider(); + paths = provider.getBuildPaths(fLangData.getConfiguration(), IEnvVarBuildPath.BUILDPATH_LIBRARY); + } + break; + } + + if(paths != null && paths.length != 0){ + ICLanguageSettingEntry entries[] = new ICLanguageSettingEntry[paths.length]; + for(int i = 0; i < paths.length; i++){ + entries[i] = (ICLanguageSettingEntry)CDataUtil.createEntry(kind, paths.toString(), null, null, flags); + } + + return entries; + } + return new ICLanguageSettingEntry[0]; + } + + private ICLanguageSettingEntry createUserEntry(String optionValue, int flags){ + int kind = getKind(); + + ICLanguageSettingEntry entry = null; + + switch (kind){ + case ICLanguageSettingEntry.MACRO: + String nv[] = macroNameValueFromValue(optionValue); + + entry = new CMacroEntry(nv[0], nv[1], flags); + break; +// case ICLanguageSettingEntry.INCLUDE_PATH: +// case ICLanguageSettingEntry.INCLUDE_FILE: +// case ICLanguageSettingEntry.MACRO_FILE: +// case ICLanguageSettingEntry.LIBRARY_PATH: +// case ICLanguageSettingEntry.LIBRARY_FILE: + default: + IOptionPathConverter optionPathConverter = fLangData.getTool().getOptionPathConverter(); + Object[] v = optionPathValueToEntry(optionValue); + String name = (String)v[0]; + if(((Boolean)v[1]).booleanValue()){ + flags |= ICLanguageSettingEntry.VALUE_WORKSPACE_PATH; + } else if (optionPathConverter != null){ + IPath path = optionPathConverter.convertToPlatformLocation(name, null, null); + if(path != null) + name = path.toString(); + } + entry = (ICLanguageSettingEntry)CDataUtil.createEntry(kind, name, null, null, flags); + break; + + } + return entry; + } + + private String createOptionValue(UserEntryInfo info){ + if(info.fOptionValue != null) + return info.fOptionValue; + + return entryValueToOption(info.fEntry); + } + + private String entryValueToOption(ICLanguageSettingEntry entry){ + if(entry.getKind() == ICLanguageSettingEntry.MACRO && entry.getValue().length() > 0){ + return new StringBuffer(entry.getName()).append('=').append(entry.getValue()).toString(); + } else if(entry instanceof ICLanguageSettingPathEntry){ + ICLanguageSettingPathEntry pathEntry = (ICLanguageSettingPathEntry)entry; + if(pathEntry.isValueWorkspacePath()){ + return ManagedBuildManager.fullPathToLocation(pathEntry.getValue()); + } + } + return entry.getName(); + } + + + public static String[] macroNameValueFromValue(String value){ + String nv[] = new String[2]; + int index = value.indexOf('='); + if(index > 0){ + nv[0] = value.substring(0, index); + nv[1] = value.substring(index + 1); + } else { + nv[0] = value; + nv[1] = ""; + } + return nv; + } + + private static Object[] optionPathValueToEntry(String value){ + String wspPath = ManagedBuildManager.locationToFullPath(value); + if(wspPath != null) + return new Object[]{wspPath, Boolean.valueOf(true)}; + return new Object[]{value, Boolean.valueOf(false)}; + } + + private void setUserEntries(UserEntryInfo[] entries){ + int kind = getKind(); + IOption options[] = fLangData.getOptionsForKind(kind); + if(options.length != 0){ + IOption option = options[0]; + String optValue[] = new String[entries.length]; + if(entries.length != 0){ + for(int i = 0; i < entries.length; i++){ + optValue[i] = createOptionValue(entries[i]); + } + } + + ITool tool = fLangData.getTool(); + IResourceInfo rcInfo = tool.getParentResourceInfo(); + IOption newOption = ManagedBuildManager.setOption(rcInfo, tool, option, optValue); + options = fLangData.getOptionsForKind(kind); + for(int i = 0; i < options.length; i++){ + if(options[i] != newOption) + ManagedBuildManager.setOption(rcInfo, tool, option, new String[0]); + } + } + } + + private void setUserUndefinedStringSet(Set set){ + int kind = getKind(); + IOption[] options = fLangData.getUndefOptionsForKind(kind); + if(options.length != 0){ + if(set != null && set.size() == 0) + set = null; + + String[] optValue = set != null ? (String[])set.toArray(new String[set.size()]) : new String[0]; + IOption option = options[0]; + ITool tool = fLangData.getTool(); + IResourceInfo rcInfo = tool.getParentResourceInfo(); + IOption newOption = ManagedBuildManager.setOption(rcInfo, tool, option, optValue); + options = fLangData.getUndefOptionsForKind(kind); + for(int i = 0; i < options.length; i++){ + if(options[i] != newOption) + ManagedBuildManager.setOption(rcInfo, tool, option, new String[0]); + } + + } + + } + + void optionsChanged(){ + } +} diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/BuildLanguageData.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/BuildLanguageData.java index c1b1c25d5a2..1332ccc1421 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/BuildLanguageData.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/BuildLanguageData.java @@ -15,9 +15,7 @@ import java.util.Arrays; import java.util.List; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; -import org.eclipse.cdt.core.settings.model.ICSettingBase; import org.eclipse.cdt.core.settings.model.extension.CLanguageData; -import org.eclipse.cdt.core.settings.model.extension.CResourceData; import org.eclipse.cdt.core.settings.model.util.CDataUtil; import org.eclipse.cdt.core.settings.model.util.IKindBasedInfo; import org.eclipse.cdt.core.settings.model.util.KindBasedStore; @@ -33,7 +31,6 @@ import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.internal.core.FolderInfo; import org.eclipse.cdt.managedbuilder.internal.core.InputType; import org.eclipse.cdt.managedbuilder.internal.core.ResourceConfiguration; -import org.eclipse.cdt.managedbuilder.internal.dataprovider.ProfileInfoProvider.DiscoveredEntry; public class BuildLanguageData extends CLanguageData { private ITool fTool; @@ -43,7 +40,7 @@ public class BuildLanguageData extends CLanguageData { private static final IOption[] EMPTY_OPTION_ARRAY = new IOption[0]; private boolean fOptionStoreInited; // private Map fKindToEntryArrayMap = new HashMap(); - private ProfileInfoProvider fDiscoveredInfo; +// private ProfileInfoProvider fDiscoveredInfo; private KindBasedStore fKindToEntryStore = new KindBasedStore(); private String fId; @@ -68,32 +65,32 @@ public class BuildLanguageData extends CLanguageData { fId = new StringBuffer(fTool.getId()).append(".").append("languagedata").toString(); //$NON-NLS-1$ //$NON-NLS-2$ } - fDiscoveredInfo = new ProfileInfoProvider(this); +// fDiscoveredInfo = new ProfileInfoProvider(this); } private void obtainEditableInputType(){ if(fInputType != null){ - IInputType old = fInputType; +// IInputType old = fInputType; fInputType = fTool.getEdtableInputType(fInputType); - if(old != fInputType){ - fDiscoveredInfo.checkUpdateInputType(fInputType); - } +// if(old != fInputType){ +// fDiscoveredInfo.checkUpdateInputType(fInputType); +// } } } public void setEntries(int kind, ICLanguageSettingEntry entries[]) { - EntryStorage storage = getEntryStorage(kind); + BuildEntryStorage storage = getEntryStorage(kind); if(storage != null) storage.setEntries(entries); } - private EntryStorage getEntryStorage(int kind){ + private BuildEntryStorage getEntryStorage(int kind){ if(getOptionsForKind(kind).length == 0 && isToolChainDiscoveryProfile()) return null; - EntryStorage starage = (EntryStorage)fKindToEntryStore.get(kind); + BuildEntryStorage starage = (BuildEntryStorage)fKindToEntryStore.get(kind); if(starage == null){ - starage = new EntryStorage(kind, this); + starage = new BuildEntryStorage(kind, this); fKindToEntryStore.put(kind, starage); } return starage; @@ -101,7 +98,7 @@ public class BuildLanguageData extends CLanguageData { private void notifyOptionsChangeForKind(int kind){ fOptionStoreInited = false; - EntryStorage storage = getEntryStorage(kind); + BuildEntryStorage storage = getEntryStorage(kind); if(storage != null) storage.optionsChanged(); } @@ -115,9 +112,9 @@ public class BuildLanguageData extends CLanguageData { notifyOptionsChangeForKind(kind); } - private ProfileInfoProvider getDiscoveredInfoProvider(){ - return fDiscoveredInfo; - } +// private ProfileInfoProvider getDiscoveredInfoProvider(){ +// return fDiscoveredInfo; +// } /* private String getOptionValueFromEntry(ICLanguageSettingEntry entry){ String optValue = entry.getName(); @@ -138,27 +135,27 @@ public class BuildLanguageData extends CLanguageData { List list = new ArrayList(); if((kinds & ICLanguageSettingEntry.INCLUDE_PATH) != 0) { - EntryStorage storage = getEntryStorage(ICLanguageSettingEntry.INCLUDE_PATH); + BuildEntryStorage storage = getEntryStorage(ICLanguageSettingEntry.INCLUDE_PATH); if(storage != null) storage.getEntries(list); } else if((kinds & ICLanguageSettingEntry.INCLUDE_FILE) != 0) { - EntryStorage storage = getEntryStorage(ICLanguageSettingEntry.INCLUDE_FILE); + BuildEntryStorage storage = getEntryStorage(ICLanguageSettingEntry.INCLUDE_FILE); if(storage != null) storage.getEntries(list); } else if((kinds & ICLanguageSettingEntry.MACRO) != 0) { - EntryStorage storage = getEntryStorage(ICLanguageSettingEntry.MACRO); + BuildEntryStorage storage = getEntryStorage(ICLanguageSettingEntry.MACRO); if(storage != null) storage.getEntries(list); } else if((kinds & ICLanguageSettingEntry.MACRO_FILE) != 0) { - EntryStorage storage = getEntryStorage(ICLanguageSettingEntry.MACRO_FILE); + BuildEntryStorage storage = getEntryStorage(ICLanguageSettingEntry.MACRO_FILE); if(storage != null) storage.getEntries(list); } else if((kinds & ICLanguageSettingEntry.LIBRARY_PATH) != 0) { - EntryStorage storage = getEntryStorage(ICLanguageSettingEntry.LIBRARY_PATH); + BuildEntryStorage storage = getEntryStorage(ICLanguageSettingEntry.LIBRARY_PATH); if(storage != null) storage.getEntries(list); } else if((kinds & ICLanguageSettingEntry.LIBRARY_FILE) != 0) { - EntryStorage storage = getEntryStorage(ICLanguageSettingEntry.LIBRARY_FILE); + BuildEntryStorage storage = getEntryStorage(ICLanguageSettingEntry.LIBRARY_FILE); if(storage != null) storage.getEntries(list); } @@ -180,124 +177,7 @@ public class BuildLanguageData extends CLanguageData { public String[] getSourceExtensions() { return fInputType != null ? fInputType.getSourceExtensions(fTool) : fTool.getPrimaryInputExtensions(); } -/* - private List getUserEntryValues(int kind){ - IOption options[] = getOptionsForKind(kind); - List valueList = new ArrayList(); - for(int i = 0; i < options.length; i++){ - IOption option = options[i]; - List value = (List)option.getValue(); - valueList.addAll(value); - } - return valueList; - } -*/ - DiscoveredEntry[] getDiscoveredEntryValues(int kind){ - return getDiscoveredInfoProvider().getEntryValues(kind); - } -/* - private List addLanguageEntries(int kind, List list){ - ICLanguageSettingEntry entries[] = getLanguageEntries(kind); - for(int i = 0; i < entries.length; i++){ - list.add(entries[i]); - } - return list; - } - private ICLanguageSettingEntry[] getLanguageEntries(int kind){ - Integer iKind = new Integer(kind); - ICLanguageSettingEntry[] entries = (ICLanguageSettingEntry[])fKindToEntryArrayMap.get(iKind); - if(entries == null){ - entries = calculateLanguageEntries(kind); - fKindToEntryArrayMap.put(iKind, entries); - } - return entries; - } - - private ICLanguageSettingEntry[] calculateLanguageEntries(int kind){ - List discoveredList = fDiscoveredInfo.getEntryValues(kind); - List optionValueList = getUserEntryValues(kind); - List entryList = new ArrayList(); - if(discoveredList != null && optionValueList != null){ - Set set = new HashSet(); - if(optionValueList != null) - processValues(kind, optionValueList, false, entryList, set); - if(discoveredList != null) - processValues(kind, discoveredList, true, entryList, set); - } - return (ICLanguageSettingEntry[])entryList.toArray(new ICLanguageSettingEntry[entryList.size()]); - } - - private List processValues(int kind, List valuesList, boolean discovered, List entriesList, Set processedValuesSet){ - for(Iterator iter = valuesList.iterator(); iter.hasNext();){ - String value = (String)iter.next(); - if(processedValuesSet.add(value)){ - ICLanguageSettingEntry entry = createEntry(kind, value, discovered); - if(entry != null) - entriesList.add(entry); - } - } - return entriesList; - } - - private ICLanguageSettingEntry createEntry(int kind, String value, boolean discovered){ - ICLanguageSettingEntry entry = null; - switch (kind){ - case ICLanguageSettingEntry.INCLUDE_PATH: - entry = new CIncludePathEntry(value, discovered ? ICLanguageSettingEntry.BUILTIN | ICLanguageSettingEntry.READONLY : 0); - break; - case ICLanguageSettingEntry.MACRO: - int index = value.indexOf('='); - String macroName; - String macroValue; - if(index > 0){ - macroName = value.substring(index); - macroValue = value.substring(index + 1, value.length()); - } else { - macroName = value; - macroValue = EMPTY_STRING; - } - entry = new CMacroEntry(macroName, macroValue, discovered ? ICLanguageSettingEntry.BUILTIN | ICLanguageSettingEntry.READONLY : 0); - break; - case ICLanguageSettingEntry.INCLUDE_FILE: - entry = new CIncludeFileEntry(value, discovered ? ICLanguageSettingEntry.BUILTIN | ICLanguageSettingEntry.READONLY : 0); - break; - case ICLanguageSettingEntry.MACRO_FILE: - entry = new CMacroFileEntry(value, discovered ? ICLanguageSettingEntry.BUILTIN | ICLanguageSettingEntry.READONLY : 0); - break; - case ICLanguageSettingEntry.LIBRARY_PATH: - entry = new CLibraryPathEntry(value, discovered ? ICLanguageSettingEntry.BUILTIN | ICLanguageSettingEntry.READONLY : 0); - break; - case ICLanguageSettingEntry.LIBRARY_FILE: - entry = new CLibraryFileEntry(value, discovered ? ICLanguageSettingEntry.BUILTIN | ICLanguageSettingEntry.READONLY : 0); - break; - } - return entry; - - } - - private String optionPathToEntryValue(String path, boolean discovered) { - //TODO: - String result = path; - if (path != null) { - IOptionPathConverter optionPathConverter = fTool.getOptionPathConverter(); - if (null!=optionPathConverter) { - IPath platformPath = optionPathConverter.convertToPlatformLocation(path, null, null); - if(platformPath != null) - result = platformPath.toString(); - } else { - - } - } - return result; - } - - - private String toEntryPathValue(String path, boolean discovered){ - //TODO: - return path; - } -*/ public int getSupportedEntryKinds() { KindBasedStore store = getKindToOptionArrayStore(); IKindBasedInfo infos[] = store.getContents(); diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/EntryInfo.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/EntryInfo.java deleted file mode 100644 index 61cdb6059ae..00000000000 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/EntryInfo.java +++ /dev/null @@ -1,105 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 Intel Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Intel Corporation - Initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.managedbuilder.internal.dataprovider; - -import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; -import org.eclipse.cdt.core.settings.model.util.EntryNameKey; - -public class EntryInfo { - private ICLanguageSettingEntry fEntry; - private EntryNameKey fNameKey; -// private IOption fOption; -// private String fEnvVarName; -// private int fPosition; - private boolean fIsDiscovered; - private boolean fIsOverRidden; - - EntryInfo(ICLanguageSettingEntry entry){ - fEntry = entry; - } - -/* EntryInfo(ICLanguageSettingEntry entry, boolean discovered, boolean isOverridden){ - fEntry = entry; - fIsDiscovered = discovered; - fIsOverRidden = isOverridden; - } -*/ - public EntryNameKey getNameKey(){ - if(fNameKey == null){ - fNameKey = new EntryNameKey(fEntry); - } - return fNameKey; - } - -/* EntryInfo(ICLanguageSettingEntry entry, boolean discovered, IOption option, int position){ - fEntry = entry; - fIsDiscovered = discovered; - fOption = option; - fPosition = position; - } - - EntryInfo(ICLanguageSettingEntry entry, boolean discovered, String envVarName, int position){ - fEntry = entry; - fIsDiscovered = discovered; - fEnvVarName = envVarName; - fPosition = position; - } -*/ -/* public void setOptionInfo(IOption option, int pos){ - fOption = option; - fPosition = pos; - } -*/ - public void makeOverridden(boolean overrridden){ -/* fOption = null; - fEnvVarName = null; - fPosition = 0; -*/ - fIsOverRidden = overrridden; - - } - -/* public void setEnvironmentInfo(String envVarName, int pos){ - fEnvVarName = envVarName; - fPosition = pos; - } -*/ - public ICLanguageSettingEntry getEntry(){ - return fEntry; - } - - public boolean isDiscovered(){ - return fIsDiscovered; - } - - public boolean isOverridden(){ -// return fOption != null || fEnvVarName != null; - return fIsOverRidden; - } - - public boolean isUndefined(){ - //TODO - return false; - } - -/* public IOption getOption(){ - return fOption; - } -*/ -/* public String getEnvVarName(){ - return fEnvVarName; - } -*/ -/* public int getPosition(){ - return fPosition; - } -*/ -} diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/EntryListMap.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/EntryListMap.java deleted file mode 100644 index 9ae08394a9a..00000000000 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/EntryListMap.java +++ /dev/null @@ -1,88 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 Intel Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Intel Corporation - Initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.managedbuilder.internal.dataprovider; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; -import org.eclipse.cdt.core.settings.model.util.EntryNameKey; - -public class EntryListMap { - private HashMap fMap = new HashMap(); - private ArrayList fList = new ArrayList(); - - public EntryInfo getEntryInfo(ICLanguageSettingEntry entry){ - return (EntryInfo)fMap.get(new EntryNameKey(entry)); - } - - public void addEntryInfo(EntryInfo info){ - EntryNameKey key = info.getNameKey(); - EntryInfo old = (EntryInfo)fMap.remove(key); - if(old != null) - fList.remove(old); - fMap.put(key, info); - fList.add(info); - } - - public Map getEntryInfoMap(){ - return (Map)fMap.clone(); - } - - public List getEntryInfoList(){ - return (List)fList.clone(); - } - - private class EntryIterator implements Iterator{ - Iterator fIter; - Object fCurrent; - EntryIterator (Iterator iter){ - fIter = iter; - } - public boolean hasNext() { - return fIter.hasNext(); - } - - public Object next() { - return fCurrent = fIter.next(); - } - - public void remove() { - fMap.remove(((EntryInfo)fCurrent).getNameKey()); - fIter.remove(); - } - - } - - public Iterator getIterator(){ - return new EntryIterator(fList.iterator()); - } - - public EntryInfo[] getEntries(){ - return (EntryInfo[])fList.toArray(new EntryInfo[fList.size()]); - } - - public void clear(){ - fMap.clear(); - fList.clear(); - } - - public int getSize(){ - return fList.size(); - } - - public EntryInfo getEntryInfo(int i){ - return (EntryInfo)fList.get(i); - } -} diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/EntryStorage.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/EntryStorage.java deleted file mode 100644 index 01617800e5c..00000000000 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/EntryStorage.java +++ /dev/null @@ -1,501 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 Intel Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Intel Corporation - Initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.managedbuilder.internal.dataprovider; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.eclipse.cdt.core.settings.model.CIncludeFileEntry; -import org.eclipse.cdt.core.settings.model.CIncludePathEntry; -import org.eclipse.cdt.core.settings.model.CLibraryFileEntry; -import org.eclipse.cdt.core.settings.model.CLibraryPathEntry; -import org.eclipse.cdt.core.settings.model.CMacroEntry; -import org.eclipse.cdt.core.settings.model.CMacroFileEntry; -import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; -import org.eclipse.cdt.core.settings.model.ICLanguageSettingPathEntry; -import org.eclipse.cdt.core.settings.model.ICSettingEntry; -import org.eclipse.cdt.managedbuilder.core.IEnvVarBuildPath; -import org.eclipse.cdt.managedbuilder.core.IOption; -import org.eclipse.cdt.managedbuilder.core.IResourceInfo; -import org.eclipse.cdt.managedbuilder.core.ITool; -import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; -import org.eclipse.cdt.managedbuilder.envvar.IEnvironmentVariableProvider; -import org.eclipse.cdt.managedbuilder.internal.dataprovider.ProfileInfoProvider.DiscoveredEntry; -import org.eclipse.cdt.managedbuilder.internal.dataprovider.SettingsSet.SettingLevel; - - -public class EntryStorage { - private int fKind; -// private SettingsSet fSettings; -// private EntryListMap fDiscoveredEntries = new EntryListMap(); -// private EntryListMap fUserEntries = new EntryListMap(); -// private ICLanguageSettingEntry fEntries[]; - private BuildLanguageData fLangData; -// private boolean fCacheInited; -// private boolean fUserValuesInited; - - private static final String EMPTY_STRING = new String(); - - public EntryStorage(int kind, BuildLanguageData lData){ - fKind = kind; - fLangData = lData; - } - - public int getKind(){ - return fKind; - } - - void optionsChanged(){ -// fUserValuesInited = false; - } - - public List getEntries(List list){ - SettingsSet settings = initCache(); - if(list == null) - list = new ArrayList(); - - ICLanguageSettingEntry entries[] = settings.getEntries(); - list.addAll(Arrays.asList(entries)); -// for(Iterator iter = fUserEntries.getIterator(); iter.hasNext();){ -// EntryInfo info = (EntryInfo)iter.next(); -//// if(!info.isOverridden()) -// list.add(info.getEntry()); -// } -// for(Iterator iter = fDiscoveredEntries.getIterator(); iter.hasNext();){ -// EntryInfo info = (EntryInfo)iter.next(); -// if(!info.isOverridden()) -// list.add(info.getEntry()); -// } - return list; - } - - private void resetDefaults(){ - resetCache(); - - IOption options[] = fLangData.getOptionsForKind(fKind); - ITool tool = fLangData.getTool(); - for(int i = 0; i < options.length; i++){ - IOption option = options[i]; - if(option.getParent() == tool){ - tool.removeOption(option); - } - } - - options = fLangData.getUndefOptionsForKind(fKind); - for(int i = 0; i < options.length; i++){ - IOption option = options[i]; - if(option.getParent() == tool){ - tool.removeOption(option); - } - } - } - - private void resetCache(){ -// fCacheInited = false; - } - - public void setEntries(ICLanguageSettingEntry entries[]){ - if(entries == null){ - resetDefaults(); - return; - } - SettingsSet settings = initCache(); - - settings.applyEntries(entries); -// ArrayList userList = new ArrayList(); -// Map discoveredMap = fDiscoveredEntries.getEntryInfoMap(); -// boolean discoveredReadOnly = isDiscoveredEntriesReadOnly(); -// -// for(int i = 0; i < entries.length; i++){ -// ICLanguageSettingEntry entry = entries[i]; -// EntryInfo info = (EntryInfo)discoveredMap.remove(new EntryNameKey(entry)); -// if(info == null || info.isOverridden() || !discoveredReadOnly){ -// if(info != null){ -// info.makeOverridden(true); -// } -// ICLanguageSettingEntry usrEntry = createEntry(entry, false); -// userList.add(usrEntry); -// } -// } - -// for(Iterator iter = discoveredMap.values().iterator(); iter.hasNext();){ -// EntryInfo info = (EntryInfo)iter.next(); -// info.makeOverridden(false); -// } - - SettingLevel level = settings.getLevels()[0]; - IOption options[] = fLangData.getOptionsForKind(fKind); - if(options.length != 0){ - ICLanguageSettingEntry usrEntries[] = level.getEntries(); - IOption option = options[0]; - String optValue[] = new String[usrEntries.length]; - if(usrEntries.length != 0){ - for(int i = 0; i < usrEntries.length; i++){ - ICLanguageSettingEntry entry = usrEntries[i]; - optValue[i] = entryValueToOption(entry); - } - } - - ITool tool = fLangData.getTool(); - IResourceInfo rcInfo = tool.getParentResourceInfo(); - IOption newOption = ManagedBuildManager.setOption(rcInfo, tool, option, optValue); - options = fLangData.getOptionsForKind(fKind); - for(int i = 0; i < options.length; i++){ - if(options[i] != newOption) - ManagedBuildManager.setOption(rcInfo, tool, option, new String[0]); - } - } - - options = fLangData.getUndefOptionsForKind(fKind); - if(options.length != 0){ - Set set = level.containsOverrideInfo() ? level.getOverrideSet() : null; - String[] optValue = set != null ? (String[])set.toArray(new String[set.size()]) : new String[0]; - IOption option = options[0]; - ITool tool = fLangData.getTool(); - IResourceInfo rcInfo = tool.getParentResourceInfo(); - IOption newOption = ManagedBuildManager.setOption(rcInfo, tool, option, optValue); - options = fLangData.getUndefOptionsForKind(fKind); - for(int i = 0; i < options.length; i++){ - if(options[i] != newOption) - ManagedBuildManager.setOption(rcInfo, tool, option, new String[0]); - } - - } - } - - private SettingsSet initCache(){ -// if(fCacheInited){ -// if(!fUserValuesInited){ -// for(Iterator iter = fDiscoveredEntries.getIterator(); iter.hasNext();){ -// EntryInfo info = (EntryInfo)iter.next(); -// info.makeOverridden(false); -// } -// initUserValues(); -// fUserValuesInited = true; -// } -// -// } else { - SettingsSet settings = createEmptySettings(); - SettingLevel levels[] = settings.getLevels(); -// fCacheInited = true; - DiscoveredEntry[] dEntries = fLangData.getDiscoveredEntryValues(fKind); - addEntries(levels[2], dEntries); - - dEntries = getDiscoveredEnvironmentEntries(); - addEntries(levels[1], dEntries); - - dEntries = getUserDiscoveredEntries(); - addEntries(levels[0], dEntries); - levels[0].fOverrideSet = getUserUndefinedStringSet(); - - settings.adjustOverrideState(); - - return settings; -//// fDiscoveredEntries.clear(); -// boolean readOnly = isDiscoveredEntriesReadOnly(); -// if(dEntries.length != 0){ -// SettingLevel level = levels[2]; -// for(int i = 0; i < dEntries.length; i++){ -// DiscoveredEntry dEntry = dEntries[i]; -// ICLanguageSettingEntry entry = createEntry(dEntry, true, readOnly); -// level.addEntry(entry); -//// EntryInfo info = new EntryInfo(entry, true, false); -//// fDiscoveredEntries.addEntryInfo(info); -// } -// } -// initUserValues(); -// fUserValuesInited = true; -// } - } - - private void addEntries(SettingLevel level, DiscoveredEntry dEntries[]){ - if(dEntries.length != 0){ - for(int i = 0; i < dEntries.length; i++){ - DiscoveredEntry dEntry = dEntries[i]; - ICLanguageSettingEntry entry = createEntry(dEntry); - level.addEntry(entry); - } - } - } - - private DiscoveredEntry[] getDiscoveredEnvironmentEntries(){ - String paths[] = null; - switch(fKind){ - case ICLanguageSettingEntry.INCLUDE_PATH:{ - IEnvironmentVariableProvider provider = ManagedBuildManager.getEnvironmentVariableProvider(); - paths = provider.getBuildPaths(fLangData.getConfiguration(), IEnvVarBuildPath.BUILDPATH_INCLUDE); - } - break; - case ICLanguageSettingEntry.LIBRARY_PATH:{ - IEnvironmentVariableProvider provider = ManagedBuildManager.getEnvironmentVariableProvider(); - paths = provider.getBuildPaths(fLangData.getConfiguration(), IEnvVarBuildPath.BUILDPATH_LIBRARY); - } - break; - } - - if(paths != null && paths.length != 0){ - DiscoveredEntry entries[] = new DiscoveredEntry[paths.length]; - for(int i = 0; i < paths.length; i++){ - entries[i] = new DiscoveredEntry(paths[i]); - } - - return entries; - } - return new DiscoveredEntry[0]; - } - - private SettingsSet createEmptySettings(){ - SettingsSet settings = new SettingsSet(3); - SettingLevel levels[] = settings.getLevels(); - - boolean override = isDiscoveredEntriesOverridable(); - int readOnlyFlag = override ? 0 : ICSettingEntry.READONLY; - levels[0].setFlagsToClear(ICSettingEntry.READONLY | ICSettingEntry.BUILTIN); - levels[0].setFlagsToSet(0); - levels[0].setReadOnly(false); - levels[0].setOverrideSupported(override); - - levels[1].setFlagsToClear(ICSettingEntry.BUILTIN); - levels[1].setFlagsToSet(readOnlyFlag | ICSettingEntry.RESOLVED); - levels[1].setReadOnly(true); - levels[1].setOverrideSupported(false); - - levels[2].setFlagsToClear(0); - levels[2].setFlagsToSet(readOnlyFlag | ICSettingEntry.BUILTIN | ICSettingEntry.RESOLVED); - levels[2].setReadOnly(true); - levels[2].setOverrideSupported(false); - - return settings; - } - - private boolean isDiscoveredEntriesOverridable(){ -// if(!needUndef()) -// return false; - - return fLangData.getUndefOptionsForKind(fKind).length != 0; - } - -// private boolean needUndef(){ -// return fKind != ICLanguageSettingEntry.MACRO; -// } - -// private void initUserValues(){ -// IOption options[] = fLangData.getOptionsForKind(fKind); -// fUserEntries.clear(); -// if(options.length > 0){ -// for(int i = 0; i < options.length; i++){ -// IOption option = options[i]; -// List list = (List)option.getValue(); -// int size = list.size(); -// if(size > 0){ -// for(int j = 0; j < size; j++){ -// String value = (String)list.get(j); -// if(value.indexOf('"') == 0 && value.lastIndexOf('"') == value.length() - 1 && value.length() != 1){ -// value = value.substring(1, value.length() - 1); -// } -// ICLanguageSettingEntry entry = createEntry(discoveredEntryFromString(value), false, false); -// EntryInfo discoveredInfo = fDiscoveredEntries.getEntryInfo(entry); -// if(discoveredInfo != null){ -//// discoveredInfo.setOptionInfo(option, j); -// discoveredInfo.makeOverridden(true); -// } -// EntryInfo userInfo = new EntryInfo(entry, false, true); -// fUserEntries.addEntryInfo(userInfo); -// } -// } -// -// } -// } -// } - - private HashSet getUserUndefinedStringSet(){ - HashSet set = null; - IOption options[] = fLangData.getUndefOptionsForKind(fKind); - if(options.length > 0){ - for(int i = 0; i < options.length; i++){ - IOption option = options[i]; - List list = (List)option.getValue(); - if(list.size() != 0){ - if(set == null) - set = new HashSet(); - set.addAll(list); - } - } - } - return set; - } - private DiscoveredEntry[] getUserDiscoveredEntries(){ - IOption options[] = fLangData.getOptionsForKind(fKind); - if(options.length > 0){ - List entryList = new ArrayList(); - for(int i = 0; i < options.length; i++){ - IOption option = options[i]; - List list = (List)option.getValue(); - int size = list.size(); - if(size > 0){ - for(int j = 0; j < size; j++){ - String value = (String)list.get(j); - if(value.indexOf('"') == 0 && value.lastIndexOf('"') == value.length() - 1 && value.length() != 1){ - value = value.substring(1, value.length() - 1); - } - entryList.add(discoveredEntryFromString(value)); - } - } - } - - return (DiscoveredEntry[])entryList.toArray(new DiscoveredEntry[entryList.size()]); - } - return new DiscoveredEntry[0]; - } - - private DiscoveredEntry discoveredEntryFromString(String str){ - if(fKind == ICLanguageSettingEntry.MACRO){ - String nv[] = macroNameValueFromValue(str); - return new DiscoveredEntry(nv[0], nv[1]); - } - return new DiscoveredEntry(str); - } - -/* private List processValues(List valuesList, boolean discovered, List entriesList){ - for(Iterator iter = valuesList.iterator(); iter.hasNext();){ - String value = (String)iter.next(); - ICLanguageSettingEntry entry = createEntry(value, discovered); - if(entry != null) - entriesList.add(entry); - } - return entriesList; - } -*/ - private ICLanguageSettingEntry createEntry(DiscoveredEntry dEntry/*, boolean discovered, boolean readOnly*/){ - ICLanguageSettingEntry entry = null; - int flags = 0;//discovered ? ICLanguageSettingEntry.BUILTIN | ICLanguageSettingEntry.READONLY : 0; - Object v[]; - String value = dEntry.getValue(); - String name = dEntry.getName(); - switch (fKind){ - case ICLanguageSettingEntry.INCLUDE_PATH: - v = optionPathValueToEntry(value); - value = (String)v[0]; - if(((Boolean)v[1]).booleanValue()) - flags |= ICLanguageSettingEntry.VALUE_WORKSPACE_PATH; - entry = new CIncludePathEntry(value, flags); - break; - case ICLanguageSettingEntry.MACRO: - //String nv[] = macroNameValueFromValue(value); - - entry = new CMacroEntry(name, value, flags); - break; - case ICLanguageSettingEntry.INCLUDE_FILE: - v = optionPathValueToEntry(value); - value = (String)v[0]; - if(((Boolean)v[1]).booleanValue()) - flags |= ICLanguageSettingEntry.VALUE_WORKSPACE_PATH; - entry = new CIncludeFileEntry(value, flags); - break; - case ICLanguageSettingEntry.MACRO_FILE: - v = optionPathValueToEntry(value); - value = (String)v[0]; - if(((Boolean)v[1]).booleanValue()) - flags |= ICLanguageSettingEntry.VALUE_WORKSPACE_PATH; - entry = new CMacroFileEntry(value, flags); - break; - case ICLanguageSettingEntry.LIBRARY_PATH: - v = optionPathValueToEntry(value); - value = (String)v[0]; - if(((Boolean)v[1]).booleanValue()) - flags |= ICLanguageSettingEntry.VALUE_WORKSPACE_PATH; - entry = new CLibraryPathEntry(value, flags); - break; - case ICLanguageSettingEntry.LIBRARY_FILE: - v = optionPathValueToEntry(value); - value = (String)v[0]; - if(((Boolean)v[1]).booleanValue()) - flags |= ICLanguageSettingEntry.VALUE_WORKSPACE_PATH; - entry = new CLibraryFileEntry(value, flags); - break; - } - return entry; - - } - - private ICLanguageSettingEntry createEntry(ICLanguageSettingEntry entry, boolean discovered){ - //ICLanguageSettingEntry entry = null; - int flags = entry.getFlags(); - if(discovered) - flags |= ICLanguageSettingEntry.BUILTIN | ICLanguageSettingEntry.READONLY; - - switch (fKind){ - case ICLanguageSettingEntry.INCLUDE_PATH: - entry = new CIncludePathEntry(entry.getName(), flags); - break; - case ICLanguageSettingEntry.MACRO: - entry = new CMacroEntry(entry.getName(), entry.getValue(), flags); - break; - case ICLanguageSettingEntry.INCLUDE_FILE: - entry = new CIncludeFileEntry(entry.getName(), flags); - break; - case ICLanguageSettingEntry.MACRO_FILE: - entry = new CMacroFileEntry(entry.getName(), flags); - break; - case ICLanguageSettingEntry.LIBRARY_PATH: - entry = new CLibraryPathEntry(entry.getName(), flags); - break; - case ICLanguageSettingEntry.LIBRARY_FILE: - entry = new CLibraryFileEntry(entry.getName(), flags); - break; - } - return entry; - - } - - public static String[] macroNameValueFromValue(String value){ - String nv[] = new String[2]; - int index = value.indexOf('='); - if(index > 0){ - nv[0] = value.substring(0, index); - nv[1] = value.substring(index + 1); - } else { - nv[0] = value; - nv[1] = EMPTY_STRING; - } - return nv; - } - - private String nameFromValue(String value){ - if(fKind != ICLanguageSettingEntry.MACRO){ - return value; - } - return macroNameValueFromValue(value)[0]; - } - - private String entryValueToOption(ICLanguageSettingEntry entry){ - if(entry.getKind() == ICLanguageSettingEntry.MACRO && entry.getValue().length() > 0){ - return new StringBuffer(entry.getName()).append('=').append(entry.getValue()).toString(); - } else if(entry instanceof ICLanguageSettingPathEntry){ - ICLanguageSettingPathEntry pathEntry = (ICLanguageSettingPathEntry)entry; - if(pathEntry.isValueWorkspacePath()){ - return ManagedBuildManager.fullPathToLocation(pathEntry.getValue()); - } - } - return entry.getName(); - } - - private Object[] optionPathValueToEntry(String value){ - String wspPath = ManagedBuildManager.locationToFullPath(value); - if(wspPath != null) - return new Object[]{wspPath, Boolean.valueOf(true)}; - return new Object[]{value, Boolean.valueOf(false)}; - } - -} diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/ProfileInfoProvider.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/ProfileInfoProvider.java index c936c3e91a2..9d57dbff061 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/ProfileInfoProvider.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/ProfileInfoProvider.java @@ -17,8 +17,8 @@ import java.util.Map; import org.eclipse.cdt.build.core.scannerconfig.CfgInfoContext; import org.eclipse.cdt.build.internal.core.scannerconfig.CfgDiscoveredPathManager; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; +import org.eclipse.cdt.core.settings.model.util.CDataUtil; import org.eclipse.cdt.make.core.scannerconfig.PathInfo; -import org.eclipse.cdt.managedbuilder.core.IInputType; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin; import org.eclipse.core.resources.IProject; @@ -27,228 +27,116 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; public class ProfileInfoProvider { - static class DiscoveredEntry { - private String fName; - private String fValue; - - public DiscoveredEntry(IPath path){ - fName = path.toString(); - fValue = fName; - } - - public DiscoveredEntry(String name){ - fName = name; - fValue = fName; - } - - public DiscoveredEntry(String name, String value){ - fName = name; - fValue = value; - } - - public String getName(){ - return fName; - } - - public String getValue(){ - return fValue; - } - } - - private BuildLanguageData fLlanguageData; -// private String fProfileId; -// private IScannerInfoCollector fCollector; -// private boolean fDataCollected; -// private IProject fProject; -// private IResource fResource; -// private IPath fRcPath; - private IProject fProject; - private CfgInfoContext fContext; + private static ProfileInfoProvider fInstance; +// private BuildLanguageData fLlanguageData; +// private IProject fProject; +// private CfgInfoContext fContext; private CfgDiscoveredPathManager fMngr; - public ProfileInfoProvider(BuildLanguageData lData){ - fLlanguageData = lData; - IResourceInfo rcInfo = lData.getTool().getParentResourceInfo(); - fContext = new CfgInfoContext(rcInfo, lData.getTool(), lData.getInputType()); + private ProfileInfoProvider(){ +// fLlanguageData = lData; +// IResourceInfo rcInfo = lData.getTool().getParentResourceInfo(); +// fContext = new CfgInfoContext(rcInfo, lData.getTool(), lData.getInputType()); fMngr = CfgDiscoveredPathManager.getInstance(); - IResource rc = rcInfo.getParent().getOwner(); - fProject = rc != null ? rc.getProject() : null; - -// clear(); +// IResource rc = rcInfo.getParent().getOwner(); +// fProject = rc != null ? rc.getProject() : null; } - void checkUpdateInputType(IInputType inType){ - if(inType != fContext.getInputType()){ -// IResourceInfo rcInfo = fContext.getResourceInfo(); -// if(rcInfo == null){ -// rcInfo = fContext.getConfiguration().getRootFolderInfo(); -// } - fContext = new CfgInfoContext(fContext.getResourceInfo(), fContext.getTool(), inType); - } + public static ProfileInfoProvider getInstance(){ + if(fInstance == null) + fInstance = new ProfileInfoProvider(); + return fInstance; } -// public void clear(){ -// fDataCollected = false; -// } -// -// private void invoke(){ -// if(fDataCollected) -// return; -// fDataCollected = true; -// -// fProfileId = fLlanguageData.getDiscoveryProfileId(); -// -// if (fProfileId != null){ -// -// SCProfileInstance profileInstance = null; -// IResourceInfo rcInfo = fLlanguageData.getTool().getParentResourceInfo(); -// fProject = rcInfo.getParent().getOwner().getProject(); -// fRcPath = rcInfo.getPath(); -// fResource = fProject.findMember(fRcPath); -// -// if(fResource != null){ -// //FIXME: -// InfoContext context = ScannerConfigUtil.createContextForProject(fProject); -// profileInstance = ScannerConfigProfileManager.getInstance(). -// getSCProfileInstance(fProject, context, fProfileId); -// fCollector = profileInstance.createScannerInfoCollector(); -// -// // synchronized(this) { -// if (fCollector != null) { -// if(fCollector instanceof IManagedScannerInfoCollector) -// ((IManagedScannerInfoCollector)fCollector).setProject(fProject); -// calculateEntriesDynamically(fProject, profileInstance, fCollector); -// } -// // } -// } +// void checkUpdateInputType(IInputType inType){ +// if(inType != fContext.getInputType()){ +// fContext = new CfgInfoContext(fContext.getResourceInfo(), fContext.getTool(), inType); // } // } -// - public DiscoveredEntry[] getEntryValues(int kind){ -// ScannerInfoTypes type = kindToType(kind); -// if(type != null){ - if(fProject != null){ + + public ICLanguageSettingEntry[] getEntryValues(BuildLanguageData lData, int kind, int flags){ + IResourceInfo rcInfo = lData.getTool().getParentResourceInfo(); + IResource rc = rcInfo.getParent().getOwner(); + IProject project = rc != null ? rc.getProject() : null; + + if(project != null){ try { - PathInfo info = fMngr.getDiscoveredInfo(fProject, fContext); + CfgInfoContext context = new CfgInfoContext(rcInfo, lData.getTool(), lData.getInputType()); + PathInfo info = fMngr.getDiscoveredInfo(project, context); if(info != null){ - return entriesForKind(info, kind); + return entriesForKind(kind, flags, info); } } catch (CoreException e) { ManagedBuilderCorePlugin.log(e); } } -// } - return new DiscoveredEntry[0]; + return new ICLanguageSettingEntry[0]; } -// private ScannerInfoTypes kindToType(int kind){ -// switch (kind) { -// case ICLanguageSettingEntry.INCLUDE_PATH: -// return ScannerInfoTypes.INCLUDE_PATHS; -// case ICLanguageSettingEntry.MACRO: -// return ScannerInfoTypes.SYMBOL_DEFINITIONS; -// } -// return null; -// } - - private DiscoveredEntry[] entriesForKind(PathInfo info, int kind){ + private ICLanguageSettingEntry[] entriesForKind(int kind, int flags, PathInfo info){ switch (kind) { case ICLanguageSettingEntry.INCLUDE_PATH: - DiscoveredEntry[] incPaths = calculateEntries(info.getIncludePaths()); + ICLanguageSettingEntry[] incPaths = calculateEntries(kind, flags, info.getIncludePaths()); IPath[] quotedPaths = info.getQuoteIncludePaths(); if(quotedPaths.length != 0){ if(incPaths.length != 0){ - DiscoveredEntry quotedEntries[] = calculateEntries(quotedPaths); - DiscoveredEntry[] tmp = new DiscoveredEntry[incPaths.length + quotedEntries.length]; + ICLanguageSettingEntry quotedEntries[] = calculateEntries(kind, flags, quotedPaths); + ICLanguageSettingEntry[] tmp = new ICLanguageSettingEntry[incPaths.length + quotedEntries.length]; System.arraycopy(incPaths, 0, tmp, 0, incPaths.length); System.arraycopy(quotedEntries, 0, tmp, incPaths.length, quotedEntries.length); incPaths = tmp; } else { - incPaths = calculateEntries(quotedPaths); + incPaths = calculateEntries(kind, flags, quotedPaths); } } return incPaths; case ICLanguageSettingEntry.MACRO: - return calculateEntries(info.getSymbols()); + return calculateEntries(kind, flags, info.getSymbols()); case ICLanguageSettingEntry.MACRO_FILE: - return calculateEntries(info.getMacroFiles()); + return calculateEntries(kind, flags, info.getMacroFiles()); case ICLanguageSettingEntry.INCLUDE_FILE: - return calculateEntries(info.getIncludeFiles()); + return calculateEntries(kind, flags, info.getIncludeFiles()); } - return new DiscoveredEntry[0]; + return new ICLanguageSettingEntry[0]; } - private DiscoveredEntry[] calculateEntries(Map map){ - DiscoveredEntry entries[] = new DiscoveredEntry[map.size()]; + private ICLanguageSettingEntry[] calculateEntries(int kind, int flags, Map map){ + ICLanguageSettingEntry entries[] = new ICLanguageSettingEntry[map.size()]; int num = 0; for(Iterator iter = map.entrySet().iterator(); iter.hasNext();){ Map.Entry entry = (Map.Entry)iter.next(); String name = (String)entry.getKey(); String value = (String)entry.getValue(); - entries[num++] = new DiscoveredEntry(name, value); + entries[num++] = (ICLanguageSettingEntry)CDataUtil.createEntry(kind, name, value, null, flags); } return entries; } - private DiscoveredEntry[] calculateEntries(String[] values){ - DiscoveredEntry entries[] = new DiscoveredEntry[values.length]; + private ICLanguageSettingEntry[] calculateEntries(int kind, int flags, String[] values){ + ICLanguageSettingEntry entries[] = new ICLanguageSettingEntry[values.length]; for(int i = 0; i < values.length; i++){ String name = values[i]; - entries[i] = new DiscoveredEntry(name); + entries[i] = (ICLanguageSettingEntry)CDataUtil.createEntry(kind, name, null, null, flags); } return entries; } - private DiscoveredEntry[] calculateEntries(IPath[] values){ - DiscoveredEntry entries[] = new DiscoveredEntry[values.length]; + private ICLanguageSettingEntry[] calculateEntries(int kind, int flags, IPath[] values){ + ICLanguageSettingEntry entries[] = new ICLanguageSettingEntry[values.length]; for(int i = 0; i < values.length; i++){ String name = values[i].toString(); - entries[i] = new DiscoveredEntry(name); + entries[i] = (ICLanguageSettingEntry)CDataUtil.createEntry(kind, name, null, null, flags); } return entries; } - private DiscoveredEntry[] calculateEntries(List list){ - DiscoveredEntry entries[] = new DiscoveredEntry[list.size()]; + private ICLanguageSettingEntry[] calculateEntries(int kind, int flags, List list){ + ICLanguageSettingEntry entries[] = new ICLanguageSettingEntry[list.size()]; int num = 0; for(Iterator iter = list.iterator(); iter.hasNext();){ String name = (String)iter.next(); - entries[num++] = new DiscoveredEntry(name); + entries[num++] = (ICLanguageSettingEntry)CDataUtil.createEntry(kind, name, null, null, flags); } return entries; } - -// -// private void calculateEntriesDynamically(final IProject project, -// SCProfileInstance profileInstance, -// final IScannerInfoCollector collector) { -// // TODO Get the provider from the toolchain specification -// -// final IScannerConfigBuilderInfo2 buildInfo = ScannerConfigProfileManager. -// createScannerConfigBuildInfo2(ManagedBuilderCorePlugin.getDefault().getPluginPreferences(), -// profileInstance.getProfile().getId(), false); -// List providerIds = buildInfo.getProviderIdList(); -// for (Iterator i = providerIds.iterator(); i.hasNext(); ) { -// final String providerId = (String) i.next(); -// final IExternalScannerInfoProvider esiProvider = profileInstance.createExternalScannerInfoProvider(providerId); -// -// // Set the arguments for the provider -// -// ISafeRunnable runnable = new ISafeRunnable() { -// public void run() { -// IProgressMonitor monitor = new NullProgressMonitor(); -// esiProvider.invokeProvider(monitor, project, providerId, buildInfo, collector); -// } -// -// public void handleException(Throwable exception) { -// if (exception instanceof OperationCanceledException) { -// throw (OperationCanceledException) exception; -// } -// } -// }; -// Platform.run(runnable); -// } -// } -// -// } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/SettingsSet.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/SettingsSet.java deleted file mode 100644 index fd78666e92c..00000000000 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/SettingsSet.java +++ /dev/null @@ -1,274 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 Intel Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Intel Corporation - Initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.managedbuilder.internal.dataprovider; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; -import org.eclipse.cdt.core.settings.model.util.CDataUtil; -import org.eclipse.cdt.core.settings.model.util.EntryNameKey; - -public class SettingsSet { - public static final int READ_ONLY = 1; - public static final int WRITABLE = 1 << 1; - - private SettingLevel[] fLevels; - public class SettingLevel { - private int fFlagsToSet; - private int fFlagsToClear; - private boolean fIsReadOnly; - private boolean fIsOverrideSupported; - private EntryListMap fEntries; - HashSet fOverrideSet; - - private SettingLevel(){ - fEntries = new EntryListMap(); - } - - public boolean isReadOnly(){ - return fIsReadOnly; - } - - public void setReadOnly(boolean readOnly){ - fIsReadOnly = readOnly; - } - - public boolean isOverrideSupported(){ - return fIsOverrideSupported; - } - - public void setOverrideSupported(boolean supported){ - fIsOverrideSupported = supported; - } - - public void setFlagsToSet(int flags){ - fFlagsToSet = flags; - } - - public boolean containsOverrideInfo(){ - return fOverrideSet != null; - } - - public void setFlagsToClear(int flags){ - fFlagsToClear = flags; - } - - public int getFlagsToSet(){ - return fFlagsToSet; - } - - public int getFlagsToClear(){ - return fFlagsToClear; - } - - public Set getOverrideSet(){ - if(fOverrideSet != null) - return (HashSet)fOverrideSet.clone(); - return new HashSet(); - } - - public void addEntry(ICLanguageSettingEntry entry){ - entry = CDataUtil.createEntry(entry, fFlagsToSet, fFlagsToClear); - fEntries.addEntryInfo(new EntryInfo(entry)); - } - - public void addOverrideName(String name){ - if(fOverrideSet == null) - fOverrideSet = new HashSet(); - - fOverrideSet.add(name); - } - - public void removeOverrideName(String name){ - if(fOverrideSet == null) - return; - - fOverrideSet.remove(name); - - if(fOverrideSet.size() == 0) - fOverrideSet = null; - } - - public void clear(){ - fEntries.clear(); - fOverrideSet = null; - } - - EntryInfo[] getInfos(){ - return fEntries.getEntries(); - } - - public ICLanguageSettingEntry[] getEntries(){ - List list = new ArrayList(); - EntryInfo infos[] = getInfos(); - for(int i = 0; i < infos.length; i++){ - if(!infos[i].isOverridden()) - list.add(infos[i].getEntry()); - } - - return (ICLanguageSettingEntry[])list.toArray(new ICLanguageSettingEntry[list.size()]); - } - } - - public SettingsSet(int num){ - fLevels = new SettingLevel[num]; - for(int i = 0; i < num; i++){ - fLevels[i] = new SettingLevel(); - } - } - - public SettingLevel[] getLevels(){ - return (SettingLevel[])fLevels.clone(); - } - - public void adjustOverrideState(){ - int dNum = getDefaultLevelNum(); - SettingLevel dLevel = fLevels[dNum]; - - - Set set = dLevel.isOverrideSupported() ? dLevel.getOverrideSet() : new HashSet(); - for(int i = 0; i < fLevels.length; i++){ - adjustOverrideState(fLevels[i], set); - } - } - - private void adjustOverrideState(SettingLevel level, Set overridenSet){ - EntryInfo[] infos = level.getInfos(); - EntryInfo info; - for(int i = 0; i < infos.length; i++){ - info = infos[i]; - if(overridenSet.add(info.getEntry().getName())){ - info.makeOverridden(false); - } else { - info.makeOverridden(true); - } - } - } - - public ICLanguageSettingEntry[] getEntries(){ - return getEntries(READ_ONLY | WRITABLE); - } - - public ICLanguageSettingEntry[] getEntries(int types){ - adjustOverrideState(); - List entries = new ArrayList(); - for(int i = 0; i < fLevels.length; i++){ - if(isCompatible(fLevels[i], types)) - getEntries(fLevels[i], entries); - } - - return (ICLanguageSettingEntry[])entries.toArray(new ICLanguageSettingEntry[entries.size()]); - } - - private void getEntries(SettingLevel level, List list){ - EntryInfo[] infos = level.getInfos(); - EntryInfo info; - for(int i = 0; i < infos.length; i++){ - info = infos[i]; - if(!info.isOverridden()) - list.add(info.getEntry()); - } - } - - private boolean isCompatible(SettingLevel level, int types){ - if((types & READ_ONLY) == 0 && level.isReadOnly()) - return false; - if((types & WRITABLE) == 0 && !level.isReadOnly()) - return false; - - return true; - } - - private int getDefaultLevelNum(){ - for(int i = 0; i = 0){ level = fLevels[levelNum]; - if(!level.isReadOnly()) - level.addEntry(entry); + if(!level.isReadOnly()){ + Map clearedInfo = clearedInfos[levelNum]; + Object customInfo = null; + if(clearedInfo != null){ + EntryInfo info = (EntryInfo)clearedInfo.get(key); + if(info != null && entry.equalsByContents(info.getEntry())) + customInfo = info.getCustomInfo(); + } + level.addEntry(entry, customInfo); + } } } int overrideLevel = getOverrideLevelNum(); - if(overrideLevel > 0){ + if(overrideLevel >= 0){ level = fLevels[overrideLevel]; if(level.isOverrideSupported() && !mapCopy.isEmpty()){ String str;