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
;
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
);
34 myLanguage
= language
;
35 assert !(myLanguage
instanceof TemplateLanguage
);
38 public void contentsSynchronized() {
39 super.contentsSynchronized();
40 myRelevantLanguages
= null;
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
);
59 public LanguageFilter
[] getLanguageExtensions() {
60 return myLanguage
.getLanguageExtensions();
63 protected XmlFileViewProvider
cloneInner(final VirtualFile copy
) {
64 return new XmlFileViewProvider(getManager(), copy
, false, myLanguage
);