incorporate performance patch

This commit is contained in:
Oliver Burn 2001-10-31 12:42:19 +00:00
parent d63b302615
commit 030798a11d
3 changed files with 126 additions and 11 deletions

View File

@ -1,10 +1,16 @@
2001-08-17 Oliver Burn <oliver@cortexebusiness.com.au>
2001-10-31 Oliver Burn <checkstyle@puppycrawl.com>
* src/checkstyle/com/puppycrawl/tools/checkstyle/Checker.java, src/checkstyle/com/puppycrawl/tools/checkstyle/StringArrayReader.java:
Included performance patch from Lars Kuhne [lars _DOT_ kuehne _AT_
planet-interkom _DOT_ de]. Really nice performance increase.
2001-08-17 Oliver Burn <checkstyle@puppycrawl.com>
* src/tests/com/puppycrawl/tools/checkstyle/CheckerTest.java:
Automagically locate the files from the classpath. Neat patch from
Stephane Bailliez [stephane DOT bailliez AT wanadoo DOT fr].
2001-08-06 Oliver Burn <oliver-work@puppycrawl.com>
2001-08-06 Oliver Burn <checkstyle@puppycrawl.com>
* src/checkstyle/com/puppycrawl/tools/checkstyle/Main.java: Now destroys
the checker.
@ -15,7 +21,7 @@
* src/checkstyle/com/puppycrawl/tools/checkstyle/PropertyCacheFile.java:
First implementation
2001-08-05 Oliver Burn <oliver-work@puppycrawl.com>
2001-08-05 Oliver Burn <checkstyle@puppycrawl.com>
* src/checkstyle/com/puppycrawl/tools/checkstyle/Configuration.java:
Now support boolean property values of "yes", "on", "true" and ignore
@ -24,7 +30,7 @@
* src/checkstyle/com/puppycrawl/tools/checkstyle/VerifierImpl.java, src/checkstyle/com/puppycrawl/tools/checkstyle/Defn.java, src/checkstyle/com/puppycrawl/tools/checkstyle/Configuration.java:
Added support for public member patterns.
2001-07-02 Oliver Burn <oliver-work@puppycrawl.com>
2001-07-02 Oliver Burn <checkstyle@puppycrawl.com>
* docs/index.html: Added that can ignore checking braces.
@ -83,7 +89,7 @@
* build.xml: Added checkstyle.import target.
2001-06-29 Oliver Burn <oliver-work@puppycrawl.com>
2001-06-29 Oliver Burn <checkstyle@puppycrawl.com>
* src/tests/com/puppycrawl/tools/checkstyle/CheckerTest.java:
Refactored to use the Configuration object.

View File

@ -28,6 +28,7 @@ import java.io.IOException;
import java.io.LineNumberReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Properties;
@ -135,9 +136,11 @@ class Checker
LineText[] errors;
try {
fireFileStarted(aFileName);
final String[] lines = getLines(aFileName);
VerifierSingleton.getInstance().clearMessages();
VerifierSingleton.getInstance().setLines(getLines(aFileName));
final AST ast = getAST(aFileName);
VerifierSingleton.getInstance().setLines(lines);
final Reader sar = new StringArrayReader(lines);
final AST ast = getAST(aFileName, sar);
processAST(ast);
errors = VerifierSingleton.getInstance().getMessages();
}
@ -196,17 +199,16 @@ class Checker
/**
* Parses and returns the AST for a file.
* @return the AST
* @param aFileName the name of the file to generate the AST
* @param aReader the Reader to generate the AST
* @throws FileNotFoundException error occurred
* @throws RecognitionException error occurred
* @throws TokenStreamException error occurred
**/
private AST getAST(String aFileName)
private AST getAST(String aFileName, Reader aReader)
throws FileNotFoundException, RecognitionException, TokenStreamException
{
// Create the lexer/parser stuff
final GeneratedJavaLexer jl =
new GeneratedJavaLexer(new FileReader(aFileName));
final GeneratedJavaLexer jl = new GeneratedJavaLexer(aReader);
jl.setFilename(aFileName);
final GeneratedJavaRecognizer jr = new GeneratedJavaRecognizer(jl);
jr.setFilename(aFileName);

View File

@ -0,0 +1,107 @@
////////////////////////////////////////////////////////////////////////////////
// checkstyle: Checks Java source code for adherence to a set of rules.
// Copyright (C) 2001 Oliver Burn
//
// This program 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.
//
// This program 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. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
////////////////////////////////////////////////////////////////////////////////
package com.puppycrawl.tools.checkstyle;
import java.io.Reader;
import java.io.IOException;
/**
* A Reader that reads from an underlying String array, assuming each
* array element corresponds to one line of text.
*
* @author Lars Kühne */
public class StringArrayReader extends Reader
{
/** the underlying String array */
private final String[] mUnderlyingArray;
/** the index of the currently read String */
private int mArrayIdx = 0;
/** the index of the next character to be read */
private int mStringIdx = 0;
/** flag to tell whether an implicit newline has to be reported */
private boolean mUnreportedNewline = false;
/** flag to tell if the reader has been closed */
private boolean mClosed = false;
/**
* Creates a new StringArrayReader.
*
* @param aUnderlyingArray the underlying String array.
*/
StringArrayReader(String[] aUnderlyingArray)
{
final int length = aUnderlyingArray.length;
mUnderlyingArray = new String[length];
System.arraycopy(aUnderlyingArray, 0, mUnderlyingArray, 0, length);
}
/** @see Reader */
public void close()
{
mClosed = true;
}
/** @return whether data is available that has not yet been read. */
private boolean dataAvailable()
{
return (mUnderlyingArray.length > mArrayIdx);
}
/** @see Reader */
public int read( char[] aCbuf, int aOff, int aLen ) throws IOException
{
if (mClosed) {
throw new IOException("already closed");
}
int retVal = 0;
if (!mUnreportedNewline && (mUnderlyingArray.length <= mArrayIdx)) {
return -1;
}
while ((retVal < aLen) && (mUnreportedNewline || dataAvailable())) {
if (mUnreportedNewline) {
aCbuf[aOff + retVal] = '\n';
retVal++;
mUnreportedNewline = false;
}
if ((retVal < aLen) && dataAvailable()) {
final String currentStr = mUnderlyingArray[mArrayIdx];
final int srcEnd = Math.min(currentStr.length(),
mStringIdx + aLen - retVal);
currentStr.getChars(mStringIdx, srcEnd, aCbuf, aOff + retVal);
retVal += srcEnd - mStringIdx;
mStringIdx = srcEnd;
if (mStringIdx >= currentStr.length()) {
mArrayIdx++;
mStringIdx = 0;
mUnreportedNewline = true;
}
}
}
return retVal;
}
}