blob: 0bd85d8262e80be71bec2c3e9ec79b4b18ade288 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2017 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:
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
package org.jacoco.core.internal.analysis;
import java.util.ArrayList;
import java.util.Collection;
import org.jacoco.core.analysis.IClassCoverage;
import org.jacoco.core.analysis.IMethodCoverage;
/**
* Implementation of {@link IClassCoverage}.
*/
public class ClassCoverageImpl extends SourceNodeImpl implements IClassCoverage {
private final long id;
private final boolean noMatch;
private final Collection<IMethodCoverage> methods;
private String signature;
private String superName;
private String[] interfaces;
private String sourceFileName;
/**
* Creates a class coverage data object with the given parameters.
*
* @param name
* VM name of the class
* @param id
* class identifier
* @param noMatch
* <code>true</code>, if class id does not match with execution
* data
*/
public ClassCoverageImpl(final String name, final long id,
final boolean noMatch) {
super(ElementType.CLASS, name);
this.id = id;
this.noMatch = noMatch;
this.methods = new ArrayList<IMethodCoverage>();
this.classCounter = CounterImpl.COUNTER_1_0;
}
/**
* Add a method to this class.
*
* @param method
* method data to add
*/
public void addMethod(final IMethodCoverage method) {
this.methods.add(method);
increment(method);
// As class is considered as covered when at least one method is
// covered:
if (methodCounter.getCoveredCount() > 0) {
this.classCounter = CounterImpl.COUNTER_0_1;
}
}
/**
* Sets the VM signature of the class.
*
* @param signature
* VM signature of the class (may be <code>null</code>)
*/
public void setSignature(final String signature) {
this.signature = signature;
}
/**
* Sets the VM name of the superclass.
*
* @param superName
* VM name of the super class (may be <code>null</code>, i.e.
* <code>java/lang/Object</code>)
*/
public void setSuperName(final String superName) {
this.superName = superName;
}
/**
* Sets the VM names of implemented/extended interfaces.
*
* @param interfaces
* VM names of implemented/extended interfaces
*/
public void setInterfaces(final String[] interfaces) {
this.interfaces = interfaces;
}
/**
* Sets the name of the corresponding source file for this class.
*
* @param sourceFileName
* name of the source file
*/
public void setSourceFileName(final String sourceFileName) {
this.sourceFileName = sourceFileName;
}
// === IClassCoverage implementation ===
public long getId() {
return id;
}
public boolean isNoMatch() {
return noMatch;
}
public String getSignature() {
return signature;
}
public String getSuperName() {
return superName;
}
public String[] getInterfaceNames() {
return interfaces;
}
public String getPackageName() {
final int pos = getName().lastIndexOf('/');
return pos == -1 ? "" : getName().substring(0, pos);
}
public String getSourceFileName() {
return sourceFileName;
}
public Collection<IMethodCoverage> getMethods() {
return methods;
}
}