1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-13 19:25:38 +02:00

Bug 417852 - java.utilConcurrentModificationException in

LanguageVerifier

Change-Id: I8c614c37ab1559069c0639e8c4247ec414e0f0fd
Signed-off-by: Serge Beauchamp <sergebeauchamp@mac.com>
Reviewed-on: https://git.eclipse.org/r/16703
Reviewed-by: Sergey Prigogin <eclipse.sprigogin@gmail.com>
IP-Clean: Sergey Prigogin <eclipse.sprigogin@gmail.com>
Tested-by: Sergey Prigogin <eclipse.sprigogin@gmail.com>
This commit is contained in:
Serge Beauchamp 2013-09-23 19:14:29 +01:00 committed by Sergey Prigogin
parent 7569b2522f
commit dc28d7f6f8
3 changed files with 56 additions and 2 deletions

View file

@ -0,0 +1,47 @@
/*******************************************************************************
* Copyright (c) 2013 Serge Beauchamp 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:
* Serge Beauchamp (Freescale Semiconductor.) - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.ui.tests.misc;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
import org.eclipse.cdt.core.language.WorkspaceLanguageConfiguration;
import org.eclipse.cdt.core.model.ILanguage;
import org.eclipse.cdt.internal.ui.language.LanguageVerifier;
/**
* Tests for CDT Language Verifier.
*/
public class LanguageVerifierTests extends TestCase {
/**
* This API call was throwing a java.utilConcurrentModificationException.
* see Bug 417852
*/
public void testConcurrentExceptionInLanguageVerifier() throws Exception {
WorkspaceLanguageConfiguration config = new WorkspaceLanguageConfiguration();
config.addWorkspaceMapping("foo", "bar");
config.addWorkspaceMapping("foo2", "bar2");
Map<String, ILanguage> availableLanguages = new HashMap<String, ILanguage>();
availableLanguages.put("foo", null);
availableLanguages.put("foo3", null);
LanguageVerifier.removeMissingLanguages(config, availableLanguages);
}
}

View file

@ -25,5 +25,6 @@ public class MiscTestSuite extends TestSuite {
public MiscTestSuite() { public MiscTestSuite() {
super(MiscTestSuite.class.getName()); super(MiscTestSuite.class.getName());
addTestSuite(CDTSharedImagesTests.class); addTestSuite(CDTSharedImagesTests.class);
addTestSuite(LanguageVerifierTests.class);
} }
} }

View file

@ -7,10 +7,13 @@
* *
* Contributors: * Contributors:
* IBM Corporation - Initial API and implementation * IBM Corporation - Initial API and implementation
* Freescale Semiconductor - Bug 417852
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.ui.language; package org.eclipse.cdt.internal.ui.language;
import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.TreeMap; import java.util.TreeMap;
@ -97,16 +100,19 @@ public class LanguageVerifier {
// Check content type mappings // Check content type mappings
Iterator<Entry<String, String>> contentTypeMappings = config.getWorkspaceMappings().entrySet().iterator(); Iterator<Entry<String, String>> contentTypeMappings = config.getWorkspaceMappings().entrySet().iterator();
List<String> removals = new ArrayList<String>();
while (contentTypeMappings.hasNext()) { while (contentTypeMappings.hasNext()) {
Entry<String, String> entry = contentTypeMappings.next(); Entry<String, String> entry = contentTypeMappings.next();
String contentTypeId = entry.getKey();
String languageId = entry.getValue(); String languageId = entry.getValue();
if (!availableLanguages.containsKey(languageId)) { if (!availableLanguages.containsKey(languageId)) {
missingLanguages.add(languageId); missingLanguages.add(languageId);
config.removeWorkspaceMapping(contentTypeId); removals.add(entry.getKey());
} }
} }
for (String removal : removals) {
config.removeWorkspaceMapping(removal);
}
return missingLanguages; return missingLanguages;
} }
} }