javacerrorparser.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 155 行

JAVA
155
字号
/* * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT.  See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the *   Free SoftwareFoundation, Inc. *   59 Temple Place, Suite 330 *   Boston, MA 02111-1307  USA * * @author Scott Ferguson */package com.caucho.java;import com.caucho.util.CharBuffer;import com.caucho.util.CharCursor;import com.caucho.util.StringCharCursor;import com.caucho.vfs.ByteToChar;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;/** * Reads javac error messages and parses them into a usable format. */class JavacErrorParser extends ErrorParser {  private CharBuffer _token = new CharBuffer();  private CharBuffer _buf = new CharBuffer();  private ByteToChar _lineBuf = ByteToChar.create();  public JavacErrorParser()    throws UnsupportedEncodingException  {    this(null);  }  public JavacErrorParser(String encoding)    throws UnsupportedEncodingException  {    if (encoding == null)      encoding = System.getProperty("file.encoding");      _lineBuf.setEncoding(encoding);  }  String parseErrors(InputStream is, LineMap lineMap)    throws IOException  {    CharBuffer result = new CharBuffer();    int ch = is.read();    for (; ch >= 0; ch = is.read()) {      _lineBuf.clear();      for (; ch > 0 && ch != '\n'; ch = is.read())	_lineBuf.addByte((byte) ch);      _lineBuf.addChar('\n');      String lineString = _lineBuf.getConvertedString();      StringCharCursor cursor = new StringCharCursor(lineString);      String line = parseLine(cursor, lineMap);      if (line == null)	result.append(lineString);      else	result.append(line);    }    return result.toString();  }  /**   * Scans errors.   *   * <p>Javac errors look like "filename:line: message"   */  String parseLine(CharCursor is, LineMap lineMap)    throws IOException  {    int ch = is.read();    _buf.clear();    String filename = null;    int line = 0;    // Take 3: match /.*:\d+:/    _token.clear();  line:    for (; ch != is.DONE; ch = is.read()) {      while (ch == ':') {	line = 0;	for (ch = is.read(); ch >= '0' && ch <= '9'; ch = is.read())	  line = 10 * line + ch - '0';	if (ch == ':' && line > 0) {	  filename = _token.toString();	  break line;	}	else {	  _token.append(':');	  if (line > 0)	    _token.append(line);	}      }      if (ch != is.DONE)	_token.append((char) ch);    }    if (filename == null)      return null;    int column = 0;    // skip added junk like jikes extra "emacs" style columns    for (; ch != is.DONE && ch != ' '; ch = is.read()) {    }        for (; ch == ' '; ch = is.read()) {    }    // now gather the message    _buf.clear();    for (; ch != is.DONE; ch = is.read())      _buf.append((char) ch);    String message = _buf.toString();    if (lineMap != null)      return lineMap.convertError(filename, line, 0, message);    else      return filename + ":" + line + ": " + message;  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?