diff --git a/platform/core-api/src/com/intellij/lang/Language.java b/platform/core-api/src/com/intellij/lang/Language.java
index 54fbab0d0188..d2b340738905 100644
--- a/platform/core-api/src/com/intellij/lang/Language.java
+++ b/platform/core-api/src/com/intellij/lang/Language.java
@@ -161,13 +161,19 @@ public abstract class Language extends UserDataHolderBase {
@ApiStatus.Internal
public LanguageFileType findMyFileType(FileType[] types) {
for (final FileType fileType : types) {
- if (fileType instanceof LanguageFileType && ((LanguageFileType)fileType).getLanguage() == this) {
- return (LanguageFileType)fileType;
+ if (fileType instanceof LanguageFileType) {
+ final LanguageFileType languageFileType = (LanguageFileType)fileType;
+ if (languageFileType.getLanguage() == this && !languageFileType.isSecondary()) {
+ return languageFileType;
+ }
}
}
for (final FileType fileType : types) {
- if (fileType instanceof LanguageFileType && isKindOf(((LanguageFileType)fileType).getLanguage())) {
- return (LanguageFileType)fileType;
+ if (fileType instanceof LanguageFileType) {
+ final LanguageFileType languageFileType = (LanguageFileType)fileType;
+ if (isKindOf(languageFileType.getLanguage()) && !languageFileType.isSecondary()) {
+ return languageFileType;
+ }
}
}
return null;
diff --git a/platform/core-api/src/com/intellij/openapi/fileTypes/LanguageFileType.java b/platform/core-api/src/com/intellij/openapi/fileTypes/LanguageFileType.java
index 6cdf10e557d6..3e46199afe77 100644
--- a/platform/core-api/src/com/intellij/openapi/fileTypes/LanguageFileType.java
+++ b/platform/core-api/src/com/intellij/openapi/fileTypes/LanguageFileType.java
@@ -29,13 +29,25 @@ import java.nio.charset.Charset;
*/
public abstract class LanguageFileType implements FileType{
private final Language myLanguage;
+ private final boolean mySecondary;
/**
* Creates a language file type for the specified language.
* @param language The language used in the files of the type.
*/
protected LanguageFileType(@NotNull final Language language) {
+ this(language, false);
+ }
+
+ /**
+ * Creates a language file type for the specified language.
+ * @param language The language used in the files of the type.
+ * @param secondary If true, this language file type will never be returned as the associated file type for the language.
+ * (Used when a file type is reusing the language of another file type, e.g. XML).
+ */
+ protected LanguageFileType(@NotNull final Language language, boolean secondary) {
myLanguage = language;
+ mySecondary = secondary;
}
/**
@@ -57,6 +69,10 @@ public abstract class LanguageFileType implements FileType{
return false;
}
+ public boolean isSecondary() {
+ return mySecondary;
+ }
+
@Override
public String getCharset(@NotNull VirtualFile file, @NotNull final byte[] content) {
return null;
diff --git a/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeBean.java b/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeBean.java
index fefba78faad4..64162d68a103 100644
--- a/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeBean.java
+++ b/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeBean.java
@@ -63,8 +63,8 @@ public class FileTypeBean extends AbstractExtensionPointBean {
public String fileNamesCaseInsensitive;
/**
- * For file types that extend {@link LanguageFileType}, this must be set to the ID of the language
- * returned by {@link LanguageFileType#getLanguage()}.
+ * For file types that extend {@link LanguageFileType} and are the primary file type for the corresponding language, this must be set
+ * to the ID of the language returned by {@link LanguageFileType#getLanguage()}
*/
@Attribute("language")
public String language;
diff --git a/python/src/META-INF/python-core-common.xml b/python/src/META-INF/python-core-common.xml
index 36783a634632..036c24c118bf 100644
--- a/python/src/META-INF/python-core-common.xml
+++ b/python/src/META-INF/python-core-common.xml
@@ -21,7 +21,7 @@
extensions="py;pyw;"
implementationClass="com.jetbrains.python.PythonFileType"
fieldName="INSTANCE"/>
-
+
diff --git a/python/src/com/jetbrains/pyqt/QtFileType.java b/python/src/com/jetbrains/pyqt/QtFileType.java
index b7e7e72d8fd1..1a04052a632b 100644
--- a/python/src/com/jetbrains/pyqt/QtFileType.java
+++ b/python/src/com/jetbrains/pyqt/QtFileType.java
@@ -32,7 +32,7 @@ public abstract class QtFileType extends LanguageFileType implements INativeFile
private final String myDefaultExtension;
QtFileType(String name, String description, String defaultExtension) {
- super(XMLLanguage.INSTANCE);
+ super(XMLLanguage.INSTANCE, true);
myName = name;
myDescription = description;
myDefaultExtension = defaultExtension;