17
18
import java.util.LinkedList;
18
19
import java.util.List;
19
20
import java.util.Map;
21
import java.util.TreeMap;
23
import org.eclipse.core.resources.IContainer;
21
24
import org.eclipse.core.resources.IFile;
22
25
import org.eclipse.core.resources.IProject;
23
26
import org.eclipse.core.resources.IResource;
695
698
ICConfigurationDescription cfgDescription = getConfigurationDescription();
696
699
IResource rc = getResource();
697
700
if (entries != null && rc != null) {
698
List<ICLanguageSettingEntry> parentEntries = null;
699
if (rc instanceof IProject) {
700
parentEntries = new ArrayList<ICLanguageSettingEntry>();
702
parentEntries = LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, cfgDescription, rc.getParent(), currentLanguageId);
701
IContainer parent = rc instanceof IProject ? null : rc.getParent();
702
List<ICLanguageSettingEntry> parentEntries = LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, cfgDescription, parent, currentLanguageId);
704
703
if (entries.equals(parentEntries)) {
705
704
// to use parent entries instead
940
939
if (languageIds.size() > 1) {
941
940
// remove null language when some real ones are defined
942
941
languageIds.remove(null);
943
Collections.sort(languageIds);
944
942
} else if (languageIds.isEmpty()) {
945
943
// if no languages are defined keep null language as "Unspecified language"
946
944
languageIds.add(null);
947
// Use a TreeMap to sort the languages by name.
948
// For each name we keep a list of ids in case of name overlap.
949
Map<String, List<String>> map = new TreeMap<String, List<String>>();
948
950
for (String langId : languageIds) {
949
951
ILanguage language = LanguageManager.getInstance().getLanguage(langId);
951
953
String langName = language != null ? language.getName() : Messages.LanguageSettingsEntriesTab_UnspecifiedLanguage;
952
954
if (langName == null || langName.length() == 0)
955
TreeItem t = new TreeItem(treeLanguages, SWT.NONE);
956
t.setText(0, langName);
958
if (currentLanguageIdGlobal != null && currentLanguageIdGlobal.equals(langId)) {
959
currentLanguageId = currentLanguageIdGlobal;
960
treeLanguages.setSelection(t);
961
} else if (currentLanguageId == null) {
962
// this selects first language on first round
963
// do not select the tree item and global language selection here, only on actual click
964
currentLanguageId = langId;
956
List<String> langIds = map.get(langName);
957
if (langIds == null) {
958
langIds = new ArrayList<String>();
959
map.put(langName, langIds);
964
for (String langName : map.keySet()) {
965
List<String> langIds = map.get(langName);
966
for (String langId : langIds) {
967
TreeItem t = new TreeItem(treeLanguages, SWT.NONE);
968
if (langIds.size() == 1) {
969
t.setText(0, langName);
971
StringBuilder uniqueLangName = new StringBuilder();
972
uniqueLangName.append(langName).append(" [id=") //$NON-NLS-1$
973
.append(langId).append("]"); //$NON-NLS-1$
974
t.setText(0, uniqueLangName.toString());
977
if (currentLanguageIdGlobal != null && currentLanguageIdGlobal.equals(langId)) {
978
currentLanguageId = currentLanguageIdGlobal;
979
treeLanguages.setSelection(t);
980
} else if (currentLanguageId == null) {
981
// this selects first language on first round
982
// do not select the tree item and global language selection here, only on actual click
983
currentLanguageId = langId;