Skip to content

Commit

Permalink
Let all parsers not depend on Jenkins anymore.
Browse files Browse the repository at this point in the history
Integrated all parsers into new module analysis-model. Added adapter
classes for parsers of violations-lib.
- [FIXED JENKINS-17434]
- [FIXED JENKINS-40439]
  • Loading branch information
uhafner committed Mar 2, 2018
1 parent bb9b781 commit f22e29d
Show file tree
Hide file tree
Showing 47 changed files with 1,237 additions and 342 deletions.
6 changes: 6 additions & 0 deletions pom.xml
Expand Up @@ -63,6 +63,7 @@
<mockito.version>2.13.0</mockito.version>
<assertj.version>3.9.0</assertj.version>
<archunit.version>0.5.0</archunit.version>
<violations-lib.version>1.54</violations-lib.version>

<!-- Maven Plug-ins Configuration -->
<compiler.maven.plugin>3.7.0</compiler.maven.plugin>
Expand Down Expand Up @@ -127,6 +128,11 @@
<artifactId>eclipse-collections</artifactId>
<version>${eclipse-collections.version}</version>
</dependency>
<dependency>
<groupId>se.bjurr.violations</groupId>
<artifactId>violations-lib</artifactId>
<version>${violations-lib.version}</version>
</dependency>

<!-- FindBugs Parser Dependencies -->

Expand Down

This file was deleted.

@@ -0,0 +1,96 @@
package edu.hm.hafner.analysis.parser.violations;

import java.io.Reader;
import java.util.List;
import java.util.function.Function;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;

import se.bjurr.violations.lib.model.SEVERITY;
import se.bjurr.violations.lib.model.Violation;
import se.bjurr.violations.lib.parsers.ViolationsParser;

import edu.hm.hafner.analysis.AbstractParser;
import edu.hm.hafner.analysis.Issue;
import edu.hm.hafner.analysis.IssueBuilder;
import edu.hm.hafner.analysis.Issues;
import edu.hm.hafner.analysis.ParsingCanceledException;
import edu.hm.hafner.analysis.ParsingException;
import edu.hm.hafner.analysis.Priority;

/**
* Adapter for {@link ViolationsParser} instances. Converts the results of an {@link ViolationsParser} into the static
* analysis {@link Issues} model.
*
* @author Ullrich Hafner
*/
public abstract class AbstractViolationAdapter extends AbstractParser<Issue> {
private static final long serialVersionUID = 7203311857999721045L;

/** Determines whether the Rule property of a {@link Violation} should be used as Category or Type. */
public enum Rule {CATEGORY, TYPE}

private final Rule useRuleAs;

protected AbstractViolationAdapter(final Rule useRuleAs) {
this.useRuleAs = useRuleAs;
}

@SuppressWarnings({"illegalcatch", "OverlyBroadCatchBlock"})
@Override
public Issues<Issue> parse(final Reader reader, final Function<String, String> preProcessor)
throws ParsingCanceledException, ParsingException {
try {
ViolationsParser parser = createParser();
List<Violation> violations = parser.parseReportOutput(IOUtils.toString(reader));
return convertToIssues(violations);
}
catch (Exception exception) {
throw new ParsingException(exception);
}
}

/**
* Creates a new parser instance.
*
* @return the {@link ViolationsParser} instance
*/
protected abstract ViolationsParser createParser();

private Issues<Issue> convertToIssues(final List<Violation> violations) {
Issues<Issue> issues = new Issues<>();
for (Violation violation : violations) {
issues.add(convertToIssue(violation));
}
return issues;
}

private Issue convertToIssue(final Violation violation) {
IssueBuilder builder = new IssueBuilder();
builder.setPriority(convertSeverity(violation.getSeverity()))
.setFileName(violation.getFile())
.setMessage(violation.getMessage())
.setLineStart(violation.getStartLine())
.setLineEnd(violation.getEndLine())
.setColumnStart(violation.getColumn().or(0));
String rule = violation.getRule().or(StringUtils.EMPTY);
if (useRuleAs == Rule.TYPE) {
builder.setType(rule);
}
else {
builder.setCategory(rule);
}
return builder.build();
}

private Priority convertSeverity(final SEVERITY severity) {
if (severity == SEVERITY.ERROR) {
return Priority.HIGH;
}
if (severity == SEVERITY.WARN) {
return Priority.NORMAL;
}
return Priority.LOW;
}
}
@@ -0,0 +1,22 @@
package edu.hm.hafner.analysis.parser.violations;

