Create template quick fix now works for unresolved include and extends (PY-1210).
[idea/community.git] / platform / lang-api / src / com / intellij / psi / PsiReferenceWrapper.java
1 package com.intellij.psi;
2
3 import com.intellij.openapi.util.TextRange;
4 import com.intellij.util.IncorrectOperationException;
5 import org.jetbrains.annotations.NotNull;
6
7 /**
8  * @author traff
9  */
10 public class PsiReferenceWrapper implements PsiReference {
11   private final PsiReference myOriginalPsiReference;
12
13   public PsiReferenceWrapper(PsiReference originalPsiReference) {
14     myOriginalPsiReference = originalPsiReference;
15   }
16
17   @Override
18   public PsiElement getElement() {
19     return myOriginalPsiReference.getElement();
20   }
21
22   @Override
23   public TextRange getRangeInElement() {
24     return myOriginalPsiReference.getRangeInElement();
25   }
26
27   @Override
28   public PsiElement resolve() {
29     return myOriginalPsiReference.resolve();
30   }
31
32   @NotNull
33   @Override
34   public String getCanonicalText() {
35     return myOriginalPsiReference.getCanonicalText();
36   }
37
38   @Override
39   public PsiElement handleElementRename(String newElementName) throws IncorrectOperationException {
40     return myOriginalPsiReference.handleElementRename(newElementName);
41   }
42
43   @Override
44   public PsiElement bindToElement(@NotNull PsiElement element) throws IncorrectOperationException {
45     return myOriginalPsiReference.bindToElement(element);
46   }
47
48   @Override
49   public boolean isReferenceTo(PsiElement element) {
50     return myOriginalPsiReference.isReferenceTo(element);
51   }
52
53   @NotNull
54   @Override
55   public Object[] getVariants() {
56     return myOriginalPsiReference.getVariants();
57   }
58
59   @Override
60   public boolean isSoft() {
61     return myOriginalPsiReference.isSoft();
62   }
63
64   public <T extends PsiReference> boolean isInstance(Class<T> clazz) {
65     if (myOriginalPsiReference instanceof PsiReferenceWrapper) {
66       return ((PsiReferenceWrapper)myOriginalPsiReference).isInstance(clazz);
67     }
68     return clazz.isInstance(myOriginalPsiReference);
69   }
70
71   public <T extends PsiReference> T cast(Class<T> clazz) {
72     if (myOriginalPsiReference instanceof PsiReferenceWrapper) {
73       return ((PsiReferenceWrapper)myOriginalPsiReference).cast(clazz);
74     }
75     return clazz.cast(myOriginalPsiReference);
76   }
77 }