From f810db333f43b8d8eb995ef52ace1ae0fc4c461a Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Mon, 23 Jan 2017 11:08:20 -0500 Subject: [PATCH] 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 --- .../envvar/EnvVarOperationProcessor.java | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/envvar/EnvVarOperationProcessor.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/envvar/EnvVarOperationProcessor.java index 6f458aefcdc..93eec8f7162 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/envvar/EnvVarOperationProcessor.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/envvar/EnvVarOperationProcessor.java @@ -48,20 +48,30 @@ public class EnvVarOperationProcessor { switch(added.getOperation()){ case IEnvironmentVariable.ENVVAR_REMOVE: return new EnvironmentVariable(name,null,IEnvironmentVariable.ENVVAR_REMOVE,null); - case IEnvironmentVariable.ENVVAR_APPEND:{ - String delimiter = added.getDelimiter(); - return new EnvironmentVariable(name, - performAppend(initial.getValue(),added.getValue(),delimiter), -// IEnvironmentVariable.ENVVAR_APPEND, - delimiter); + case IEnvironmentVariable.ENVVAR_APPEND: { + String delimiter = added.getDelimiter(); + String newValue = performAppend(initial.getValue(), added.getValue(), delimiter); + int op; + if (initial.getOperation() == IEnvironmentVariable.ENVVAR_APPEND) { + op = IEnvironmentVariable.ENVVAR_APPEND; + } else { + // TODO should really only replace if initial is replace + op = IEnvironmentVariable.ENVVAR_REPLACE; } - case IEnvironmentVariable.ENVVAR_PREPEND:{ - String delimiter = added.getDelimiter(); - return new EnvironmentVariable(name, - performPrepend(initial.getValue(),added.getValue(),delimiter), -// IEnvironmentVariable.ENVVAR_PREPEND, - delimiter); + return new EnvironmentVariable(name, newValue, op, delimiter); + } + case IEnvironmentVariable.ENVVAR_PREPEND: { + String delimiter = added.getDelimiter(); + String newValue = performPrepend(initial.getValue(), added.getValue(), 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: default: return new EnvironmentVariable(added.getName(),added.getValue(),added.getDelimiter()); @@ -155,7 +165,7 @@ public class EnvVarOperationProcessor { static public List convertToList(String value, String delimiter){ if (value == null) value = ""; //$NON-NLS-1$ - List list = new ArrayList(); + List list = new ArrayList<>(); int delLength = delimiter.length(); int valLength = value.length(); @@ -182,7 +192,7 @@ public class EnvVarOperationProcessor { * removes duplicates */ static public List removeDuplicates(List value, List duplicates){ - List list = new ArrayList(); + List list = new ArrayList<>(); Iterator valueIter = value.iterator(); while(valueIter.hasNext()){ String curVal = valueIter.next();