Skip to content

Commit

Permalink
Merge 0827b6d into 8aaaa5d
Browse files Browse the repository at this point in the history
  • Loading branch information
John McEntire committed Jul 1, 2013
2 parents 8aaaa5d + 0827b6d commit 54f80bf
Show file tree
Hide file tree
Showing 10 changed files with 162 additions and 85 deletions.
9 changes: 9 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@
<version>1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-runtime</artifactId>
</dependency>
</dependencies>

<dependencyManagement>
Expand Down Expand Up @@ -150,6 +154,11 @@
<artifactId>plexus-utils</artifactId>
<version>2.0.7</version>
</dependency>
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-runtime</artifactId>
<version>1.0-alpha-3</version>
</dependency>
</dependencies>
</dependencyManagement>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,22 +26,13 @@
* %[license]
*/

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.Parameter;
import org.eluder.coveralls.maven.plugin.domain.CoverallsResponse;
import org.eluder.coveralls.maven.plugin.domain.Git;
import org.eluder.coveralls.maven.plugin.domain.GitRepository;
import org.eluder.coveralls.maven.plugin.domain.Job;
import org.eluder.coveralls.maven.plugin.domain.SourceLoader;
import org.apache.maven.project.MavenProject;
import org.eluder.coveralls.maven.plugin.domain.*;
import org.eluder.coveralls.maven.plugin.httpclient.CoverallsClient;
import org.eluder.coveralls.maven.plugin.json.JsonWriter;
import org.eluder.coveralls.maven.plugin.logging.CoverageTracingLogger;
Expand All @@ -51,6 +42,13 @@
import org.eluder.coveralls.maven.plugin.service.ServiceSetup;
import org.eluder.coveralls.maven.plugin.service.Travis;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