import se.bjurr.violations.lib.parsers.AndroidLintParser;

/**
* Parses Android Lint files.
*
* @author Ullrich Hafner
*/
public class AndroidLintParserAdapter extends AbstractViolationAdapter {
/**
* Creates a new instance of {@link AndroidLintParserAdapter}.
*/
public AndroidLintParserAdapter() {
super(Rule.CATEGORY);
}

@Override
protected AndroidLintParser createParser() {
return new AndroidLintParser();
}
}
@@ -0,0 +1,22 @@
package edu.hm.hafner.analysis.parser.violations;

import se.bjurr.violations.lib.parsers.CodeNarcParser;

/**
* Parses CodeNarc files.
*
* @author Ullrich Hafner
*/
public class CodeNarcAdapter extends AbstractViolationAdapter {
/**
* Creates a new instance of {@link CodeNarcAdapter}.
*/
public CodeNarcAdapter() {
super(Rule.TYPE);
}

@Override
protected CodeNarcParser createParser() {
return new CodeNarcParser();
}
}
@@ -0,0 +1,22 @@
package edu.hm.hafner.analysis.parser.violations;

import se.bjurr.violations.lib.parsers.CPPCheckParser;

/**
* Parses CPPCheck files.
*
* @author Ullrich Hafner
*/
public class CppCheckAdapter extends AbstractViolationAdapter {
/**
* Creates a new instance of {@link CppCheckAdapter}.
*/
public CppCheckAdapter() {
super(Rule.TYPE);
}

@Override
protected CPPCheckParser createParser() {
return new CPPCheckParser();
}
}
@@ -0,0 +1,22 @@
package edu.hm.hafner.analysis.parser.violations;

import se.bjurr.violations.lib.parsers.DocFXParser;

/**
* Parses DocFX files.
*
* @author Ullrich Hafner
*/
public class DocFxAdapter extends AbstractViolationAdapter {
/**
* Creates a new instance of {@link DocFxAdapter}.
*/
public DocFxAdapter() {
super(Rule.TYPE);
}

@Override
protected DocFXParser createParser() {
return new DocFXParser();
}
}
@@ -0,0 +1,22 @@
package edu.hm.hafner.analysis.parser.violations;

import se.bjurr.violations.lib.parsers.GoogleErrorProneParser;

/**
* Parses ErrorProne files.
*
* @author Ullrich Hafner
*/
public class ErrorProneAdapter extends AbstractViolationAdapter {
/**
* Creates a new instance of {@link ErrorProneAdapter}.
*/
public ErrorProneAdapter() {
super(Rule.TYPE);
}

@Override
protected GoogleErrorProneParser createParser() {
return new GoogleErrorProneParser();
}
}
@@ -0,0 +1,22 @@
package edu.hm.hafner.analysis.parser.violations;

import se.bjurr.violations.lib.parsers.Flake8Parser;

/**
* Parses Flake8 files.
*
* @author Ullrich Hafner
*/
public class Flake8Adapter extends AbstractViolationAdapter {
/**
* Creates a new instance of {@link Flake8Adapter}.
*/
public Flake8Adapter() {
super(Rule.TYPE);
}

@Override
protected Flake8Parser createParser() {
return new Flake8Parser();
}
}
@@ -0,0 +1,22 @@
package edu.hm.hafner.analysis.parser.violations;

import se.bjurr.violations.lib.parsers.JSHintParser;

/**
* Parses JSHint files.
*
* @author Ullrich Hafner
*/
public class JsHintAdapter extends AbstractViolationAdapter {
/**
* Creates a new instance of {@link JsHintAdapter}.
*/
public JsHintAdapter() {
super(Rule.TYPE);
}

@Override
protected JSHintParser createParser() {
return new JSHintParser();
}
}

0 comments on commit f22e29d

Please sign in to comment.