[Japi-cvs] SF.net SVN: japi:[792] tools/todoScanner/trunk/src
Status: Beta
Brought to you by:
christianhujer
|
From: <chr...@us...> - 2009-02-09 02:22:16
|
Revision: 792
http://japi.svn.sourceforge.net/japi/?rev=792&view=rev
Author: christianhujer
Date: 2009-02-09 01:44:33 +0000 (Mon, 09 Feb 2009)
Log Message:
-----------
Improved TodoScanner to match all keywords from the SUN code conventions.
Modified Paths:
--------------
tools/todoScanner/trunk/src/prj/net/sf/japi/tools/todoScanner/TodoScanner.java
Added Paths:
-----------
tools/todoScanner/trunk/src/tst/test/
tools/todoScanner/trunk/src/tst/test/net/
tools/todoScanner/trunk/src/tst/test/net/sf/
tools/todoScanner/trunk/src/tst/test/net/sf/japi/
tools/todoScanner/trunk/src/tst/test/net/sf/japi/tools/
tools/todoScanner/trunk/src/tst/test/net/sf/japi/tools/todoScanner/
tools/todoScanner/trunk/src/tst/test/net/sf/japi/tools/todoScanner/TodoScannerTest.java
Modified: tools/todoScanner/trunk/src/prj/net/sf/japi/tools/todoScanner/TodoScanner.java
===================================================================
--- tools/todoScanner/trunk/src/prj/net/sf/japi/tools/todoScanner/TodoScanner.java 2009-02-01 22:35:44 UTC (rev 791)
+++ tools/todoScanner/trunk/src/prj/net/sf/japi/tools/todoScanner/TodoScanner.java 2009-02-09 01:44:33 UTC (rev 792)
@@ -8,9 +8,15 @@
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import net.sf.japi.io.args.ArgParser;
import net.sf.japi.io.args.BasicCommand;
+import net.sf.japi.io.args.Option;
import org.jetbrains.annotations.NotNull;
/** Scanner for comments of specific formats like to do comments.
@@ -21,6 +27,18 @@
/** The file encoding that is used for reading and writing files as weil es parsing substitutions from {@link System#in}. */
private final Charset encoding = Charset.defaultCharset();
+ /** The default list of keywords. */
+ private static final List<String> defaultKeywords = Collections.unmodifiableList(Arrays.asList("TODO", "FIXME", "XXX"));
+
+ /** The list of keywords to scan for. */
+ private final List<String> keywords = new ArrayList<String>(defaultKeywords);
+
+ /** Lazy-initialized pattern. */
+ private Pattern pattern;
+
+ /** Lazy-initialized matcher. */
+ private Matcher matcher;
+
/** Main program.
* @param args Command line arguments (try --help).
*/
@@ -28,9 +46,27 @@
ArgParser.simpleParseAndRun(new TodoScanner(), args);
}
+ /** Clears the list of keywords. */
+ @Option({"c", "clear"})
+ public void clearListOfKeywords() {
+ keywords.clear();
+ }
+
+ /** Adds an entry to the list of keywords.
+ * @param keyword Keyword to add to the list of keywords.
+ */
+ @Option({"a", "add"})
+ public void addKeyword(@NotNull final String keyword) {
+ keywords.add(keyword);
+ // pattern and matcher are no longer up-to-date, delete them.
+ pattern = null;
+ matcher = null;
+ }
+
/** {@inheritDoc} */
@SuppressWarnings({"InstanceMethodNamingConvention"})
public int run(@NotNull final List<String> args) throws Exception {
+ init();
if (args.size() == 0) {
scanForTodos(System.in);
} else {
@@ -72,9 +108,40 @@
final BufferedReader in = cin instanceof BufferedReader ? (BufferedReader) cin : new BufferedReader(cin);
int lineNumber = 0;
for (String line; (line = in.readLine()) != null; lineNumber++) {
- if (line.matches("TODO")) {
+ if (isMatching(line)) {
System.out.println(lineNumber + ": " + line);
}
}
}
+
+ /** Initializes pattern and matcher to match any of the keywords */
+ public void init() {
+ if (pattern == null) {
+ final StringBuilder regex = new StringBuilder();
+ regex.append("\\b(");
+ boolean first = true;
+ for (final String keyword : keywords) {
+ if (!first) {
+ regex.append("|");
+ }
+ regex.append(keyword);
+ first = false;
+ }
+ regex.append(")\\b");
+ pattern = Pattern.compile(regex.toString());
+ assert matcher == null;
+ matcher = pattern.matcher("");
+ }
+ assert matcher != null;
+ }
+
+ /** Returns whether or not the string contains one of the keywords.
+ * @param s String to test.
+ * @return <code>true</code> if the string contains one of the keywords, otherwise <code>false</code>.
+ */
+ public boolean isMatching(@NotNull final CharSequence s) {
+ matcher.reset(s);
+ return matcher.find();
+ }
+
}
Added: tools/todoScanner/trunk/src/tst/test/net/sf/japi/tools/todoScanner/TodoScannerTest.java
===================================================================
--- tools/todoScanner/trunk/src/tst/test/net/sf/japi/tools/todoScanner/TodoScannerTest.java (rev 0)
+++ tools/todoScanner/trunk/src/tst/test/net/sf/japi/tools/todoScanner/TodoScannerTest.java 2009-02-09 01:44:33 UTC (rev 792)
@@ -0,0 +1,37 @@
+package test.net.sf.japi.tools.todoScanner;
+
+import net.sf.japi.tools.todoScanner.TodoScanner;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link TodoScanner}.
+ * @author <a href="mailto:ch...@ri...">Christian Hujer</a>
+ */
+public class TodoScannerTest {
+
+ /** Tests if the default setting works. */
+ @Test
+ public void testDefault() {
+ final TodoScanner todoScanner = new TodoScanner();
+ todoScanner.init();
+ Assert.assertFalse(todoScanner.isMatching("OTTODO"));
+ Assert.assertFalse(todoScanner.isMatching("XXXX"));
+ Assert.assertFalse(todoScanner.isMatching("FIXMEE"));
+ Assert.assertTrue(todoScanner.isMatching("TODO"));
+ Assert.assertTrue(todoScanner.isMatching("XXX"));
+ Assert.assertTrue(todoScanner.isMatching("FIXME"));
+ Assert.assertTrue(todoScanner.isMatching("// TODO:"));
+ Assert.assertTrue(todoScanner.isMatching("// XXX:"));
+ Assert.assertTrue(todoScanner.isMatching("// FIXME:"));
+ Assert.assertTrue(todoScanner.isMatching("//TODO:"));
+ Assert.assertTrue(todoScanner.isMatching("//XXX:"));
+ Assert.assertTrue(todoScanner.isMatching("//FIXME:"));
+ Assert.assertTrue(todoScanner.isMatching("/*TODO:"));
+ Assert.assertTrue(todoScanner.isMatching("/*XXX:"));
+ Assert.assertTrue(todoScanner.isMatching("/*FIXME:"));
+ Assert.assertTrue(todoScanner.isMatching("#TODO:"));
+ Assert.assertTrue(todoScanner.isMatching("#XXX:"));
+ Assert.assertTrue(todoScanner.isMatching("#FIXME:"));
+ }
+}
Property changes on: tools/todoScanner/trunk/src/tst/test/net/sf/japi/tools/todoScanner/TodoScannerTest.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ LF
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|