blob: f583e331e9bace061b5782a315ff24f8d089f9d8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2007 Mylyn project committers and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
/*
* Created on May 6, 2005
*/
package org.eclipse.mylyn.internal.ide.ui;
import java.lang.reflect.Method;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.mylyn.ide.ui.AbstractMarkerInterestFilter;
import org.eclipse.ui.views.markers.MarkerItem;
/**
* @author Mik Kersten
*/
public class MarkerInterestFilter extends AbstractMarkerInterestFilter {
@Override
public boolean select(Viewer viewer, Object parent, Object element) {
if (element instanceof MarkerItem) {
if (element.getClass().getSimpleName().equals("MarkerCategory")) {
// HACK: using reflection to gain accessibily
Class<?> clazz;
try {
clazz = Class.forName("org.eclipse.ui.internal.views.markers.MarkerCategory");
Method method = clazz.getDeclaredMethod("getChildren", new Class[] {});
method.setAccessible(true);
Object result = method.invoke(element, new Object[] {});
// System.err.println(">>>>>> " + result.getClass());
} catch (Exception e) {
e.printStackTrace();
}
return true;
} else if (element.getClass().getSimpleName().equals("MarkerEntry")) {
return isInteresting(((MarkerItem) element).getMarker(), viewer, parent);
}
}
return false;
// return true;
// NOTE: code commented out below did a look-down the children, which may be too expensive
// if (element instanceof MarkerNode) {
// MarkerNode markerNode = (MarkerNode) element;
// MarkerNode[] children = markerNode.getChildren();
// for (int i = 0; i < children.length; i++) {
// MarkerNode node = children[i];
// if (node instanceof ConcreteMarker) {
// return isInteresting((ConcreteMarker) node, viewer, parent);
// } else {
// return true;
// }
// }
// }
// } else {
// ConcreteMarker marker = (ConcreteMarker) element;
// return isInteresting((ConcreteMarker) element, viewer, parent);
// }
}
@Override
protected boolean isImplicitlyInteresting(IMarker marker) {
try {
Object severity = marker.getAttribute(IMarker.SEVERITY);
return severity != null && severity.equals(IMarker.SEVERITY_ERROR);
} catch (CoreException e) {
// ignore
}
return false;
}
}