All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.codehaus.plexus.compiler.csharp.DefaultCSharpCompilerParser Maven / Gradle / Ivy

There is a newer version: 2.15.0
Show newest version
package org.codehaus.plexus.compiler.csharp;

import org.codehaus.plexus.compiler.CompilerMessage;
import org.codehaus.plexus.util.StringUtils;

/**
 * Handles output from both mono with only the line number
 * 

* ex error = "/home/trygvis/dev/com.myrealbox/trunk/mcs/nunit20/core/./TestRunnerThread.cs(29) error CS0246: Cannot find type 'NameValueCollection'" *

*

* and errors from mono & csc on windows which has column num also *

* ex error = "src\\test\\csharp\\Hierarchy\\Logger.cs(98,4): warning CS0618: 'NUnit.Framework.Assertion' is obsolete: 'Use Assert class instead'"; * * @author Gilles Dodinet * @author Trygve Laugstøl * @author Matthew Pocock * @author Chris Stevenson */ public class DefaultCSharpCompilerParser { private static String ERROR_PREFIX = "error "; private static String COMPILATION_PREFIX = "Compilation "; private static String MAGIC_LINE_MARKER = ".cs("; private static String MAGIC_LINE_MARKER_2 = ")"; public static CompilerMessage parseLine( String line ) { CompilerMessage ce = null; if ( isOutputWithNoColumnNumber( line ) ) { ce = parseLineWithNoColumnNumber( line ); } else { ce = parseLineWithColumnNumberAndLineNumber( line ); } return ce; } private static boolean isOutputWithNoColumnNumber( String line ) { int i = line.indexOf( MAGIC_LINE_MARKER ); if ( i == -1 ) { return true; } String chunk1 = line.substring( i + MAGIC_LINE_MARKER.length() ); int j = chunk1.indexOf( MAGIC_LINE_MARKER_2 ); String chunk2 = chunk1.substring( 0, j ); return !chunk2.contains( "," ); } private static CompilerMessage parseLineWithNoColumnNumber( String line ) { String file = null; boolean error = true; int startline = -1; int startcolumn = -1; int endline = -1; int endcolumn = -1; String message; if ( line.startsWith( ERROR_PREFIX ) ) { message = line.substring( ERROR_PREFIX.length() ); } else if ( line.startsWith( COMPILATION_PREFIX ) ) { // ignore return null; } else if ( line.contains( MAGIC_LINE_MARKER ) ) { int i = line.indexOf( MAGIC_LINE_MARKER ); int j = line.indexOf( ' ', i ); file = line.substring( 0, i + 3 ); String num = line.substring( i + MAGIC_LINE_MARKER.length(), j - 1 ); startline = Integer.parseInt( num ); endline = startline; message = line.substring( j + 1 + ERROR_PREFIX.length() ); error = line.contains( ") error" ); } else { System.err.println( "Unknown output: " + line ); return null; } return new CompilerMessage( file, error, startline, startcolumn, endline, endcolumn, message ); } private static CompilerMessage parseLineWithColumnNumberAndLineNumber( String line ) { String file = null; boolean error = true; int startline = -1; int startcolumn = -1; int endline = -1; int endcolumn = -1; String message; if ( line.startsWith( ERROR_PREFIX ) ) { message = line.substring( ERROR_PREFIX.length() ); } else if ( line.startsWith( COMPILATION_PREFIX ) ) { return null; } else if ( line.contains( MAGIC_LINE_MARKER ) ) { int i = line.indexOf( MAGIC_LINE_MARKER ); int j = line.indexOf( ' ', i ); file = line.substring( 0, i + 3 ); String linecol = line.substring( i + MAGIC_LINE_MARKER.length(), j - 2 ); String linenum = null; String colnum = null; if ( linecol.contains( "," ) && linecol.split( "," ).length == 2 ) { linenum = linecol.split( "," )[0]; colnum = linecol.split( "," )[1]; } else if ( linecol.split( "," ).length == 1 ) { linenum = linecol.split( "," )[0]; colnum = "-1"; } else { linenum = linecol.trim(); colnum = "-1"; } startline = StringUtils.isEmpty( linenum ) ? -1 : Integer.parseInt( linenum ); startcolumn = StringUtils.isEmpty( colnum ) ? -1 : Integer.parseInt( colnum ); endline = startline; endcolumn = startcolumn; message = line.substring( j + 1 + ERROR_PREFIX.length() ); error = line.contains( "): error" ); } else { System.err.println( "Unknown output: " + line ); return null; } return new CompilerMessage( file, error, startline, startcolumn, endline, endcolumn, message ); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy