1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-24 00:33:48 +02:00

Bug 510885 Fix case where two env vars try to prepend

The env var operation processer always turned the resulting operation
into a replace, even if it was two prepends. That kills the actual
prepend operation. In this case, keep it as a prepend. Also fix the
append case this way.

Unfortunately this is still broken in other multiple operation
cases, like appending then prepending.

Change-Id: Ib158317f16d025a479201745159a2aa3c1335e25
This commit is contained in:
Doug Schaefer 2017-01-23 11:08:20 -05:00 committed by Gerrit Code Review @ Eclipse.org
parent 18a6da0bab
commit f810db333f

View file

@ -48,20 +48,30 @@ public class EnvVarOperationProcessor {
switch(added.getOperation()){ switch(added.getOperation()){
case IEnvironmentVariable.ENVVAR_REMOVE: case IEnvironmentVariable.ENVVAR_REMOVE:
return new EnvironmentVariable(name,null,IEnvironmentVariable.ENVVAR_REMOVE,null); return new EnvironmentVariable(name,null,IEnvironmentVariable.ENVVAR_REMOVE,null);
case IEnvironmentVariable.ENVVAR_APPEND:{ case IEnvironmentVariable.ENVVAR_APPEND: {
String delimiter = added.getDelimiter(); String delimiter = added.getDelimiter();
return new EnvironmentVariable(name, String newValue = performAppend(initial.getValue(), added.getValue(), delimiter);
performAppend(initial.getValue(),added.getValue(),delimiter), int op;
// IEnvironmentVariable.ENVVAR_APPEND, if (initial.getOperation() == IEnvironmentVariable.ENVVAR_APPEND) {
delimiter); op = IEnvironmentVariable.ENVVAR_APPEND;
} else {
// TODO should really only replace if initial is replace
op = IEnvironmentVariable.ENVVAR_REPLACE;
} }
case IEnvironmentVariable.ENVVAR_PREPEND:{ return new EnvironmentVariable(name, newValue, op, delimiter);
String delimiter = added.getDelimiter(); }
return new EnvironmentVariable(name, case IEnvironmentVariable.ENVVAR_PREPEND: {
performPrepend(initial.getValue(),added.getValue(),delimiter), String delimiter = added.getDelimiter();
// IEnvironmentVariable.ENVVAR_PREPEND, String newValue = performPrepend(initial.getValue(), added.getValue(), delimiter);
delimiter); int op;
if (initial.getOperation() == IEnvironmentVariable.ENVVAR_PREPEND) {
op = IEnvironmentVariable.ENVVAR_PREPEND;
} else {
// TODO should really only replace if initial is replace
op = IEnvironmentVariable.ENVVAR_REPLACE;
} }
return new EnvironmentVariable(name, newValue, op, delimiter);
}
case IEnvironmentVariable.ENVVAR_REPLACE: case IEnvironmentVariable.ENVVAR_REPLACE:
default: default:
return new EnvironmentVariable(added.getName(),added.getValue(),added.getDelimiter()); return new EnvironmentVariable(added.getName(),added.getValue(),added.getDelimiter());
@ -155,7 +165,7 @@ public class EnvVarOperationProcessor {
static public List<String> convertToList(String value, String delimiter){ static public List<String> convertToList(String value, String delimiter){
if (value == null) if (value == null)
value = ""; //$NON-NLS-1$ value = ""; //$NON-NLS-1$
List<String> list = new ArrayList<String>(); List<String> list = new ArrayList<>();
int delLength = delimiter.length(); int delLength = delimiter.length();
int valLength = value.length(); int valLength = value.length();
@ -182,7 +192,7 @@ public class EnvVarOperationProcessor {
* removes duplicates * removes duplicates
*/ */
static public List<String> removeDuplicates(List<String> value, List<String> duplicates){ static public List<String> removeDuplicates(List<String> value, List<String> duplicates){
List<String> list = new ArrayList<String>(); List<String> list = new ArrayList<>();
Iterator<String> valueIter = value.iterator(); Iterator<String> valueIter = value.iterator();
while(valueIter.hasNext()){ while(valueIter.hasNext()){
String curVal = valueIter.next(); String curVal = valueIter.next();