/******************************************************************************* * Copyright (c) 2009, 2019 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 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 * true, 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(); } /** * Add a method to this class. * * @param method * method data to add */ public void addMethod(final IMethodCoverage method) { this.methods.add(method); increment(method); // Class is considered as covered when at least one method is covered: if (methodCounter.getCoveredCount() > 0) { this.classCounter = CounterImpl.COUNTER_0_1; } else { this.classCounter = CounterImpl.COUNTER_1_0; } } /** * Sets the VM signature of the class. * * @param signature * VM signature of the class (may be null) */ 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 null, i.e. * java/lang/Object) */ 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 getMethods() { return methods; } }