From dc3bffc48f5ed04573fea0df7481ebb5d52b7e46 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lars=20K=C3=BChne?=
Date: Thu, 26 Dec 2002 16:26:22 +0000
Subject: [PATCH] added gui screenshot to writingchecks.html
---
docs/gui_screenshot.png | Bin 0 -> 8604 bytes
docs/writingchecks.html | 71 +++++++++++++++++++++++++++-------------
2 files changed, 48 insertions(+), 23 deletions(-)
create mode 100644 docs/gui_screenshot.png
diff --git a/docs/gui_screenshot.png b/docs/gui_screenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..49e68fb8f444985f83c1daef673e41982e902d67
GIT binary patch
literal 8604
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
- TODO: screenshot
+
In the leftmost column you can open and close branches
@@ -269,7 +269,14 @@
public void visitToken(DetailAST ast)
{
- int methodDefs = ast.getChildCount(TokenTypes.METHOD_DEF);
+ // find the OBJBLOCK node below the CLASS_DEF/INTERFACE_DEF
+ DetailAST objBlock = ast.findFirstToken(TokenTypes.OBJBLOCK);
+
+ // count the number of direct children of the OBJBLOCK
+ // that are METHOD_DEFS
+ int methodDefs = objBlock.getChildCount(TokenTypes.METHOD_DEF);
+
+ // report error if limit is reached
if (methodDefs > max) {
log(ast.getLineNo(),
"too many methods, only " + max + " are allowed");
@@ -456,7 +463,7 @@
You cannot see the content of other files.
- This means that you cannot implement most of the code inspection
+ This means that you cannot implement some of the code inspection
features that are available in advanced IDEs like IntelliJ IDEA. For
example you will not be able to implement a Check that finds
@@ -474,31 +481,48 @@
href="api/com/puppycrawl/tools/checkstyle/api/FileSetCheck.html#process(java.io.File[])">process(File[] files) method and you're
done. A very simple example could fire an error if the number of files
- that are passed in exceeds a certain limit.
TODO:
- Implement that FSC and provide it as an example. Sketch:
- private int max = 100;
+ that are passed in exceeds a certain limit. Here is a FileSetCheck that does just that:
- public void setMax(int aMax)
- {
- max = aMax;
- }
+
+ package com.mycompany.checks;
- public void process(File[] files)
+ import java.io.File;
+ import com.puppycrawl.tools.checkstyle.api.*;
+
+ public class LimitImplementationFiles
+ extends AbstractFileSetCheck
{
- if (files != null && files.length > max)
+ private int max = 100;
+
+ public void setMax(int aMax)
{
- // build the error list
- Object[] key = new Object[]{it.next()};
- LocalizedMessage[] errors = new LocalizedMessage[1];
- final String className = getClass().getName();
- final int pkgEndIndex = className.lastIndexOf('.');
- final String pkgName = className.substring(0, pkgEndIndex);
- final String bundle = pkgName + ".messages";
- errors[0] = new LocalizedMessage(
- 0, bundle, "max.files.exceeded", key);
+ max = aMax;
+ }
- // fire the errors to the AuditListeners
- getMessageDispatcher().fireErrors(path, errors);
+ public void process(File[] files)
+ {
+ if (files != null && files.length > max) {
+
+ // Build the error list. Here we fire only one error
+ LocalizedMessage[] errors = new LocalizedMessage[1];
+
+ // get the resource bundle to use for the message
+ final String className = getClass().getName();
+ final int pkgEndIndex = className.lastIndexOf('.');
+ final String pkgName = className.substring(0, pkgEndIndex);
+ final String bundle = pkgName + ".messages";
+
+ // create the message arguments
+ Object[] msgArgs = new Object[]{new Integer(max)};
+
+ // create the actual message
+ errors[0] = new LocalizedMessage(
+ 0, bundle, "max.files.exceeded", msgArgs);
+
+ // fire the errors to the AuditListeners
+ final String path = files[max].getPath();
+ getMessageDispatcher().fireErrors(path, errors);
+ }
}
}
@@ -551,4 +575,5 @@
+Copyright © 2002 Oliver Burn. All rights Reserved.