/*******************************************************************************
* Copyright (c) 2006, 2009 Mountainminds GmbH & Co. KG
* This software is provided under the terms of the Eclipse Public License v1.0
* See http://www.eclipse.org/legal/epl-v10.html.
*
* $Id: TypeCoverage.java 532 2009-02-25 21:22:57Z mtnminds $
******************************************************************************/
package com.mountainminds.eclemma.internal.core.analysis;
import org.eclipse.core.resources.IResource;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import com.mountainminds.eclemma.core.analysis.IJavaElementCoverage;
import com.mountainminds.eclemma.internal.core.DebugOptions;
import com.mountainminds.eclemma.internal.core.DebugOptions.ITracer;
/**
* Coverage for types elements.
*
* @author Marc R. Hoffmann
* @version $Revision: 532 $
*/
public class TypeCoverage extends JavaElementCoverage implements ILazyBinding {
private static final ITracer TRACER = DebugOptions.ANALYSISTRACER;
public static class UnboundMethodCoverage {
final String name;
final String signature;
final IJavaElementCoverage coverage;
UnboundMethodCoverage(String name, String signature,
IJavaElementCoverage coverage) {
this.name = name;
this.signature = signature;
this.coverage = coverage;
}
}
private UnboundMethodCoverage[] ubmethods;
public TypeCoverage(JavaElementCoverage parent, boolean haslines, long stamp) {
super(parent, haslines, stamp);
ubmethods = null;
}
public TypeCoverage(JavaElementCoverage parent, boolean haslines,
IResource resource) {
super(parent, haslines, resource);
ubmethods = null;
}
public void setUnboundMethods(UnboundMethodCoverage[] ubmethods) {
this.ubmethods = ubmethods;
}
public void resolve(IJavaElement element, JavaModelCoverage modelcoverage) {
if (ubmethods != null) {
final IType type = (IType) element;
final MethodLocator locator;
try {
locator = new MethodLocator(type);
for (int i = 0; i < ubmethods.length; i++) {
final String name = ubmethods[i].name;
final String signature = ubmethods[i].signature;
final IMethod method = locator.findMethod(name, signature);
if (method != null) {
modelcoverage.put(method, ubmethods[i].coverage);
} else {
TRACER
.trace(
"Method not found in Java model: {0}.{1}{2}", type.getFullyQualifiedName(), name, signature); //$NON-NLS-1$
}
}
} catch (JavaModelException e) {
TRACER.trace("Error while creating method locator for {0}: {1}", type //$NON-NLS-1$
.getFullyQualifiedName(), e);
}
ubmethods = null;
}
}
}