package com.intellij.lang.javascript.uml;
import com.intellij.lang.javascript.JSBundle;
import com.intellij.lang.javascript.psi.ecmal4.JSAttributeList;
import com.intellij.lang.javascript.psi.ecmal4.JSAttributeListOwner;
import com.intellij.lang.javascript.psi.util.JSUtils;
import com.intellij.lang.javascript.refactoring.JSVisibilityUtil;
import com.intellij.diagram.AbstractUmlVisibilityManager;
import com.intellij.diagram.VisibilityLevel;
import com.intellij.psi.PsiElement;
import com.intellij.util.ArrayUtil;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class FlashUmlVisibilityManager extends AbstractUmlVisibilityManager {
private static final List<VisibilityLevel> predefinedLevels = new ArrayList<>();
static {
for (JSAttributeList.AccessType accessType : JSVisibilityUtil.ACCESS_TYPES) {
predefinedLevels
.add(new VisibilityLevel(accessType.name(), JSBundle.message("javascript.uml.visibility." + accessType.name().toLowerCase())));
}
}
private static final Comparator<VisibilityLevel> COMPARATOR = (o1, o2) -> {
final int ind1 = predefinedLevels.indexOf(o1);
final int ind2 = predefinedLevels.indexOf(o2);
return ind1 == ind2 ? 0 : ind1 < 0 ? 1 : ind1 - ind2;
};
//@Override
//public boolean isVisible(PsiElement element) {
// // TODO: support namespaces
// return super.isVisible(element);
//}
public VisibilityLevel[] getVisibilityLevels() {
return predefinedLevels.toArray(new VisibilityLevel[predefinedLevels.size()]);
}
public VisibilityLevel getVisibilityLevel(Object element) {
// TODO: support namespaces
if (element instanceof JSAttributeListOwner) {
JSAttributeList attributeList = ((JSAttributeListOwner)element).getAttributeList();
JSAttributeList.AccessType accessType =
attributeList != null ? attributeList.getAccessType() : JSUtils.getImplicitAccessType((PsiElement)element);
return predefinedLevels.get(ArrayUtil.indexOf(JSVisibilityUtil.ACCESS_TYPES, accessType));
}
return null;
}
public Comparator<VisibilityLevel> getComparator() {
return COMPARATOR;
}
}