2 * Copyright (c) 2005 JetBrains s.r.o. All Rights Reserved.
4 package com
.intellij
.psi
;
6 import com
.intellij
.lang
.Language
;
7 import com
.intellij
.openapi
.editor
.Document
;
8 import com
.intellij
.openapi
.fileEditor
.FileDocumentManager
;
9 import com
.intellij
.openapi
.util
.UserDataHolderBase
;
10 import com
.intellij
.openapi
.vfs
.VirtualFile
;
11 import com
.intellij
.psi
.impl
.PsiManagerEx
;
12 import com
.intellij
.psi
.impl
.SharedPsiElementImplUtil
;
13 import com
.intellij
.psi
.impl
.source
.DummyHolder
;
14 import com
.intellij
.psi
.impl
.source
.PsiFileImpl
;
15 import com
.intellij
.psi
.impl
.source
.tree
.LeafElement
;
16 import com
.intellij
.testFramework
.LightVirtualFile
;
17 import com
.intellij
.util
.LocalTimeCounter
;
18 import org
.jetbrains
.annotations
.NotNull
;
19 import org
.jetbrains
.annotations
.Nullable
;
21 import java
.util
.Collections
;
22 import java
.util
.List
;
25 public class DummyHolderViewProvider
extends UserDataHolderBase
implements FileViewProvider
{
26 private DummyHolder myHolder
;
27 private final PsiManager myManager
;
28 private final long myModificationStamp
;
29 private final LightVirtualFile myLightVirtualFile
= new LightVirtualFile("DummyHolder");
31 public DummyHolderViewProvider(final PsiManager manager
) {
33 myModificationStamp
= LocalTimeCounter
.currentTime();
37 public PsiManager
getManager() {
42 public Document
getDocument() {
43 return FileDocumentManager
.getInstance().getDocument(getVirtualFile());
47 public CharSequence
getContents() {
48 return myHolder
!= null ? myHolder
.getNode().getText() : "";
52 public VirtualFile
getVirtualFile() {
53 return myLightVirtualFile
;
57 public Language
getBaseLanguage() {
58 return myHolder
.getLanguage();
62 public Set
<Language
> getLanguages() {
63 return Collections
.singleton(getBaseLanguage());
66 public PsiFile
getPsi(@NotNull Language target
) {
67 ((PsiManagerEx
)myManager
).getFileManager().setViewProvider(getVirtualFile(), this);
68 return target
== getBaseLanguage() ? myHolder
: null;
72 public Language
getRootLanguage(final PsiElement elt
) {
73 return elt
.getLanguage();
77 public List
<PsiFile
> getAllFiles() {
78 return Collections
.singletonList(getPsi(getBaseLanguage()));
81 public void beforeContentsSynchronized() {}
83 public void contentsSynchronized() {}
85 public boolean isEventSystemEnabled() {
89 public boolean isPhysical() {
93 public long getModificationStamp() {
94 return myModificationStamp
;
97 public boolean supportsIncrementalReparse(final Language rootLanguage
) {
101 public void rootChanged(PsiFile psiFile
) {
104 public void setDummyHolder(final DummyHolder dummyHolder
) {
105 myHolder
= dummyHolder
;
106 //myLightVirtualFile.setContent(null, getContents(), false);
109 public FileViewProvider
clone(){
110 throw new RuntimeException("Clone is not supported for DummyHolderProviders. Use DummyHolder clone directly.");
113 public PsiReference
findReferenceAt(final int offset
) {
114 return SharedPsiElementImplUtil
.findReferenceAt(getPsi(getBaseLanguage()), offset
);
118 public PsiElement
findElementAt(final int offset
, final Language language
) {
119 return language
== getBaseLanguage() ?
findElementAt(offset
) : null;
123 public PsiElement
findElementAt(int offset
, Class
<?
extends Language
> lang
) {
124 if (!lang
.isAssignableFrom(getBaseLanguage().getClass())) return null;
125 return findElementAt(offset
);
128 public PsiReference
findReferenceAt(final int offsetInElement
, @NotNull final Language language
) {
129 return language
== getBaseLanguage() ?
findReferenceAt(offsetInElement
) : null;
132 public boolean isLockedByPsiOperations() {
136 public FileViewProvider
createCopy(final LightVirtualFile copy
) {
137 throw new RuntimeException("Clone is not supported for DummyHolderProviders. Use DummyHolder clone directly.");
140 public PsiElement
findElementAt(final int offset
) {
141 final LeafElement element
= ((PsiFileImpl
)getPsi(getBaseLanguage())).calcTreeElement().findLeafElementAt(offset
);
142 return element
!= null ? element
.getPsi() : null;