aboutsummaryrefslogtreecommitdiffstats
path: root/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyNodeDescriptor.java
diff options
context:
space:
mode:
Diffstat (limited to 'sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyNodeDescriptor.java')
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyNodeDescriptor.java71
1 files changed, 71 insertions, 0 deletions
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyNodeDescriptor.java b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyNodeDescriptor.java
new file mode 100644
index 00000000000..0cf612b0058
--- /dev/null
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyNodeDescriptor.java
@@ -0,0 +1,71 @@
+package org.intellij.sdk.language.hierarchy;
+
+import com.intellij.ide.hierarchy.HierarchyNodeDescriptor;
+import com.intellij.ide.util.treeView.NodeDescriptor;
+import com.intellij.navigation.ItemPresentation;
+import com.intellij.openapi.roots.ui.util.CompositeAppearance;
+import com.intellij.openapi.util.Comparing;
+import com.intellij.psi.NavigatablePsiElement;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiFile;
+
+import org.intellij.sdk.language.SdIcons;
+import org.intellij.sdk.language.SdUtil;
+import org.intellij.sdk.language.psi.SdFirstPhaseDefinition;
+import org.intellij.sdk.language.psi.SdFunctionDefinition;
+
+import org.jetbrains.annotations.NotNull;
+
+import javax.swing.Icon;
+
+public class SdCallHierarchyNodeDescriptor extends HierarchyNodeDescriptor {
+
+ public SdCallHierarchyNodeDescriptor(final NodeDescriptor parentDescriptor, @NotNull final PsiElement element, final boolean isBase) {
+ super(element.getProject(), parentDescriptor, element, isBase);
+ CompositeAppearance.DequeEnd beginning = myHighlightedText.getBeginning();
+ if (element instanceof SdFunctionDefinition) {
+ beginning.addText(SdUtil.createFunctionDescription((SdFunctionDefinition) element));
+ } else if (element instanceof SdFirstPhaseDefinition) {
+ beginning.addText(((SdFirstPhaseDefinition) element).getName());
+ } else {
+ beginning.addText(element.getText());
+ }
+ }
+
+ @Override
+ public boolean update() {
+ boolean changes = super.update();
+ final CompositeAppearance oldText = myHighlightedText;
+ myHighlightedText = new CompositeAppearance();
+ NavigatablePsiElement element = (NavigatablePsiElement)getPsiElement();
+ if (element == null) {
+ return invalidElement();
+ }
+
+ final ItemPresentation presentation = element.getPresentation();
+ if (presentation != null) {
+ myHighlightedText.getEnding().addText(presentation.getPresentableText());
+ PsiFile file = element.getContainingFile();
+ if (file != null) { // adds the file's name
+ myHighlightedText.getEnding().addText(" (" + file.getName() + ")", HierarchyNodeDescriptor.getPackageNameAttributes());
+ }
+ Icon icon = SdIcons.FILE;
+ if (element instanceof SdFunctionDefinition) {
+ icon = ((SdFunctionDefinition) element).isOverride() ? SdIcons.OVERRIDE_MACRO : SdIcons.MACRO;
+ } else if (element instanceof SdFirstPhaseDefinition) {
+ icon = SdIcons.FIRST_PHASE;
+ }
+ installIcon(icon, changes);
+ }
+
+ myName = myHighlightedText.getText();
+ if (!Comparing.equal(myHighlightedText, oldText)) {
+ changes = true;
+ }
+
+
+ return changes;
+
+ }
+
+} \ No newline at end of file