1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-24 09:25:31 +02:00

Bug 205257 - CDTProject creation scalability issue

This commit is contained in:
Chris Recoskie 2011-03-24 17:11:35 +00:00
parent 4ab1f9b72f
commit e923b9a3c9
36 changed files with 719 additions and 478 deletions

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007, 2010 Intel Corporation and others.
* Copyright (c) 2007, 2011 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
@ -7,6 +7,7 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.make.core.scannerconfig;
@ -14,6 +15,7 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
@ -40,11 +42,32 @@ public final class PathInfo {
IPath[] macroFiles){
fIncludePaths = includePaths != null && includePaths.length != 0 ? (IPath[])includePaths.clone() : EMPTY_PATH_ARRAY;
fQuoteIncludePaths = quoteIncludePaths != null && quoteIncludePaths.length != 0 ? (IPath[])quoteIncludePaths.clone() : EMPTY_PATH_ARRAY;
fSymbols = symbols != null && symbols.size() != 0 ? new HashMap<String, String>(symbols) : new HashMap<String, String>(0);
fSymbols = symbols != null && symbols.size() != 0 ? getInternedHashMap(symbols) : new HashMap<String, String>(0);
fIncludeFiles = includeFiles != null && includeFiles.length != 0 ? (IPath[])includeFiles.clone() : EMPTY_PATH_ARRAY;
fMacroFiles = macroFiles != null && macroFiles.length != 0 ? (IPath[])macroFiles.clone() : EMPTY_PATH_ARRAY;
}
/**
* Returns a new HashMap whereby all the strings used as keys and values are interned.
*
* @param oldMap
* @return HashMap<String, String>
*/
protected HashMap<String, String> getInternedHashMap(Map<String, String> oldMap) {
if(oldMap == null)
return null;
if(oldMap.isEmpty())
return new HashMap<String, String>(oldMap);
HashMap<String, String> newMap = new HashMap<String, String>(oldMap.size());
for(String key : oldMap.keySet()) {
newMap.put(SafeStringInterner.safeIntern(key), SafeStringInterner.safeIntern(oldMap.get(key)));
}
return newMap;
}
/**
* Get include paths
*/

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2004, 2010 QNX Software Systems and others.
* Copyright (c) 2004, 2011 QNX Software Systems 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
@ -7,6 +7,7 @@
*
* Contributors:
* QNX Software Systems - initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.make.internal.core.scannerconfig;
@ -17,6 +18,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredScannerInfoSerializable;
import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IPerProjectDiscoveredPathInfo;
import org.eclipse.cdt.make.internal.core.scannerconfig.util.SymbolEntry;
@ -73,7 +75,7 @@ public class DiscoveredPathInfo implements IPerProjectDiscoveredPathInfo, IDisco
}
public synchronized void setIncludeMap(LinkedHashMap<String, Boolean> paths) {
discoveredPaths = new LinkedHashMap<String, Boolean>(paths);
discoveredPaths = SafeStringInterner.safeIntern(new LinkedHashMap<String, Boolean>(paths));
activePaths = null;
}
@ -98,7 +100,7 @@ public class DiscoveredPathInfo implements IPerProjectDiscoveredPathInfo, IDisco
}
public synchronized void setSymbolMap(LinkedHashMap<String, SymbolEntry> symbols) {
discoveredSymbols = new LinkedHashMap<String, SymbolEntry>(symbols);
discoveredSymbols = SafeStringInterner.safeIntern(new LinkedHashMap<String, SymbolEntry>(symbols));
activeSymbols = null;
}
@ -109,7 +111,7 @@ public class DiscoveredPathInfo implements IPerProjectDiscoveredPathInfo, IDisco
Map<String, String> aSymbols = getActiveSymbolsMap();
aSymbols.clear();
aSymbols.putAll(ScannerConfigUtil.scSymbolEntryMap2Map(discoveredSymbols));
aSymbols.putAll(SafeStringInterner.safeIntern(ScannerConfigUtil.scSymbolEntryMap2Map(discoveredSymbols)));
}
private List<Path> getActivePathList() {
@ -178,10 +180,10 @@ public class DiscoveredPathInfo implements IPerProjectDiscoveredPathInfo, IDisco
while (child != null) {
if (child.getNodeName().equals(INCLUDE_PATH)) {
// Add the path to the property list
includes.put( ((Element)child).getAttribute(PATH), Boolean.valueOf( ((Element)child).getAttribute(REMOVED)));
includes.put( SafeStringInterner.safeIntern(((Element)child).getAttribute(PATH)), Boolean.valueOf( ((Element)child).getAttribute(REMOVED)));
} else if (child.getNodeName().equals(DEFINED_SYMBOL)) {
// Add the symbol to the symbol list
String symbol = ((Element)child).getAttribute(SYMBOL);
String symbol = SafeStringInterner.safeIntern(((Element)child).getAttribute(SYMBOL));
String removed = ((Element)child).getAttribute(REMOVED);
boolean bRemoved = (removed != null && removed.equals("true")); //$NON-NLS-1$
ScannerConfigUtil.scAddSymbolString2SymbolEntryMap(symbols, symbol, !bRemoved);

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2004, 2010 IBM Corporation and others.
* Copyright (c) 2004, 2011 IBM 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
@ -17,6 +17,7 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.internal.core.resources.ResourceLookup;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
@ -83,7 +84,7 @@ public class CCommandDSC {
{
String value = option.getValue();
value = CygpathTranslator.translateIncludePaths(project, Collections.singletonList(value)).get(0);
value = makeRelative(project, new Path(value)).toOSString();
value = SafeStringInterner.safeIntern(makeRelative(project, new Path(value)).toOSString());
option = new KVStringPair(option.getKey(), value);
}
compilerCommand.add(option);
@ -322,8 +323,8 @@ public class CCommandDSC {
NodeList optionList = descElem.getElementsByTagName(OPTION_ELEM);
for (int i = 0; i < optionList.getLength(); ++i) {
Element optionElem = (Element) optionList.item(i);
String key = optionElem.getAttribute(KEY_ATTR);
String value = optionElem.getAttribute(VALUE_ATTR);
String key = SafeStringInterner.safeIntern(optionElem.getAttribute(KEY_ATTR));
String value = SafeStringInterner.safeIntern(optionElem.getAttribute(VALUE_ATTR));
KVStringPair option = new KVStringPair(key, value);
addSCOption(option);
}
@ -340,14 +341,14 @@ public class CCommandDSC {
String quote = siItemElem.getAttribute(QUOTE_INCLUDE_ATTR);
if (kind.equals("INCLUDE_PATH")) { //$NON-NLS-1$
if (quote.equals("true")) { //$NON-NLS-1$
quoteIncludes.add(value);
quoteIncludes.add(SafeStringInterner.safeIntern(value));
}
else {
includes.add(value);
}
}
else if (kind.equals("SYMBOL_DEFINITION")) { //$NON-NLS-1$
symbols.add(value);
symbols.add(SafeStringInterner.safeIntern(value));
}
}
setDiscovered(true);
@ -365,13 +366,13 @@ public class CCommandDSC {
String key = optionPair.getKey();
String value = optionPair.getValue();
if (key.equals(SCDOptionsEnum.INCLUDE.toString()) || key.equals(SCDOptionsEnum.ISYSTEM.toString())) {
includes.add(value);
includes.add(SafeStringInterner.safeIntern(value));
}
else if (key.equals(SCDOptionsEnum.IQUOTE.toString())) {
quoteincludes.add(value);
quoteincludes.add(SafeStringInterner.safeIntern(value));
}
else if (key.equals(SCDOptionsEnum.DEFINE.toString())) {
symbols.add(value);
symbols.add(SafeStringInterner.safeIntern(value));
}
}
setIncludes(includes);
@ -411,7 +412,7 @@ public class CCommandDSC {
for (Iterator<String> iter=paths.iterator(); iter.hasNext(); ) {
String path = iter.next();
path = makeRelative(project, new Path(path)).toOSString();
list.add(path);
list.add(SafeStringInterner.safeIntern(path));
}
return list;
}
@ -429,7 +430,7 @@ public class CCommandDSC {
}
// path = new File(project.getLocation().toOSString(), path).getAbsolutePath();
}
return path;
return SafeStringInterner.safeIntern(path);
}
public static List<String> makeAbsolute(IProject project, List<String> paths) {
@ -437,7 +438,7 @@ public class CCommandDSC {
for (Iterator<String> iter=paths.iterator(); iter.hasNext(); ) {
String path = iter.next();
path = makeAbsolute(project, path);
list.add(path);
list.add(SafeStringInterner.safeIntern(path));
}
return list;
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2004, 2008 IBM Corporation and others.
* Copyright (c) 2004, 2011 IBM 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
@ -16,6 +16,8 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.cdt.internal.core.SafeStringInterner;
/**
* Represents a symbol definition with possible multiple values
@ -31,15 +33,15 @@ public class SymbolEntry {
private Map<String, Boolean> values; // Values can be either in the active (selected) group or in the removed group
public SymbolEntry(String name, String value, boolean active) {
this.name = name;
this.name = SafeStringInterner.safeIntern(name);
if (values == null) {
values = new LinkedHashMap<String, Boolean>(1);
}
values.put(value, Boolean.valueOf(active));
values.put(SafeStringInterner.safeIntern(value), Boolean.valueOf(active));
}
public boolean add(String value, boolean active) {
Boolean old= values.put(value, Boolean.valueOf(active));
Boolean old= values.put(SafeStringInterner.safeIntern(value), Boolean.valueOf(active));
return old == null || old.booleanValue() != active;
}
@ -125,6 +127,6 @@ public class SymbolEntry {
}
buffer.append('\n');
}
return buffer.toString();
return SafeStringInterner.safeIntern(buffer.toString());
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2004, 2010 IBM Corporation and others.
* Copyright (c) 2004, 2011 IBM 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
@ -25,6 +25,7 @@ import java.util.SortedSet;
import java.util.TreeSet;
import java.util.Map.Entry;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.make.core.MakeCorePlugin;
import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector3;
import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollectorCleaner;
@ -685,8 +686,8 @@ public class PerFileSICollector implements IScannerInfoCollector3, IScannerInfoC
List<String> symbols = cmd.getSymbols();
Map<String, String> definedSymbols = new HashMap<String, String>(symbols.size());
for (String symbol : symbols) {
String key = ScannerConfigUtil.getSymbolKey(symbol);
String value = ScannerConfigUtil.getSymbolValue(symbol);
String key = SafeStringInterner.safeIntern(ScannerConfigUtil.getSymbolKey(symbol));
String value = SafeStringInterner.safeIntern(ScannerConfigUtil.getSymbolValue(symbol));
definedSymbols.put(key, value);
}
return definedSymbols;
@ -903,8 +904,8 @@ public class PerFileSICollector implements IScannerInfoCollector3, IScannerInfoC
if (cmd.isDiscovered()) {
List<String> discovered = cmd.getSymbols();
for (String symbol : discovered) {
String key = ScannerConfigUtil.getSymbolKey(symbol);
String value = ScannerConfigUtil.getSymbolValue(symbol);
String key = SafeStringInterner.safeIntern(ScannerConfigUtil.getSymbolKey(symbol));
String value = SafeStringInterner.safeIntern(ScannerConfigUtil.getSymbolValue(symbol));
symbols.put(key, value);
}
}

View file

@ -26,6 +26,7 @@ import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.ICDescriptor;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.make.core.MakeCorePlugin;
import org.eclipse.cdt.make.core.scannerconfig.IScannerConfigBuilderInfo;
import org.eclipse.cdt.make.core.scannerconfig.IScannerConfigBuilderInfo2;
@ -510,6 +511,7 @@ public class ScannerConfigInfoFactory2 {
this.autoDiscoveryEnabled = base.autoDiscoveryEnabled;
this.problemReportingEnabled = base.problemReportingEnabled;
this.selectedProfile = ScannerConfigProfileManager.NULL_PROFILE_ID.equals(profileId) ? base.selectedProfile : profileId;
this.selectedProfile = SafeStringInterner.safeIntern(this.selectedProfile);
this.profileOptionsMap.putAll(base.profileOptionsMap);
for (Map.Entry<String, ProfileOptions> entry : profileOptionsMap.entrySet()) {
ProfileOptions basePo = entry.getValue();
@ -556,7 +558,7 @@ public class ScannerConfigInfoFactory2 {
* @see org.eclipse.cdt.make.core.scannerconfig.IScannerConfigBuilderInfo2#setSelectedProfileId(java.lang.String)
*/
public void setSelectedProfileId(String profileId) {
selectedProfile = setDirty(selectedProfile, profileId);
selectedProfile = SafeStringInterner.safeIntern(setDirty(selectedProfile, profileId));
// if (isDirty) {
// try {
// load();
@ -897,6 +899,7 @@ public class ScannerConfigInfoFactory2 {
selectedProfile = (profileId == ScannerConfigProfileManager.NULL_PROFILE_ID)
? sc.getAttribute(SELECTED_PROFILE_ID)
: profileId;
selectedProfile = SafeStringInterner.safeIntern(selectedProfile);
problemReportingEnabled = Boolean.valueOf(
sc.getAttribute(PROBLEM_REPORTING_ENABLED)).booleanValue();
performMigration = false;
@ -925,7 +928,7 @@ public class ScannerConfigInfoFactory2 {
autoDiscoveryEnabled = oldInfo.isAutoDiscoveryEnabled();
problemReportingEnabled = oldInfo.isSIProblemGenerationEnabled();
// effectively a PerProject profile
selectedProfile = profileId;
selectedProfile = SafeStringInterner.safeIntern(profileId);
ProfileOptions po = new ProfileOptions();
po.buildOutputFileActionEnabled = false;
@ -1171,10 +1174,11 @@ public class ScannerConfigInfoFactory2 {
selectedProfile = (ScannerConfigProfileManager.NULL_PROFILE_ID.equals(profileId)) ?
getString(prefix + SCANNER_CONFIG_SELECTED_PROFILE_ID_SUFFIX) :
profileId;
selectedProfile = SafeStringInterner.safeIntern(selectedProfile);
problemReportingEnabled = getBoolean(prefix + SCANNER_CONFIG_PROBLEM_REPORTING_ENABLED_SUFFIX);
if (ScannerConfigProfileManager.NULL_PROFILE_ID.equals(selectedProfile) && !useDefaults) {
// get the default value
selectedProfile = prefs.getDefaultString(prefix + SCANNER_CONFIG_SELECTED_PROFILE_ID_SUFFIX);
selectedProfile = SafeStringInterner.safeIntern(prefs.getDefaultString(prefix + SCANNER_CONFIG_SELECTED_PROFILE_ID_SUFFIX));
}
List<String> profileIds = ScannerConfigProfileManager.getInstance().getProfileIds(context);
profileOptionsMap = new LinkedHashMap<String, ProfileOptions>(profileIds.size());

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2004, 2010 IBM Corporation and others.
* Copyright (c) 2004, 2011 IBM 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
@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.cdt.make.internal.core.scannerconfig2;
import java.lang.ref.SoftReference;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@ -116,10 +117,12 @@ public final class ScannerConfigProfileManager {
synchronized (fLock) {
// is the project's profile already loaded?
Map<InfoContext, Object> map = getProfileMap(project, true);
SCProfileInstance profileInstance = (SCProfileInstance) map.get(context);
SoftReference<SCProfileInstance> profileInstanceReference = (SoftReference<SCProfileInstance>) map.get(context);
SCProfileInstance profileInstance = profileInstanceReference != null ? profileInstanceReference.get() : null;
if (profileInstance == null || !profileInstance.getProfile().getId().equals(profileId)) {
profileInstance = new SCProfileInstance(project, context, getSCProfileConfiguration(profileId));
map.put(context, profileInstance);
map.put(context, new SoftReference<SCProfileInstance>(profileInstance));
}
return profileInstance;
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2004, 2010 IBM Corporation and others.
* Copyright (c) 2004, 2011 IBM 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
@ -24,6 +24,7 @@ import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.IContainerEntry;
import org.eclipse.cdt.core.model.IPathEntry;
import org.eclipse.cdt.core.model.IPathEntryContainer;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.internal.ui.CPluginImages;
import org.eclipse.cdt.internal.ui.wizards.dialogfields.DialogField;
import org.eclipse.cdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
@ -232,7 +233,7 @@ public class DiscoveredPathContainerPage extends WizardPage implements IPathEntr
if (gChildren != null) {
for (int j = 0; j < gChildren.length; ++j) {
DiscoveredElement include = (DiscoveredElement) gChildren[j];
includes.put(include.getEntry(), Boolean.valueOf(include.isRemoved()));
includes.put(SafeStringInterner.safeIntern(include.getEntry()), Boolean.valueOf(include.isRemoved()));
}
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007, 2009 Intel Corporation and others.
* Copyright (c) 2007, 2011 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
@ -7,9 +7,11 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.build.internal.core.scannerconfig2;
import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
@ -56,7 +58,7 @@ public class CfgScannerConfigInfoFactory2 {
}
private static class CfgInfo implements ICfgScannerConfigBuilderInfo2Set {
private Configuration cfg;
private IScannerConfigBuilderInfo2Set fContainer;
private SoftReference<IScannerConfigBuilderInfo2Set> fContainer;
// private HashMap map;
CfgInfo(Configuration cfg){
@ -92,7 +94,8 @@ public class CfgScannerConfigInfoFactory2 {
}
private IScannerConfigBuilderInfo2Set getContainer() throws CoreException{
if(fContainer == null){
IScannerConfigBuilderInfo2Set container = fContainer != null ? fContainer.get() : null;
if(container == null){
if(!cfg.isPreference()){
ICConfigurationDescription cfgDes = ManagedBuildManager.getDescriptionForConfiguration(cfg);
if(cfgDes != null){
@ -100,24 +103,28 @@ public class CfgScannerConfigInfoFactory2 {
if(projDes != null){
ContainerInfo cInfo = (ContainerInfo)projDes.getSessionProperty(CONTAINER_INFO_PROPERTY);
if(cInfo != null && cInfo.matches(projDes)){
fContainer = cInfo.fContainer;
container = cInfo.fContainer;
} else {
fContainer = ScannerConfigProfileManager.createScannerConfigBuildInfo2Set(cfg.getOwner().getProject());
cInfo = new ContainerInfo(projDes, fContainer);
container = ScannerConfigProfileManager.createScannerConfigBuildInfo2Set(cfg.getOwner().getProject());
cInfo = new ContainerInfo(projDes, container);
projDes.setSessionProperty(CONTAINER_INFO_PROPERTY, cInfo);
}
}
}
if(fContainer == null){
fContainer = ScannerConfigProfileManager.createScannerConfigBuildInfo2Set(cfg.getOwner().getProject());
if(container == null){
container = ScannerConfigProfileManager.createScannerConfigBuildInfo2Set(cfg.getOwner().getProject());
}
} else {
Preferences prefs = MakeCorePlugin.getDefault().getPluginPreferences();
fContainer = ScannerConfigProfileManager.createScannerConfigBuildInfo2Set(prefs, false);
container = ScannerConfigProfileManager.createScannerConfigBuildInfo2Set(prefs, false);
}
}
return fContainer;
if(fContainer == null) {
fContainer = new SoftReference<IScannerConfigBuilderInfo2Set>(container);
}
return container;
}
private Map<CfgInfoContext, IScannerConfigBuilderInfo2> createMap(){
@ -326,7 +333,7 @@ public class CfgScannerConfigInfoFactory2 {
CfgInfo cfgInfo = new CfgInfo(cfg);
cfg.setCfgScannerConfigInfo(cfgInfo);
cfgInfo.getInfoMap();
cfgInfo.fContainer.save();
cfgInfo.getContainer().save();
des.setSessionProperty(CONTAINER_INFO_PROPERTY, null);
}
}
@ -334,7 +341,7 @@ public class CfgScannerConfigInfoFactory2 {
public static void savePreference(IConfiguration cfg) throws CoreException{
ICfgScannerConfigBuilderInfo2Set container = ((Configuration)cfg).getCfgScannerConfigInfo();
if(container != null){
IScannerConfigBuilderInfo2Set baseContainer = ((CfgInfo)container).fContainer;
IScannerConfigBuilderInfo2Set baseContainer = ((CfgInfo)container).getContainer();
if(baseContainer != null){
baseContainer.save();
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007, 2010 Intel Corporation and others.
* Copyright (c) 2007, 2011 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
@ -7,12 +7,14 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.core;
import org.eclipse.cdt.core.settings.model.ICLibraryFileEntry;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.internal.core.Option;
public final class OptionStringValue {
@ -46,10 +48,10 @@ public final class OptionStringValue {
} else {
isBuiltIn = false;
}
value = el.getAttribute(Option.LIST_ITEM_VALUE);
srcPath = el.getAttribute(ATTR_SRC_PATH);
srcRootPath = el.getAttribute(ATTR_SRC_ROOT_PATH);
srcPrefixMapping = el.getAttribute(ATTR_SRC_PREFIX_MAPPING);
value = SafeStringInterner.safeIntern(el.getAttribute(Option.LIST_ITEM_VALUE));
srcPath = SafeStringInterner.safeIntern(el.getAttribute(ATTR_SRC_PATH));
srcRootPath = SafeStringInterner.safeIntern(el.getAttribute(ATTR_SRC_ROOT_PATH));
srcPrefixMapping = SafeStringInterner.safeIntern(el.getAttribute(ATTR_SRC_PREFIX_MAPPING));
if(value == null)
value = Option.EMPTY_STRING;
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others.
* Copyright (c) 2007, 2011 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
@ -7,9 +7,11 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.buildproperties;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildProperty;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyType;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyValue;
@ -26,10 +28,10 @@ public class BuildProperty implements IBuildProperty{
int index = property.indexOf(BuildPropertyManager.PROPERTY_VALUE_SEPARATOR);
String type, value;
if(index != -1){
type = property.substring(0, index);
value = property.substring(index + 1);
type = SafeStringInterner.safeIntern(property.substring(0, index));
value = SafeStringInterner.safeIntern(property.substring(index + 1));
} else {
type = property;
type = SafeStringInterner.safeIntern(property);
value = null;
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2007 Intel Corporation and others.
* Copyright (c) 2005, 2011 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
@ -7,11 +7,13 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.core;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.core.IAdditionalInput;
import org.eclipse.cdt.managedbuilder.core.IInputType;
import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement;
@ -22,15 +24,15 @@ public class AdditionalInput implements IAdditionalInput {
// Superclass
// Parent and children
private IInputType parent;
private IInputType fParent;
// Managed Build model attributes
private String paths;
private Integer kind;
private String fPaths;
private Integer fKind;
// Miscellaneous
private boolean isExtensionAdditionalInput = false;
private boolean isDirty = false;
private boolean resolved = true;
private boolean rebuildState;
private boolean fIsExtensionAdditionalInput = false;
private boolean fIsDirty = false;
private boolean fResolved = true;
private boolean fRebuildState;
/*
* C O N S T R U C T O R S
@ -45,11 +47,11 @@ public class AdditionalInput implements IAdditionalInput {
* provider
*/
public AdditionalInput(IInputType parent, IManagedConfigElement element) {
this.parent = parent;
isExtensionAdditionalInput = true;
this.fParent = parent;
fIsExtensionAdditionalInput = true;
// setup for resolving
resolved = false;
fResolved = false;
loadFromManifest(element);
}
@ -62,8 +64,8 @@ public class AdditionalInput implements IAdditionalInput {
* @param isExtensionElement Indicates whether this is an extension element or a managed project element
*/
public AdditionalInput(InputType parent, boolean isExtensionElement) {
this.parent = parent;
isExtensionAdditionalInput = isExtensionElement;
this.fParent = parent;
fIsExtensionAdditionalInput = isExtensionElement;
if (!isExtensionElement) {
setDirty(true);
setRebuildState(true);
@ -78,8 +80,8 @@ public class AdditionalInput implements IAdditionalInput {
* @param element The XML element that contains the AdditionalInput settings.
*/
public AdditionalInput(IInputType parent, ICStorageElement element) {
this.parent = parent;
isExtensionAdditionalInput = false;
this.fParent = parent;
fIsExtensionAdditionalInput = false;
// Initialize from the XML attributes
loadFromProject(element);
@ -92,16 +94,16 @@ public class AdditionalInput implements IAdditionalInput {
* @param additionalInput The existing AdditionalInput to clone.
*/
public AdditionalInput(IInputType parent, AdditionalInput additionalInput) {
this.parent = parent;
isExtensionAdditionalInput = false;
this.fParent = parent;
fIsExtensionAdditionalInput = false;
// Copy the remaining attributes
if (additionalInput.paths != null) {
paths = new String(additionalInput.paths);
if (additionalInput.fPaths != null) {
fPaths = new String(additionalInput.fPaths);
}
if (additionalInput.kind != null) {
kind = new Integer(additionalInput.kind.intValue());
if (additionalInput.fKind != null) {
fKind = new Integer(additionalInput.fKind.intValue());
}
setDirty(true);
@ -121,16 +123,16 @@ public class AdditionalInput implements IAdditionalInput {
protected void loadFromManifest(IManagedConfigElement element) {
// path
paths = element.getAttribute(IAdditionalInput.PATHS);
fPaths = SafeStringInterner.safeIntern(element.getAttribute(IAdditionalInput.PATHS));
// kind
String kindStr = element.getAttribute(IAdditionalInput.KIND);
if (kindStr == null || kindStr.equals(ADDITIONAL_INPUT_DEPENDENCY)) {
kind = new Integer(KIND_ADDITIONAL_INPUT_DEPENDENCY);
fKind = new Integer(KIND_ADDITIONAL_INPUT_DEPENDENCY);
} else if (kindStr.equals(ADDITIONAL_INPUT)) {
kind = new Integer(KIND_ADDITIONAL_INPUT);
fKind = new Integer(KIND_ADDITIONAL_INPUT);
} else if (kindStr.equals(ADDITIONAL_DEPENDENCY)) {
kind = new Integer(KIND_ADDITIONAL_DEPENDENCY);
fKind = new Integer(KIND_ADDITIONAL_DEPENDENCY);
}
}
@ -144,18 +146,18 @@ public class AdditionalInput implements IAdditionalInput {
// path
if (element.getAttribute(IAdditionalInput.PATHS) != null) {
paths = element.getAttribute(IAdditionalInput.PATHS);
fPaths = SafeStringInterner.safeIntern(element.getAttribute(IAdditionalInput.PATHS));
}
// kind
if (element.getAttribute(IAdditionalInput.KIND) != null) {
String kindStr = element.getAttribute(IAdditionalInput.KIND);
if (kindStr == null || kindStr.equals(ADDITIONAL_INPUT_DEPENDENCY)) {
kind = new Integer(KIND_ADDITIONAL_INPUT_DEPENDENCY);
fKind = new Integer(KIND_ADDITIONAL_INPUT_DEPENDENCY);
} else if (kindStr.equals(ADDITIONAL_INPUT)) {
kind = new Integer(KIND_ADDITIONAL_INPUT);
fKind = new Integer(KIND_ADDITIONAL_INPUT);
} else if (kindStr.equals(ADDITIONAL_DEPENDENCY)) {
kind = new Integer(KIND_ADDITIONAL_DEPENDENCY);
fKind = new Integer(KIND_ADDITIONAL_DEPENDENCY);
}
}
}
@ -165,11 +167,11 @@ public class AdditionalInput implements IAdditionalInput {
*/
public void serialize(ICStorageElement element) {
if (paths != null) {
element.setAttribute(IAdditionalInput.PATHS, paths);
if (fPaths != null) {
element.setAttribute(IAdditionalInput.PATHS, fPaths);
}
if (kind != null) {
if (fKind != null) {
String str;
switch (getKind()) {
case KIND_ADDITIONAL_INPUT:
@ -189,7 +191,7 @@ public class AdditionalInput implements IAdditionalInput {
}
// I am clean now
isDirty = false;
fIsDirty = false;
}
/*
@ -200,7 +202,7 @@ public class AdditionalInput implements IAdditionalInput {
* @see org.eclipse.cdt.core.build.managed.IAdditionalInput#getParent()
*/
public IInputType getParent() {
return parent;
return fParent;
}
/*
@ -211,10 +213,10 @@ public class AdditionalInput implements IAdditionalInput {
* @see org.eclipse.cdt.core.build.managed.IAdditionalInput#getPaths()
*/
public String[] getPaths() {
if (paths == null) {
if (fPaths == null) {
return null;
}
String[] nameTokens = CDataUtil.stringToArray(paths, ";"); //$NON-NLS-1$
String[] nameTokens = CDataUtil.stringToArray(fPaths, ";"); //$NON-NLS-1$
return nameTokens;
}
@ -222,10 +224,10 @@ public class AdditionalInput implements IAdditionalInput {
* @see org.eclipse.cdt.core.build.managed.IAdditionalInput#setPaths()
*/
public void setPaths(String newPaths) {
if (paths == null && newPaths == null) return;
if (paths == null || newPaths == null || !(paths.equals(newPaths))) {
paths = newPaths;
isDirty = true;
if (fPaths == null && newPaths == null) return;
if (fPaths == null || newPaths == null || !(fPaths.equals(newPaths))) {
fPaths = newPaths;
fIsDirty = true;
setRebuildState(true);
}
}
@ -234,19 +236,19 @@ public class AdditionalInput implements IAdditionalInput {
* @see org.eclipse.cdt.core.build.managed.IAdditionalInput#getKind()
*/
public int getKind() {
if (kind == null) {
if (fKind == null) {
return KIND_ADDITIONAL_INPUT_DEPENDENCY;
}
return kind.intValue();
return fKind.intValue();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IAdditionalInput#setKind()
*/
public void setKind(int newKind) {
if (kind == null || !(kind.intValue() == newKind)) {
kind = new Integer(newKind);
isDirty = true;
if (fKind == null || !(fKind.intValue() == newKind)) {
fKind = new Integer(newKind);
fIsDirty = true;
setRebuildState(true);
}
}
@ -259,7 +261,7 @@ public class AdditionalInput implements IAdditionalInput {
* @see org.eclipse.cdt.managedbuilder.core.IAdditionalInput#isExtensionElement()
*/
public boolean isExtensionElement() {
return isExtensionAdditionalInput;
return fIsExtensionAdditionalInput;
}
/* (non-Javadoc)
@ -267,35 +269,35 @@ public class AdditionalInput implements IAdditionalInput {
*/
public boolean isDirty() {
// This shouldn't be called for an extension AdditionalInput
if (isExtensionAdditionalInput) return false;
return isDirty;
if (fIsExtensionAdditionalInput) return false;
return fIsDirty;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IAdditionalInput#setDirty(boolean)
*/
public void setDirty(boolean isDirty) {
this.isDirty = isDirty;
this.fIsDirty = isDirty;
}
/* (non-Javadoc)
* Resolve the element IDs to interface references
*/
public void resolveReferences() {
if (!resolved) {
resolved = true;
if (!fResolved) {
fResolved = true;
}
}
public boolean needsRebuild(){
return rebuildState;
return fRebuildState;
}
public void setRebuildState(boolean rebuild){
if(isExtensionElement() && rebuild)
return;
rebuildState = rebuild;
fRebuildState = rebuild;
}
}

View file

@ -7,6 +7,7 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
* James Blackburn (Broadcom Corp.)
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.core;
@ -38,6 +39,7 @@ import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.core.settings.model.extension.CBuildData;
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.cdt.core.settings.model.util.LanguageSettingEntriesSerializer;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.core.BuildException;
import org.eclipse.cdt.managedbuilder.core.ExternalBuildRunner;
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
@ -448,28 +450,30 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
ManagedBuildManager.putConfigElement(this, element);
// id
setId(element.getAttribute(IBuildObject.ID));
String idAttribute = SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.ID));;
setId(idAttribute);
// Get the name
setName(element.getAttribute(IBuildObject.NAME));
final String nameAttribute = SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.NAME));
setName(nameAttribute);
// Set the version after extracting from 'id' attribute
setVersion(getVersionFromId());
// superClass
superClassId = element.getAttribute(IProjectType.SUPERCLASS);
superClassId = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.SUPERCLASS));
// Get the unused children, if any
unusedChildren = element.getAttribute(IProjectType.UNUSED_CHILDREN);
unusedChildren = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.UNUSED_CHILDREN));
// Get the 'versionsSupported' attribute
versionsSupported = element.getAttribute(VERSIONS_SUPPORTED);
versionsSupported = SafeStringInterner.safeIntern(element.getAttribute(VERSIONS_SUPPORTED));
// Get the 'convertToId' attribute
convertToId = element.getAttribute(CONVERT_TO_ID);
convertToId = SafeStringInterner.safeIntern(element.getAttribute(CONVERT_TO_ID));
// get the 'variableFormat' attribute
builderVariablePattern = element.getAttribute(VARIABLE_FORMAT);
builderVariablePattern = SafeStringInterner.safeIntern(element.getAttribute(VARIABLE_FORMAT));
// get the 'isVariableCaseSensitive' attribute
String isCS = element.getAttribute(IS_VARIABLE_CASE_SENSITIVE);
@ -480,6 +484,8 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
String reservedNames = element.getAttribute(RESERVED_MACRO_NAMES);
if(reservedNames != null)
reservedMacroNames = reservedNames.split(","); //$NON-NLS-1$
reservedMacroNames = SafeStringInterner.safeIntern(reservedMacroNames);
// Get the reservedMacroNameSupplier configuration element
String reservedMacroNameSupplier = element.getAttribute(RESERVED_MACRO_NAME_SUPPLIER);
@ -495,20 +501,25 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
}
// command
command = element.getAttribute(IBuilder.COMMAND);
command = SafeStringInterner.safeIntern(element.getAttribute(IBuilder.COMMAND));
// arguments
args = element.getAttribute(IBuilder.ARGUMENTS);
args = SafeStringInterner.safeIntern(element.getAttribute(IBuilder.ARGUMENTS));
autoBuildTarget = SafeStringInterner.safeIntern(element.getAttribute(ATTRIBUTE_TARGET_AUTO));
autoBuildTarget = element.getAttribute(ATTRIBUTE_TARGET_AUTO);
String tmp = element.getAttribute(ATTRIBUTE_AUTO_ENABLED);
if(tmp != null)
autoBuildEnabled = Boolean.valueOf(tmp);
incrementalBuildTarget = element.getAttribute(ATTRIBUTE_TARGET_INCREMENTAL);
incrementalBuildTarget = SafeStringInterner.safeIntern(element.getAttribute(ATTRIBUTE_TARGET_INCREMENTAL));
tmp = element.getAttribute(ATTRIBUTE_AUTO_ENABLED);
if(tmp != null)
incrementalBuildEnabled = Boolean.valueOf(tmp);
cleanBuildTarget = element.getAttribute(ATTRIBUTE_TARGET_CLEAN);
cleanBuildTarget = SafeStringInterner.safeIntern(element.getAttribute(ATTRIBUTE_TARGET_CLEAN));
tmp = element.getAttribute(ATTRIBUTE_CLEAN_ENABLED);
if(tmp != null)
cleanBuildEnabled = Boolean.valueOf(tmp);
@ -522,8 +533,12 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
if(tmp != null)
supportsManagedBuild = Boolean.valueOf(tmp);
tmp = element.getAttribute(ATTRIBUTE_CUSTOMIZED_ERROR_PARSERS);
if(tmp != null)
customizedErrorParserIds = CDataUtil.stringToArray(tmp, ";"); //$NON-NLS-1$
customizedErrorParserIds = SafeStringInterner.safeIntern(customizedErrorParserIds);
tmp = element.getAttribute(ATTRIBUTE_ENVIRONMENT);
if(tmp != null)
customizedEnvironment = MapStorageElement.decodeMap(tmp);
@ -535,11 +550,14 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
if(tmp != null)
customBuildProperties = MapStorageElement.decodeMap(tmp);
ignoreErrCmd = element.getAttribute(ATTRIBUTE_IGNORE_ERR_CMD);
ignoreErrCmd = SafeStringInterner.safeIntern(element.getAttribute(ATTRIBUTE_IGNORE_ERR_CMD));
tmp = element.getAttribute(ATTRIBUTE_STOP_ON_ERR);
if(tmp != null)
stopOnErr = Boolean.valueOf(tmp);
parallelBuildCmd = element.getAttribute(ATTRIBUTE_PARALLEL_BUILD_CMD);
parallelBuildCmd = SafeStringInterner.safeIntern(element.getAttribute(ATTRIBUTE_PARALLEL_BUILD_CMD));
tmp = element.getAttribute(ATTRIBUTE_PARALLELIZATION_NUMBER);
if(tmp != null){
try {
@ -552,7 +570,7 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
parallelBuildOn = Boolean.valueOf(tmp);
// Get the semicolon separated list of IDs of the error parsers
errorParserIds = element.getAttribute(IToolChain.ERROR_PARSERS);
errorParserIds = SafeStringInterner.safeIntern(element.getAttribute(IToolChain.ERROR_PARSERS));
// Store the configuration element IFF there is a build file generator defined
String buildfileGenerator = element.getAttribute(BUILDFILEGEN_ID);
@ -609,12 +627,13 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
protected void loadFromProject(ICStorageElement element) {
// id
// note: IDs are unique so no benefit to intern them
if(element.getAttribute(IBuildObject.ID) != null)
setId(element.getAttribute(IBuildObject.ID));
// name
if (element.getAttribute(IBuildObject.NAME) != null) {
setName(element.getAttribute(IBuildObject.NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.NAME)));
}
// Set the version after extracting from 'id' attribute
@ -622,7 +641,7 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
// superClass
if(element.getAttribute(IProjectType.SUPERCLASS) != null){
superClassId = element.getAttribute(IProjectType.SUPERCLASS);
superClassId = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.SUPERCLASS));
if (superClassId != null && superClassId.length() > 0) {
superClass = ManagedBuildManager.getExtensionBuilder(superClassId);
// Check for migration support
@ -632,17 +651,17 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
// Get the 'versionSupported' attribute
if (element.getAttribute(VERSIONS_SUPPORTED) != null) {
versionsSupported = element.getAttribute(VERSIONS_SUPPORTED);
versionsSupported = SafeStringInterner.safeIntern(element.getAttribute(VERSIONS_SUPPORTED));
}
// Get the 'convertToId' id
if (element.getAttribute(CONVERT_TO_ID) != null) {
convertToId = element.getAttribute(CONVERT_TO_ID);
convertToId = SafeStringInterner.safeIntern(element.getAttribute(CONVERT_TO_ID));
}
// Get the unused children, if any
if (element.getAttribute(IProjectType.UNUSED_CHILDREN) != null) {
unusedChildren = element.getAttribute(IProjectType.UNUSED_CHILDREN);
unusedChildren = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.UNUSED_CHILDREN));
}
// isAbstract
@ -655,30 +674,30 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
// command
if (element.getAttribute(IBuilder.COMMAND) != null) {
command = element.getAttribute(IBuilder.COMMAND);
command = SafeStringInterner.safeIntern(element.getAttribute(IBuilder.COMMAND));
}
// arguments
if (element.getAttribute(IBuilder.ARGUMENTS) != null) {
args = element.getAttribute(IBuilder.ARGUMENTS);
args = SafeStringInterner.safeIntern(element.getAttribute(IBuilder.ARGUMENTS));
}
if(element.getAttribute(ATTRIBUTE_TARGET_AUTO) != null)
autoBuildTarget = element.getAttribute(ATTRIBUTE_TARGET_AUTO);
autoBuildTarget = SafeStringInterner.safeIntern(element.getAttribute(ATTRIBUTE_TARGET_AUTO));
String tmp = element.getAttribute(ATTRIBUTE_AUTO_ENABLED);
if(tmp != null)
autoBuildEnabled = Boolean.valueOf(tmp);
if(element.getAttribute(ATTRIBUTE_TARGET_INCREMENTAL) != null)
incrementalBuildTarget = element.getAttribute(ATTRIBUTE_TARGET_INCREMENTAL);
incrementalBuildTarget = SafeStringInterner.safeIntern(element.getAttribute(ATTRIBUTE_TARGET_INCREMENTAL));
tmp = element.getAttribute(ATTRIBUTE_INCREMENTAL_ENABLED);
if(tmp != null)
incrementalBuildEnabled = Boolean.valueOf(tmp);
if(element.getAttribute(ATTRIBUTE_TARGET_CLEAN) != null)
cleanBuildTarget = element.getAttribute(ATTRIBUTE_TARGET_CLEAN);
cleanBuildTarget = SafeStringInterner.safeIntern(element.getAttribute(ATTRIBUTE_TARGET_CLEAN));
tmp = element.getAttribute(ATTRIBUTE_CLEAN_ENABLED);
if(tmp != null)
@ -709,7 +728,7 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
appendEnvironment = Boolean.valueOf(tmp);
if(element.getAttribute(ATTRIBUTE_BUILD_PATH) != null)
buildPath = element.getAttribute(ATTRIBUTE_BUILD_PATH);
buildPath = SafeStringInterner.safeIntern(element.getAttribute(ATTRIBUTE_BUILD_PATH));
tmp = element.getAttribute(ATTRIBUTE_CUSTOM_PROPS);
if(tmp != null)
@ -717,7 +736,7 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
// Get the semicolon separated list of IDs of the error parsers
if (element.getAttribute(IToolChain.ERROR_PARSERS) != null) {
errorParserIds = element.getAttribute(IToolChain.ERROR_PARSERS);
errorParserIds = SafeStringInterner.safeIntern(element.getAttribute(IToolChain.ERROR_PARSERS));
}
// Note: build file generator cannot be specified in a project file because
@ -727,14 +746,14 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
}
if(element.getAttribute(ATTRIBUTE_IGNORE_ERR_CMD) != null)
ignoreErrCmd = element.getAttribute(ATTRIBUTE_IGNORE_ERR_CMD);
ignoreErrCmd = SafeStringInterner.safeIntern(element.getAttribute(ATTRIBUTE_IGNORE_ERR_CMD));
tmp = element.getAttribute(ATTRIBUTE_STOP_ON_ERR);
if(tmp != null)
stopOnErr = Boolean.valueOf(tmp);
if(element.getAttribute(ATTRIBUTE_PARALLEL_BUILD_CMD) != null)
parallelBuildCmd = element.getAttribute(ATTRIBUTE_PARALLEL_BUILD_CMD);
parallelBuildCmd = SafeStringInterner.safeIntern(element.getAttribute(ATTRIBUTE_PARALLEL_BUILD_CMD));
tmp = element.getAttribute(ATTRIBUTE_PARALLELIZATION_NUMBER);
if(tmp != null){

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2003, 2010 IBM Corporation and others.
* Copyright (c) 2003, 2011 IBM 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
@ -45,6 +45,7 @@ import org.eclipse.cdt.core.settings.model.extension.CConfigurationData;
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.cdt.core.settings.model.util.LanguageSettingEntriesSerializer;
import org.eclipse.cdt.core.settings.model.util.PathSettingsContainer;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildProperty;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyType;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyValue;
@ -254,11 +255,11 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
if(rootFolderInfo == null)
createRootFolderInfo();
String props = element.getAttribute(BUILD_PROPERTIES);
String props = SafeStringInterner.safeIntern(element.getAttribute(BUILD_PROPERTIES));
if(props != null)
buildProperties = new BuildObjectProperties(props, this, this);
String artType = element.getAttribute(BUILD_ARTEFACT_TYPE);
String artType = SafeStringInterner.safeIntern(element.getAttribute(BUILD_ARTEFACT_TYPE));
if(artType != null){
if(buildProperties == null)
buildProperties = new BuildObjectProperties(this, this);
@ -761,40 +762,41 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
ManagedBuildManager.putConfigElement(this, element);
// id
setId(element.getAttribute(IConfiguration.ID));
setId(SafeStringInterner.safeIntern(element.getAttribute(IConfiguration.ID)));
// name
name = element.getAttribute(IConfiguration.NAME);
name = SafeStringInterner.safeIntern(element.getAttribute(IConfiguration.NAME));
// description
description = element.getAttribute(IConfiguration.DESCRIPTION);
description = SafeStringInterner.safeIntern(element.getAttribute(IConfiguration.DESCRIPTION));
// parent
parentId = element.getAttribute(IConfiguration.PARENT);
parentId = SafeStringInterner.safeIntern(element.getAttribute(IConfiguration.PARENT));
// if (parentID != null) {
// // Lookup the parent configuration by ID
// parent = ManagedBuildManager.getExtensionConfiguration(parentID);
// }
// Get the name of the build artifact associated with configuration
artifactName = element.getAttribute(ARTIFACT_NAME);
artifactName = SafeStringInterner.safeIntern(element.getAttribute(ARTIFACT_NAME));
// Get the semicolon separated list of IDs of the error parsers
errorParserIds = element.getAttribute(ERROR_PARSERS);
errorParserIds = SafeStringInterner.safeIntern(element.getAttribute(ERROR_PARSERS));
// Get the artifact extension
artifactExtension = element.getAttribute(EXTENSION);
artifactExtension = SafeStringInterner.safeIntern(element.getAttribute(EXTENSION));
// Get the clean command
cleanCommand = element.getAttribute(CLEAN_COMMAND);
cleanCommand = SafeStringInterner.safeIntern(element.getAttribute(CLEAN_COMMAND));
// Get the pre-build and post-build commands
prebuildStep = element.getAttribute(PREBUILD_STEP);
postbuildStep = element.getAttribute(POSTBUILD_STEP);
prebuildStep = SafeStringInterner.safeIntern(element.getAttribute(PREBUILD_STEP));
postbuildStep = SafeStringInterner.safeIntern(element.getAttribute(POSTBUILD_STEP));
// Get the pre-build and post-build announcements
preannouncebuildStep = element.getAttribute(PREANNOUNCEBUILD_STEP);
postannouncebuildStep = element.getAttribute(POSTANNOUNCEBUILD_STEP);
preannouncebuildStep = SafeStringInterner.safeIntern(element.getAttribute(PREANNOUNCEBUILD_STEP));
postannouncebuildStep = SafeStringInterner.safeIntern(element.getAttribute(POSTANNOUNCEBUILD_STEP));
String tmp = element.getAttribute(IS_SYSTEM);
if(tmp != null)
@ -810,21 +812,22 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
protected void loadFromProject(ICStorageElement element) {
// id
// note: IDs are unique so no benefit to intern them
setId(element.getAttribute(IConfiguration.ID));
// name
if (element.getAttribute(IConfiguration.NAME) != null)
setName(element.getAttribute(IConfiguration.NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(IConfiguration.NAME)));
// description
if (element.getAttribute(IConfiguration.DESCRIPTION) != null)
this.description = element.getAttribute(IConfiguration.DESCRIPTION);
description = SafeStringInterner.safeIntern(element.getAttribute(IConfiguration.DESCRIPTION));
String props = element.getAttribute(BUILD_PROPERTIES);
if(props != null)
buildProperties = new BuildObjectProperties(props, this, this);
String artType = element.getAttribute(BUILD_ARTEFACT_TYPE);
String artType = SafeStringInterner.safeIntern(element.getAttribute(BUILD_ARTEFACT_TYPE));
if(artType != null){
if(buildProperties == null)
buildProperties = new BuildObjectProperties(this, this);
@ -854,41 +857,40 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
// Get the name of the build artifact associated with target (usually
// in the plugin specification).
if (element.getAttribute(ARTIFACT_NAME) != null) {
artifactName = element.getAttribute(ARTIFACT_NAME);
artifactName = SafeStringInterner.safeIntern(element.getAttribute(ARTIFACT_NAME));
}
// Get the semicolon separated list of IDs of the error parsers
if (element.getAttribute(ERROR_PARSERS) != null) {
errorParserIds = element.getAttribute(ERROR_PARSERS);
errorParserIds = SafeStringInterner.safeIntern(element.getAttribute(ERROR_PARSERS));
}
// Get the artifact extension
if (element.getAttribute(EXTENSION) != null) {
artifactExtension = element.getAttribute(EXTENSION);
artifactExtension = SafeStringInterner.safeIntern(element.getAttribute(EXTENSION));
}
// Get the clean command
if (element.getAttribute(CLEAN_COMMAND) != null) {
cleanCommand = element.getAttribute(CLEAN_COMMAND);
cleanCommand = SafeStringInterner.safeIntern(element.getAttribute(CLEAN_COMMAND));
}
// Get the pre-build and post-build commands
if (element.getAttribute(PREBUILD_STEP) != null) {
prebuildStep = element.getAttribute(PREBUILD_STEP);
prebuildStep = SafeStringInterner.safeIntern(element.getAttribute(PREBUILD_STEP));
}
if (element.getAttribute(POSTBUILD_STEP) != null) {
postbuildStep = element.getAttribute(POSTBUILD_STEP);
postbuildStep = SafeStringInterner.safeIntern(element.getAttribute(POSTBUILD_STEP));
}
// Get the pre-build and post-build announcements
if (element.getAttribute(PREANNOUNCEBUILD_STEP) != null) {
preannouncebuildStep = element.getAttribute(PREANNOUNCEBUILD_STEP);
preannouncebuildStep = SafeStringInterner.safeIntern(element.getAttribute(PREANNOUNCEBUILD_STEP));
}
if (element.getAttribute(POSTANNOUNCEBUILD_STEP) != null) {
postannouncebuildStep = element
.getAttribute(POSTANNOUNCEBUILD_STEP);
postannouncebuildStep = SafeStringInterner.safeIntern(element.getAttribute(POSTANNOUNCEBUILD_STEP));
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2007 Intel Corporation and others.
* Copyright (c) 2005, 2011 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
@ -7,9 +7,11 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.core;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.core.IBuildPathResolver;
import org.eclipse.cdt.managedbuilder.core.IEnvVarBuildPath;
import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement;
@ -21,11 +23,11 @@ import org.eclipse.core.runtime.IConfigurationElement;
public class EnvVarBuildPath implements
IEnvVarBuildPath {
private int type;
private String variableNames[];
private String pathDelimiter;
private IBuildPathResolver buildPathResolver;
private IConfigurationElement buildPathResolverElement;
private int fType;
private String fVariableNames[];
private String fPathDelimiter;
private IBuildPathResolver fBuildPathResolver;
private IConfigurationElement fBuildPathResolverElement;
/**
@ -47,14 +49,14 @@ public class EnvVarBuildPath implements
setType(convertPathTypeToInt(element.getAttribute(TYPE)));
setVariableNames(element.getAttribute(LIST));
setVariableNames(SafeStringInterner.safeIntern(element.getAttribute(LIST)));
setPathDelimiter(element.getAttribute(PATH_DELIMITER));
setPathDelimiter(SafeStringInterner.safeIntern(element.getAttribute(PATH_DELIMITER)));
// Store the configuration element IFF there is a build path resolver defined
String buildPathResolver = element.getAttribute(BUILD_PATH_RESOLVER);
if (buildPathResolver != null && element instanceof DefaultManagedConfigElement) {
buildPathResolverElement = ((DefaultManagedConfigElement)element).getConfigurationElement();
fBuildPathResolverElement = ((DefaultManagedConfigElement)element).getConfigurationElement();
}
}
@ -62,22 +64,23 @@ public class EnvVarBuildPath implements
* @see org.eclipse.cdt.managedbuilder.core.IEnvVarBuildPath#getType()
*/
public int getType() {
return type;
return fType;
}
public void setType(int type){
this.type = type;
this.fType = type;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IEnvVarBuildPath#getVariableNames()
*/
public String[] getVariableNames() {
return variableNames;
return fVariableNames;
}
public void setVariableNames(String names[]){
this.variableNames = names;
fVariableNames = names;
fVariableNames = SafeStringInterner.safeIntern(fVariableNames);
}
public void setVariableNames(String names){
@ -94,13 +97,13 @@ public class EnvVarBuildPath implements
* @see org.eclipse.cdt.managedbuilder.core.IEnvVarBuildPath#getPathDelimiter()
*/
public String getPathDelimiter() {
return pathDelimiter;
return fPathDelimiter;
}
public void setPathDelimiter(String delimiter) {
if(delimiter == null)
delimiter = ManagedBuildManager.getEnvironmentVariableProvider().getDefaultDelimiter();
this.pathDelimiter = delimiter;
fPathDelimiter = SafeStringInterner.safeIntern(delimiter);
}
private int convertPathTypeToInt(String pathType){
@ -123,14 +126,14 @@ public class EnvVarBuildPath implements
* @see org.eclipse.cdt.managedbuilder.core.IEnvVarBuildPath#getBuildPathResolver()
*/
public IBuildPathResolver getBuildPathResolver() {
if(buildPathResolver == null && buildPathResolverElement != null){
if(fBuildPathResolver == null && fBuildPathResolverElement != null){
try {
if (buildPathResolverElement.getAttribute(BUILD_PATH_RESOLVER) != null) {
buildPathResolver = (IBuildPathResolver) buildPathResolverElement.createExecutableExtension(BUILD_PATH_RESOLVER);
if (fBuildPathResolverElement.getAttribute(BUILD_PATH_RESOLVER) != null) {
fBuildPathResolver = (IBuildPathResolver) fBuildPathResolverElement.createExecutableExtension(BUILD_PATH_RESOLVER);
}
} catch (CoreException e) {}
}
return buildPathResolver;
return fBuildPathResolver;
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2007 Intel Corporation and others.
* Copyright (c) 2005, 2011 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
@ -7,10 +7,12 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.core;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.core.IInputOrder;
import org.eclipse.cdt.managedbuilder.core.IInputType;
import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement;
@ -18,16 +20,16 @@ import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement;
public class InputOrder implements IInputOrder {
// Superclass
// Parent and children
private IInputType parent;
private IInputType fParent;
// Managed Build model attributes
private String path;
private String order;
private Boolean excluded;
private String fPath;
private String fOrder;
private Boolean fExcluded;
// Miscellaneous
private boolean isExtensionInputOrder = false;
private boolean isDirty = false;
private boolean resolved = true;
private boolean rebuildState;
private boolean fIsExtensionInputOrder = false;
private boolean fIsDirty = false;
private boolean fResolved = true;
private boolean fRebuildState;
/*
* C O N S T R U C T O R S
@ -42,11 +44,11 @@ public class InputOrder implements IInputOrder {
* provider
*/
public InputOrder(IInputType parent, IManagedConfigElement element) {
this.parent = parent;
isExtensionInputOrder = true;
this.fParent = parent;
fIsExtensionInputOrder = true;
// setup for resolving
resolved = false;
fResolved = false;
loadFromManifest(element);
}
@ -59,8 +61,8 @@ public class InputOrder implements IInputOrder {
* @param isExtensionElement Indicates whether this is an extension element or a managed project element
*/
public InputOrder(InputType parent, boolean isExtensionElement) {
this.parent = parent;
isExtensionInputOrder = isExtensionElement;
this.fParent = parent;
fIsExtensionInputOrder = isExtensionElement;
if (!isExtensionElement) {
setDirty(true);
}
@ -74,8 +76,8 @@ public class InputOrder implements IInputOrder {
* @param element The XML element that contains the InputOrder settings.
*/
public InputOrder(IInputType parent, ICStorageElement element) {
this.parent = parent;
isExtensionInputOrder = false;
this.fParent = parent;
fIsExtensionInputOrder = false;
// Initialize from the XML attributes
loadFromProject(element);
@ -88,20 +90,20 @@ public class InputOrder implements IInputOrder {
* @param inputOrder The existing InputOrder to clone.
*/
public InputOrder(IInputType parent, InputOrder inputOrder) {
this.parent = parent;
isExtensionInputOrder = false;
this.fParent = parent;
fIsExtensionInputOrder = false;
// Copy the remaining attributes
if (inputOrder.path != null) {
path = new String(inputOrder.path);
if (inputOrder.fPath != null) {
fPath = new String(inputOrder.fPath);
}
if (inputOrder.order != null) {
order = new String(inputOrder.order);
if (inputOrder.fOrder != null) {
fOrder = new String(inputOrder.fOrder);
}
if (inputOrder.excluded != null) {
excluded = new Boolean(inputOrder.excluded.booleanValue());
if (inputOrder.fExcluded != null) {
fExcluded = new Boolean(inputOrder.fExcluded.booleanValue());
}
setDirty(true);
@ -121,15 +123,15 @@ public class InputOrder implements IInputOrder {
protected void loadFromManifest(IManagedConfigElement element) {
// path
path = element.getAttribute(IInputOrder.PATH);
fPath = SafeStringInterner.safeIntern(element.getAttribute(IInputOrder.PATH));
// order
order = element.getAttribute(IInputOrder.ORDER);
fOrder = SafeStringInterner.safeIntern(element.getAttribute(IInputOrder.ORDER));
// excluded
String isEx = element.getAttribute(IInputOrder.EXCLUDED);
if (isEx != null){
excluded = new Boolean("true".equals(isEx)); //$NON-NLS-1$
fExcluded = new Boolean("true".equals(isEx)); //$NON-NLS-1$
}
}
@ -143,19 +145,19 @@ public class InputOrder implements IInputOrder {
// path
if (element.getAttribute(IInputOrder.PATH) != null) {
path = element.getAttribute(IInputOrder.PATH);
fPath = SafeStringInterner.safeIntern(element.getAttribute(IInputOrder.PATH));
}
// order
if (element.getAttribute(IInputOrder.ORDER) != null) {
order = element.getAttribute(IInputOrder.ORDER);
fOrder = SafeStringInterner.safeIntern(element.getAttribute(IInputOrder.ORDER));
}
// excluded
if (element.getAttribute(IInputOrder.EXCLUDED) != null) {
String isEx = element.getAttribute(IInputOrder.EXCLUDED);
if (isEx != null){
excluded = new Boolean("true".equals(isEx)); //$NON-NLS-1$
fExcluded = new Boolean("true".equals(isEx)); //$NON-NLS-1$
}
}
}
@ -165,20 +167,20 @@ public class InputOrder implements IInputOrder {
*/
public void serialize(ICStorageElement element) {
if (path != null) {
element.setAttribute(IInputOrder.PATH, path);
if (fPath != null) {
element.setAttribute(IInputOrder.PATH, fPath);
}
if (order != null) {
element.setAttribute(IInputOrder.ORDER, order);
if (fOrder != null) {
element.setAttribute(IInputOrder.ORDER, fOrder);
}
if (excluded != null) {
element.setAttribute(IInputOrder.EXCLUDED, excluded.toString());
if (fExcluded != null) {
element.setAttribute(IInputOrder.EXCLUDED, fExcluded.toString());
}
// I am clean now
isDirty = false;
fIsDirty = false;
}
/*
@ -189,7 +191,7 @@ public class InputOrder implements IInputOrder {
* @see org.eclipse.cdt.core.build.managed.IInputOrder#getParent()
*/
public IInputType getParent() {
return parent;
return fParent;
}
/*
@ -200,17 +202,17 @@ public class InputOrder implements IInputOrder {
* @see org.eclipse.cdt.core.build.managed.IInputOrder#getPsth()
*/
public String getPath() {
return path;
return fPath;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IInputOrder#setPath()
*/
public void setPath(String newPath) {
if (path == null && newPath == null) return;
if (path == null || newPath == null || !(path.equals(newPath))) {
path = newPath;
isDirty = true;
if (fPath == null && newPath == null) return;
if (fPath == null || newPath == null || !(fPath.equals(newPath))) {
fPath = newPath;
fIsDirty = true;
setRebuildState(true);
}
}
@ -219,17 +221,17 @@ public class InputOrder implements IInputOrder {
* @see org.eclipse.cdt.core.build.managed.IInputOrder#getOrder()
*/
public String getOrder() {
return order;
return fOrder;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IInputOrder#setOrder()
*/
public void setOrder(String newOrder) {
if (order == null && newOrder == null) return;
if (order == null || newOrder == null || !(order.equals(newOrder))) {
order = newOrder;
isDirty = true;
if (fOrder == null && newOrder == null) return;
if (fOrder == null || newOrder == null || !(fOrder.equals(newOrder))) {
fOrder = newOrder;
fIsDirty = true;
setRebuildState(true);
}
}
@ -238,15 +240,15 @@ public class InputOrder implements IInputOrder {
* @see org.eclipse.cdt.core.build.managed.IInputOrder#getExcluded()
*/
public boolean getExcluded() {
return excluded.booleanValue();
return fExcluded.booleanValue();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IInputOrder#setExcluded()
*/
public void setExcluded(boolean b) {
if (excluded == null || !(b == excluded.booleanValue())) {
excluded = new Boolean(b);
if (fExcluded == null || !(b == fExcluded.booleanValue())) {
fExcluded = new Boolean(b);
setDirty(true);
setRebuildState(true);
}
@ -261,7 +263,7 @@ public class InputOrder implements IInputOrder {
* @see org.eclipse.cdt.managedbuilder.core.IInputOrder#isExtensionElement()
*/
public boolean isExtensionElement() {
return isExtensionInputOrder;
return fIsExtensionInputOrder;
}
/* (non-Javadoc)
@ -269,34 +271,34 @@ public class InputOrder implements IInputOrder {
*/
public boolean isDirty() {
// This shouldn't be called for an extension InputOrder
if (isExtensionInputOrder) return false;
return isDirty;
if (fIsExtensionInputOrder) return false;
return fIsDirty;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IInputOrder#setDirty(boolean)
*/
public void setDirty(boolean isDirty) {
this.isDirty = isDirty;
this.fIsDirty = isDirty;
}
/* (non-Javadoc)
* Resolve the element IDs to interface references
*/
public void resolveReferences() {
if (!resolved) {
resolved = true;
if (!fResolved) {
fResolved = true;
}
}
public boolean needsRebuild(){
return rebuildState;
return fRebuildState;
}
public void setRebuildState(boolean rebuild){
if(isExtensionElement() && rebuild)
return;
rebuildState = rebuild;
fRebuildState = rebuild;
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2009 Intel Corporation and others.
* Copyright (c) 2005, 2011 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
@ -7,6 +7,7 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.core;
@ -18,6 +19,7 @@ import java.util.Vector;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.core.IAdditionalInput;
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
import org.eclipse.cdt.managedbuilder.core.IFileInfo;
@ -308,13 +310,13 @@ public class InputType extends BuildObject implements IInputType {
ManagedBuildManager.putConfigElement(this, element);
// id
setId(element.getAttribute(IBuildObject.ID));
setId(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.ID)));
// Get the name
setName(element.getAttribute(IBuildObject.NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.NAME)));
// superClass
superClassId = element.getAttribute(IProjectType.SUPERCLASS);
superClassId = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.SUPERCLASS));
// sourceContentType
List<String> list = new ArrayList<String>();
@ -322,7 +324,7 @@ public class InputType extends BuildObject implements IInputType {
if(ids != null){
StringTokenizer tokenizer = new StringTokenizer(ids, DEFAULT_SEPARATOR);
while (tokenizer.hasMoreElements()) {
list.add(tokenizer.nextToken());
list.add(SafeStringInterner.safeIntern(tokenizer.nextToken()));
}
if(list.size() != 0){
sourceContentTypeIds = list.toArray(new String[list.size()]);
@ -335,7 +337,7 @@ public class InputType extends BuildObject implements IInputType {
if (inputs != null) {
StringTokenizer tokenizer = new StringTokenizer(inputs, DEFAULT_SEPARATOR);
while (tokenizer.hasMoreElements()) {
list.add(tokenizer.nextToken());
list.add(SafeStringInterner.safeIntern(tokenizer.nextToken()));
}
if(list.size() != 0){
@ -349,7 +351,7 @@ public class InputType extends BuildObject implements IInputType {
if(ids != null){
StringTokenizer tokenizer = new StringTokenizer(ids, DEFAULT_SEPARATOR);
while (tokenizer.hasMoreElements()) {
list.add(tokenizer.nextToken());
list.add(SafeStringInterner.safeIntern(tokenizer.nextToken()));
}
if(list.size() != 0){
headerContentTypeIds = list.toArray(new String[list.size()]);
@ -362,7 +364,7 @@ public class InputType extends BuildObject implements IInputType {
if (hs != null) {
StringTokenizer tokenizer = new StringTokenizer(hs, DEFAULT_SEPARATOR);
while (tokenizer.hasMoreElements()) {
list.add(tokenizer.nextToken());
list.add(SafeStringInterner.safeIntern(tokenizer.nextToken()));
}
if(list.size() != 0){
@ -379,15 +381,15 @@ public class InputType extends BuildObject implements IInputType {
if (headers != null) {
StringTokenizer tokenizer = new StringTokenizer(headers, DEFAULT_SEPARATOR);
while (tokenizer.hasMoreElements()) {
getDependencyExtensionsList().add(tokenizer.nextToken());
getDependencyExtensionsList().add(SafeStringInterner.safeIntern(tokenizer.nextToken()));
}
}
// option
optionId = element.getAttribute(IInputType.OPTION);
optionId = SafeStringInterner.safeIntern(element.getAttribute(IInputType.OPTION));
// assignToOption
assignToOptionId = element.getAttribute(IInputType.ASSIGN_TO_OPTION);
assignToOptionId = SafeStringInterner.safeIntern(element.getAttribute(IInputType.ASSIGN_TO_OPTION));
// multipleOfType
String isMOT = element.getAttribute(IInputType.MULTIPLE_OF_TYPE);
@ -402,17 +404,17 @@ public class InputType extends BuildObject implements IInputType {
}
// buildVariable
buildVariable = element.getAttribute(IInputType.BUILD_VARIABLE);
buildVariable = SafeStringInterner.safeIntern(element.getAttribute(IInputType.BUILD_VARIABLE));
languageId = element.getAttribute(LANGUAGE_ID);
languageName = element.getAttribute(LANGUAGE_NAME);
languageId = SafeStringInterner.safeIntern(element.getAttribute(LANGUAGE_ID));
languageName = SafeStringInterner.safeIntern(element.getAttribute(LANGUAGE_NAME));
if (element.getAttribute(LANGUAGE_INFO_CALCULATOR) != null && element instanceof DefaultManagedConfigElement) {
languageInfoCalculatorElement = ((DefaultManagedConfigElement)element).getConfigurationElement();
}
// else {
// languageInfoCalculator = new DefaultLanguageInfoCalculator();
// }
buildInfoDicsoveryProfileId = element.getAttribute(SCANNER_CONFIG_PROFILE_ID);
buildInfoDicsoveryProfileId = SafeStringInterner.safeIntern(element.getAttribute(SCANNER_CONFIG_PROFILE_ID));
// Store the configuration element IFF there is a dependency generator defined
String depGenerator = element.getAttribute(ITool.DEP_CALC_ID);
@ -430,15 +432,16 @@ public class InputType extends BuildObject implements IInputType {
protected boolean loadFromProject(ICStorageElement element) {
// id
// note: IDs are unique so no benefit to intern them
setId(element.getAttribute(IBuildObject.ID));
// name
if (element.getAttribute(IBuildObject.NAME) != null) {
setName(element.getAttribute(IBuildObject.NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.NAME)));
}
// superClass
superClassId = element.getAttribute(IProjectType.SUPERCLASS);
superClassId = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.SUPERCLASS));
if (superClassId != null && superClassId.length() > 0) {
superClass = ManagedBuildManager.getExtensionInputType(superClassId);
if (superClass == null) {
@ -454,7 +457,7 @@ public class InputType extends BuildObject implements IInputType {
if (ids != null) {
StringTokenizer tokenizer = new StringTokenizer(ids, DEFAULT_SEPARATOR);
while (tokenizer.hasMoreElements()) {
list.add(tokenizer.nextToken());
list.add(SafeStringInterner.safeIntern(tokenizer.nextToken()));
}
if(list.size() != 0){
@ -483,7 +486,7 @@ public class InputType extends BuildObject implements IInputType {
if (inputs != null) {
StringTokenizer tokenizer = new StringTokenizer(inputs, DEFAULT_SEPARATOR);
while (tokenizer.hasMoreElements()) {
list.add(tokenizer.nextToken());
list.add(SafeStringInterner.safeIntern(tokenizer.nextToken()));
}
if(list.size() != 0){
@ -499,7 +502,7 @@ public class InputType extends BuildObject implements IInputType {
if (ids != null) {
StringTokenizer tokenizer = new StringTokenizer(ids, DEFAULT_SEPARATOR);
while (tokenizer.hasMoreElements()) {
list.add(tokenizer.nextToken());
list.add(SafeStringInterner.safeIntern(tokenizer.nextToken()));
}
if(list.size() != 0){
@ -528,7 +531,7 @@ public class InputType extends BuildObject implements IInputType {
if (inputs != null) {
StringTokenizer tokenizer = new StringTokenizer(inputs, DEFAULT_SEPARATOR);
while (tokenizer.hasMoreElements()) {
list.add(tokenizer.nextToken());
list.add(SafeStringInterner.safeIntern(tokenizer.nextToken()));
}
if(list.size() != 0){
@ -553,19 +556,19 @@ public class InputType extends BuildObject implements IInputType {
if (headers != null) {
StringTokenizer tokenizer = new StringTokenizer(headers, DEFAULT_SEPARATOR);
while (tokenizer.hasMoreElements()) {
getDependencyExtensionsList().add(tokenizer.nextToken());
getDependencyExtensionsList().add(SafeStringInterner.safeIntern(tokenizer.nextToken()));
}
}
}
// option
if (element.getAttribute(IInputType.OPTION) != null) {
optionId = element.getAttribute(IInputType.OPTION);
optionId = SafeStringInterner.safeIntern(element.getAttribute(IInputType.OPTION));
}
// assignToOption
if (element.getAttribute(IInputType.ASSIGN_TO_OPTION) != null) {
assignToOptionId = element.getAttribute(IInputType.ASSIGN_TO_OPTION);
assignToOptionId = SafeStringInterner.safeIntern(element.getAttribute(IInputType.ASSIGN_TO_OPTION));
}
// multipleOfType
@ -586,12 +589,12 @@ public class InputType extends BuildObject implements IInputType {
// buildVariable
if (element.getAttribute(IInputType.BUILD_VARIABLE) != null) {
buildVariable = element.getAttribute(IInputType.BUILD_VARIABLE);
buildVariable = SafeStringInterner.safeIntern(element.getAttribute(IInputType.BUILD_VARIABLE));
}
languageId = element.getAttribute(LANGUAGE_ID);
languageName = element.getAttribute(LANGUAGE_NAME);
buildInfoDicsoveryProfileId = element.getAttribute(SCANNER_CONFIG_PROFILE_ID);
languageId = SafeStringInterner.safeIntern(element.getAttribute(LANGUAGE_ID));
languageName = SafeStringInterner.safeIntern(element.getAttribute(LANGUAGE_NAME));
buildInfoDicsoveryProfileId = SafeStringInterner.safeIntern(element.getAttribute(SCANNER_CONFIG_PROFILE_ID));
// Note: dependency generator cannot be specified in a project file because
// an IConfigurationElement is needed to load it!

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2004, 2009 Intel Corporation and others.
* Copyright (c) 2004, 2011 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
@ -7,6 +7,7 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.core;
@ -168,7 +169,7 @@ public class ManagedProject extends BuildObject implements IManagedProject, IBui
* @param element An XML element containing the project information
*/
protected boolean loadFromProject(ICStorageElement element) {
// note: id and name are unique, so don't intern them
// id
setId(element.getAttribute(IBuildObject.ID));

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007, 2009 Intel Corporation and others.
* Copyright (c) 2007, 2011 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
@ -8,6 +8,7 @@
* Contributors:
* Intel Corporation - Initial API and implementation
* James Blackburn (Broadcom Corp.)
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.core;
@ -20,6 +21,7 @@ import java.util.Map.Entry;
import java.util.Set;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.core.runtime.CoreException;
public class MapStorageElement implements ICStorageElement {
@ -189,7 +191,7 @@ public class MapStorageElement implements ICStorageElement {
}
lndx++;
}
map.put(line.substring(0, lndx), line.substring(lndx + 1));
map.put(SafeStringInterner.safeIntern(line.substring(0, lndx)), SafeStringInterner.safeIntern(line.substring(lndx + 1)));
}
return map;
@ -233,7 +235,7 @@ public class MapStorageElement implements ICStorageElement {
lndx++;
}
*/
list.add(line.toString());
list.add(SafeStringInterner.safeIntern(line.toString()));
envStr.delete(0, ndx + 1);
}
} catch (StringIndexOutOfBoundsException e) {

View file

@ -21,6 +21,7 @@ import java.util.Map;
import java.util.Set;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.core.BuildException;
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
import org.eclipse.cdt.managedbuilder.core.IBuildPropertiesRestriction;
@ -47,7 +48,7 @@ import org.osgi.framework.Version;
public class Option extends BuildObject implements IOption, IBuildPropertiesRestriction {
// Static default return values
public static final String EMPTY_STRING = new String();
public static final String EMPTY_STRING = new String().intern();
public static final String[] EMPTY_STRING_ARRAY = new String[0];
public static final OptionStringValue[] EMPTY_LV_ARRAY = new OptionStringValue[0];
@ -330,16 +331,16 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
ManagedBuildManager.putConfigElement(this, element);
// id
setId(element.getAttribute(IBuildObject.ID));
setId(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.ID)));
// Get the name
setName(element.getAttribute(IBuildObject.NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.NAME)));
// superClass
superClassId = element.getAttribute(IProjectType.SUPERCLASS);
superClassId = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.SUPERCLASS));
// Get the unused children, if any
unusedChildren = element.getAttribute(IProjectType.UNUSED_CHILDREN);
unusedChildren = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.UNUSED_CHILDREN));
// isAbstract
String isAbs = element.getAttribute(IProjectType.IS_ABSTRACT);
@ -348,7 +349,7 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
}
// Get the command defined for the option
command = element.getAttribute(COMMAND);
command = SafeStringInterner.safeIntern(element.getAttribute(COMMAND));
// Get the command-generator, if any
String commandGeneratorStr = element.getAttribute(COMMAND_GENERATOR);
@ -357,13 +358,13 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
}
// Get the command defined for a Boolean option when the value is False
commandFalse = element.getAttribute(COMMAND_FALSE);
commandFalse = SafeStringInterner.safeIntern(element.getAttribute(COMMAND_FALSE));
// Get the tooltip for the option
tip = element.getAttribute(TOOL_TIP);
tip = SafeStringInterner.safeIntern(element.getAttribute(TOOL_TIP));
// Get the contextID for the option
contextId = element.getAttribute(CONTEXT_ID);
contextId = SafeStringInterner.safeIntern(element.getAttribute(CONTEXT_ID));
// Options hold different types of values
String valueTypeStr = element.getAttribute(VALUE_TYPE);
@ -392,15 +393,15 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
}
// Get the browseFilterPath attribute
this.browseFilterPath = element.getAttribute(BROWSE_FILTER_PATH);
this.browseFilterPath = SafeStringInterner.safeIntern(element.getAttribute(BROWSE_FILTER_PATH));
// Get the browseFilterExtensions attribute
String browseFilterExtensionsStr = element.getAttribute(BROWSE_FILTER_EXTENSIONS);
if (browseFilterExtensionsStr != null) {
this.browseFilterExtensions = browseFilterExtensionsStr.split("\\s*,\\s*"); //$NON-NLS-1$
this.browseFilterExtensions = SafeStringInterner.safeIntern(browseFilterExtensionsStr.split("\\s*,\\s*")); //$NON-NLS-1$
}
categoryId = element.getAttribute(CATEGORY);
categoryId = SafeStringInterner.safeIntern(element.getAttribute(CATEGORY));
// Get the resourceFilter attribute
String resFilterStr = element.getAttribute(RESOURCE_FILTER);
@ -438,7 +439,7 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
valueHandlerElement = ((DefaultManagedConfigElement)element).getConfigurationElement();
}
// valueHandlerExtraArgument
valueHandlerExtraArgument = element.getAttribute(VALUE_HANDLER_EXTRA_ARGUMENT);
valueHandlerExtraArgument = SafeStringInterner.safeIntern(element.getAttribute(VALUE_HANDLER_EXTRA_ARGUMENT));
// fieldEditor and optional argument
fieldEditorId = element.getAttribute(FIELD_EDITOR_ID);
@ -453,16 +454,16 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
*/
protected void loadFromProject(ICStorageElement element) {
// id
// id (unique, don't intern)
setId(element.getAttribute(IBuildObject.ID));
// name
if (element.getAttribute(IBuildObject.NAME) != null) {
setName(element.getAttribute(IBuildObject.NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.NAME)));
}
// superClass
superClassId = element.getAttribute(IProjectType.SUPERCLASS);
superClassId = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.SUPERCLASS));
if (superClassId != null && superClassId.length() > 0) {
superClass = ManagedBuildManager.getExtensionOption(superClassId);
if (superClass == null) {
@ -472,7 +473,7 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
// Get the unused children, if any
if (element.getAttribute(IProjectType.UNUSED_CHILDREN) != null) {
unusedChildren = element.getAttribute(IProjectType.UNUSED_CHILDREN);
unusedChildren = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.UNUSED_CHILDREN));
}
// isAbstract
@ -485,22 +486,22 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
// Get the command defined for the option
if (element.getAttribute(COMMAND) != null) {
command = element.getAttribute(COMMAND);
command = SafeStringInterner.safeIntern(element.getAttribute(COMMAND));
}
// Get the command defined for a Boolean option when the value is False
if (element.getAttribute(COMMAND_FALSE) != null) {
commandFalse = element.getAttribute(COMMAND_FALSE);
commandFalse = SafeStringInterner.safeIntern(element.getAttribute(COMMAND_FALSE));
}
// Get the tooltip for the option
if (element.getAttribute(TOOL_TIP) != null) {
tip = element.getAttribute(TOOL_TIP);
tip = SafeStringInterner.safeIntern(element.getAttribute(TOOL_TIP));
}
// Get the contextID for the option
if (element.getAttribute(CONTEXT_ID) != null) {
contextId = element.getAttribute(CONTEXT_ID);
contextId = SafeStringInterner.safeIntern(element.getAttribute(CONTEXT_ID));
}
// Options hold different types of values
@ -525,18 +526,18 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
case STRING:
// Just get the value out of the option directly
if (element.getAttribute(VALUE) != null) {
value = element.getAttribute(VALUE);
value = SafeStringInterner.safeIntern(element.getAttribute(VALUE));
}
if (element.getAttribute(DEFAULT_VALUE) != null) {
defaultValue = element.getAttribute(DEFAULT_VALUE);
defaultValue = SafeStringInterner.safeIntern(element.getAttribute(DEFAULT_VALUE));
}
break;
case ENUMERATED:
if (element.getAttribute(VALUE) != null) {
value = element.getAttribute(VALUE);
value = SafeStringInterner.safeIntern(element.getAttribute(VALUE));
}
if (element.getAttribute(DEFAULT_VALUE) != null) {
defaultValue = element.getAttribute(DEFAULT_VALUE);
defaultValue = SafeStringInterner.safeIntern(element.getAttribute(DEFAULT_VALUE));
}
// Do we have enumeratedOptionValue children? If so, load them
@ -546,7 +547,7 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
ICStorageElement configNode = configElements[i];
if (configNode.getName().equals(ENUM_VALUE)) {
ICStorageElement configElement = configNode;
String optId = configElement.getAttribute(ID);
String optId = SafeStringInterner.safeIntern(configElement.getAttribute(ID));
if (i == 0) {
enumList = new ArrayList<String>();
if (defaultValue == null) {
@ -555,11 +556,11 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
}
enumList.add(optId);
if (configElement.getAttribute(COMMAND) != null) {
getEnumCommandMap().put(optId, configElement.getAttribute(COMMAND));
getEnumCommandMap().put(optId, SafeStringInterner.safeIntern(configElement.getAttribute(COMMAND)));
} else {
getEnumCommandMap().put(optId, EMPTY_STRING);
}
getEnumNameMap().put(optId, configElement.getAttribute(NAME));
getEnumNameMap().put(optId, SafeStringInterner.safeIntern(configElement.getAttribute(NAME)));
if (configElement.getAttribute(IS_DEFAULT) != null) {
Boolean isDefault = new Boolean(configElement.getAttribute(IS_DEFAULT));
if (isDefault.booleanValue()) {
@ -607,8 +608,12 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
}
if(vList != null && vList.size() != 0)
value = vList;
else
value = null;
if(biList != null && biList.size() != 0)
builtIns = biList;
else
builtIns = null;
break;
default :
@ -639,19 +644,19 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
// Get the browseFilterPath attribute
if (element.getAttribute(BROWSE_FILTER_PATH) != null) {
this.browseFilterPath = element.getAttribute(BROWSE_FILTER_PATH);
this.browseFilterPath = SafeStringInterner.safeIntern(element.getAttribute(BROWSE_FILTER_PATH));
}
// Get the browseFilterExtensions attribute
if (element.getAttribute(BROWSE_FILTER_EXTENSIONS) != null) {
String browseFilterExtensionsStr = element.getAttribute(BROWSE_FILTER_EXTENSIONS);
if (browseFilterExtensionsStr != null) {
this.browseFilterExtensions = browseFilterExtensionsStr.split("\\s*,\\s*"); //$NON-NLS-1$
this.browseFilterExtensions = SafeStringInterner.safeIntern(browseFilterExtensionsStr.split("\\s*,\\s*")); //$NON-NLS-1$
}
}
if (element.getAttribute(CATEGORY) != null) {
categoryId = element.getAttribute(CATEGORY);
categoryId = SafeStringInterner.safeIntern(element.getAttribute(CATEGORY));
if (categoryId != null) {
category = holder.getOptionCategory(categoryId);
}
@ -680,7 +685,7 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
// valueHandlerExtraArgument
if (element.getAttribute(VALUE_HANDLER_EXTRA_ARGUMENT) != null) {
valueHandlerExtraArgument = element.getAttribute(VALUE_HANDLER_EXTRA_ARGUMENT);
valueHandlerExtraArgument = SafeStringInterner.safeIntern(element.getAttribute(VALUE_HANDLER_EXTRA_ARGUMENT));
}
}
@ -2219,7 +2224,7 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
// to define the valid values and the default value.
IManagedConfigElement[] enumElements = element.getChildren(ENUM_VALUE);
for (int i = 0; i < enumElements.length; ++i) {
String optId = enumElements[i].getAttribute(ID);
String optId = SafeStringInterner.safeIntern(enumElements[i].getAttribute(ID));
if (i == 0) {
enumList = new ArrayList<String>();
if (defaultValue == null) {
@ -2227,8 +2232,8 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
}
}
enumList.add(optId);
getEnumCommandMap().put(optId, enumElements[i].getAttribute(COMMAND));
getEnumNameMap().put(optId, enumElements[i].getAttribute(NAME));
getEnumCommandMap().put(optId, SafeStringInterner.safeIntern(enumElements[i].getAttribute(COMMAND)));
getEnumNameMap().put(optId, SafeStringInterner.safeIntern(enumElements[i].getAttribute(NAME)));
Boolean isDefault = new Boolean(enumElements[i].getAttribute(IS_DEFAULT));
if (isDefault.booleanValue()) {
defaultValue = optId;

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2003, 2008 IBM Corporation and others.
* Copyright (c) 2003, 2011 IBM 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
@ -16,6 +16,7 @@ import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IHoldsOptions;
@ -109,13 +110,13 @@ public class OptionCategory extends BuildObject implements IOptionCategory {
ManagedBuildManager.putConfigElement(this, element);
// id
setId(element.getAttribute(IOptionCategory.ID));
setId(SafeStringInterner.safeIntern(element.getAttribute(IOptionCategory.ID)));
// name
setName(element.getAttribute(IOptionCategory.NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(IOptionCategory.NAME)));
// owner
ownerId = element.getAttribute(IOptionCategory.OWNER);
ownerId = SafeStringInterner.safeIntern(element.getAttribute(IOptionCategory.OWNER));
// icon
if ( element.getAttribute(IOptionCategory.ICON) != null && element instanceof DefaultManagedConfigElement)
@ -133,17 +134,17 @@ public class OptionCategory extends BuildObject implements IOptionCategory {
*/
protected void loadFromProject(ICStorageElement element) {
// id
// id (unique, do not intern)
setId(element.getAttribute(IBuildObject.ID));
// name
if (element.getAttribute(IBuildObject.NAME) != null) {
setName(element.getAttribute(IBuildObject.NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.NAME)));
}
// owner
if (element.getAttribute(IOptionCategory.OWNER) != null) {
ownerId = element.getAttribute(IOptionCategory.OWNER);
ownerId = SafeStringInterner.safeIntern(element.getAttribute(IOptionCategory.OWNER));
}
if (ownerId != null) {
owner = holder.getOptionCategory(ownerId);

View file

@ -16,6 +16,8 @@ package org.eclipse.cdt.managedbuilder.internal.core;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.core.BuildException;
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
import org.eclipse.cdt.managedbuilder.core.IHoldsOptions;
@ -214,10 +216,10 @@ public class OptionReference implements IOption {
IManagedConfigElement valueElement = valueElements[i];
Boolean isBuiltIn = new Boolean(valueElement.getAttribute(LIST_ITEM_BUILTIN));
if (isBuiltIn.booleanValue()) {
getBuiltInList().add(valueElement.getAttribute(LIST_ITEM_VALUE));
getBuiltInList().add(SafeStringInterner.safeIntern(valueElement.getAttribute(LIST_ITEM_VALUE)));
}
else {
valueList.add(valueElement.getAttribute(LIST_ITEM_VALUE));
valueList.add(SafeStringInterner.safeIntern(valueElement.getAttribute(LIST_ITEM_VALUE)));
}
}
value = valueList;

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2008 Intel Corporation and others.
* Copyright (c) 2005, 2011 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
@ -7,10 +7,12 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.core;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
import org.eclipse.cdt.managedbuilder.core.IInputType;
import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement;
@ -215,22 +217,22 @@ public class OutputType extends BuildObject implements IOutputType {
ManagedBuildManager.putConfigElement(this, element);
// id
setId(element.getAttribute(IBuildObject.ID));
setId(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.ID)));
// Get the name
setName(element.getAttribute(IBuildObject.NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.NAME)));
// superClass
superClassId = element.getAttribute(IProjectType.SUPERCLASS);
superClassId = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.SUPERCLASS));
// outputContentType
outputContentTypeId = element.getAttribute(IOutputType.OUTPUT_CONTENT_TYPE);
outputContentTypeId = SafeStringInterner.safeIntern(element.getAttribute(IOutputType.OUTPUT_CONTENT_TYPE));
// outputs
outputs = element.getAttribute(IOutputType.OUTPUTS);
outputs = SafeStringInterner.safeIntern(element.getAttribute(IOutputType.OUTPUTS));
// option
optionId = element.getAttribute(IOutputType.OPTION);
optionId = SafeStringInterner.safeIntern(element.getAttribute(IOutputType.OPTION));
// multipleOfType
String isMOT = element.getAttribute(IOutputType.MULTIPLE_OF_TYPE);
@ -239,7 +241,7 @@ public class OutputType extends BuildObject implements IOutputType {
}
// primaryInputType
primaryInputTypeId = element.getAttribute(IOutputType.PRIMARY_INPUT_TYPE);
primaryInputTypeId = SafeStringInterner.safeIntern(element.getAttribute(IOutputType.PRIMARY_INPUT_TYPE));
// primaryOutput
String isPO = element.getAttribute(IOutputType.PRIMARY_OUTPUT);
@ -248,16 +250,16 @@ public class OutputType extends BuildObject implements IOutputType {
}
// outputPrefix
outputPrefix = element.getAttribute(IOutputType.OUTPUT_PREFIX);
outputPrefix = SafeStringInterner.safeIntern(element.getAttribute(IOutputType.OUTPUT_PREFIX));
// outputNames
outputNames = element.getAttribute(IOutputType.OUTPUT_NAMES);
outputNames = SafeStringInterner.safeIntern(element.getAttribute(IOutputType.OUTPUT_NAMES));
// namePattern
namePattern = element.getAttribute(IOutputType.NAME_PATTERN);
namePattern = SafeStringInterner.safeIntern(element.getAttribute(IOutputType.NAME_PATTERN));
// buildVariable
buildVariable = element.getAttribute(IOutputType.BUILD_VARIABLE);
buildVariable = SafeStringInterner.safeIntern(element.getAttribute(IOutputType.BUILD_VARIABLE));
// Store the configuration element IFF there is a name provider defined
String nameProvider = element.getAttribute(IOutputType.NAME_PROVIDER);
@ -274,16 +276,16 @@ public class OutputType extends BuildObject implements IOutputType {
*/
protected void loadFromProject(ICStorageElement element) {
// id
// id (unique, do not intern)
setId(element.getAttribute(IBuildObject.ID));
// name
if (element.getAttribute(IBuildObject.NAME) != null) {
setName(element.getAttribute(IBuildObject.NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.NAME)));
}
// superClass
superClassId = element.getAttribute(IProjectType.SUPERCLASS);
superClassId = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.SUPERCLASS));
if (superClassId != null && superClassId.length() > 0) {
superClass = ManagedBuildManager.getExtensionOutputType(superClassId);
if (superClass == null) {
@ -293,17 +295,17 @@ public class OutputType extends BuildObject implements IOutputType {
// outputContentType
if (element.getAttribute(IOutputType.OUTPUT_CONTENT_TYPE) != null) {
outputContentTypeId = element.getAttribute(IOutputType.OUTPUT_CONTENT_TYPE);
outputContentTypeId = SafeStringInterner.safeIntern(element.getAttribute(IOutputType.OUTPUT_CONTENT_TYPE));
}
// outputs
if (element.getAttribute(IOutputType.OUTPUTS) != null) {
outputs = element.getAttribute(IOutputType.OUTPUTS);
outputs = SafeStringInterner.safeIntern(element.getAttribute(IOutputType.OUTPUTS));
}
// option
if (element.getAttribute(IOutputType.OPTION) != null) {
optionId = element.getAttribute(IOutputType.OPTION);
optionId = SafeStringInterner.safeIntern(element.getAttribute(IOutputType.OPTION));
}
// multipleOfType
@ -316,7 +318,7 @@ public class OutputType extends BuildObject implements IOutputType {
// primaryInputType
if (element.getAttribute(IOutputType.PRIMARY_INPUT_TYPE) != null) {
primaryInputTypeId = element.getAttribute(IOutputType.PRIMARY_INPUT_TYPE);
primaryInputTypeId = SafeStringInterner.safeIntern(element.getAttribute(IOutputType.PRIMARY_INPUT_TYPE));
primaryInputType = parent.getInputTypeById(primaryInputTypeId);
}
@ -330,22 +332,22 @@ public class OutputType extends BuildObject implements IOutputType {
// outputPrefix
if (element.getAttribute(IOutputType.OUTPUT_PREFIX) != null) {
outputPrefix = element.getAttribute(IOutputType.OUTPUT_PREFIX);
outputPrefix = SafeStringInterner.safeIntern(element.getAttribute(IOutputType.OUTPUT_PREFIX));
}
// outputNames
if (element.getAttribute(IOutputType.OUTPUT_NAMES) != null) {
outputNames = element.getAttribute(IOutputType.OUTPUT_NAMES);
outputNames = SafeStringInterner.safeIntern(element.getAttribute(IOutputType.OUTPUT_NAMES));
}
// namePattern
if (element.getAttribute(IOutputType.NAME_PATTERN) != null) {
namePattern = element.getAttribute(IOutputType.NAME_PATTERN);
namePattern = SafeStringInterner.safeIntern(element.getAttribute(IOutputType.NAME_PATTERN));
}
// buildVariable
if (element.getAttribute(IOutputType.BUILD_VARIABLE) != null) {
buildVariable = element.getAttribute(IOutputType.BUILD_VARIABLE);
buildVariable = SafeStringInterner.safeIntern(element.getAttribute(IOutputType.BUILD_VARIABLE));
}
// Note: Name Provider cannot be specified in a project file because

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2004, 2008 Intel Corporation and others.
* Copyright (c) 2004, 2011 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
@ -7,6 +7,7 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.core;
@ -17,6 +18,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildProperty;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyType;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyValue;
@ -151,22 +153,22 @@ public class ProjectType extends BuildObject implements IProjectType, IBuildProp
ManagedBuildManager.putConfigElement(this, element);
// id
setId(element.getAttribute(ID));
setId(SafeStringInterner.safeIntern(element.getAttribute(ID)));
// Get the name
setName(element.getAttribute(NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(NAME)));
// version
setVersion(getVersionFromId());
// superClass
superClassId = element.getAttribute(SUPERCLASS);
superClassId = SafeStringInterner.safeIntern(element.getAttribute(SUPERCLASS));
String props = element.getAttribute(BUILD_PROPERTIES);
String props = SafeStringInterner.safeIntern(element.getAttribute(BUILD_PROPERTIES));
if(props != null)
buildProperties = new BuildObjectProperties(props, this, this);
String artType = element.getAttribute(BUILD_ARTEFACT_TYPE);
String artType = SafeStringInterner.safeIntern(element.getAttribute(BUILD_ARTEFACT_TYPE));
if(artType != null){
if(buildProperties == null)
buildProperties = new BuildObjectProperties(this, this);
@ -180,7 +182,7 @@ public class ProjectType extends BuildObject implements IProjectType, IBuildProp
// Get the unused children, if any
unusedChildren = element.getAttribute(UNUSED_CHILDREN);
unusedChildren = SafeStringInterner.safeIntern(element.getAttribute(UNUSED_CHILDREN));
// isAbstract
String isAbs = element.getAttribute(IS_ABSTRACT);
@ -212,7 +214,7 @@ public class ProjectType extends BuildObject implements IProjectType, IBuildProp
}
// Get the 'convertToId' attribute if it is available
convertToId = element.getAttribute(CONVERT_TO_ID);
convertToId = SafeStringInterner.safeIntern(element.getAttribute(CONVERT_TO_ID));
}
/*

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2007 Intel Corporation and others.
* Copyright (c) 2005, 2011 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
@ -7,6 +7,7 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.core;
@ -21,6 +22,7 @@ import org.eclipse.cdt.core.settings.model.ICSettingBase;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.core.settings.model.extension.CFileData;
import org.eclipse.cdt.core.settings.model.extension.CLanguageData;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IFileInfo;
@ -347,7 +349,7 @@ public class ResourceConfiguration extends ResourceInfo implements IFileInfo {
ManagedBuildManager.putConfigElement(this, element);
// toolsToInvoke
toolsToInvoke = element.getAttribute(IResourceConfiguration.TOOLS_TO_INVOKE);
toolsToInvoke = SafeStringInterner.safeIntern(element.getAttribute(IResourceConfiguration.TOOLS_TO_INVOKE));
// rcbsApplicability
String rcbsApplicabilityStr = element.getAttribute(IResourceConfiguration.RCBS_APPLICABILITY);
@ -371,7 +373,7 @@ public class ResourceConfiguration extends ResourceInfo implements IFileInfo {
protected void loadFromProject(ICStorageElement element) {
// toolsToInvoke
if (element.getAttribute(IResourceConfiguration.TOOLS_TO_INVOKE) != null) {
toolsToInvoke = element.getAttribute(IResourceConfiguration.TOOLS_TO_INVOKE);
toolsToInvoke = SafeStringInterner.safeIntern(element.getAttribute(IResourceConfiguration.TOOLS_TO_INVOKE));
}
// rcbsApplicability

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007, 2010 Intel Corporation and others.
* Copyright (c) 2007, 2011 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
@ -7,6 +7,7 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.core;
@ -17,6 +18,7 @@ import java.util.Set;
import org.eclipse.cdt.core.settings.model.ICSettingBase;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.core.settings.model.extension.CResourceData;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.core.BuildException;
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
@ -112,10 +114,10 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
private void loadFromManifest(IManagedConfigElement element) {
// id
setId(element.getAttribute(ID));
setId(SafeStringInterner.safeIntern(element.getAttribute(ID)));
// Get the name
setName(element.getAttribute(NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(NAME)));
// resourcePath
String tmp = element.getAttribute(RESOURCE_PATH);
@ -139,12 +141,12 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo
private void loadFromProject(ICStorageElement element) {
// id
// id (unique, do not intern)
setId(element.getAttribute(ID));
// name
if (element.getAttribute(NAME) != null) {
setName(element.getAttribute(NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(NAME)));
}
// resourcePath

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others.
* Copyright (c) 2007, 2011 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
@ -7,6 +7,7 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.core;
@ -17,6 +18,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.core.IBuildPropertiesRestriction;
import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement;
@ -103,7 +105,7 @@ public class SupportedProperties implements IBuildPropertiesRestriction {
for(int i = 0; i < children.length; i++){
IManagedConfigElement child = children[i];
if(PROPERTY.equals(child.getName())){
String id = child.getAttribute(ID);
String id = SafeStringInterner.safeIntern(child.getAttribute(ID));
if(id == null)
continue;
@ -119,7 +121,7 @@ public class SupportedProperties implements IBuildPropertiesRestriction {
for(int k = 0; k < values.length; k++){
IManagedConfigElement value = values[k];
if(PROPERTY_VALUE.equals(value.getName())){
String valueId = value.getAttribute(ID);
String valueId = SafeStringInterner.safeIntern(value.getAttribute(ID));
if(valueId == null || valueId.length() == 0)
continue;

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2003, 2006 IBM Corporation and others.
* Copyright (c) 2003, 2011 IBM 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
@ -18,6 +18,7 @@ import java.util.StringTokenizer;
import java.util.Vector;
import org.eclipse.cdt.core.ErrorParserManager;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.core.IBuilder;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IConfigurationV2;
@ -77,29 +78,29 @@ public class Target extends BuildObject implements ITarget {
resolved = false;
// id
setId(element.getAttribute(ID));
setId(SafeStringInterner.safeIntern(element.getAttribute(ID)));
// managedBuildRevision
setManagedBuildRevision(managedBuildRevision);
setManagedBuildRevision(SafeStringInterner.safeIntern(managedBuildRevision));
// hook me up
ManagedBuildManager.addExtensionTarget(this);
// Get the target name
setName(element.getAttribute(NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(NAME)));
// Get the name of the build artifact associated with target (usually
// in the plugin specification).
artifactName = element.getAttribute(ARTIFACT_NAME);
artifactName = SafeStringInterner.safeIntern(element.getAttribute(ARTIFACT_NAME));
// Get the ID of the binary parser
binaryParserId = element.getAttribute(BINARY_PARSER);
binaryParserId = SafeStringInterner.safeIntern(element.getAttribute(BINARY_PARSER));
// Get the semicolon separated list of IDs of the error parsers
errorParserIds = element.getAttribute(ERROR_PARSERS);
errorParserIds = SafeStringInterner.safeIntern(element.getAttribute(ERROR_PARSERS));
// Get the default extension
defaultExtension = element.getAttribute(DEFAULT_EXTENSION);
defaultExtension = SafeStringInterner.safeIntern(element.getAttribute(DEFAULT_EXTENSION));
// isAbstract
isAbstract = ("true".equals(element.getAttribute(IS_ABSTRACT))); //$NON-NLS-1$
@ -108,16 +109,16 @@ public class Target extends BuildObject implements ITarget {
isTest = ("true".equals(element.getAttribute(IS_TEST))); //$NON-NLS-1$
// Get the clean command
cleanCommand = element.getAttribute(CLEAN_COMMAND);
cleanCommand = SafeStringInterner.safeIntern(element.getAttribute(CLEAN_COMMAND));
// Get the make command
makeCommand = element.getAttribute(MAKE_COMMAND);
makeCommand = SafeStringInterner.safeIntern(element.getAttribute(MAKE_COMMAND));
// Get the make arguments
makeArguments = element.getAttribute(MAKE_ARGS);
makeArguments = SafeStringInterner.safeIntern(element.getAttribute(MAKE_ARGS));
// Get scannerInfoCollectorId
scannerInfoCollectorId = element.getAttribute(SCANNER_INFO_COLLECTOR_ID);
scannerInfoCollectorId = SafeStringInterner.safeIntern(element.getAttribute(SCANNER_INFO_COLLECTOR_ID));
// Get the comma-separated list of valid OS
String os = element.getAttribute(OS_LIST);
@ -125,7 +126,7 @@ public class Target extends BuildObject implements ITarget {
targetOSList = new ArrayList<String>();
String[] osTokens = os.split(","); //$NON-NLS-1$
for (int i = 0; i < osTokens.length; ++i) {
targetOSList.add(osTokens[i].trim());
targetOSList.add(SafeStringInterner.safeIntern(osTokens[i].trim()));
}
}
@ -135,7 +136,7 @@ public class Target extends BuildObject implements ITarget {
targetArchList = new ArrayList<String>();
String[] archTokens = arch.split(","); //$NON-NLS-1$
for (int j = 0; j < archTokens.length; ++j) {
targetArchList.add(archTokens[j].trim());
targetArchList.add(SafeStringInterner.safeIntern(archTokens[j].trim()));
}
}
@ -772,7 +773,7 @@ public class Target extends BuildObject implements ITarget {
resolved = true;
IManagedConfigElement element = ManagedBuildManager.getConfigElement(this);
// parent
String parentId = element.getAttribute(PARENT);
String parentId = SafeStringInterner.safeIntern(element.getAttribute(PARENT));
if (parentId != null) {
parent = ManagedBuildManager.getTarget(null, parentId);
// should resolve before calling methods on it

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2004, 2008 Intel Corporation and others.
* Copyright (c) 2004, 2011 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
@ -7,6 +7,7 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.core;
@ -17,6 +18,7 @@ import java.util.List;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.core.settings.model.extension.CTargetPlatformData;
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement;
import org.eclipse.cdt.managedbuilder.core.IProjectType;
@ -183,16 +185,16 @@ public class TargetPlatform extends BuildObject implements ITargetPlatform {
ManagedBuildManager.putConfigElement(this, element);
// id
setId(element.getAttribute(IBuildObject.ID));
setId(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.ID)));
// Get the name
setName(element.getAttribute(IBuildObject.NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.NAME)));
// superClass
superClassId = element.getAttribute(IProjectType.SUPERCLASS);
superClassId = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.SUPERCLASS));
// Get the unused children, if any
unusedChildren = element.getAttribute(IProjectType.UNUSED_CHILDREN);
unusedChildren = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.UNUSED_CHILDREN));
// isAbstract
String isAbs = element.getAttribute(IProjectType.IS_ABSTRACT);
@ -216,7 +218,7 @@ public class TargetPlatform extends BuildObject implements ITargetPlatform {
archList = new ArrayList<String>();
String[] archTokens = arch.split(","); //$NON-NLS-1$
for (int j = 0; j < archTokens.length; ++j) {
archList.add(archTokens[j].trim());
archList.add(SafeStringInterner.safeIntern(archTokens[j].trim()));
}
}
@ -226,7 +228,7 @@ public class TargetPlatform extends BuildObject implements ITargetPlatform {
binaryParserList = new ArrayList<String>();
String[] bparsTokens = CDataUtil.stringToArray(bpars, ";"); //$NON-NLS-1$
for (int j = 0; j < bparsTokens.length; ++j) {
binaryParserList.add(bparsTokens[j].trim());
binaryParserList.add(SafeStringInterner.safeIntern(bparsTokens[j].trim()));
}
}
}
@ -239,16 +241,16 @@ public class TargetPlatform extends BuildObject implements ITargetPlatform {
*/
protected void loadFromProject(ICStorageElement element) {
// id
// id (unique, do not intern)
setId(element.getAttribute(IBuildObject.ID));
// name
if (element.getAttribute(IBuildObject.NAME) != null) {
setName(element.getAttribute(IBuildObject.NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.NAME)));
}
// superClass
superClassId = element.getAttribute(IProjectType.SUPERCLASS);
superClassId = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.SUPERCLASS));
if (superClassId != null && superClassId.length() > 0) {
superClass = ManagedBuildManager.getExtensionTargetPlatform(superClassId);
if (superClass == null) {
@ -258,7 +260,7 @@ public class TargetPlatform extends BuildObject implements ITargetPlatform {
// Get the unused children, if any
if (element.getAttribute(IProjectType.UNUSED_CHILDREN) != null) {
unusedChildren = element.getAttribute(IProjectType.UNUSED_CHILDREN);
unusedChildren = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.UNUSED_CHILDREN));
}
// isAbstract
@ -276,7 +278,7 @@ public class TargetPlatform extends BuildObject implements ITargetPlatform {
osList = new ArrayList<String>();
String[] osTokens = os.split(","); //$NON-NLS-1$
for (int i = 0; i < osTokens.length; ++i) {
osList.add(osTokens[i].trim());
osList.add(SafeStringInterner.safeIntern(osTokens[i].trim()));
}
}
}
@ -288,7 +290,7 @@ public class TargetPlatform extends BuildObject implements ITargetPlatform {
archList = new ArrayList<String>();
String[] archTokens = arch.split(","); //$NON-NLS-1$
for (int j = 0; j < archTokens.length; ++j) {
archList.add(archTokens[j].trim());
archList.add(SafeStringInterner.safeIntern(archTokens[j].trim()));
}
}
}
@ -300,7 +302,7 @@ public class TargetPlatform extends BuildObject implements ITargetPlatform {
binaryParserList = new ArrayList<String>();
String[] bparsTokens = CDataUtil.stringToArray(bpars, ";"); //$NON-NLS-1$
for (int j = 0; j < bparsTokens.length; ++j) {
binaryParserList.add(bparsTokens[j].trim());
binaryParserList.add(SafeStringInterner.safeIntern(bparsTokens[j].trim()));
}
}
}

View file

@ -31,6 +31,7 @@ import org.eclipse.cdt.build.internal.core.scannerconfig.CfgDiscoveredPathManage
import org.eclipse.cdt.core.cdtvariables.CdtVariableException;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.core.settings.model.extension.CLanguageData;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyType;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyValue;
import org.eclipse.cdt.managedbuilder.core.BuildException;
@ -667,25 +668,25 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch
ManagedBuildManager.putConfigElement(this, element);
// id
setId(element.getAttribute(IBuildObject.ID));
setId(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.ID)));
// name
setName(element.getAttribute(IBuildObject.NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.NAME)));
// version
setVersion(getVersionFromId());
// superClass
superClassId = element.getAttribute(IProjectType.SUPERCLASS);
superClassId = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.SUPERCLASS));
// Get the unused children, if any
unusedChildren = element.getAttribute(IProjectType.UNUSED_CHILDREN);
unusedChildren = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.UNUSED_CHILDREN));
// Get the 'versionsSupported' attribute
versionsSupported =element.getAttribute(VERSIONS_SUPPORTED);
versionsSupported = SafeStringInterner.safeIntern(element.getAttribute(VERSIONS_SUPPORTED));
// Get the 'convertToId' attribute
convertToId = element.getAttribute(CONVERT_TO_ID);
convertToId = SafeStringInterner.safeIntern(element.getAttribute(CONVERT_TO_ID));
// isAbstract
String isAbs = element.getAttribute(IProjectType.IS_ABSTRACT);
@ -694,7 +695,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch
}
// Get the semicolon separated list of IDs of the error parsers
errorParserIds = element.getAttribute(IToolChain.ERROR_PARSERS);
errorParserIds = SafeStringInterner.safeIntern(SafeStringInterner.safeIntern(element.getAttribute(IToolChain.ERROR_PARSERS)));
// Get the nature filter
String nature = element.getAttribute(NATURE);
@ -715,7 +716,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch
if (inputs != null) {
StringTokenizer tokenizer = new StringTokenizer(inputs, DEFAULT_SEPARATOR);
while (tokenizer.hasMoreElements()) {
getInputExtensionsList().add((String)tokenizer.nextElement());
getInputExtensionsList().add(SafeStringInterner.safeIntern(tokenizer.nextToken()));
}
}
@ -724,24 +725,24 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch
if (headers != null) {
StringTokenizer tokenizer = new StringTokenizer(headers, DEFAULT_SEPARATOR);
while (tokenizer.hasMoreElements()) {
getInterfaceExtensionsList().add((String)tokenizer.nextElement());
getInterfaceExtensionsList().add(SafeStringInterner.safeIntern(tokenizer.nextToken()));
}
}
// Get the output extension
outputExtensions = element.getAttribute(ITool.OUTPUTS);
outputExtensions = SafeStringInterner.safeIntern(element.getAttribute(ITool.OUTPUTS));
// Get the tool invocation command
command = element.getAttribute(ITool.COMMAND);
command = SafeStringInterner.safeIntern(element.getAttribute(ITool.COMMAND));
// Get the flag to control output
outputFlag = element.getAttribute(ITool.OUTPUT_FLAG);
outputFlag = SafeStringInterner.safeIntern(element.getAttribute(ITool.OUTPUT_FLAG));
// Get the output prefix
outputPrefix = element.getAttribute(ITool.OUTPUT_PREFIX);
outputPrefix = SafeStringInterner.safeIntern(element.getAttribute(ITool.OUTPUT_PREFIX));
// Get command line pattern
commandLinePattern = element.getAttribute( ITool.COMMAND_LINE_PATTERN );
commandLinePattern = SafeStringInterner.safeIntern(element.getAttribute( ITool.COMMAND_LINE_PATTERN ));
// Get advancedInputCategory
String advInput = element.getAttribute(ITool.ADVANCED_INPUT_CATEGORY);
@ -756,7 +757,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch
}
// Get the announcement text
announcement = element.getAttribute(ITool.ANNOUNCEMENT);
announcement = SafeStringInterner.safeIntern(element.getAttribute(ITool.ANNOUNCEMENT));
// Store the configuration element IFF there is a command line generator defined
String commandLineGenerator = element.getAttribute(COMMAND_LINE_GENERATOR);
@ -787,7 +788,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch
if(tmp != null)
supportsManagedBuild = Boolean.valueOf(tmp);
scannerConfigDiscoveryProfileId = element.getAttribute(IToolChain.SCANNER_CONFIG_PROFILE_ID);
scannerConfigDiscoveryProfileId = SafeStringInterner.safeIntern(element.getAttribute(IToolChain.SCANNER_CONFIG_PROFILE_ID));
tmp = element.getAttribute(IS_SYSTEM);
if(tmp != null)
@ -802,35 +803,23 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch
*/
protected void loadFromProject(ICStorageElement element) {
// id
// id (unique, do not intern)
setId(element.getAttribute(IBuildObject.ID));
// name
if (element.getAttribute(IBuildObject.NAME) != null) {
setName(element.getAttribute(IBuildObject.NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.NAME)));
}
// version
setVersion(getVersionFromId());
// superClass
superClassId = element.getAttribute(IProjectType.SUPERCLASS);
// if (superClassId != null && superClassId.length() > 0) {
// if( getParent() instanceof IResourceConfiguration ) {
// IResourceConfiguration resConfig = (IResourceConfiguration) getParent();
// setSuperClassInternal( resConfig.getParent().getTool(superClassId) );
// } else {
// setSuperClassInternal( ManagedBuildManager.getExtensionTool(superClassId) );
// }
//
// // Check for migration support
// checkForMigrationSupport();
//
// }
superClassId = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.SUPERCLASS));
// Get the unused children, if any
if (element.getAttribute(IProjectType.UNUSED_CHILDREN) != null) {
unusedChildren = element.getAttribute(IProjectType.UNUSED_CHILDREN);
unusedChildren = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.UNUSED_CHILDREN));
}
// isAbstract
@ -843,17 +832,17 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch
// Get the 'versionSupported' attribute
if (element.getAttribute(VERSIONS_SUPPORTED) != null) {
versionsSupported = element.getAttribute(VERSIONS_SUPPORTED);
versionsSupported = SafeStringInterner.safeIntern(element.getAttribute(VERSIONS_SUPPORTED));
}
// Get the 'convertToId' id
if (element.getAttribute(CONVERT_TO_ID) != null) {
convertToId = element.getAttribute(CONVERT_TO_ID);
convertToId = SafeStringInterner.safeIntern(element.getAttribute(CONVERT_TO_ID));
}
// Get the semicolon separated list of IDs of the error parsers
if (element.getAttribute(IToolChain.ERROR_PARSERS) != null) {
errorParserIds = element.getAttribute(IToolChain.ERROR_PARSERS);
errorParserIds = SafeStringInterner.safeIntern(element.getAttribute(IToolChain.ERROR_PARSERS));
}
// Get the nature filter
@ -878,7 +867,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch
if (inputs != null) {
StringTokenizer tokenizer = new StringTokenizer(inputs, DEFAULT_SEPARATOR);
while (tokenizer.hasMoreElements()) {
getInputExtensionsList().add((String)tokenizer.nextElement());
getInputExtensionsList().add(SafeStringInterner.safeIntern(tokenizer.nextToken()));
}
}
}
@ -889,34 +878,34 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch
if (headers != null) {
StringTokenizer tokenizer = new StringTokenizer(headers, DEFAULT_SEPARATOR);
while (tokenizer.hasMoreElements()) {
getInterfaceExtensionsList().add((String)tokenizer.nextElement());
getInterfaceExtensionsList().add(SafeStringInterner.safeIntern(tokenizer.nextToken()));
}
}
}
// Get the output extension
if (element.getAttribute(ITool.OUTPUTS) != null) {
outputExtensions = element.getAttribute(ITool.OUTPUTS);
outputExtensions = SafeStringInterner.safeIntern(element.getAttribute(ITool.OUTPUTS));
}
// Get the tool invocation command
if (element.getAttribute(ITool.COMMAND) != null) {
command = element.getAttribute(ITool.COMMAND);
command = SafeStringInterner.safeIntern(element.getAttribute(ITool.COMMAND));
}
// Get the flag to control output
if (element.getAttribute(ITool.OUTPUT_FLAG) != null) {
outputFlag = element.getAttribute(ITool.OUTPUT_FLAG);
outputFlag = SafeStringInterner.safeIntern(element.getAttribute(ITool.OUTPUT_FLAG));
}
// Get the output prefix
if (element.getAttribute(ITool.OUTPUT_PREFIX) != null) {
outputPrefix = element.getAttribute(ITool.OUTPUT_PREFIX);
outputPrefix = SafeStringInterner.safeIntern(element.getAttribute(ITool.OUTPUT_PREFIX));
}
// Get command line pattern
if( element.getAttribute( ITool.COMMAND_LINE_PATTERN ) != null) {
commandLinePattern = element.getAttribute( ITool.COMMAND_LINE_PATTERN );
commandLinePattern = SafeStringInterner.safeIntern(element.getAttribute( ITool.COMMAND_LINE_PATTERN ));
}
// advancedInputCategory
@ -937,7 +926,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch
// Get the announcement text
if (element.getAttribute(ITool.ANNOUNCEMENT) != null) {
announcement = element.getAttribute(ITool.ANNOUNCEMENT);
announcement = SafeStringInterner.safeIntern(element.getAttribute(ITool.ANNOUNCEMENT));
}
// icon - was saved as URL in string form
@ -952,7 +941,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory, IMatch
}
}
scannerConfigDiscoveryProfileId = element.getAttribute(IToolChain.SCANNER_CONFIG_PROFILE_ID);
scannerConfigDiscoveryProfileId = SafeStringInterner.safeIntern(element.getAttribute(IToolChain.SCANNER_CONFIG_PROFILE_ID));
}
void resolveProjectReferences(boolean onLoad){

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2004, 2010 Intel Corporation and others.
* Copyright (c) 2004, 2011 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
@ -7,6 +7,7 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.core;
@ -26,6 +27,7 @@ import org.eclipse.cdt.build.internal.core.scannerconfig.CfgDiscoveredPathManage
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.core.settings.model.extension.CTargetPlatformData;
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.internal.core.cdtvariables.StorableCdtVariables;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyType;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyValue;
@ -523,19 +525,19 @@ public class ToolChain extends HoldsOptions implements IToolChain, IMatchKeyProv
ManagedBuildManager.putConfigElement(this, element);
// id
setId(element.getAttribute(IBuildObject.ID));
setId(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.ID)));
// Get the name
setName(element.getAttribute(IBuildObject.NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.NAME)));
// version
setVersion(getVersionFromId());
// superClass
superClassId = element.getAttribute(IProjectType.SUPERCLASS);
superClassId = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.SUPERCLASS));
// Get the unused children, if any
unusedChildren = element.getAttribute(IProjectType.UNUSED_CHILDREN);
unusedChildren = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.UNUSED_CHILDREN));
// isAbstract
String isAbs = element.getAttribute(IProjectType.IS_ABSTRACT);
@ -544,25 +546,25 @@ public class ToolChain extends HoldsOptions implements IToolChain, IMatchKeyProv
}
// Get the semicolon separated list of IDs of the error parsers
errorParserIds = element.getAttribute(ERROR_PARSERS);
errorParserIds = SafeStringInterner.safeIntern(element.getAttribute(ERROR_PARSERS));
// Get the semicolon separated list of IDs of the secondary outputs
secondaryOutputIds = element.getAttribute(SECONDARY_OUTPUTS);
secondaryOutputIds = SafeStringInterner.safeIntern(element.getAttribute(SECONDARY_OUTPUTS));
// Get the target tool id
targetToolIds = element.getAttribute(TARGET_TOOL);
targetToolIds = SafeStringInterner.safeIntern(element.getAttribute(TARGET_TOOL));
// Get the scanner config discovery profile id
scannerConfigDiscoveryProfileId = element.getAttribute(SCANNER_CONFIG_PROFILE_ID);
scannerConfigDiscoveryProfileId = SafeStringInterner.safeIntern(element.getAttribute(SCANNER_CONFIG_PROFILE_ID));
String tmp = element.getAttribute(RESOURCE_TYPE_BASED_DISCOVERY);
if(tmp != null)
isRcTypeBasedDiscovery = Boolean.valueOf(tmp);
// Get the 'versionsSupported' attribute
versionsSupported =element.getAttribute(VERSIONS_SUPPORTED);
versionsSupported = SafeStringInterner.safeIntern(element.getAttribute(VERSIONS_SUPPORTED));
// Get the 'convertToId' attribute
convertToId = element.getAttribute(CONVERT_TO_ID);
convertToId = SafeStringInterner.safeIntern(element.getAttribute(CONVERT_TO_ID));
tmp = element.getAttribute(SUPPORTS_MANAGED_BUILD);
if(tmp != null)
@ -579,7 +581,7 @@ public class ToolChain extends HoldsOptions implements IToolChain, IMatchKeyProv
osList = new ArrayList<String>();
String[] osTokens = os.split(","); //$NON-NLS-1$
for (int i = 0; i < osTokens.length; ++i) {
osList.add(osTokens[i].trim());
osList.add(SafeStringInterner.safeIntern(osTokens[i].trim()));
}
}
@ -589,7 +591,7 @@ public class ToolChain extends HoldsOptions implements IToolChain, IMatchKeyProv
archList = new ArrayList<String>();
String[] archTokens = arch.split(","); //$NON-NLS-1$
for (int j = 0; j < archTokens.length; ++j) {
archList.add(archTokens[j].trim());
archList.add(SafeStringInterner.safeIntern(archTokens[j].trim()));
}
}
@ -617,7 +619,7 @@ public class ToolChain extends HoldsOptions implements IToolChain, IMatchKeyProv
pathconverterElement = ((DefaultManagedConfigElement)element).getConfigurationElement();
}
nonInternalBuilderId = element.getAttribute(NON_INTERNAL_BUILDER_ID);
nonInternalBuilderId = SafeStringInterner.safeIntern(element.getAttribute(NON_INTERNAL_BUILDER_ID));
}
@ -629,19 +631,19 @@ public class ToolChain extends HoldsOptions implements IToolChain, IMatchKeyProv
*/
protected void loadFromProject(ICStorageElement element) {
// id
// id (unique, do not intern)
setId(element.getAttribute(IBuildObject.ID));
// name
if (element.getAttribute(IBuildObject.NAME) != null) {
setName(element.getAttribute(IBuildObject.NAME));
setName(SafeStringInterner.safeIntern(element.getAttribute(IBuildObject.NAME)));
}
// version
setVersion(getVersionFromId());
// superClass
superClassId = element.getAttribute(IProjectType.SUPERCLASS);
superClassId = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.SUPERCLASS));
if (superClassId != null && superClassId.length() > 0) {
setSuperClassInternal( ManagedBuildManager.getExtensionToolChain(superClassId) );
// Check for migration support
@ -650,7 +652,7 @@ public class ToolChain extends HoldsOptions implements IToolChain, IMatchKeyProv
// Get the unused children, if any
if (element.getAttribute(IProjectType.UNUSED_CHILDREN) != null) {
unusedChildren = element.getAttribute(IProjectType.UNUSED_CHILDREN);
unusedChildren = SafeStringInterner.safeIntern(element.getAttribute(IProjectType.UNUSED_CHILDREN));
}
// isAbstract
@ -663,32 +665,32 @@ public class ToolChain extends HoldsOptions implements IToolChain, IMatchKeyProv
// Get the semicolon separated list of IDs of the error parsers
if (element.getAttribute(ERROR_PARSERS) != null) {
errorParserIds = element.getAttribute(ERROR_PARSERS);
errorParserIds = SafeStringInterner.safeIntern(element.getAttribute(ERROR_PARSERS));
}
// Get the semicolon separated list of IDs of the secondary outputs
if (element.getAttribute(SECONDARY_OUTPUTS) != null) {
secondaryOutputIds = element.getAttribute(SECONDARY_OUTPUTS);
secondaryOutputIds = SafeStringInterner.safeIntern(element.getAttribute(SECONDARY_OUTPUTS));
}
// Get the target tool id
if (element.getAttribute(TARGET_TOOL) != null) {
targetToolIds = element.getAttribute(TARGET_TOOL);
targetToolIds = SafeStringInterner.safeIntern(element.getAttribute(TARGET_TOOL));
}
// Get the scanner config discovery profile id
if (element.getAttribute(SCANNER_CONFIG_PROFILE_ID) != null) {
scannerConfigDiscoveryProfileId = element.getAttribute(SCANNER_CONFIG_PROFILE_ID);
scannerConfigDiscoveryProfileId = SafeStringInterner.safeIntern(element.getAttribute(SCANNER_CONFIG_PROFILE_ID));
}
// Get the 'versionSupported' attribute
if (element.getAttribute(VERSIONS_SUPPORTED) != null) {
versionsSupported = element.getAttribute(VERSIONS_SUPPORTED);
versionsSupported = SafeStringInterner.safeIntern(element.getAttribute(VERSIONS_SUPPORTED));
}
// Get the 'convertToId' id
if (element.getAttribute(CONVERT_TO_ID) != null) {
convertToId = element.getAttribute(CONVERT_TO_ID);
convertToId = SafeStringInterner.safeIntern(element.getAttribute(CONVERT_TO_ID));
}
// Get the comma-separated list of valid OS
@ -698,7 +700,7 @@ public class ToolChain extends HoldsOptions implements IToolChain, IMatchKeyProv
osList = new ArrayList<String>();
String[] osTokens = os.split(","); //$NON-NLS-1$
for (int i = 0; i < osTokens.length; ++i) {
osList.add(osTokens[i].trim());
osList.add(SafeStringInterner.safeIntern(osTokens[i].trim()));
}
}
}
@ -710,7 +712,7 @@ public class ToolChain extends HoldsOptions implements IToolChain, IMatchKeyProv
archList = new ArrayList<String>();
String[] archTokens = arch.split(","); //$NON-NLS-1$
for (int j = 0; j < archTokens.length; ++j) {
archList.add(archTokens[j].trim());
archList.add(SafeStringInterner.safeIntern(archTokens[j].trim()));
}
}
}
@ -727,7 +729,7 @@ public class ToolChain extends HoldsOptions implements IToolChain, IMatchKeyProv
if(tmp != null)
isRcTypeBasedDiscovery = Boolean.valueOf(tmp);
nonInternalBuilderId = element.getAttribute(NON_INTERNAL_BUILDER_ID);
nonInternalBuilderId = SafeStringInterner.safeIntern(element.getAttribute(NON_INTERNAL_BUILDER_ID));
// String tmp = element.getAttribute(name)
}

View file

@ -40,7 +40,7 @@ Export-Package: org.eclipse.cdt.core,
org.eclipse.cdt.core.templateengine,
org.eclipse.cdt.core.templateengine.process,
org.eclipse.cdt.core.templateengine.process.processes,
org.eclipse.cdt.internal.core;x-friends:="org.eclipse.cdt.ui,org.eclipse.cdt.debug.core",
org.eclipse.cdt.internal.core;x-friends:="org.eclipse.cdt.ui,org.eclipse.cdt.debug.core,org.eclipse.cdt.managedbuilder.core,org.eclipse.cdt.make.core,org.eclipse.cdt.make.ui",
org.eclipse.cdt.internal.core.browser;x-friends:="org.eclipse.cdt.ui",
org.eclipse.cdt.internal.core.cdtvariables;x-internal:=true,
org.eclipse.cdt.internal.core.dom;x-internal:=true,

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2007 Intel Corporation and others.
* Copyright (c) 2005, 2011 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
@ -7,9 +7,11 @@
*
* Contributors:
* Intel Corporation - Initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.core.cdtvariables;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.utils.cdtvariables.CdtVariableResolver;
/**
@ -28,13 +30,13 @@ public class CdtVariable implements ICdtVariable {
}
public CdtVariable(String name, int type, String value){
fName = name;
fName = SafeStringInterner.safeIntern(name);
fType = type;
fStringValue = value;
fStringValue = SafeStringInterner.safeIntern(value);
}
public CdtVariable(String name, int type, String value[]){
fName = name;
fName = SafeStringInterner.safeIntern(name);
fType = type;
fStringListValue = value;
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2009 Intel Corporation and others.
* Copyright (c) 2005, 2011 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
@ -8,9 +8,11 @@
* Contributors:
* Intel Corporation - Initial API and implementation
* James Blackburn (Broadcom Corp.)
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.core.envvar;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.eclipse.cdt.internal.core.envvar.EnvironmentVariableManager;
@ -27,9 +29,9 @@ public class EnvironmentVariable implements IEnvironmentVariable, Cloneable {
protected int fOperation;
public EnvironmentVariable(String name, String value, int op, String delimiter) {
fName = name;
fName = SafeStringInterner.safeIntern(name);
fOperation = op;
fValue = value;
fValue = SafeStringInterner.safeIntern(value);
if (delimiter == null)
fDelimiter = EnvironmentVariableManager.getDefault().getDefaultDelimiter();
else

View file

@ -0,0 +1,141 @@
/*******************************************************************************
* Copyright (c) 2009, 2011 IBM 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:
* IBM Corporation - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.core;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* Interns Strings in a safe manner, checking for nulls first.
* Does not guard against interning a String that has already been interned.
*
* @author crecoskie
*
*/
public class SafeStringInterner {
/**
* Interns the given String, safely checking for null first.
*
* @param string
* @return String
*/
public static String safeIntern(String string) {
if(string != null) {
return string.intern();
}
return string;
}
/**
* Interns the Strings in the given array, safely checking for null first.
*
* @param strArray
* @return String[]
*/
public static String[] safeIntern(String[] strArray) {
if(strArray == null)
return null;
for(int i =0; i < strArray.length; i++) {
strArray[i] = safeIntern(strArray[i]);
}
return strArray;
}
/**
* Returns a new version of the map such that all string keys and values are interned.
*
* @param <T>
* @param <M>
* @param map
* @return The map, after modification.
*/
@SuppressWarnings("unchecked")
public static <T> HashMap<String, T> safeIntern(HashMap<String, T> map) {
if(map == null || map.isEmpty()) {
return map;
}
HashMap<String, T> tempMap = new HashMap<String, T>(map);
map.clear();
for(String string : tempMap.keySet()) {
T value = tempMap.get(string);
if(value instanceof String) {
value = (T) safeIntern((String) value);
}
map.put(safeIntern(string), value);
}
return map;
}
/**
* Returns a new version of the map such that all string keys and values are interned.
*
* @param <T>
* @param map
* @return The map, after modification.
*/
@SuppressWarnings("unchecked")
public static <T> LinkedHashMap<String, T> safeIntern(LinkedHashMap<String, T> map) {
if(map == null || map.isEmpty()) {
return map;
}
LinkedHashMap<String, T> tempMap = new LinkedHashMap<String, T>(map);
map.clear();
for(String string : tempMap.keySet()) {
T value = tempMap.get(string);
if(value instanceof String) {
value = (T) safeIntern((String) value);
}
map.put(safeIntern(string), value);
}
return map;
}
/**
* Returns a new version of the map such that all string keys and values are interned.
*
* @param <T>
* @param map
* @return The map, after modification.
*/
@SuppressWarnings("unchecked")
public static <T> Map<String, T> safeIntern(Map<String, T> map) {
if(map == null || map.isEmpty()) {
return map;
}
HashMap<String, T> tempMap = new HashMap<String, T>(map);
map.clear();
for(String string : tempMap.keySet()) {
T value = tempMap.get(string);
if(value instanceof String) {
value = (T) safeIntern((String) value);
}
map.put(safeIntern(string), value);
}
return map;
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2009 Intel Corporation and others.
* Copyright (c) 2005, 2011 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
@ -8,11 +8,13 @@
* Contributors:
* Intel Corporation - Initial API and implementation
* James Blackburn (Broadcom Corp.)
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.utils.envvar;
import org.eclipse.cdt.core.envvar.EnvironmentVariable;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.internal.core.SafeStringInterner;
import org.osgi.service.prefs.Preferences;
/**
@ -54,9 +56,9 @@ public class StorableEnvVar extends EnvironmentVariable {
* @param element
*/
public StorableEnvVar(ICStorageElement element){
fName = element.getAttribute(NAME);
fName = SafeStringInterner.safeIntern(element.getAttribute(NAME));
fValue = element.getAttribute(VALUE);
fValue = SafeStringInterner.safeIntern(element.getAttribute(VALUE));
fOperation = opStringToInt(element.getAttribute(OPERATION));
@ -72,8 +74,8 @@ public class StorableEnvVar extends EnvironmentVariable {
* @since 5.2
*/
public StorableEnvVar(String name, Preferences element){
fName = name;
fValue = element.get(VALUE, null);
fName = SafeStringInterner.safeIntern(name);
fValue = SafeStringInterner.safeIntern(element.get(VALUE, null));
fOperation = opStringToInt(element.get(OPERATION, null));
fDelimiter = element.get(DELIMITER, null);
}