/******************************************************************************* * Copyright (c) 2006, 2016 Mountainminds GmbH & Co. KG and Contributors * 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 * * Contributors: * Benjamin Muskalla - initial API and implementation * ******************************************************************************/ package com.mountainminds.eclemma.internal.ui.decorators; import java.text.DecimalFormat; import java.text.Format; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.BaseLabelProvider; import org.eclipse.jface.viewers.IDecoration; import org.eclipse.jface.viewers.ILightweightLabelDecorator; import org.eclipse.jface.viewers.LabelProviderChangedEvent; import org.eclipse.swt.widgets.Display; import org.jacoco.core.analysis.ICounter; import org.jacoco.core.analysis.ICoverageNode; import com.mountainminds.eclemma.core.CoverageTools; import com.mountainminds.eclemma.core.analysis.IJavaCoverageListener; import com.mountainminds.eclemma.internal.ui.EclEmmaUIPlugin; import com.mountainminds.eclemma.internal.ui.UIMessages; /** * Decorator to show code coverage for Java elements. */ public class CoverageDecorator extends BaseLabelProvider implements ILightweightLabelDecorator { private static final Format SUFFIX_FORMAT = new DecimalFormat( UIMessages.CoverageDecoratorSuffix_label); private final IJavaCoverageListener coverageListener; public CoverageDecorator() { super(); coverageListener = new IJavaCoverageListener() { public void coverageChanged() { final Display display = EclEmmaUIPlugin.getInstance().getWorkbench() .getDisplay(); display.asyncExec(new Runnable() { public void run() { fireLabelProviderChanged(new LabelProviderChangedEvent( CoverageDecorator.this)); } }); } }; CoverageTools.addJavaCoverageListener(coverageListener); } public void decorate(Object element, IDecoration decoration) { final ICoverageNode coverage = CoverageTools.getCoverageInfo(element); if (coverage == null) { // no coverage data return; } // TODO obtain counter from preferences ICounter counter = coverage.getInstructionCounter(); ImageDescriptor overlay = EclEmmaUIPlugin.getCoverageOverlay(counter .getCoveredRatio()); decoration.addOverlay(overlay, IDecoration.TOP_LEFT); decoration.addSuffix(SUFFIX_FORMAT.format(Double.valueOf(counter .getCoveredRatio()))); } public boolean isLabelProperty(Object element, String property) { // coverage does not depend on IJavaElement properties return false; } public void dispose() { CoverageTools.removeJavaCoverageListener(coverageListener); } }