diff --git a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/preferences/IPreferenceValuesProvider.java b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/preferences/IPreferenceValuesProvider.java index 725e9166f..2eefe85bb 100644 --- a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/preferences/IPreferenceValuesProvider.java +++ b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/preferences/IPreferenceValuesProvider.java @@ -10,16 +10,18 @@ package org.eclipse.xtext.preferences; import java.util.LinkedHashMap; import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.xtext.LanguageInfo; import com.google.common.collect.Maps; import com.google.inject.ImplementedBy; +import com.google.inject.Inject; import com.google.inject.Singleton; /** * @author Sven Efftinge - Initial contribution and API * @author Moritz Eysholdt */ -@ImplementedBy(IPreferenceValuesProvider.SimplePreferenceValuesProvider.class) +@ImplementedBy(IPreferenceValuesProvider.DefaultPreferenceValuesProvider.class) public interface IPreferenceValuesProvider { IPreferenceValues getPreferenceValues(Resource context); @@ -30,6 +32,26 @@ public interface IPreferenceValuesProvider { return new MapBasedPreferenceValues(new LinkedHashMap()); } } + + public static class DefaultPreferenceValuesProvider implements IPreferenceValuesProvider { + @Inject private LanguageInfo language; + + @Override + public IPreferenceValues getPreferenceValues(Resource context) { + PreferenceValuesByLanguage valuesByLanguage = PreferenceValuesByLanguage.findInEmfObject(context.getResourceSet()); + if (valuesByLanguage == null) + return empty(); + IPreferenceValues values = valuesByLanguage.get(language.getLanguageName()); + if (values == null) + return empty(); + return values; + } + + private IPreferenceValues empty() { + return new MapBasedPreferenceValues(Maps. newLinkedHashMap()); + } + + } @Singleton public class SingletonPreferenceValuesProvider implements IPreferenceValuesProvider { diff --git a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/preferences/PreferenceValuesByLanguage.xtend b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/preferences/PreferenceValuesByLanguage.xtend new file mode 100644 index 000000000..f7afba6e7 --- /dev/null +++ b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/preferences/PreferenceValuesByLanguage.xtend @@ -0,0 +1,23 @@ +/******************************************************************************* + * Copyright (c) 2015 itemis AG (http://www.itemis.eu) 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 + *******************************************************************************/ +package org.eclipse.xtext.preferences + +import java.util.Map +import org.eclipse.xtext.util.internal.EmfAdaptable + +@EmfAdaptable class PreferenceValuesByLanguage { + val Map preferencesByLanguage = newHashMap + + def get(String languageId) { + preferencesByLanguage.get(languageId) + } + + def put(String languageId, IPreferenceValues values) { + preferencesByLanguage.put(languageId, values) + } +} \ No newline at end of file