package tern.eclipse.ide.jsdt.internal.ui;
import java.util.ArrayList;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.wst.jsdt.core.IJavaScriptElement;
import tern.server.protocol.outline.JSNode;
public class JSDTElementsFilter extends ViewerFilter {
public JSDTElementsFilter() {
// TODO Auto-generated constructor stub
}
@Override
public Object[] filter(Viewer viewer, Object parent, Object[] elements) {
int size = elements.length;
ArrayList<Object> out = new ArrayList<Object>(size);
for (int i = 0; i < size; ++i) {
if (elements[i] instanceof JSNode) {
out.add(elements[i]);
} else if (elements[i] instanceof IJavaScriptElement) {
if (!containsTernNode(elements, (IJavaScriptElement)elements[i])) {
out.add(elements[i]);
}
}
}
return out.toArray();
}
private boolean containsTernNode(Object[] elements, IJavaScriptElement jsdtElement) {
for (Object element : elements) {
if (element instanceof JSNode) {
JSNode node = (JSNode) element;
// could also use location in file node.getStart()
if (node.getName() != null && node.getName().equalsIgnoreCase(jsdtElement.getElementName())) {
return true;
}
}
}
return false;
}
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
// method should never be called as we directly override "filter"
return false;
}
}