package org.codemap.tasks; import java.util.ArrayList; import java.util.List; import org.codemap.Location; import org.codemap.MapInstance; import org.codemap.util.MapScheme; import org.codemap.util.Resources; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.junit.JUnitCore; import ch.akuhn.values.Value; public class ComputeFilteredElevationTask extends ComputeElevationModelTask { private Value<Boolean> showTests; public ComputeFilteredElevationTask(Value<MapInstance> mapInstance, Value<MapScheme<Boolean>> hills, Value<Boolean> showTests) { super(mapInstance, hills); // super constructor requires 2 params, so we must re-implement the behavior here ... showTests.addDependent(this); this.showTests = showTests; } @Override protected MapInstance processMap(MapInstance map) { if (!showTests.getValue()) { try { filterLocations(map); } catch (Exception e) { throw new RuntimeException(e); } } else { map.setDEMLoccations(null); } return super.processMap(map); } private void filterLocations(MapInstance map) throws OperationCanceledException, CoreException { List<Location> result = new ArrayList<Location>(); for (Location each: map.locations()) { IJavaElement javaElement = Resources.asJavaElement(each.getDocument()); IType[] findTestTypes = JUnitCore.findTestTypes(javaElement, null); // we have found a test within the resource, in our case this means the // resource is a test as the resources represent files a.k.a. compilation units if (findTestTypes.length >= 1) continue; result.add(each); } map.setDEMLoccations(result); } }