Package org.codemap.eclemma

Source Code of org.codemap.eclemma.CoverageListener$CoverageResourceVisitor

package org.codemap.eclemma;

import static java.util.Collections.emptySet;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.codemap.mapview.MapController;
import org.codemap.resources.MapValues;
import org.codemap.util.CodemapColors;
import org.codemap.util.Log;
import org.codemap.util.MColor;
import org.codemap.util.MapScheme;
import org.codemap.util.Resources;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceVisitor;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;

import ch.akuhn.util.Pair;
import ch.akuhn.values.Value;

import com.mountainminds.eclemma.core.CoverageTools;
import com.mountainminds.eclemma.core.analysis.IJavaCoverageListener;
// import com.mountainminds.eclemma.core.analysis.IJavaElementCoverage;
import com.mountainminds.eclemma.core.analysis.IJavaModelCoverage;

public class CoverageListener implements IJavaCoverageListener, ICodemapCoverage {

    protected final class CoverageResourceVisitor implements IResourceVisitor {
        private final List<Pair<String, Double>> identifiers;

        protected CoverageResourceVisitor(List<Pair<String, Double>> identifiers) {
            this.identifiers = identifiers;
        }

        @Override
        public boolean visit(IResource resource) throws CoreException {
            IJavaElement javaElement = JavaCore.create(resource);
            if (javaElement == null)
                return true;
            if (javaElement.getElementType() != IJavaElement.COMPILATION_UNIT)
                return true;
            ICompilationUnit compilationUnit = (ICompilationUnit) javaElement
                    .getAdapter(ICompilationUnit.class);
            return visit(compilationUnit);
        }

        private boolean visit(ICompilationUnit compilationUnit) {

// XXX commented this out to make it run!         
         
//            String identifier = Resources.asPath(compilationUnit);
//            IJavaElementCoverage coverageInfo = CoverageTools
//                    .getCoverageInfo(compilationUnit);
//            if (coverageInfo == null) {
//                // for interfaces where we do not have coverage information
//                return false;
//            }
//            identifiers.add(new Pair<String, Double>(identifier, coverageInfo
//                    .getLineCounter().getRatio()));
            return false;
        }
    }

    private MapController theController;
    private Set<Pair<String, Double>> lastCoverageInfo;
    private boolean enabled;

    public CoverageListener(MapController mapController) {
        theController = mapController;
        enabled = false;
        lastCoverageInfo = emptySet();
        CoverageTools.addJavaCoverageListener(this);       
    }
   
    public void dispose() {
        CoverageTools.removeJavaCoverageListener(this);
    }   

    @Override
    public void coverageChanged() {
     
// XXX commented this out to make it run!     
     
//        IJavaModelCoverage coverage = CoverageTools.getJavaModelCoverage();
//        if (coverage == null) return;
//
//        Set<Pair<String, Double>> coverageInfo = new HashSet<Pair<String, Double>>();
//        List<IJavaProject> projects = Arrays.asList(coverage
//                .getInstrumentedProjects());
//        for (IJavaProject each : projects) {
//            if (!each.isOpen())
//                continue;
//            coverageInfo.addAll(compilationUnitCoverage(each));
//        }
//        updateCoverageInfo(coverageInfo);
    }

    private void updateCoverageInfo(Set<Pair<String, Double>> coverageInfo) {
        lastCoverageInfo = coverageInfo;
        maybeDisplayCoverage();
    }

    private void maybeDisplayCoverage() {
        if (!enabled) return;
        MapValues values = theController.getActiveMap().getValues();
        if (values == null) return;
        Value<MapScheme<MColor>> colorValue = values.colorScheme;
        CodemapColors colorScheme = new CodemapColors(MColor.GRAY_204);
        for (Pair<String, Double> pair : lastCoverageInfo) {
            String identifier = pair.fst;
            Double ratio = pair.snd;
            int redVal = (int) ((1 - ratio) * 255);
            int greenVal = (int) (ratio * 255);
            MColor col = new MColor(redVal, greenVal, 0);
            colorScheme.setColor(identifier, col);
        }
        colorValue.setValue(colorScheme);
    }

    private List<Pair<String, Double>> compilationUnitCoverage(
            IJavaProject project) {
        List<Pair<String, Double>> identifiers = new ArrayList<Pair<String, Double>>();
        try {
            for (IPackageFragmentRoot root : project.getPackageFragmentRoots()) {
                IResource resource = root.getResource();
                if (resource == null) continue;
                resource.accept(new CoverageResourceVisitor(identifiers));
            }
        } catch (JavaModelException e) {
            Log.error(e);
        } catch (CoreException e) {
            Log.error(e);
        }
        return identifiers;
    }

    public void setEnabled(boolean b) {
        enabled = b;
        maybeDisplayCoverage();
    }

    @Override
    public boolean isEclemmaPluginAvailable() {
        return true;
    }
}
TOP

Related Classes of org.codemap.eclemma.CoverageListener$CoverageResourceVisitor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.