Skip to content
This repository has been archived by the owner on Apr 6, 2022. It is now read-only.

Commit

Permalink
Merge pull request #76 from SvenLuebke/master
Browse files Browse the repository at this point in the history
Added 4 new parsers: QAC, Metrowerks CodeWarrior (linker and compiler) and EB tresos Studio
  • Loading branch information
uhafner committed May 25, 2016
2 parents db62da8 + ee4ae49 commit aa2c058
Show file tree
Hide file tree
Showing 13 changed files with 559 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package hudson.plugins.warnings.parser;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import hudson.Extension;

import hudson.plugins.analysis.util.model.Priority;

/**
* A parser for EB tresos Studio warnings.
*
* @author Sven Lübke
*/
@Extension
public class EBtresosStudioParser extends RegexpLineParser {
/** Pattern of EB tresos warnings. */
private static final String TRESOS_WARNING_PATTERN = "^(INFO|WARNING|ERROR)\\s\\d*-\\d*-\\d*,\\d*:\\d*:\\d*\\s\\(((\\p{Alnum}|_)*)\\)\\s(.*)$";
private static final String[] TRESOS_INFO_MSGS_IGNORE = {
"13014", //Generated "B:\Camera_comp\src\workspace\ECU_Camera\output\generated\include\FiM_Trace.h"
"13030", //Running generator "CanTp_TS_TxDxM6I5R0_GeneratorId" in mode "generate" for module "CanTp_TS_TxDxM6I5R0"
"13015", //Generated "B:\Camera_comp\src\workspace\ECU_Camera\output\generated\make\Make_cfg.mak"
"160001", //Generated file Com_SymbolicNames_PBcfg.h
"170001", //Generated file src/PduR_Lcfg.c
"20053", //Generating file B:\Camera_comp\src\workspace\ECU_Camera\output\generated\output\Dio.epc
"2113", //Creating directory "B:\Camera_comp\src\workspace\ECU_Camera\output\generated\output"
"2501", //Generated "B:\Camera_comp\src\workspace\ECU_Camera\output\generated\include\Common_MemMap.h"
"2506", //Creating directory "B:\Camera_comp\src\workspace\ECU_Camera\output\generated\orti"
"OS_1", //*** AutosarOS 4.5.38 Build 20130705 (PA/XPC56XXL) ***
"OS_3", //OS-Generation succeeded for project Os_TS_T2D17M4I5R0_AS403
"SWDUPDATER_10", //Successfully completed the update of the Basic Software Module Descriptions and Service Component Descriptions.
"SWDUPDATER_14", //Imported BSW module description CanIf.
"SWDUPDATER_24", //Imported service component type Dem.
"SWDUPDATER_7", //Generated description file PduR_Bswmd.arxml.
"SWDUPDATER_8" //Imported all description files successfully.
};

/**
* Creates a new instance of <code>EBtresosStudioParser</code>.
*/
public EBtresosStudioParser() {
super(Messages._Warnings_EBtresosStudio_ParserName(),
Messages._Warnings_EBtresosStudio_LinkName(),
Messages._Warnings_EBtresosStudio_TrendName(),
TRESOS_WARNING_PATTERN);
}

@Override
protected Warning createWarning(final Matcher matcher) {
String fileName = "*.xdm";
int lineNumber = 0;
String type = matcher.group(1);
String category = matcher.group(2);
String message = matcher.group(4);
Priority priority;


if (type.equals("ERROR")) {
priority = Priority.HIGH;
}
if (type.equals("INFO")) {
priority = Priority.NORMAL;

for (String tresosMsgCategory : TRESOS_INFO_MSGS_IGNORE) {
if (tresosMsgCategory.equals(category)) {
//type = "";
priority = Priority.LOW;
message = "really unimportant tresos message";
fileName = "unimportant.file";
lineNumber = 1;
break;
}
}
}
else {
priority = Priority.HIGH;
}
return createWarning(fileName, lineNumber, category, message, priority);
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package hudson.plugins.warnings.parser;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import hudson.Extension;

import hudson.plugins.analysis.util.model.Priority;

/**
* A parser for Metrowerks Codewarrior 4.x compiler warnings.
*
* @author Sven Lübke
*/
@Extension
public class MetrowerksCWCompilerParser extends RegexpLineParser {
/** Pattern of MW CodeWarrior compiler warnings. */
private static final String CW_COMPILER_WARNING_PATTERN = "^(.+?)\\((\\d+)\\): (INFORMATION|WARNING|ERROR) (.+?): (.*)$";

/**
* Creates a new instance of <code>MetrowerksCWCompilerParser</code>.
*/
public MetrowerksCWCompilerParser() {
super(Messages._Warnings_MetrowerksCWCompiler_ParserName(),
Messages._Warnings_MetrowerksCWCompiler_LinkName(),
Messages._Warnings_MetrowerksCWCompiler_TrendName(),
CW_COMPILER_WARNING_PATTERN);
}

@Override
protected Warning createWarning(final Matcher matcher) {
String fileName = matcher.group(1);
int lineNumber = getLineNumber(matcher.group(2));
String message = matcher.group(5);
Priority priority;

String category;
if ("error".equalsIgnoreCase(matcher.group(3))) {
priority = Priority.HIGH;
category = "ERROR";
}
else if ("information".equalsIgnoreCase(matcher.group(3))) {
priority = Priority.LOW;
category = "Info";
}
else {
priority = Priority.NORMAL;
category = "Warning";
}
return createWarning(fileName, lineNumber, category, message, priority);
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package hudson.plugins.warnings.parser;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import hudson.Extension;

import hudson.plugins.analysis.util.model.Priority;

/**
* A parser for Metrowerks Codewarrior 4.x linker warnings.
*
* @author Sven Lübke
*/
@Extension
public class MetrowerksCWLinkerParser extends RegexpLineParser {
/** Pattern of MW CodeWarrior linker warnings. */
private static final String CW_LINKER_WARNING_PATTERN = "^(INFORMATION|WARNING|ERROR) (.+)$";

/**
* Creates a new instance of <code>MetrowerksCWLinkerParser</code>.
*/
public MetrowerksCWLinkerParser() {
super(Messages._Warnings_MetrowerksCWLinker_ParserName(),
Messages._Warnings_MetrowerksCWLinker_LinkName(),
Messages._Warnings_MetrowerksCWLinker_TrendName(),
CW_LINKER_WARNING_PATTERN);
}

@Override
protected Warning createWarning(final Matcher matcher) {
/* String fileName = matcher.group(3); */
String message = matcher.group(2);
String message_category = matcher.group(1);
Priority priority;

String category;
if ("error".equalsIgnoreCase(message_category)) {
priority = Priority.HIGH;
category = "ERROR";
}
else if ("information".equalsIgnoreCase(message_category)) {
priority = Priority.LOW;
category = "Info";
}
else {
priority = Priority.NORMAL;
category = "Warning";
}
return createWarning("See Warning message", 0, category, message, priority);
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package hudson.plugins.warnings.parser;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import hudson.Extension;

import hudson.plugins.analysis.util.model.Priority;

/**
* A parser for PRQA QA-C Sourcecode Analyser warnings.
*
* @author Sven Lübke
*/
@Extension
public class QACSourceCodeAnalyserParser extends RegexpLineParser {
/** Pattern of QA-C Sourcecode Analyser warnings. */
private static final String QAC_WARNING_PATTERN = "^(.+?)\\((\\d+),(\\d+)\\): (Err|Msg)\\((\\d+):(\\d+)\\) (.+?)$";

/**
* Creates a new instance of <code>QACSourceCodeAnalyserParser</code>.
*/
public QACSourceCodeAnalyserParser() {
super(Messages._Warnings_QAC_ParserName(),
Messages._Warnings_QAC_LinkName(),
Messages._Warnings_QAC_TrendName(),
QAC_WARNING_PATTERN);
}

@Override
protected Warning createWarning(final Matcher matcher) {
String fileName = matcher.group(1);
int lineNumber = getLineNumber(matcher.group(2));
String message = matcher.group(7);
Priority priority;

String category;
if ("err".equalsIgnoreCase(matcher.group(4))) {
priority = Priority.HIGH;
category = "ERROR";
}
else {
priority = Priority.NORMAL;
category = "Warning";
}
return createWarning(fileName, lineNumber, category, message, priority);
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -214,3 +214,19 @@ Warnings.GoVetParser.TrendName=Go Vet Warnings Trend
Warnings.AjcParser.ParserName=AspectJ Compiler (ajc)
Warnings.AjcParser.LinkName=Ajc Warnings
Warnings.AjcParser.TrendName=Ajc Warnings Trend

Warnings.QAC.ParserName=QA-C Sourcecode Analyser
Warnings.QAC.LinkName=QA-C Warnings
Warnings.QAC.TrendName=QA-C Trend

Warnings.MetrowerksCWCompiler.ParserName=Metrowerks CodeWarrior Compiler
Warnings.MetrowerksCWCompiler.LinkName=CW Compiler Warnings
Warnings.MetrowerksCWCompiler.TrendName=CW Compiler Trend

Warnings.MetrowerksCWLinker.ParserName=Metrowerks CodeWarrior Linker
Warnings.MetrowerksCWLinker.LinkName=CW Linker Warnings
Warnings.MetrowerksCWLinker.TrendName=CW Linker Trend

Warnings.EBtresosStudio.ParserName=Elektrobit tresos Studio
Warnings.EBtresosStudio.LinkName=tresos Studio Warnings
Warnings.EBtresosStudio.TrendName=tresos Studio Warnings Trend
Original file line number Diff line number Diff line change
Expand Up @@ -195,3 +195,19 @@ Warnings.GoLintParser.TrendName=Go Lint Warnungen Trend
Warnings.GoVetParser.ParserName=Go Vet
Warnings.GoVetParser.LinkName=Go Vet Warnungen
Warnings.GoVetParser.TrendName=Go Vet Warnungen Trend

Warnings.QAC.ParserName=QA-C Sourcecode Analyser
Warnings.QAC.LinkName=QA-C Warnungen
Warnings.QAC.TrendName=QA-C Trend

Warnings.MetrowerksCWCompiler.ParserName=Metrowerks CodeWarrior Compiler
Warnings.MetrowerksCWCompiler.LinkName=CW Compiler Warnungen
Warnings.MetrowerksCWCompiler.TrendName=CW Compiler Trend

Warnings.MetrowerksCWLinker.ParserName=Metrowerks CodeWarrior Linker
Warnings.MetrowerksCWLinker.LinkName=CW Linker Warnungen
Warnings.MetrowerksCWLinker.TrendName=CW Linker Trend

Warnings.EBtresosStudio.ParserName=Elektrobit tresos Studio
Warnings.EBtresosStudio.LinkName=tresos Studio Warnungen
Warnings.EBtresosStudio.TrendName=tresos Studio Warnungen Trend
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package hudson.plugins.warnings.parser;

import static org.junit.Assert.*;

import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;

import org.junit.Test;

import hudson.plugins.analysis.util.model.FileAnnotation;
import hudson.plugins.analysis.util.model.Priority;

/**
* Tests the class {@link MetrowerksCWCompilerParser}.
*/
public class MetrowerksCWCompilerParserTest extends ParserTester {

private static final String INFO_CATEGORY = "Info";
private static final String WARNING_CATEGORY = "Warning";
private static final String ERROR_CATEGORY = "ERROR";
private static final String WARNING_TYPE = new MetrowerksCWCompilerParser().getGroup();

/**
* Parses a file with CodeWarrior warnings.
*
* @throws IOException
* if the file could not be read
*/
@Test
public void testWarningsParser() throws IOException {
Collection<FileAnnotation> warnings = new MetrowerksCWCompilerParser().parse(openFile());

assertEquals(WRONG_NUMBER_OF_WARNINGS_DETECTED, 5, warnings.size());

Iterator<FileAnnotation> iterator = warnings.iterator();
FileAnnotation annotation = iterator.next();
checkWarning(annotation,
570,
"Warning-directive found: EEPROM_QUEUE_BUFFER_SIZE instead of MONITOR_ERROR_DATA_LENGTH is used here. This must be fixed sooner or later",
"E:/work/PATH/PATH/PATH/PATH/Test1.c",
WARNING_TYPE, WARNING_CATEGORY, Priority.NORMAL);
annotation = iterator.next();
checkWarning(annotation,
305,
"Possible loss of data",
"E:/work/PATH/PATH/PATH/Test2.c",
WARNING_TYPE, WARNING_CATEGORY, Priority.NORMAL);
annotation = iterator.next();
checkWarning(annotation,
1501,
"bla not declared (or typename)",
"E:/work/PATH/PATH/Test3.c",
WARNING_TYPE, ERROR_CATEGORY, Priority.HIGH);
annotation = iterator.next();
checkWarning(annotation,
1502,
"';' missing",
"E:/work/PATH/Test4.c",
WARNING_TYPE, ERROR_CATEGORY, Priority.HIGH);
annotation = iterator.next();
checkWarning(annotation,
480,
"Inline expansion done for function call",
"E:/work/PATH/PATH/PATH/PATH/PATH/PATH/PATH/Test5.c",
WARNING_TYPE, INFO_CATEGORY, Priority.LOW);
}

/** {@inheritDoc} */
@Override
protected String getWarningsFile() {
return "MetrowerksCWCompiler.txt";
}
}

Loading

0 comments on commit aa2c058

Please sign in to comment.