Bug 510688 - Include "info" level problems in the releng report

-Updated copyright and some formatting changes

Change-Id: I374f022f441de98c53092907ae5b9ff8a01666e2
Signed-off-by: Sravan Kumar Lakkimsetti <sravankumarl@in.ibm.com>
diff --git a/bundles/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestResultsGenerator.java b/bundles/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestResultsGenerator.java
index 96afb90..88f7d3f 100644
--- a/bundles/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestResultsGenerator.java
+++ b/bundles/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestResultsGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2016 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2000, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -160,6 +160,7 @@
     private static final String XML_EXTENSION                          = ".xml";
     private static final String WARNING_SEVERITY                       = "WARNING";
     private static final String ERROR_SEVERITY                         = "ERROR";
+    private static final String INFO_SEVERITY                          = "INFO";
     private static final String ForbiddenReferenceID                   = "ForbiddenReference";
     private static final String DiscouragedReferenceID                 = "DiscouragedReference";
 
@@ -418,6 +419,10 @@
         return extractNumber(aString, "Discouraged access:");
     }
 
+    private int countInfos(final String aString) {
+        return extractNumber(aString, "info");
+    }
+
     /*
      * returns number of errors plus number of failures. returns a negative
      * number if the file is missing or something is wrong with the file (such
@@ -541,9 +546,9 @@
     }
 
     private void formatAccessesErrorRow(final String fileName, final int forbiddenAccessesWarningsCount,
-            final int discouragedAccessesWarningsCount, final StringBuffer buffer) {
+            final int discouragedAccessesWarningsCount, final int infoCount, final StringBuffer buffer) {
 
-        if ((forbiddenAccessesWarningsCount == 0) && (discouragedAccessesWarningsCount == 0)) {
+        if ((forbiddenAccessesWarningsCount == 0) && (discouragedAccessesWarningsCount == 0) && (infoCount == 0)) {
             return;
         }
 
@@ -555,7 +560,9 @@
                 .append("<td class=\"cell\" >").append("<a href=").append("\"").append(relativeName).append("#FORBIDDEN_WARNINGS")
                 .append("\">").append(forbiddenAccessesWarningsCount).append("</a>").append("</td>").append(EOL)
                 .append("<td class=\"cell\" >").append("<a href=").append("\"").append(relativeName).append("#DISCOURAGED_WARNINGS")
-                .append("\">").append(discouragedAccessesWarningsCount).append("</a>").append("</td>").append(EOL).append("</tr>")
+                .append("\">").append(discouragedAccessesWarningsCount).append("</a>").append("</td>").append(EOL)
+                .append("<td class=\"cell\" >").append("<a href=").append("\"").append(relativeName).append("#INFO_WARNINGS")
+                .append("\">").append(infoCount).append("</a>").append("</td>").append(EOL).append("</tr>")
                 .append(EOL);
     }
 
@@ -733,6 +740,7 @@
         int warningCount = 0;
         int forbiddenWarningCount = 0;
         int discouragedWarningCount = 0;
+        int infoCount = 0;
 
         final File file = new File(log);
         Document aDocument = null;
@@ -783,6 +791,9 @@
                 } else if (ERROR_SEVERITY.equals(severityNodeValue)) {
                     // this is an error
                     errorCount++;
+                } else if (INFO_SEVERITY.equals(severityNodeValue)) {
+                    // this is an info warning
+                    infoCount++;
                 }
             }
         }
@@ -799,7 +810,7 @@
         // make sure '.xml' extension is "last thing" in string. (bug 490320)
         final String logName = log.replaceAll(XML_EXTENSION + "$", HTML_EXTENSION);
         formatCompileErrorRow(logName, errorCount, warningCount, compilerLog);
-        formatAccessesErrorRow(logName, forbiddenWarningCount, discouragedWarningCount, accessesLog);
+        formatAccessesErrorRow(logName, forbiddenWarningCount, discouragedWarningCount, infoCount, accessesLog);
     }
 
     private void parseCompileLogs() throws IOException {
@@ -843,7 +854,7 @@
             compileLogResults = compileLogResults + "          </table>" + EOL + EOL
                     + "<h3 id=\"AcessErrors\">Plugins containing access errors or warnings</h3>" + EOL + "<table>" + EOL + " <tr>"
                     + EOL + "<th class='cell'>Compile Logs (Jar Files)</th>" + EOL + "   <th class='cell'>Forbidden Access</th>"
-                    + EOL + "   <th class='cell'>Discouraged Access</th>" + EOL + "</tr>" + EOL;
+                    + EOL + "   <th class='cell'>Discouraged Access</th>" + EOL + "   <th class='cell'>Info Warnings</th>" + EOL + "</tr>" + EOL;
 
             compileLogResults = compileLogResults + accessesString.toString();
             compileLogResults = compileLogResults + "</table>" + EOL;
@@ -1178,6 +1189,7 @@
         final int warningCount = countCompileWarnings(fileContents);
         final int forbiddenWarningCount = countForbiddenWarnings(fileContents);
         final int discouragedWarningCount = countDiscouragedWarnings(fileContents);
+        final int infoCount = countInfos(fileContents);
         if (errorCount != 0) {
             // use wildcard in place of version number on directory names
             String logName = log.substring(getCompileLogsDirectoryName().length() + 1);
@@ -1188,7 +1200,7 @@
             anErrorTracker.registerError(logName);
         }
         formatCompileErrorRow(log, errorCount, warningCount, compilerLog);
-        formatAccessesErrorRow(log, forbiddenWarningCount, discouragedWarningCount, accessesLog);
+        formatAccessesErrorRow(log, forbiddenWarningCount, discouragedWarningCount, infoCount, accessesLog);
     }
 
     private String readFile(final String fileName) {
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/Converter.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/Converter.java
index fef2296..a17a827 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/Converter.java
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/Converter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2016 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2000, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -23,6 +23,7 @@
 import org.eclipse.releng.build.tools.convert.dom.IDOMConverter;
 import org.eclipse.releng.build.tools.convert.dom.LogDocumentNode;
 import org.eclipse.releng.build.tools.convert.dom.ProblemNode;
+import org.eclipse.releng.build.tools.convert.dom.SeverityType;
 import org.eclipse.releng.build.tools.convert.dom.ProblemSummaryNode;
 import org.eclipse.releng.build.tools.convert.dom.ProblemsNode;
 import org.w3c.dom.Document;
@@ -289,6 +290,7 @@
             summaryNode.numberOfProblems = Integer.parseInt(problemSummaryMap.getNamedItem("problems").getNodeValue()); //$NON-NLS-1$
             summaryNode.numberOfErrors = Integer.parseInt(problemSummaryMap.getNamedItem("errors").getNodeValue()); //$NON-NLS-1$
             summaryNode.numberOfWarnings = Integer.parseInt(problemSummaryMap.getNamedItem("warnings").getNodeValue()); //$NON-NLS-1$
+            summaryNode.numberOfInfos = Integer.parseInt(problemSummaryMap.getNamedItem("infos").getNodeValue()); //$NON-NLS-1$
         }
 
         nodeList = document.getElementsByTagName("problems"); //$NON-NLS-1$
@@ -310,6 +312,8 @@
             node.numberOfErrors = Integer.parseInt(problemsNodeMap.getNamedItem("errors").getNodeValue());//$NON-NLS-1$
             node.numberOfWarnings = Integer.parseInt(problemsNodeMap.getNamedItem("warnings").getNodeValue());//$NON-NLS-1$
             node.numberOfProblems = Integer.parseInt(problemsNodeMap.getNamedItem("problems").getNodeValue());//$NON-NLS-1$
+            node.numberOfInfos = Integer.parseInt(problemsNodeMap.getNamedItem("infos").getNodeValue());//$NON-NLS-1$
+
 
             final NodeList children = problemsNode.getChildNodes();
             final int childrenLength = children.getLength();
@@ -318,20 +322,29 @@
                 final NamedNodeMap problemNodeMap = problemNode.getAttributes();
                 final String severity = problemNodeMap.getNamedItem("severity").getNodeValue();//$NON-NLS-1$
                 final ProblemNode problem = new ProblemNode();
-                final boolean isError = "ERROR".equals(severity);//$NON-NLS-1$
-                problem.isError = isError;
                 problem.id = problemNodeMap.getNamedItem("id").getNodeValue();//$NON-NLS-1$
-                if (isError) {
+                switch (severity) {
+                  case "ERROR":
+                    problem.severityType = SeverityType.ERROR;
                     node.addError(problem);
-                } else if (AbstractDOMConverter.FILTERED_WARNINGS_IDS.contains(problem.id)) {
-                    if (AbstractDOMConverter.FORBIDDEN_REFERENCE.equals(problem.id)) {
-                        node.addForbiddenWarning(problem);
+                    break;
+                  case "INFO": 
+                    problem.severityType = SeverityType.INFO;
+                    node.addInfo(problem);
+                    break;
+                  case "WARNING":
+                    problem.severityType = SeverityType.WARNING;
+                    if (AbstractDOMConverter.FILTERED_WARNINGS_IDS.contains(problem.id)) {
+                      if (AbstractDOMConverter.FORBIDDEN_REFERENCE.equals(problem.id)) {
+                          node.addForbiddenWarning(problem);
+                      } else {
+                          node.addDiscouragedWarning(problem);
+                      }
                     } else {
-                        node.addDiscouragedWarning(problem);
+                      node.addOtherWarning(problem);
                     }
-                } else {
-                    node.addOtherWarning(problem);
-                }
+                    break;
+                }  
                 problem.charStart = Integer.parseInt(problemNodeMap.getNamedItem("charStart").getNodeValue());//$NON-NLS-1$
                 problem.charEnd = Integer.parseInt(problemNodeMap.getNamedItem("charEnd").getNodeValue());//$NON-NLS-1$
                 problem.line = Integer.parseInt(problemNodeMap.getNamedItem("line").getNodeValue());//$NON-NLS-1$
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/html_messages.properties b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/html_messages.properties
index a4807e9..cc9cd77 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/html_messages.properties
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/html_messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2007 IBM Corporation and others.
+# Copyright (c) 2000, 2017 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@
 # {1} number of problems
 # {2} number of errors
 # {3} number of warnings
+# {4} number of infos
 problems.footer=
 
 errors.title_anchor=<a name="ERROR"></a><h1>ERRORS</h1>\n
@@ -61,6 +62,12 @@
 discouraged_warnings.header=<h4>{0} : {1} :</h4>\n<table width="60%" style="border-color: #000000;" border="1" cellpadding="5">\n<caption><b><font color="#CC6633">DISCOURAGED ACCESS WARNINGS</font></b></caption>\n
 discouraged_warnings.footer=</table>\n
 
+infos.title_anchor=<a name="INFO_WARNINGS"></a><h1>INFO WARNINGS</h1>\n
+# {0] source file name
+# {1} number of warnings
+infos.header=<h4>{0} : {1} :</h4>\n<table width="60%" style="border-color: #000000;" border="1" cellpadding="5">\n<caption><b><font color="#CC6633">INFO WARNINGS</font></b></caption>\n
+infos.footer=</table>\n
+
 # {0} source file name
 # {1} global error number
 # {2} error number
@@ -141,10 +148,51 @@
 \	</td>\n\
 \</tr>\n
 
+# {0} source file name
+# {1} global error number
+# {2} error number
+# {3} error id
+# {4} line number of the error
+# {5} error message
+# {6} source code before this error
+# {7} source code corresponding to this error
+# {8} source code after this error
+# {9} complement to underline the problem
+# {10} starting position of the error
+# {11} ending position of the error
+infos.entry.even=<tr>\n\
+\	<td align=left valign=top>{2}.&nbsp;INFO&nbsp;in&nbsp;{0}<br/>\n\
+\		&nbsp;(at line {4})<br/>\n\
+\		{6}<b>{7}</b>{8}<br/>\n\
+\		<i>{5}</i>\n\
+\	</td>\n\
+\</tr>\n
+
+# {0} source file name
+# {1} global error number
+# {2} error number
+# {3} error id
+# {4} line number of the error
+# {5} error message
+# {6} source code before this error
+# {7} source code corresponding to this error
+# {8} source code after this error
+# {9} complement to underline the problem
+# {10} starting position of the error
+# {11} ending position of the error
+infos.entry.odd=<tr>\n\
+\	<td align=left valign=top>{2}.&nbsp;INFO&nbsp;in&nbsp;{0}<br/>\n\
+\		&nbsp;(at line {4})<br/>\n\
+\		{6}<b>{7}</b>{8}<br/>\n\
+\		<i>{5}</i>\n\
+\	</td>\n\
+\</tr>\n
+
 # {0} global number of problems
 # {1} global number of errors
 # {2} global number of warnings
-problem.summary=<h3><u><b>TOTAL</b></u>&nbsp;:&nbsp;ERRORS:&nbsp;{1},&nbsp;WARNINGS:&nbsp;{2}</h3>\n
+# {3} global number of infos
+problem.summary=<h3><u><b>TOTAL</b></u>&nbsp;:&nbsp;ERRORS:&nbsp;{1},&nbsp;WARNINGS:&nbsp;{2},&nbsp;INFOS:&nbsp;{3}</h3>\n
 
 problem.summary.title_anchor=<a name="TOP"></a>\n
 
@@ -153,6 +201,7 @@
 <tr>\n\
 <td><a href="#ERROR">errors</a></td>\n\
 <td><a href="#OTHER_WARNINGS">others warnings</a></td>\n\
+<td><a href="#INFO_WARNINGS">infos</a></td>\n\
 <td><a href="#FORBIDDEN_WARNINGS">forbidden warnings</a></td>\n\
 <td><a href="#DISCOURAGED_WARNINGS">discouraged warnings</a></td>\n\
 </tr>\n\
@@ -163,6 +212,7 @@
 <tr>\n\
 <td><a href="#TOP">top</a></td>\n\
 <td><a href="#OTHER_WARNINGS">others warnings</a></td>\n\
+<td><a href="#INFO_WARNINGS">infos</a></td>\n\
 <td><a href="#FORBIDDEN_WARNINGS">forbidden warnings</a></td>\n\
 <td><a href="#DISCOURAGED_WARNINGS">discouraged warnings</a></td>\n\
 </tr>\n\
@@ -173,6 +223,17 @@
 <tr>\n\
 <td><a href="#TOP">top</a></td>\n\
 <td><a href="#ERROR">errors</a></td>\n\
+<td><a href="#INFO_WARNINGS">infos</a></td>\n\
+<td><a href="#FORBIDDEN_WARNINGS">forbidden warnings</a></td>\n\
+<td><a href="#DISCOURAGED_WARNINGS">discouraged warnings</a></td>\n\
+</tr>\n\
+</table>\n
+
+anchors.references.no_infos=\n\
+<table>\n\
+<tr>\n\
+<td><a href="#ERROR">errors</a></td>\n\
+<td><a href="#OTHER_WARNINGS">others warnings</a></td>\n\
 <td><a href="#FORBIDDEN_WARNINGS">forbidden warnings</a></td>\n\
 <td><a href="#DISCOURAGED_WARNINGS">discouraged warnings</a></td>\n\
 </tr>\n\
@@ -183,6 +244,7 @@
 <tr>\n\
 <td><a href="#TOP">top</a></td>\n\
 <td><a href="#ERROR">errors</a></td>\n\
+<td><a href="#INFO_WARNINGS">infos</a></td>\n\
 <td><a href="#OTHER_WARNINGS">others warnings</a></td>\n\
 <td><a href="#DISCOURAGED_WARNINGS">discouraged warnings</a></td>\n\
 </tr>\n\
@@ -193,6 +255,7 @@
 <tr>\n\
 <td><a href="#TOP">top</a></td>\n\
 <td><a href="#ERROR">errors</a></td>\n\
+<td><a href="#INFO_WARNINGS">infos</a></td>\n\
 <td><a href="#OTHER_WARNINGS">others warnings</a></td>\n\
 <td><a href="#FORBIDDEN_WARNINGS">forbidden warnings</a></td>\n\
 </tr>\n\
@@ -202,4 +265,7 @@
 multiple_warnings={1,number} warnings
 
 one_error=1 error
-multiple_errors={1,number} errors
\ No newline at end of file
+multiple_errors={1,number} errors
+
+one_info=1 info
+multiple_infos={1,number} infos
\ No newline at end of file
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/txt_messages.properties b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/txt_messages.properties
index 99b2974..4786c45 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/txt_messages.properties
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/ant/txt_messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2007 IBM Corporation and others.
+# Copyright (c) 2000, 2017 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -17,13 +17,15 @@
 # {1} number of problems
 # {2} number of errors
 # {3} number of warnings
+# {4} number of infos
 
 problems.header=----------\n
 # {0] source file name
 # {1} number of problems
 # {2} number of errors
 # {3} number of warnings
-problems.footer={1} problem(s) ({2} error(s), {3} warning(s))
+# {4} number of infos
+problems.footer={1} problem(s) ({2} error(s), {3} warning(s), {4} info(s))
 
 errors.header=
 errors.footer=
@@ -103,8 +105,45 @@
 {5}\n\
 ----------\n
 
+# {0} source file name
+# {1} global error number
+# {2} error number
+# {3} error id
+# {4} line number of the error
+# {5} error message
+# {6} source code before this error
+# {7} source code corresponding to this error
+# {8} source code after this error
+# {9} complement to underline the problem
+# {10} starting position of the error
+# {11} ending position of the error
+infos.entry.odd={1}. INFO in {0}\n\
+ (at line {4})\n\
+\	{6}{7}{8}\n\	{9}\n\
+{5}\n\
+----------\n
+
+# {0} source file name
+# {1} global error number
+# {2} error number
+# {3} error id
+# {4} line number of the error
+# {5} error message
+# {6} source code before this error
+# {7} source code corresponding to this error
+# {8} source code after this error
+# {9} complement to underline the problem
+# {10} starting position of the error
+# {11} ending position of the error
+infos.entry.even={1}. INFO in {0}\n\
+ (at line {4})\n\
+\	{6}{7}{8}\n\	{9}\n\
+{5}\n\
+----------\n
+
 # {0} global number of problems
 # {1} global number of errors
 # {2} global number of warnings
-# {3} global number of tasks
-problem_summary={0} problem(s) ({1} error(s), {2} warning(s))
\ No newline at end of file
+# {3} global number of infos
+# {4} global number of tasks
+problem_summary={0} problem(s) ({1} error(s), {2} warning(s), {3} info(s))
\ No newline at end of file
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/AbstractDOMConverter.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/AbstractDOMConverter.java
index 2e585d1..4db915c 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/AbstractDOMConverter.java
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/AbstractDOMConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2016 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2006, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -90,7 +90,8 @@
             writeTopAnchor(writer);
             String pattern = messages.getString("problem.summary"); //$NON-NLS-1$
             writer.write(MessageFormat.format(pattern, new Object[] { Integer.toString(problemSummaryNode.numberOfProblems),
-                    Integer.toString(problemSummaryNode.numberOfErrors), Integer.toString(problemSummaryNode.numberOfWarnings) }));
+                    Integer.toString(problemSummaryNode.numberOfErrors), Integer.toString(problemSummaryNode.numberOfWarnings), 
+                    Integer.toString(problemSummaryNode.numberOfInfos)}));
 
             writeAnchorsReferences(writer);
             final ProblemsNode[] problemsNodes = documentNode.getProblems();
@@ -182,6 +183,49 @@
                 writer.write(messages.getString("other_warnings.footer")); //$NON-NLS-1$
             }
 
+            // dump infos
+            writeInfosAnchor(writer);
+            writeAnchorsReferencesInfos(writer);
+            for (int i = 0, max = problemsNodes.length; i < max; i++) {
+                final ProblemsNode problemsNode = problemsNodes[i];
+                final ProblemNode[] problemNodes = problemsNode.getInfos();
+                final int length = problemNodes.length;
+                if (length == 0) {
+                    continue;
+                }
+
+                pattern = messages.getString("infos.header"); //$NON-NLS-1$
+                final MessageFormat form = new MessageFormat(pattern);
+                final double[] warningsLimits = { 1, 2 };
+                final String[] warningParts = { messages.getString("one_info"),//$NON-NLS-1$
+                        messages.getString("multiple_infos") //$NON-NLS-1$
+                };
+                final ChoiceFormat warningForm = new ChoiceFormat(warningsLimits, warningParts);
+                final String sourceFileName = extractRelativePath(problemsNode.sourceFileName, pluginName);
+                form.setFormatByArgumentIndex(1, warningForm);
+                final Object[] arguments = new Object[] { sourceFileName, new Integer(problemsNode.numberOfInfos), };
+                writer.write(form.format(arguments));
+                for (int j = 0; j < length; j++) {
+                    final ProblemNode problemNode = problemNodes[j];
+                    if ((j & 1) != 0) {
+                        pattern = messages.getString("infos.entry.odd"); //$NON-NLS-1$
+                    } else {
+                        pattern = messages.getString("infos.entry.even"); //$NON-NLS-1$
+                    }
+                    problemNode.setSources();
+                    writer.write(MessageFormat.format(
+                            pattern,
+                            new Object[] { sourceFileName, Integer.toString(globalErrorNumber), Integer.toString(j + 1),
+                                    problemNode.id, Integer.toString(problemNode.line), convertToHTML(problemNode.message),
+                                    convertToHTML(problemNode.sourceCodeBefore), convertToHTML(problemNode.sourceCode),
+                                    convertToHTML(problemNode.sourceCodeAfter),
+                                    getUnderLine(problemNode.sourceCodeBefore, problemNode.sourceCodeAfter),
+                                    Integer.toString(problemNode.charStart), Integer.toString(problemNode.charEnd), }));
+                    globalErrorNumber++;
+                }
+                writer.write(messages.getString("infos.footer")); //$NON-NLS-1$
+            }
+
             // dump forbidden accesses warnings
             writeForbiddenRulesWarningsAnchor(writer);
             writeAnchorsReferencesForbiddenRulesWarnings(writer);
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/DOMHtmlConverter.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/DOMHtmlConverter.java
index facefb9..80eb279 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/DOMHtmlConverter.java
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/DOMHtmlConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2016 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2006, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -53,6 +53,11 @@
     }
 
     @Override
+    public void writeAnchorsReferencesInfos(final Writer writer) throws IOException {
+        writer.write(messages.getString("anchors.references.no_infos"));//$NON-NLS-1$
+    }
+    
+    @Override
     public void writeDiscouragedRulesWarningsAnchor(final Writer writer) throws IOException {
         writer.write(messages.getString("discouraged_warnings.title_anchor"));//$NON-NLS-1$
     }
@@ -73,6 +78,11 @@
     }
 
     @Override
+    public void writeInfosAnchor(final Writer writer) throws IOException {
+        writer.write(messages.getString("infos.title_anchor"));//$NON-NLS-1$
+    }
+
+    @Override
     public void writeTopAnchor(final Writer writer) throws IOException {
         writer.write(messages.getString("problem.summary.title_anchor"));//$NON-NLS-1$
     }
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/DOMTxtConverter.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/DOMTxtConverter.java
index e2c9348..313466c 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/DOMTxtConverter.java
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/DOMTxtConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2016 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2006, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -89,4 +89,16 @@
     public void writeTopAnchor(final Writer writer) throws IOException {
         // do nothing
     }
+
+    @Override
+    public void writeAnchorsReferencesInfos(Writer writer) throws IOException {
+      // do nothing
+      
+    }
+
+    @Override
+    public void writeInfosAnchor(Writer writer) throws IOException {
+      // do nothing
+      
+    }
 }
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/IDOMConverter.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/IDOMConverter.java
index 79ef809..057aaab 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/IDOMConverter.java
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/IDOMConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2006, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -38,4 +38,8 @@
     void writeOtherWarningsAnchor(Writer writer) throws IOException;
 
     void writeTopAnchor(Writer writer) throws IOException;
+
+    void writeAnchorsReferencesInfos(Writer writer) throws IOException;
+
+    void writeInfosAnchor(Writer writer) throws IOException;
 }
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemNode.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemNode.java
index c41df8a..3a0655b 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemNode.java
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2006, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -13,7 +13,7 @@
 
     protected static final String EMPTY = "";         //$NON-NLS-1$
 
-    public boolean                isError;
+    public SeverityType           severityType;
     public int                    charStart;
     public int                    charEnd;
     public int                    line;
@@ -58,7 +58,17 @@
     @Override
     public String toString() {
         final StringBuffer buffer = new StringBuffer();
-        buffer.append(isError ? "ERROR " : "WARNING "); //$NON-NLS-1$//$NON-NLS-2$
+        switch (severityType) {
+          case ERROR : 
+            buffer.append("ERROR ");//$NON-NLS-1$
+            break;
+          case WARNING : 
+            buffer.append("WARNING ");//$NON-NLS-1$
+            break;
+          case INFO : 
+            buffer.append("INFO ");//$NON-NLS-1$
+            break;
+        }
         buffer.append("line : ").append(line).append(" message = ").append(message);//$NON-NLS-1$//$NON-NLS-2$
         return buffer.toString();
     }
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemSummaryNode.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemSummaryNode.java
index ac77d03..2072cc7 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemSummaryNode.java
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemSummaryNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2006, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -14,6 +14,7 @@
     public int numberOfProblems;
     public int numberOfErrors;
     public int numberOfWarnings;
+    public int numberOfInfos;
 
     @Override
     public String toString() {
@@ -21,7 +22,8 @@
         buffer.append("problems : ") //$NON-NLS-1$
                 .append(numberOfProblems).append(" errors : ") //$NON-NLS-1$
                 .append(numberOfErrors).append(" warnings : ") //$NON-NLS-1$
-                .append(numberOfWarnings);
+                .append(numberOfWarnings).append(" infos : ") //$NON_NLS-1$
+                .append(numberOfInfos);
         return buffer.toString();
     }
 }
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemsNode.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemsNode.java
index 5be9407..5007031 100644
--- a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemsNode.java
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/ProblemsNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2016 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2006, 2017 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -19,15 +19,18 @@
     public int                         numberOfProblems;
     public int                         numberOfErrors;
     public int                         numberOfWarnings;
+    public int                         numberOfInfos;
 
     private ArrayList<ProblemNode>     errorNodes;
-    private ArrayList<ProblemNode>                  otherWarningNodes;
+    private ArrayList<ProblemNode>     otherWarningNodes;
     private ArrayList<ProblemNode>     discouragedWarningsNodes;
     private ArrayList<ProblemNode>     forbiddenWarningsNodes;
+    private ArrayList<ProblemNode>     infoNodes;
     private ProblemNode[]              errors;
     private ProblemNode[]              otherWarnings;
     private ProblemNode[]              discouragedWarnings;
     private ProblemNode[]              forbiddenWarnings;
+    private ProblemNode[]              infos;
 
     public void addDiscouragedWarning(final ProblemNode node) {
         if (discouragedWarningsNodes == null) {
@@ -57,6 +60,13 @@
         otherWarningNodes.add(node);
     }
 
+    public void addInfo(final ProblemNode node) {
+      if (infoNodes == null) {
+          infoNodes = new ArrayList<>();
+      }
+      infoNodes.add(node);
+    }
+
     public ProblemNode[] getDiscouragedWarnings() {
         if (discouragedWarnings != null) {
             return discouragedWarnings;
@@ -104,4 +114,16 @@
         otherWarningNodes.toArray(otherWarnings);
         return otherWarnings;
     }
+
+    public ProblemNode[] getInfos() {
+      if (infos != null) {
+          return infos;
+      }
+      if (infoNodes == null) {
+          return infos = EMPTY_NODES;
+      }
+      infos = new ProblemNode[infoNodes.size()];
+      infoNodes.toArray(infos);
+      return infos;
+  }
 }
diff --git a/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/SeverityType.java b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/SeverityType.java
new file mode 100644
index 0000000..03a8dca
--- /dev/null
+++ b/bundles/org.eclipse.releng.build.tools.convert/src/org/eclipse/releng/build/tools/convert/dom/SeverityType.java
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2017 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.releng.build.tools.convert.dom;
+
+
+public enum SeverityType {
+
+  ERROR, WARNING, INFO;
+}
\ No newline at end of file