AE: PsiFileBase.findLanguage
[fedora-idea.git] / xml / impl / src / com / intellij / lang / xml / XmlFileViewProvider.java
blob5f5191200e271058f69486033b457075f7422919
1 /*
2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com.intellij.lang.xml;
18 import com.intellij.lang.Language;
19 import com.intellij.lang.LanguageFilter;
20 import com.intellij.openapi.vfs.VirtualFile;
21 import com.intellij.psi.CompositeLanguageFileViewProvider;
22 import com.intellij.psi.PsiManager;
23 import com.intellij.psi.templateLanguages.TemplateLanguage;
24 import org.jetbrains.annotations.NotNull;
26 import java.util.*;
28 public class XmlFileViewProvider extends CompositeLanguageFileViewProvider {
29 private Set<Language> myRelevantLanguages = null;
30 private final XMLLanguage myLanguage;
32 public XmlFileViewProvider(final PsiManager manager, final VirtualFile virtualFile, final boolean physical, XMLLanguage language) {
33 super(manager, virtualFile, physical, language);
34 myLanguage = language;
35 assert !(myLanguage instanceof TemplateLanguage);
38 public void contentsSynchronized() {
39 super.contentsSynchronized();
40 myRelevantLanguages = null;
43 @NotNull
44 public Set<Language> getLanguages() {
45 if (myRelevantLanguages != null) return myRelevantLanguages;
46 List<Language> relevantLanguages = new ArrayList<Language>(1);
47 relevantLanguages.add(myLanguage);
48 relevantLanguages.addAll(Arrays.asList(myLanguage.getLanguageExtensionsForFile(getPsi(myLanguage))));
49 return myRelevantLanguages = new LinkedHashSet<Language>(relevantLanguages);
52 // Specifically override super implementation method in order to prevent SOE when this class's getRelevantLanguages() is invoked before
53 // getting psi for myLanguage (see also super.isRelevantLanguage as well)
54 protected boolean isRelevantLanguage(final Language lang) {
55 return myLanguage == lang || super.isRelevantLanguage(lang);
58 @NotNull
59 public LanguageFilter[] getLanguageExtensions() {
60 return myLanguage.getLanguageExtensions();
63 protected XmlFileViewProvider cloneInner(final VirtualFile copy) {
64 return new XmlFileViewProvider(getManager(), copy, false, myLanguage);