blob: a39ea67f4b49e9cc54e4ecbd9277e443a4958daa [file] [log] [blame]
/*
* User: anna
* Date: 20-May-2008
*/
package com.intellij.coverage;
import com.intellij.execution.configurations.SimpleJavaParameters;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.rt.coverage.data.ProjectData;
import com.intellij.rt.coverage.util.ProjectDataLoader;
import com.intellij.util.PathUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.io.IOException;
public class IDEACoverageRunner extends JavaCoverageRunner {
private static final Logger LOG = Logger.getInstance("#" + IDEACoverageRunner.class.getName());
public ProjectData loadCoverageData(@NotNull final File sessionDataFile, @Nullable final CoverageSuite coverageSuite) {
return ProjectDataLoader.load(sessionDataFile);
}
public void appendCoverageArgument(final String sessionDataFilePath, final String[] patterns, final SimpleJavaParameters javaParameters,
final boolean collectLineInfo, final boolean isSampling) {
StringBuilder argument = new StringBuilder("-javaagent:");
final String agentPath = PathUtil.getJarPathForClass(ProjectData.class);
final String parentPath = handleSpacesInPath(agentPath);
argument.append(parentPath).append(File.separator).append(new File(agentPath).getName());
argument.append("=");
try {
final File tempFile = createTempFile();
tempFile.deleteOnExit();
write2file(tempFile, sessionDataFilePath);
write2file(tempFile, String.valueOf(collectLineInfo));
write2file(tempFile, Boolean.FALSE.toString()); //append unloaded
write2file(tempFile, Boolean.FALSE.toString());//merge with existing
write2file(tempFile, String.valueOf(isSampling));
if (patterns != null) {
for (String coveragePattern : patterns) {
coveragePattern = coveragePattern.replace("$", "\\$").replace(".", "\\.").replaceAll("\\*", ".*");
if (!coveragePattern.endsWith(".*")) { //include inner classes
coveragePattern += "(\\$.*)*";
}
write2file(tempFile, coveragePattern);
}
}
argument.append(tempFile.getCanonicalPath());
}
catch (IOException e) {
LOG.info("Coverage was not enabled", e);
return;
}
javaParameters.getVMParametersList().add(argument.toString());
}
public String getPresentableName() {
return "IntelliJ IDEA";
}
public String getId() {
return "idea";
}
public String getDataFileExtension() {
return "ic";
}
@Override
public boolean isCoverageByTestApplicable() {
return true;
}
}