From 53306d93e97e6942660d6e9f865fdb543eb1a3ba Mon Sep 17 00:00:00 2001 From: Chris Recoskie Date: Wed, 2 May 2012 14:49:05 -0400 Subject: [PATCH] Bug 378270 - xlc macro supplier doesn't overwrite old values for compiler root location --- .../xlc/ui/XLCProjectMacroSupplier.java | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/xlc/org.eclipse.cdt.managedbuilder.xlc.ui/src/org/eclipse/cdt/managedbuilder/xlc/ui/XLCProjectMacroSupplier.java b/xlc/org.eclipse.cdt.managedbuilder.xlc.ui/src/org/eclipse/cdt/managedbuilder/xlc/ui/XLCProjectMacroSupplier.java index 4f614e44c67..f8d62f34608 100644 --- a/xlc/org.eclipse.cdt.managedbuilder.xlc.ui/src/org/eclipse/cdt/managedbuilder/xlc/ui/XLCProjectMacroSupplier.java +++ b/xlc/org.eclipse.cdt.managedbuilder.xlc.ui/src/org/eclipse/cdt/managedbuilder/xlc/ui/XLCProjectMacroSupplier.java @@ -101,14 +101,34 @@ public class XLCProjectMacroSupplier implements IProjectBuildMacroSupplier { // our array consists of our macro, plus all the macros from our parent IBuildMacro[] parentMacros = provider.getMacros(IBuildMacroProvider.CONTEXT_PROJECT, project, true); - int numMacros = parentMacros.length + 1; // +1 for our macro - + + // look for an existing macro definition + int foundIndex = -1; + for(int k = 0; k < parentMacros.length; k++) { + + if(parentMacros[k].getName().equals(macro.getName())) { + foundIndex = k; + break; + } + } + + int numMacros = (foundIndex == -1) ? parentMacros.length + 1 : parentMacros.length; + IBuildMacro[] macros = new IBuildMacro[numMacros]; - macros[0] = macro; + // if there was no existing value then add it to the front + if(foundIndex == -1) { + macros[0] = macro; + for(int k = 1; k < macros.length; k++) { + macros[k] = parentMacros[k-1]; + } + } - for(int k = 1; k < macros.length; k++) { - macros[k] = parentMacros[k-1]; + else { // replace the old value + for(int k = 0; k < macros.length; k++) { + macros[k] = parentMacros[k]; + } + macros[foundIndex] = macro; } return macros;