package com.intellij.lang.javascript.uml; import com.intellij.diagram.AbstractDiagramNodeContentManager; import com.intellij.diagram.DiagramCategory; import com.intellij.diagram.presentation.DiagramState; import com.intellij.lang.javascript.psi.JSFunction; import com.intellij.lang.javascript.psi.JSVariable; import com.intellij.lang.javascript.psi.impl.JSFunctionImpl; import com.intellij.lang.javascript.psi.util.JSUtils; import com.intellij.psi.PsiElement; import com.intellij.util.PlatformIcons; public class FlashUmlNodeContentManager extends AbstractDiagramNodeContentManager { private static final DiagramCategory FIELDS = new DiagramCategory("Fields", PlatformIcons.FIELD_ICON); private static final DiagramCategory CONSTRUCTORS = new DiagramCategory("Constructors", JSFunctionImpl.CONSTRUCTOR_ICON); private static final DiagramCategory METHODS = new DiagramCategory("Methods", PlatformIcons.METHOD_ICON); private static final DiagramCategory PROPERTIES = new DiagramCategory("Properties", PlatformIcons.PROPERTY_ICON); private final static DiagramCategory[] CATEGORIES = {FIELDS, CONSTRUCTORS, METHODS, PROPERTIES}; public DiagramCategory[] getContentCategories() { return CATEGORIES; } public boolean isInCategory(Object obj, DiagramCategory category, DiagramState presentation) { if (!(obj instanceof PsiElement)) return false; PsiElement element = (PsiElement)obj; if (JSUtils.getMemberContainingClass(element) == null) return false; if (FIELDS.equals(category)) { return element instanceof JSVariable; } if (CONSTRUCTORS.equals(category)) { return element instanceof JSFunction && ((JSFunction)element).getKind() == JSFunction.FunctionKind.CONSTRUCTOR; } if (METHODS.equals(category)) { return element instanceof JSFunction && ((JSFunction)element).getKind() == JSFunction.FunctionKind.SIMPLE; } if (PROPERTIES.equals(category)) { return element instanceof JSFunction && (((JSFunction)element).getKind() == JSFunction.FunctionKind.GETTER || ((JSFunction)element).getKind() == JSFunction.FunctionKind.SETTER); } return false; } }