cleanup
[fedora-idea.git] / lang-impl / src / com / intellij / psi / DummyHolderViewProvider.java
blobc58cb96939a3f8aee9e03f1173417d0abe42918e
1 /*
2 * Copyright (c) 2005 JetBrains s.r.o. All Rights Reserved.
3 */
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;
23 import java.util.Set;
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) {
32 myManager = manager;
33 myModificationStamp = LocalTimeCounter.currentTime();
36 @NotNull
37 public PsiManager getManager() {
38 return myManager;
41 @Nullable
42 public Document getDocument() {
43 return FileDocumentManager.getInstance().getDocument(getVirtualFile());
46 @NotNull
47 public CharSequence getContents() {
48 return myHolder != null ? myHolder.getNode().getText() : "";
51 @NotNull
52 public VirtualFile getVirtualFile() {
53 return myLightVirtualFile;
56 @NotNull
57 public Language getBaseLanguage() {
58 return myHolder.getLanguage();
61 @NotNull
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;
71 @NotNull
72 public Language getRootLanguage(final PsiElement elt) {
73 return elt.getLanguage();
76 @NotNull
77 public List<PsiFile> getAllFiles() {
78 return Collections.singletonList(getPsi(getBaseLanguage()));
81 public void beforeContentsSynchronized() {}
83 public void contentsSynchronized() {}
85 public boolean isEventSystemEnabled() {
86 return false;
89 public boolean isPhysical() {
90 return false;
93 public long getModificationStamp() {
94 return myModificationStamp;
97 public boolean supportsIncrementalReparse(final Language rootLanguage) {
98 return true;
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);
117 @Nullable
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() {
133 return false;
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;