diff --git a/platform/core-api/src/com/intellij/lang/Language.java b/platform/core-api/src/com/intellij/lang/Language.java index c087bd24506a..ad775df664fc 100644 --- a/platform/core-api/src/com/intellij/lang/Language.java +++ b/platform/core-api/src/com/intellij/lang/Language.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -42,11 +42,9 @@ import java.util.*; public abstract class Language extends UserDataHolderBase { private static final Logger LOG = Logger.getInstance("#com.intellij.lang.Language"); - private static final Map, Language> ourRegisteredLanguages = - Collections.synchronizedMap(new THashMap, Language>()); - private static final Map> ourRegisteredMimeTypes = - Collections.synchronizedMap(new THashMap>()); - private static final Map ourRegisteredIDs = new THashMap(); + private static final Map, Language> ourRegisteredLanguages = Collections.synchronizedMap(new THashMap, Language>()); + private static final Map> ourRegisteredMimeTypes = Collections.synchronizedMap(new THashMap>()); + private static final Map ourRegisteredIDs = Collections.synchronizedMap(new THashMap()); private final Language myBaseLanguage; private final String myID; private final String[] myMimeTypes; @@ -105,6 +103,7 @@ public abstract class Language extends UserDataHolderBase { /** * @return collection of all languages registered so far. */ + @NotNull public static Collection getRegisteredLanguages() { final Collection languages = ourRegisteredLanguages.values(); return Collections.unmodifiableCollection(new ArrayList(languages)); @@ -114,7 +113,7 @@ public abstract class Language extends UserDataHolderBase { * @param klass java.lang.Class of the particular language. Serves key purpose. * @return instance of the klass language registered if any. */ - public static T findInstance(Class klass) { + public static T findInstance(@NotNull Class klass) { //noinspection unchecked return (T)ourRegisteredLanguages.get(klass); } @@ -125,11 +124,12 @@ public abstract class Language extends UserDataHolderBase { */ @NotNull public static Collection findInstancesByMimeType(@Nullable String mimeType) { - List result = mimeType != null ? ourRegisteredMimeTypes.get(mimeType) : null; - return result != null ? Collections.unmodifiableCollection(result) : Collections.emptyList(); + List result = mimeType == null ? null : ourRegisteredMimeTypes.get(mimeType); + return result == null ? Collections.emptyList() : Collections.unmodifiableCollection(result); } + @Override public String toString() { //noinspection HardCodedStringLiteral return "Language: " + myID; @@ -177,6 +177,7 @@ public abstract class Language extends UserDataHolderBase { return myBaseLanguage; } + @NotNull public String getDisplayName() { return getID(); } @@ -198,7 +199,7 @@ public abstract class Language extends UserDataHolderBase { return false; } - public final boolean isKindOf(String anotherLanguageId) { + public final boolean isKindOf(@NotNull String anotherLanguageId) { Language l = this; while (l != null) { if (l.getID().equals(anotherLanguageId)) return true; @@ -207,23 +208,18 @@ public abstract class Language extends UserDataHolderBase { return false; } + @NotNull public List getDialects() { return myDialects; } @Nullable public static Language findLanguageByID(String id) { - final Collection languages = getRegisteredLanguages(); - for (Language language : languages) { - if (language.getID().equals(id)) { - return language; - } - } - return null; + return id == null ? null : ourRegisteredIDs.get(id); } /** Fake language identifier without registering */ - protected Language(String id, @SuppressWarnings("UnusedParameters") boolean register) { + protected Language(@NotNull String id, @SuppressWarnings("UnusedParameters") boolean register) { myID = id; myBaseLanguage = null; myMimeTypes = null;