public abstract class AbstractCoverallsMojo extends AbstractMojo {

/**
Expand All @@ -64,12 +62,12 @@ public abstract class AbstractCoverallsMojo extends AbstractMojo {
*/
@Parameter(property = "coverallsUrl", defaultValue = "https://coveralls.io/api/v1/jobs")
protected String coverallsUrl;

/**
* Directory path for project source code.
* Directory path for base project.
*/
@Parameter(property = "sourceDirectory", defaultValue = "${project.build.sourceDirectory}")
protected File sourceDirectory;
@Parameter(property = "projectDirectory", defaultValue = "${basedir}")
protected File projectDirectory;

/**
* Source file encoding.
Expand Down Expand Up @@ -100,6 +98,17 @@ public abstract class AbstractCoverallsMojo extends AbstractMojo {
*/
@Parameter(property = "branch")
protected String branch;

/**
* For dynamic project source directory resolution.
*/
@Component
protected MavenProject project;

/**
* Holds discovered source directories that get pushed into the SourceLoader.
*/
private List<File> sourceDirs = new ArrayList<File>();

/**
* Build timestamp. Must be in 'yyyy-MM-dd HH:mm:ssa' format.
Expand All @@ -110,6 +119,11 @@ public abstract class AbstractCoverallsMojo extends AbstractMojo {
@Override
public final void execute() throws MojoExecutionException, MojoFailureException {
try {
getLog().debug("Collecting source directories:");
addProjectSourceDirectories(this.project);
for(MavenProject project : this.project.getCollectedProjects()) {
addProjectSourceDirectories(project);
}
createEnvironment().setup();
CoverageParser parser = createCoverageParser(createSourceLoader());
Job job = createJob();
Expand All @@ -121,6 +135,7 @@ public final void execute() throws MojoExecutionException, MojoFailureException
report(reporters, Position.BEFORE);
writeCoveralls(writer, sourceCallback, parser);
report(reporters, Position.AFTER);
getLog().info(parser.getNumClasses()+" classes covered.");
submitData(client, writer.getCoverallsFile());
} catch (MojoFailureException ex) {
throw ex;
Expand All @@ -133,7 +148,18 @@ public final void execute() throws MojoExecutionException, MojoFailureException
}
}

/**
private void addProjectSourceDirectories(MavenProject project) {
List<String> sources = project.getCompileSourceRoots();
for(String sourceDir : sources) {
File sourceDirFile = new File(sourceDir);
if(sourceDirFile.exists() && sourceDirFile.isDirectory()) {
getLog().debug("Adding source directory: "+sourceDir);
sourceDirs.add(sourceDirFile.getAbsoluteFile());
}
}
}

/**
* Creates a coverage parser. Must return new instance on every call.
*
* @param sourceLoader the source loader to be used with parser
Expand All @@ -145,7 +171,7 @@ public final void execute() throws MojoExecutionException, MojoFailureException
* @return source loader to create source files
*/
protected SourceLoader createSourceLoader() {
return new SourceLoader(sourceDirectory, sourceEncoding);
return new SourceLoader(sourceDirs, sourceEncoding);
}

/**
Expand All @@ -160,7 +186,7 @@ protected Environment createEnvironment() {
* @throws IOException if an I/O error occurs
*/
protected Job createJob() throws IOException {
Git git = new GitRepository(sourceDirectory, branch).load();
Git git = new GitRepository(projectDirectory, branch).load();
return new Job()
.withRepoToken(repoToken)
.withServiceName(serviceName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,26 +26,22 @@
* %[license]
*/

import java.io.File;
import java.io.IOException;
import java.io.Reader;

import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;

import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.ReaderFactory;
import org.codehaus.plexus.util.xml.XmlStreamReader;
import org.eluder.coveralls.maven.plugin.domain.Source;
import org.eluder.coveralls.maven.plugin.domain.SourceLoader;

import javax.xml.stream.*;
import java.io.File;
import java.io.IOException;
import java.io.Reader;

public abstract class AbstractXmlEventParser implements CoverageParser {

private final File coverageFile;
private final SourceLoader sourceLoader;
protected int numClasses = 0;

public AbstractXmlEventParser(final File coverageFile, final SourceLoader sourceLoader) {
this.coverageFile = coverageFile;
Expand Down Expand Up @@ -107,4 +103,8 @@ protected final boolean isStartElement(final XMLStreamReader xml, final String n
protected final boolean isEndElement(final XMLStreamReader xml, final String name) {
return (XMLStreamConstants.END_ELEMENT == xml.getEventType() && xml.getLocalName().equals(name));
}

public int getNumClasses() {
return numClasses;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,6 @@ public interface CoverageParser {
* @return the coverage report file under processing
*/
public File getCoverageFile();

public int getNumClasses();
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,15 @@
* %[license]
*/

import java.io.File;

import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.eluder.coveralls.maven.plugin.AbstractCoverallsMojo;
import org.eluder.coveralls.maven.plugin.CoverageParser;
import org.eluder.coveralls.maven.plugin.domain.SourceLoader;

@Mojo(name = "cobertura", threadSafe = false)
import java.io.File;

@Mojo(name = "cobertura", threadSafe = false, aggregator=true)
public class CoberturaMojo extends AbstractCoverallsMojo {

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,22 +26,22 @@
* %[license]
*/

import java.io.File;
import java.io.IOException;

import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;

import org.eluder.coveralls.maven.plugin.AbstractXmlEventParser;
import org.eluder.coveralls.maven.plugin.ProcessingException;
import org.eluder.coveralls.maven.plugin.SourceCallback;
import org.eluder.coveralls.maven.plugin.domain.Source;
import org.eluder.coveralls.maven.plugin.domain.SourceLoader;

import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.io.File;
import java.io.IOException;

public class CoberturaParser extends AbstractXmlEventParser {

private Source source;
private boolean inMethods;


public CoberturaParser(final File coverageFile, final SourceLoader sourceLoader) {
super(coverageFile, sourceLoader);
Expand All @@ -51,10 +51,12 @@ public CoberturaParser(final File coverageFile, final SourceLoader sourceLoader)
protected void onEvent(final XMLStreamReader xml, final SourceCallback callback) throws XMLStreamException, ProcessingException, IOException {
if (isStartElement(xml, "class")) {
source = loadSource(xml.getAttributeValue(null, "filename"));
String className = xml.getAttributeValue(null, "name");
int classifierPosition = className.indexOf('$');
if (classifierPosition > 0) {
source.setClassifier(className.substring(classifierPosition));
if(source != null) {
String className = xml.getAttributeValue(null, "name");
int classifierPosition = className.indexOf('$');
if (classifierPosition > 0) {
source.setClassifier(className.substring(classifierPosition));
}
}
} else

Expand All @@ -74,6 +76,7 @@ protected void onEvent(final XMLStreamReader xml, final SourceCallback callback)
} else

if (isEndElement(xml, "class") && source != null) {
numClasses++;
callback.onSource(source);
source = null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,46 +26,53 @@
* %[license]
*/

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.Charset;

import org.codehaus.plexus.util.IOUtil;

import java.io.*;
import java.nio.charset.Charset;
import java.util.List;

public class SourceLoader {

private final File sourceDirectory;
private List<File> sourceDirectories;
private final Charset sourceEncoding;

public SourceLoader(final File sourceDirectory, final String sourceEncoding) {
if (!sourceDirectory.exists()) {
public SourceLoader(final List<File> sourceDirectories, final String sourceEncoding) {
this.sourceDirectories = sourceDirectories;
for(File sourceDirectory : sourceDirectories) {
if(!sourceDirectory.exists()) {
throw new IllegalArgumentException("Source directory " + sourceDirectory.getAbsolutePath() + " does not exist");
}
if (!sourceDirectory.isDirectory()) {
}
if(!sourceDirectory.isDirectory()) {
throw new IllegalArgumentException(sourceDirectory.getAbsolutePath() + " is not directory");
}
}
this.sourceDirectory = sourceDirectory;
this.sourceEncoding = Charset.forName(sourceEncoding);
}

public Source load(final String sourceFile) throws IOException {
File file = new File(sourceDirectory, sourceFile);
if (!file.exists()) {
throw new IllegalArgumentException("Source file " + file.getAbsolutePath() + " does not exist");
}
if (!file.isFile()) {
throw new IllegalArgumentException(file.getAbsolutePath() + " is not file");
File file = null;
for(File sourceDirectory : sourceDirectories) {
file = new File(sourceDirectory, sourceFile);
if(!file.exists()) {
file = null;
} else {
break;
}
}
Reader reader = new InputStreamReader(new BufferedInputStream(new FileInputStream(file)), sourceEncoding);
try {
String source = IOUtil.toString(reader);
return new Source(sourceFile, source);
} finally {
IOUtil.close(reader);
if(file != null) {
if (!file.isFile()) {
throw new IllegalArgumentException(file.getAbsolutePath() + " is not file");
}
Reader reader = new InputStreamReader(new BufferedInputStream(new FileInputStream(file)), sourceEncoding);
try {
String source = IOUtil.toString(reader);
return new Source(sourceFile, source);
} finally {
IOUtil.close(reader);
}
} else {
return null;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,17 @@
* %[license]
*/

import java.io.File;
import java.io.IOException;

import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;

import org.eluder.coveralls.maven.plugin.AbstractXmlEventParser;
import org.eluder.coveralls.maven.plugin.ProcessingException;
import org.eluder.coveralls.maven.plugin.SourceCallback;
import org.eluder.coveralls.maven.plugin.domain.Source;
import org.eluder.coveralls.maven.plugin.domain.SourceLoader;

import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.io.File;
import java.io.IOException;

public class JaCoCoParser extends AbstractXmlEventParser {

private String packageName;
Expand Down Expand Up @@ -67,6 +66,7 @@ protected void onEvent(final XMLStreamReader xml, final SourceCallback callback)
} else

if (isEndElement(xml, "sourcefile") && this.source != null) {
numClasses++;
callback.onSource(this.source);
this.source = null;
} else
Expand Down

0 comments on commit 54f80bf

Please sign in to comment.