From aa4abe428dee9287bacdcd16abad56ddf140e627 Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Tue, 19 Jun 2012 17:01:22 -0400 Subject: [PATCH] bug 348884: ConcurrentModificationException in StorableCdtVariables --- .../cdt/utils/StorableCdtVariablesTest.java | 27 ++++++++++++++----- .../cdtvariables/StorableCdtVariables.java | 5 +--- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/StorableCdtVariablesTest.java b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/StorableCdtVariablesTest.java index 9fd559e78f9..b9600c543a8 100644 --- a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/StorableCdtVariablesTest.java +++ b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/StorableCdtVariablesTest.java @@ -12,7 +12,8 @@ package org.eclipse.cdt.utils; -import java.util.ConcurrentModificationException; +import java.util.ArrayList; +import java.util.List; import junit.framework.Test; import junit.framework.TestCase; @@ -39,8 +40,8 @@ public class StorableCdtVariablesTest extends TestCase { ResourceHelper.cleanUp(); } - /* - * Unit test for Bugzilla #348884 + /** + * Unit test for bug 348884 */ public void testSetMacros() throws Exception { IProject project = ResourceHelper.createCDTProjectWithConfig("projectWithUserVars"); //$NON-NLS-1$ @@ -59,16 +60,28 @@ public class StorableCdtVariablesTest extends TestCase { try{ supplier.setMacros(new ICdtVariable[]{varA1, varA2, varA3, varA4}, desc); }catch(Throwable e){ - fail("1.0 Cannot set macros"); //$NON-NLS-1$ + fail(e.toString()); } + ICdtVariable[] vars = supplier.getMacros(desc); + List macroStrings = new ArrayList(); + for (ICdtVariable var : vars) { + macroStrings.add(var.getName() + '=' + var.getStringValue()); + } + assertTrue(macroStrings.contains(varA1.getName() + '=' + varA1.getStringValue())); + assertTrue(macroStrings.contains(varA2.getName() + '=' + varA2.getStringValue())); + assertTrue(macroStrings.contains(varA3.getName() + '=' + varA3.getStringValue())); + assertTrue(macroStrings.contains(varA4.getName() + '=' + varA4.getStringValue())); + assertEquals(4, macroStrings.size()); try{ supplier.setMacros(new ICdtVariable[]{varA1, varA2, varA5}, desc); - }catch(ConcurrentModificationException e){ - fail("1.1 Bugzilla #348884 unresolved"); //$NON-NLS-1$ }catch(Exception e){ - fail("1.2 Cannot set macros"); //$NON-NLS-1$ + fail(e.toString()); } + assertTrue(macroStrings.contains(varA1.getName() + '=' + varA1.getStringValue())); + assertTrue(macroStrings.contains(varA2.getName() + '=' + varA2.getStringValue())); + assertTrue(macroStrings.contains(varA5.getName() + '=' + varA5.getStringValue())); + assertEquals(3, macroStrings.size()); } } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/cdtvariables/StorableCdtVariables.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/cdtvariables/StorableCdtVariables.java index 15df511e109..3b86a1de3cf 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/cdtvariables/StorableCdtVariables.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/cdtvariables/StorableCdtVariables.java @@ -173,7 +173,7 @@ public class StorableCdtVariables implements IStorableCdtVariables { return null; } - /* + /** * sets the storable macros to hold the geven number of macros * all macros that are present in the store but not included in the given array * will be removed @@ -185,9 +185,6 @@ public class StorableCdtVariables implements IStorableCdtVariables { deleteAll(); else{ if (getMap().size() != 0) { - /* - * Fix for Bugzilla #348884 - */ Set existing = new HashSet(); Set macroNames = new HashSet();