removed getTextRange() overriding
[idea/community.git] / platform / core-impl / src / com / intellij / psi / impl / PomTargetPsiElementImpl.java
1 // Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.psi.impl;
3
4 import com.intellij.ide.IconProvider;
5 import com.intellij.ide.TypePresentationService;
6 import com.intellij.lang.Language;
7 import com.intellij.openapi.project.Project;
8 import com.intellij.pom.*;
9 import com.intellij.psi.PsiElement;
10 import com.intellij.psi.PsiFile;
11 import com.intellij.psi.PsiTarget;
12 import com.intellij.util.IncorrectOperationException;
13 import org.jetbrains.annotations.NonNls;
14 import org.jetbrains.annotations.NotNull;
15 import org.jetbrains.annotations.Nullable;
16
17 import javax.swing.*;
18
19 public class PomTargetPsiElementImpl extends RenameableFakePsiElement implements PomTargetPsiElement {
20   private final PomTarget myTarget;
21   private final Project myProject;
22
23   public PomTargetPsiElementImpl(@NotNull PsiTarget target) {
24     this(target.getNavigationElement().getProject(), target);
25   }
26
27   public PomTargetPsiElementImpl(@NotNull Project project, @NotNull PomTarget target) {
28     super(null);
29     myProject = project;
30     myTarget = target;
31   }
32
33   @Override
34   @NotNull
35   public PomTarget getTarget() {
36     return myTarget;
37   }
38
39   @Override
40   public String getName() {
41     if (myTarget instanceof PomNamedTarget) {
42       return ((PomNamedTarget)myTarget).getName();
43     }
44     return null;
45   }
46
47   @Override
48   public boolean isWritable() {
49     if (myTarget instanceof PomRenameableTarget) {
50       return ((PomRenameableTarget<?>)myTarget).isWritable();
51     }
52     return false;
53   }
54
55   @Override
56   public String getTypeName() {
57     throw new UnsupportedOperationException("Method getTypeName is not yet implemented for " + myTarget.getClass().getName() + "; see PomDescriptionProvider");
58   }
59
60   @NotNull
61   @Override
62   public PsiElement getNavigationElement() {
63     if (myTarget instanceof PsiTarget) {
64       return ((PsiTarget)myTarget).getNavigationElement();
65     }
66     return super.getNavigationElement();
67   }
68
69   @Override
70   public Icon getIcon() {
71     for (IconProvider iconProvider : IconProvider.EXTENSION_POINT_NAME.getExtensions()) {
72       if (iconProvider instanceof PomIconProvider) {
73         final Icon icon = ((PomIconProvider)iconProvider).getIcon(myTarget, 0);
74         if (icon != null) {
75           return icon;
76         }
77       }
78     }
79
80     Icon icon = TypePresentationService.getService().getIcon(myTarget);
81     if (icon != null) return icon;
82
83     if (myTarget instanceof PsiTarget) {
84       return ((PsiTarget)myTarget).getNavigationElement().getIcon(0);
85     }
86     return null;
87   }
88
89   @Override
90   public boolean isValid() {
91     if (myTarget instanceof PsiTarget) {
92       return ((PsiTarget)myTarget).getNavigationElement().isValid();
93     }
94
95     return myTarget.isValid();
96   }
97
98   @Override
99   public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException {
100     if (myTarget instanceof PomRenameableTarget) {
101       ((PomRenameableTarget<?>)myTarget).setName(name);
102       return this;
103     }
104     throw new UnsupportedOperationException("Cannot rename " + myTarget);
105   }
106
107   @Override
108   public boolean equals(Object o) {
109     if (this == o) return true;
110     if (o == null || getClass() != o.getClass()) return false;
111     PomTargetPsiElementImpl that = (PomTargetPsiElementImpl)o;
112     return myTarget.equals(that.myTarget);
113   }
114
115   @Override
116   public int hashCode() {
117     return myTarget.hashCode();
118   }
119
120   @Override
121   public boolean isEquivalentTo(PsiElement another) {
122     return equals(another) ||
123            (another != null && myTarget instanceof PsiTarget && another.isEquivalentTo(((PsiTarget)myTarget).getNavigationElement()));
124   }
125
126   @Override
127   public PsiElement getContext() {
128     if (myTarget instanceof PsiTarget) {
129       return ((PsiTarget)myTarget).getNavigationElement();
130     }
131     return null;
132   }
133
134   @Override
135   @Nullable
136   public PsiElement getParent() {
137     return null;
138   }
139
140   @Override
141   public void navigate(boolean requestFocus) {
142     myTarget.navigate(requestFocus);
143   }
144
145   @Override
146   public boolean canNavigate() {
147     return myTarget.canNavigate();
148   }
149
150   @Override
151   public boolean canNavigateToSource() {
152     return myTarget.canNavigateToSource();
153   }
154
155   @Override
156   public @Nullable PsiFile getContainingFile() {
157     if (myTarget instanceof PsiTarget) {
158       return ((PsiTarget)myTarget).getNavigationElement().getContainingFile();
159     }
160     return null;
161   }
162
163   @Override
164   public @NotNull Language getLanguage() {
165     if (myTarget instanceof PsiTarget) {
166       return ((PsiTarget)myTarget).getNavigationElement().getLanguage();
167     }
168     return Language.ANY;
169   }
170
171   @Override
172   public @NotNull Project getProject() {
173     return myProject;
174   }
175
176   @Override
177   public String getLocationString() {
178     if (myTarget instanceof PsiTarget) {
179       PsiFile file = ((PsiTarget)myTarget).getNavigationElement().getContainingFile();
180       if (file != null) {
181         return "(" + file.getName() + ")";
182       }
183     }
184     return super.getLocationString();
185   }
186 }