package com.intellij.lang.javascript.flex.presentation;
import com.intellij.ide.projectView.PresentationData;
import com.intellij.ide.projectView.ProjectViewNode;
import com.intellij.ide.projectView.ViewSettings;
import com.intellij.ide.util.treeView.AbstractTreeNode;
import com.intellij.lang.javascript.psi.JSElement;
import com.intellij.lang.javascript.psi.JSFunction;
import com.intellij.lang.javascript.psi.JSVariable;
import com.intellij.lang.javascript.ui.JSFormatUtil;
import com.intellij.openapi.util.Iconable;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiFormatUtilBase;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Collection;
public class FlexClassMemberNode extends ProjectViewNode<JSElement> {
public FlexClassMemberNode(JSElement element, ViewSettings settings) {
super(element.getProject(), element, settings);
}
@Override
public boolean contains(@NotNull VirtualFile file) {
return false;
}
@Override
public boolean canRepresent(Object element) {
JSElement value = getValue();
return value != null && value.isValid() && element instanceof JSElement && value.isEquivalentTo((PsiElement)element);
}
@NotNull
@Override
public Collection<? extends AbstractTreeNode> getChildren() {
return new ArrayList<>();
}
@Override
protected void update(PresentationData presentation) {
String text;
JSElement value = getValue();
if (value == null || !value.isValid()) {
return;
}
if (value instanceof JSFunction) {
text = JSFormatUtil
.formatMethod(((JSFunction)value), PsiFormatUtilBase.SHOW_NAME |
PsiFormatUtilBase.SHOW_PARAMETERS |
PsiFormatUtilBase.SHOW_TYPE |
PsiFormatUtilBase.TYPE_AFTER,
PsiFormatUtilBase.SHOW_TYPE);
}
else if (value instanceof JSVariable) {
text = JSFormatUtil
.formatField(((JSVariable)value), PsiFormatUtilBase.SHOW_NAME | PsiFormatUtilBase.SHOW_TYPE | PsiFormatUtilBase.TYPE_AFTER);
}
else {
text = value.getName();
}
presentation.setPresentableText(text);
presentation.setIcon(value.getIcon(Iconable.ICON_FLAG_VISIBILITY));
}
@Override
public boolean canNavigate() {
return true;
}
@Override
public boolean canNavigateToSource() {
return true;
}
@Override
public void navigate(boolean requestFocus) {
final JSElement value = getValue();
if (value != null && value.isValid()) {
value.navigate(true);
}
}
@Override
public int getTypeSortWeight(boolean sortByType) {
if (sortByType) {
int weight = FlexTreeStructureProvider.getElementWeight(getValue());
if (weight != -1) {
return weight;
}
}
return super.getTypeSortWeight(sortByType);
}
}