1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-23 17:05:26 +02:00

bug 321160: Confusing message about redefined macro from xlc error parser

This commit is contained in:
Andrew Gvozdev 2010-07-28 22:57:19 +00:00
parent ba337c9707
commit 739f1e403e
19 changed files with 115 additions and 90 deletions

View file

@ -26,10 +26,10 @@ public class TestCompatibility extends TestCase {
{
XlcErrorParserTester aix = new XlcErrorParserTester();
aix.parseLine(err_msg);
assertEquals("temp1.c", aix.getFileName());
assertEquals(5, aix.getLineNumber());
assertEquals(IMarkerGenerator.SEVERITY_INFO, aix.getSeverity());
assertEquals("Compatibility test",aix.getMessage());
assertEquals("temp1.c", aix.getFileName(0));
assertEquals(5, aix.getLineNumber(0));
assertEquals(IMarkerGenerator.SEVERITY_INFO, aix.getSeverity(0));
assertEquals("Compatibility test",aix.getMessage(0));
}
public TestCompatibility( String name)
{

View file

@ -27,10 +27,10 @@ public class TestConditional extends TestCase {
{
XlcErrorParserTester aix = new XlcErrorParserTester();
aix.parseLine(err_msg);
assertEquals("temp8.c", aix.getFileName());
assertEquals(12, aix.getLineNumber());
assertEquals(IMarkerGenerator.SEVERITY_INFO, aix.getSeverity());
assertEquals("The then branch of conditional is an empty statement.",aix.getMessage());
assertEquals("temp8.c", aix.getFileName(0));
assertEquals(12, aix.getLineNumber(0));
assertEquals(IMarkerGenerator.SEVERITY_INFO, aix.getSeverity(0));
assertEquals("The then branch of conditional is an empty statement.",aix.getMessage(0));
}
public TestConditional( String name)
{

View file

@ -28,11 +28,11 @@ public class TestFloatingPoint extends TestCase {
{
XlcErrorParserTester aix = new XlcErrorParserTester();
aix.parseLine(err_msg);
assertEquals("temp9.c", aix.getFileName());
assertEquals(11, aix.getLineNumber());
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity());
assertEquals("temp9.c", aix.getFileName(0));
assertEquals(11, aix.getLineNumber(0));
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity(0));
assertEquals("Floating point constant 10.23.3 is not valid",
aix.getMessage());
aix.getMessage(0));
}
public TestFloatingPoint( String name)
{

View file

@ -27,12 +27,12 @@ public class TestFuncArg extends TestCase {
{
XlcErrorParserTester aix = new XlcErrorParserTester();
aix.parseLine(err_msg);
assertEquals("temp9.c", aix.getFileName());
assertEquals(12, aix.getLineNumber());
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity());
assertEquals("temp9.c", aix.getFileName(0));
assertEquals(12, aix.getLineNumber(0));
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity(0));
assertEquals("Function argument assignment between types " +
"\"int\" and \"char*\" is not allowed.",
aix.getMessage());
aix.getMessage(0));
}
public TestFuncArg( String name)
{

View file

@ -27,10 +27,10 @@ public class TestLinkerDuplicateSymbol extends TestCase {
{
XlcErrorParserTester aix = new XlcErrorParserTester();
aix.parseLine(err_msg);
assertEquals("", aix.getFileName());
assertEquals(0, aix.getLineNumber());
assertEquals(IMarkerGenerator.SEVERITY_WARNING, aix.getSeverity());
assertEquals("Duplicate symbol: dupefun",aix.getMessage());
assertEquals("", aix.getFileName(0));
assertEquals(0, aix.getLineNumber(0));
assertEquals(IMarkerGenerator.SEVERITY_WARNING, aix.getSeverity(0));
assertEquals("Duplicate symbol: dupefun",aix.getMessage(0));
}
public TestLinkerDuplicateSymbol( String name)
{

View file

@ -27,10 +27,10 @@ public class TestLinkerErrorWhileReading extends TestCase {
{
XlcErrorParserTester aix = new XlcErrorParserTester();
aix.parseLine(err_msg);
assertEquals("", aix.getFileName());
assertEquals(0, aix.getLineNumber());
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity());
assertEquals("Error occurred while reading file",aix.getMessage());
assertEquals("", aix.getFileName(0));
assertEquals(0, aix.getLineNumber(0));
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity(0));
assertEquals("Error occurred while reading file",aix.getMessage(0));
}
public TestLinkerErrorWhileReading( String name)
{

View file

@ -27,10 +27,10 @@ public class TestLinkerInfo extends TestCase {
{
XlcErrorParserTester aix = new XlcErrorParserTester();
aix.parseLine(err_msg);
assertEquals("", aix.getFileName());
assertEquals(0, aix.getLineNumber());
assertEquals(IMarkerGenerator.SEVERITY_INFO, aix.getSeverity());
assertEquals("Use the -bloadmap or -bnoquiet option to obtain more information.",aix.getMessage());
assertEquals("", aix.getFileName(0));
assertEquals(0, aix.getLineNumber(0));
assertEquals(IMarkerGenerator.SEVERITY_INFO, aix.getSeverity(0));
assertEquals("Use the -bloadmap or -bnoquiet option to obtain more information.",aix.getMessage(0));
}
public TestLinkerInfo( String name)
{

View file

@ -27,10 +27,10 @@ public class TestLinkerSevereError extends TestCase {
{
XlcErrorParserTester aix = new XlcErrorParserTester();
aix.parseLine(err_msg);
assertEquals("", aix.getFileName());
assertEquals(0, aix.getLineNumber());
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity());
assertEquals("EXEC binder commands nested too deeply.",aix.getMessage());
assertEquals("", aix.getFileName(0));
assertEquals(0, aix.getLineNumber(0));
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity(0));
assertEquals("EXEC binder commands nested too deeply.",aix.getMessage(0));
}
public TestLinkerSevereError( String name)
{

View file

@ -27,10 +27,10 @@ public class TestLinkerUndefinedSymbol extends TestCase {
{
XlcErrorParserTester aix = new XlcErrorParserTester();
aix.parseLine(err_msg);
assertEquals("", aix.getFileName());
assertEquals(0, aix.getLineNumber());
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity());
assertEquals("Undefined symbol: nofun()",aix.getMessage());
assertEquals("", aix.getFileName(0));
assertEquals(0, aix.getLineNumber(0));
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity(0));
assertEquals("Undefined symbol: nofun()",aix.getMessage(0));
}
public TestLinkerUndefinedSymbol( String name)
{

View file

@ -15,7 +15,6 @@ import junit.framework.TestCase;
import org.eclipse.cdt.core.IMarkerGenerator;
public class TestMacroRedefinition extends TestCase {
String err_msg;
/**
* This function tests parseLine function of the
* XlcErrorParser class. The second message generated by
@ -25,18 +24,26 @@ public class TestMacroRedefinition extends TestCase {
public void testparseLine()
{
XlcErrorParserTester aix = new XlcErrorParserTester();
aix.parseLine(err_msg);
assertEquals("temp1.h", aix.getFileName());
assertEquals(3, aix.getLineNumber());
assertEquals(IMarkerGenerator.SEVERITY_WARNING, aix.getSeverity());
assertEquals("Macro name TEMP_1 originally defined in file temp1.h",aix.getMessage());
// Macro redefinition warning generates 2 messages. First line is ignored.
// Second line is re-parsed to 2 warnings to cross-reference both.
String err_msg1 = "\"temp1.c\", line 5.9: 1506-236 (W) Macro name TEMP_1 has been redefined.";
String err_msg2 = "\"temp1.c\", line 5.9: 1506-358 (I) \"TEMP_1\" is defined on line 3 of temp1.h.";
aix.parseLine(err_msg1);
aix.parseLine(err_msg2);
assertEquals(2, aix.getNumberOfMarkers());
assertEquals("Macro name TEMP_1 has been redefined on line 5 of temp1.c", aix.getMessage(0));
assertEquals("temp1.h", aix.getFileName(0));
assertEquals(3, aix.getLineNumber(0));
assertEquals(IMarkerGenerator.SEVERITY_WARNING, aix.getSeverity(0));
assertEquals("Macro name TEMP_1 redefines macro originally defined on line 3 of temp1.h", aix.getMessage(1));
assertEquals("temp1.c", aix.getFileName(1));
assertEquals(5, aix.getLineNumber(1));
assertEquals(IMarkerGenerator.SEVERITY_WARNING, aix.getSeverity(1));
}
public TestMacroRedefinition( String name)
{
super(name);
// Macro redefinition warning provides 2 lines. First line is captured as regular warning message.
// "temp1.c", line 5.9: 1506-236 (W) Macro name TEMP_1 has been redefined.
// Second line is re-parsed to stay close to the first one and point to file with original definition
err_msg = "\"temp1.c\", line 5.9: 1506-358 (I) \"TEMP_1\" is defined on line 3 of temp1.h.";
}
}

View file

@ -28,10 +28,10 @@ public class TestMissingArg extends TestCase {
{
XlcErrorParserTester aix = new XlcErrorParserTester();
aix.parseLine(err_msg);
assertEquals("temp8.c", aix.getFileName());
assertEquals(9, aix.getLineNumber());
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity());
assertEquals("Missing argument(s).",aix.getMessage());
assertEquals("temp8.c", aix.getFileName(0));
assertEquals(9, aix.getLineNumber(0));
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity(0));
assertEquals("Missing argument(s).",aix.getMessage(0));
}
public TestMissingArg( String name)
{

View file

@ -25,10 +25,10 @@ public class TestNoFuncProto extends TestCase {
{
XlcErrorParserTester aix = new XlcErrorParserTester();
aix.parseLine(err_msg);
assertEquals("temp1.c", aix.getFileName());
assertEquals(5, aix.getLineNumber());
assertEquals(IMarkerGenerator.SEVERITY_WARNING, aix.getSeverity());
assertEquals("No function prototype given for \"printf\".",aix.getMessage());
assertEquals("temp1.c", aix.getFileName(0));
assertEquals(5, aix.getLineNumber(0));
assertEquals(IMarkerGenerator.SEVERITY_WARNING, aix.getSeverity(0));
assertEquals("No function prototype given for \"printf\".",aix.getMessage(0));
}
public TestNoFuncProto( String name)
{

View file

@ -27,10 +27,10 @@ public class TestOperModi extends TestCase {
{
XlcErrorParserTester aix = new XlcErrorParserTester();
aix.parseLine(err_msg);
assertEquals("temp9.c", aix.getFileName());
assertEquals(13, aix.getLineNumber());
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity());
assertEquals("Operand must be a modifiable lvalue.",aix.getMessage());
assertEquals("temp9.c", aix.getFileName(0));
assertEquals(13, aix.getLineNumber(0));
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity(0));
assertEquals("Operand must be a modifiable lvalue.",aix.getMessage(0));
}
public TestOperModi( String name)
{

View file

@ -26,10 +26,10 @@ public class TestSyntaxError extends TestCase {
{
XlcErrorParserTester aix = new XlcErrorParserTester();
aix.parseLine(err_msg);
assertEquals("temp1.c", aix.getFileName());
assertEquals(5, aix.getLineNumber());
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity());
assertEquals("Syntax error: possible missing ')'?",aix.getMessage());
assertEquals("temp1.c", aix.getFileName(0));
assertEquals(5, aix.getLineNumber(0));
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity(0));
assertEquals("Syntax error: possible missing ')'?",aix.getMessage(0));
}
public TestSyntaxError( String name)
{

View file

@ -27,10 +27,10 @@ public class TestUndeclIdent extends TestCase {
{
XlcErrorParserTester aix = new XlcErrorParserTester();
aix.parseLine(err_msg);
assertEquals("temp5.c", aix.getFileName());
assertEquals(5, aix.getLineNumber());
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity());
assertEquals("Undeclared identifier y.",aix.getMessage());
assertEquals("temp5.c", aix.getFileName(0));
assertEquals(5, aix.getLineNumber(0));
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity(0));
assertEquals("Undeclared identifier y.",aix.getMessage(0));
}
public TestUndeclIdent( String name)
{

View file

@ -26,10 +26,10 @@ public class TestUnrecoverableError extends TestCase {
{
XlcErrorParserTester aix = new XlcErrorParserTester();
aix.parseLine(err_msg);
assertEquals("temp1.c", aix.getFileName());
assertEquals(5, aix.getLineNumber());
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity());
assertEquals("INTERNAL COMPILER ERROR",aix.getMessage());
assertEquals("temp1.c", aix.getFileName(0));
assertEquals(5, aix.getLineNumber(0));
assertEquals(IMarkerGenerator.SEVERITY_ERROR_RESOURCE, aix.getSeverity(0));
assertEquals("INTERNAL COMPILER ERROR",aix.getMessage(0));
}
public TestUnrecoverableError( String name)
{

View file

@ -12,6 +12,9 @@
package org.eclipse.cdt.errorparsers.xlc.tests;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Assert;
import org.eclipse.cdt.core.ErrorParserManager;
@ -44,10 +47,14 @@ public class XlcErrorParserTester {
}
}
private String fileName;
private int lineNumber;
private int severity;
private String message;
private class MarkerData {
private String fileName;
private int lineNumber;
private int severity;
private String message;
}
private List<MarkerData> markerDataList = new ArrayList<MarkerData>();
/*
* Dummy class implementing IMarkerGenerator lets get through testing
@ -97,14 +104,17 @@ public class XlcErrorParserTester {
@Override
public void generateExternalMarker(IResource rc, int lineNumb, String desc, int sev, String varName, IPath externalPath) {
// if rc is this project it means that file was not found
MarkerData markerData = new MarkerData();
if (rc!=null && rc!=fTempProject) {
fileName = rc.getName();
markerData.fileName = rc.getName();
} else {
fileName="";
markerData.fileName="";
}
lineNumber = lineNumb;
message = desc;
severity = sev;
markerData.lineNumber = lineNumb;
markerData.message = desc;
markerData.severity = sev;
markerDataList.add(markerData);
}
}
@ -121,19 +131,23 @@ public class XlcErrorParserTester {
return errorParser.processLine(line, epManager);
}
String getFileName() {
return fileName;
int getNumberOfMarkers() {
return markerDataList.size();
}
int getLineNumber() {
return lineNumber;
String getFileName(int i) {
return markerDataList.get(i).fileName;
}
int getSeverity() {
return severity;
int getLineNumber(int i) {
return markerDataList.get(i).lineNumber;
}
String getMessage() {
return message;
int getSeverity(int i) {
return markerDataList.get(i).severity;
}
String getMessage(int i) {
return markerDataList.get(i).message;
}
}

View file

@ -20,12 +20,14 @@ CDTXLCErrorParser.name=CDT xlC Error Parser
# Translators: do not translate patterns below. We currently do not support NL versions of the XL C/C++ compilers.
# Following are patterns of xlC compiler messages. While translating the patterns should be replaced
# with corresponding patterns matchind localized compiler messages
# with corresponding patterns matching localized compiler messages
# START NON-TRANSLATABLE
# "hello.c", line 5.9: 1506-358 (I) "MACRO" is defined on line 3 of hello.h.
CDTXLCErrorParser.pattern.macro=["]?(.*?)["]?, line ([0-9]+)\\.[0-9]+:( [0-9]*-[0-9]*)? \\(I\\)\\s*["]?(\\w*)["]? is defined on line ([0-9]+) of (.*)\\.
CDTXLCErrorParser.pattern.macro.replacement=Macro name $4 originally defined in file $6
CDTXLCErrorParser.pattern.macro.replacement=Macro name $4 has been redefined on line $2 of $1
CDTXLCErrorParser.pattern.macro.crossreference=Macro name $4 redefines macro originally defined on line $5 of $6
CDTXLCErrorParser.pattern.macro.ignore=["]?(.*?)["]?, line ([0-9]+)\\.[0-9]+:( [0-9]*-[0-9]*)? \\(W\\)\\s*Macro name .* has been redefined\\.
# "main.cpp", line 10.6: 1540-0064 (S) Syntax error: "name" was expected but "char" was found.
CDTXLCErrorParser.pattern.error=["]?(.*?)["]?, line ([0-9]+)\\.[0-9]+:( [0-9]*-[0-9]*)? \\([USE]\\)\\s*(.*)
CDTXLCErrorParser.pattern.warning=["]?(.*?)["]?, line ([0-9]+)\\.[0-9]+:( [0-9]*-[0-9]*)? \\(W\\)\\s*(.*)

View file

@ -6,9 +6,11 @@
class="org.eclipse.cdt.core.errorparsers.RegexErrorParser"
id="org.eclipse.cdt.errorparsers.xlc.XlcErrorParser"
name="%CDTXLCErrorParser.name">
<pattern regex="%CDTXLCErrorParser.pattern.macro.ignore" severity="Ignore" file-expr="" line-expr="" description-expr="" eat-processed-line="true" />
<pattern regex="%CDTXLCErrorParser.pattern.macro" severity="Warning" file-expr="$6" line-expr="$5" description-expr="%CDTXLCErrorParser.pattern.macro.replacement" eat-processed-line="false" />
<pattern regex="%CDTXLCErrorParser.pattern.macro" severity="Warning" file-expr="$1" line-expr="$2" description-expr="%CDTXLCErrorParser.pattern.macro.crossreference" eat-processed-line="true" />
<pattern regex="%CDTXLCErrorParser.pattern.error" severity="Error" file-expr="$1" line-expr="$2" description-expr="$4" eat-processed-line="true"/>
<pattern regex="%CDTXLCErrorParser.pattern.warning" severity="Warning" file-expr="$1" line-expr="$2" description-expr="$4" eat-processed-line="true"/>
<pattern regex="%CDTXLCErrorParser.pattern.macro" severity="Warning" file-expr="$6" line-expr="$5" description-expr="%CDTXLCErrorParser.pattern.macro.replacement" eat-processed-line="true"/>
<pattern regex="%CDTXLCErrorParser.pattern.info" severity="Info" file-expr="$1" line-expr="$2" description-expr="$4" eat-processed-line="true"/>
<pattern regex="%CDTXLCErrorParser.pattern.ld.error" severity="Error" file-expr="" line-expr="" description-expr="$2" eat-processed-line="true"/>
<pattern regex="%CDTXLCErrorParser.pattern.ld.error2" severity="Error" file-expr="" line-expr="" description-expr="$2" eat-processed-line="true"/>