package com.jetbrains.lang.dart.ide.hierarchy.type; import com.intellij.icons.AllIcons; import com.intellij.ide.IdeBundle; import com.intellij.ide.hierarchy.HierarchyNodeDescriptor; import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ui.util.CompositeAppearance; import com.intellij.openapi.util.Comparing; import com.intellij.psi.PsiElement; import com.intellij.ui.LayeredIcon; import com.jetbrains.lang.dart.psi.DartClass; import com.jetbrains.lang.dart.util.DartResolveUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.awt.*; public final class DartTypeHierarchyNodeDescriptor extends HierarchyNodeDescriptor { public DartTypeHierarchyNodeDescriptor(@NotNull final Project project, @Nullable final HierarchyNodeDescriptor parentDescriptor, @NotNull final DartClass dartClass, final boolean isBase) { super(project, parentDescriptor, dartClass, isBase); } @Nullable public final DartClass getDartClass() { PsiElement element = getPsiElement(); return element instanceof DartClass ? (DartClass)element : null; } public final boolean update() { boolean changes = super.update(); final DartClass dartClass = getDartClass(); if (dartClass == null) { final String invalidPrefix = IdeBundle.message("node.hierarchy.invalid"); if (!myHighlightedText.getText().startsWith(invalidPrefix)) { myHighlightedText.getBeginning().addText(invalidPrefix, HierarchyNodeDescriptor.getInvalidPrefixAttributes()); } return true; } if (changes && myIsBase) { final LayeredIcon icon = new LayeredIcon(2); icon.setIcon(getIcon(), 0); icon.setIcon(AllIcons.Hierarchy.Base, 1, -AllIcons.Hierarchy.Base.getIconWidth() / 2, 0); setIcon(icon); } final CompositeAppearance oldText = myHighlightedText; myHighlightedText = new CompositeAppearance(); TextAttributes classNameAttributes = null; if (myColor != null) { classNameAttributes = new TextAttributes(myColor, null, null, null, Font.PLAIN); } final String libraryName = DartResolveUtil.getLibraryName(dartClass.getContainingFile()); myHighlightedText.getEnding().addText(dartClass.getName(), classNameAttributes); myHighlightedText.getEnding().addText(" (" + libraryName + ")", HierarchyNodeDescriptor.getPackageNameAttributes()); myName = myHighlightedText.getText(); if (!Comparing.equal(myHighlightedText, oldText)) { changes = true; } return changes; } }