diff --git a/docs/writingchecks.html b/docs/writingchecks.html
index b8399cfdc..98451a850 100644
--- a/docs/writingchecks.html
+++ b/docs/writingchecks.html
@@ -508,23 +508,26 @@
{
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
- // will return "com.mycompany.checks.messages"
- final String bundle = getMessageBundle();
-
- // 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
+ // figure out the file that contains the error
final String path = files[max].getPath();
- getMessageDispatcher().fireErrors(path, errors);
+
+ // message dispatcher is used to fire AuditEvents
+ MessageDispatcher dispatcher = getMessageDispatcher();
+
+ // signal start of file to AuditListeners
+ dispatcher.fireFileStarted(path);
+
+ // log the message
+ log(0, "max.files.exceeded", new Integer(max));
+
+ // you can call log() multiple times to flag multiple
+ // errors in the same file
+
+ // fire the errors for this file to the AuditListeners
+ dispatcher.fireErrors(path, getMessageCollector.getMessages());
+
+ // signal end of file to AuditListeners
+ dispatcher.fireFileFinished(path);
}
}
}
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/Checker.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/Checker.java
index 883caa9b4..34a515b83 100644
--- a/src/checkstyle/com/puppycrawl/tools/checkstyle/Checker.java
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/Checker.java
@@ -120,6 +120,18 @@ public class Checker extends AutomaticBean
/** the context of all child components */
private Context mChildContext;
+ /**
+ * The severity level of any violations found by submodules.
+ * The value of this property is passed to submodules via
+ * contextualize().
+ *
+ * Note: Since the Checker is merely a container for modules
+ * it does not make sense to implement logging functionality
+ * here. Consequently Checker does not extend AbstractViolationReporter,
+ * leading to a bit of duplicated code for severity level setting.
+ */
+ private SeverityLevel mSeverityLevel = SeverityLevel.ERROR;
+
/**
* Creates a new Checker instance.
* The instance needs to be contextualized and configured.
@@ -147,6 +159,7 @@ public class Checker extends AutomaticBean
final DefaultContext context = new DefaultContext();
context.add("classLoader", mLoader);
context.add("moduleFactory", mModuleFactory);
+ context.add("severity", mSeverityLevel.getName());
mChildContext = context;
}
@@ -342,4 +355,17 @@ public class Checker extends AutomaticBean
{
mLocaleLanguage = aLocaleLanguage;
}
+
+ /**
+ * Sets the severity level. The string should be one of the names
+ * defined in the SeverityLevel class.
+ *
+ * @param aSeverity The new severity level
+ * @see SeverityLevel
+ */
+ public final void setSeverity(String aSeverity)
+ {
+ mSeverityLevel = SeverityLevel.getInstance(aSeverity);
+ }
+
}
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/TreeWalker.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/TreeWalker.java
index a5942ca70..5b698fc71 100644
--- a/src/checkstyle/com/puppycrawl/tools/checkstyle/TreeWalker.java
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/TreeWalker.java
@@ -41,7 +41,6 @@ import com.puppycrawl.tools.checkstyle.api.Context;
import com.puppycrawl.tools.checkstyle.api.DetailAST;
import com.puppycrawl.tools.checkstyle.api.FileContents;
import com.puppycrawl.tools.checkstyle.api.LocalizedMessage;
-import com.puppycrawl.tools.checkstyle.api.LocalizedMessages;
import com.puppycrawl.tools.checkstyle.api.TokenTypes;
import com.puppycrawl.tools.checkstyle.api.Utils;
@@ -105,8 +104,6 @@ public final class TreeWalker
private final Map mTokenToChecks = new HashMap();
/** all the registered checks */
private final Set mAllChecks = new HashSet();
- /** collects the error messages */
- private final LocalizedMessages mMessages;
/** the distance between tab stops */
private int mTabWidth = 8;
/** cache file **/
@@ -133,7 +130,6 @@ public final class TreeWalker
public TreeWalker()
{
setFileExtensions(new String[]{"java"});
- mMessages = new LocalizedMessages();
// TODO: I (lkuehne) can't believe I wrote this! HACK HACK HACK!
@@ -184,7 +180,8 @@ public final class TreeWalker
{
DefaultContext checkContext = new DefaultContext();
checkContext.add("classLoader", mClassLoader);
- checkContext.add("messages", mMessages);
+ checkContext.add("messages", getMessageCollector());
+ checkContext.add("severity", getSeverity());
// TODO: hmmm.. this looks less than elegant
// we have just parsed the string,
// now we're recreating it only to parse it again a few moments later
@@ -229,7 +226,7 @@ public final class TreeWalker
return;
}
- mMessages.reset();
+ getMessageCollector().reset();
try {
getMessageDispatcher().fireFileStarted(fileName);
final String[] lines = Utils.getLines(fileName);
@@ -238,37 +235,41 @@ public final class TreeWalker
walk(rootAST, contents);
}
catch (FileNotFoundException fnfe) {
- mMessages.add(new LocalizedMessage(0, Defn.CHECKSTYLE_BUNDLE,
- "general.fileNotFound", null));
+ getMessageCollector().add(new LocalizedMessage(
+ 0, Defn.CHECKSTYLE_BUNDLE,
+ "general.fileNotFound", null));
}
catch (IOException ioe) {
- mMessages.add(new LocalizedMessage(
- 0, Defn.CHECKSTYLE_BUNDLE,
- "general.exception",
- new String[] {ioe.getMessage()}));
+ getMessageCollector().add(new LocalizedMessage(
+ 0, Defn.CHECKSTYLE_BUNDLE,
+ "general.exception",
+ new String[] {ioe.getMessage()}));
}
catch (RecognitionException re) {
- mMessages.add(new LocalizedMessage(0, Defn.CHECKSTYLE_BUNDLE,
- "general.exception",
- new String[] {re.getMessage()}));
+ getMessageCollector().add(new LocalizedMessage(
+ 0, Defn.CHECKSTYLE_BUNDLE,
+ "general.exception",
+ new String[] {re.getMessage()}));
}
catch (TokenStreamException te) {
- mMessages.add(new LocalizedMessage(0, Defn.CHECKSTYLE_BUNDLE,
- "general.exception",
- new String[] {te.getMessage()}));
+ getMessageCollector().add(new LocalizedMessage(
+ 0, Defn.CHECKSTYLE_BUNDLE,
+ "general.exception",
+ new String[] {te.getMessage()}));
}
catch (Throwable err) {
- mMessages.add(new LocalizedMessage(0, Defn.CHECKSTYLE_BUNDLE,
- "general.exception",
- new String[] {"" + err}));
+ getMessageCollector().add(new LocalizedMessage(
+ 0, Defn.CHECKSTYLE_BUNDLE,
+ "general.exception",
+ new String[] {"" + err}));
}
- if (mMessages.size() == 0) {
+ if (getMessageCollector().size() == 0) {
mCache.checkedOk(fileName, timestamp);
}
else {
getMessageDispatcher().fireErrors(
- fileName, mMessages.getMessages());
+ fileName, getMessageCollector().getMessages());
}
getMessageDispatcher().fireFileFinished(fileName);
@@ -348,7 +349,7 @@ public final class TreeWalker
*/
private void walk(DetailAST aAST, FileContents aContents)
{
- mMessages.reset();
+ getMessageCollector().reset();
notifyBegin(aAST, aContents);
// empty files are not flagged by javac, will yield aAST == null
@@ -539,4 +540,5 @@ public final class TreeWalker
mCache.destroy();
super.destroy();
}
+
}
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/api/AbstractFileSetCheck.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/api/AbstractFileSetCheck.java
index cf7ec2a49..4e0adb14f 100644
--- a/src/checkstyle/com/puppycrawl/tools/checkstyle/api/AbstractFileSetCheck.java
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/api/AbstractFileSetCheck.java
@@ -28,7 +28,7 @@ import java.util.ArrayList;
* @author lkuehne
*/
public abstract class AbstractFileSetCheck
- extends AutomaticBean implements FileSetCheck
+ extends AbstractViolationReporter implements FileSetCheck
{
/** The dispatcher errors are fired to. */
private MessageDispatcher mDispatcher = null;
@@ -36,6 +36,17 @@ public abstract class AbstractFileSetCheck
/** the file extensions that are accepted by this filter */
private String[] mFileExtensions = {};
+ /** collects the error messages */
+ private final LocalizedMessages mMessages;
+
+ /**
+ * initializes the AbstractFileSetCheck properties.
+ */
+ protected AbstractFileSetCheck()
+ {
+ mMessages = new LocalizedMessages();
+ }
+
/**
* Does nothing.
* @see com.puppycrawl.tools.checkstyle.api.FileSetCheck
@@ -50,7 +61,12 @@ public abstract class AbstractFileSetCheck
mDispatcher = aDispatcher;
}
- /** @return the current MessageDispatcher. */
+ /**
+ * A message dispatcher is used to fire violation messages to
+ * interested audit listeners.
+ *
+ * @return the current MessageDispatcher.
+ */
protected final MessageDispatcher getMessageDispatcher()
{
return mDispatcher;
@@ -114,17 +130,39 @@ public abstract class AbstractFileSetCheck
}
/**
- * Returns the Message bundle name to use for this FileSetCheck.
- * The default implementation uses the messages bundle
- * in the same package as this FileSetCeck.
- * @return the message bundle name
+ * Returns the collector for violation messages.
+ * Subclasses can use the collector to find out the violation
+ * messages to fire via the message dispatcher.
+ *
+ * @return the collector for localized messages.
*/
- protected String getMessageBundle()
+ protected final LocalizedMessages getMessageCollector()
{
- final String className = getClass().getName();
- final int pkgEndIndex = className.lastIndexOf('.');
- final String pkgName = className.substring(0, pkgEndIndex);
- final String bundle = pkgName + ".messages";
- return bundle;
+ return mMessages;
}
+
+ /**
+ * Adds a violation message to the
+ * {@link #getMessageCollector message collector}.
+ * @see AbstractViolationReporter#log(int, String, Object[])
+ */
+ protected final void log(int aLine, String aKey, Object aArgs[])
+ {
+ log(aLine, 0, aKey, aArgs);
+ }
+
+ /**
+ * Adds a violation message to the
+ * {@link #getMessageCollector message collector}.
+ * @see AbstractViolationReporter#log(int, int, String, Object[])
+ */
+ protected final void log(int aLineNo, int aColNo,
+ String aKey, Object[] aArgs)
+ {
+ getMessageCollector().add(new LocalizedMessage(
+ aLineNo, aColNo, getMessageBundle(),
+ aKey, aArgs, getSeverityLevel()));
+ }
+
+
}
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/api/AbstractViolationReporter.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/api/AbstractViolationReporter.java
new file mode 100644
index 000000000..160fff988
--- /dev/null
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/api/AbstractViolationReporter.java
@@ -0,0 +1,211 @@
+////////////////////////////////////////////////////////////////////////////////
+// checkstyle: Checks Java source code for adherence to a set of rules.
+// Copyright (C) 2001-2002 Oliver Burn
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+////////////////////////////////////////////////////////////////////////////////
+package com.puppycrawl.tools.checkstyle.api;
+
+/**
+ * Serves as an abstract base class for all modules that report inspection
+ * findings. Such modules have a Severity level which is used for the
+ * {@link LocalizedMessage localized messages} that are created by the module.
+ *
+ * @author lkuehne
+ */
+public abstract class AbstractViolationReporter extends AutomaticBean
+{
+ /** resuable constant for message formating */
+ private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
+
+ /** the severity level of any violations found */
+ private SeverityLevel mSeverityLevel = SeverityLevel.ERROR;
+
+ /**
+ * Returns the severity level of the messages generated by this module.
+ * @return the severity level
+ * @see SeverityLevel
+ * @see LocalizedMessage#getSeverityLevel
+ */
+ public final SeverityLevel getSeverityLevel()
+ {
+ return mSeverityLevel;
+ }
+
+ /**
+ * Sets the severity level. The string should be one of the names
+ * defined in the SeverityLevel class.
+ *
+ * @param aSeverity The new severity level
+ * @see SeverityLevel
+ */
+ public final void setSeverity(String aSeverity)
+ {
+ mSeverityLevel = SeverityLevel.getInstance(aSeverity);
+ }
+
+ /**
+ * Get the severity level's name.
+ *
+ * @return the check's severity level name.
+ */
+ public final String getSeverity()
+ {
+ return mSeverityLevel.getName();
+ }
+
+ /**
+ * Log a message.
+ *
+ * @param aLine the line number where the error was found
+ * @param aKey the message that describes the error
+ */
+ protected final void log(int aLine, String aKey)
+ {
+ log(aLine, aKey, EMPTY_OBJECT_ARRAY);
+ }
+
+ /**
+ * Helper method to log a LocalizedMessage. Column defaults to 0.
+ *
+ * @param aLineNo line number to associate with the message
+ * @param aKey key to locale message format
+ * @param aArg0 first argument
+ */
+ protected final void log(int aLineNo, String aKey, Object aArg0)
+ {
+ log(aLineNo, aKey, new Object[] {aArg0});
+ }
+
+ /**
+ * Helper method to log a LocalizedMessage. Column defaults to 0.
+ *
+ * @param aLineNo line number to associate with the message
+ * @param aKey key to locale message format
+ * @param aArg0 first argument
+ * @param aArg1 second argument
+ */
+ protected final void log(int aLineNo, String aKey,
+ Object aArg0, Object aArg1)
+ {
+ log(aLineNo, aKey, new Object[] {aArg0, aArg1});
+ }
+
+ /**
+ * Helper method to log a LocalizedMessage. Column defaults to 0.
+ *
+ * @param aLineNo line number to associate with the message
+ * @param aKey key to locale message format
+ * @param aArg0 first argument
+ * @param aArg1 second argument
+ * @param aArg2 third argument
+ */
+ protected final void log(int aLineNo, String aKey,
+ Object aArg0, Object aArg1, Object aArg2)
+ {
+ log(aLineNo, aKey, new Object[] {aArg0, aArg1, aArg2});
+ }
+
+ /**
+ * Helper method to log a LocalizedMessage.
+ *
+ * @param aLineNo line number to associate with the message
+ * @param aColNo column number to associate with the message
+ * @param aKey key to locale message format
+ */
+ protected final void log(int aLineNo, int aColNo, String aKey)
+ {
+ log(aLineNo, aColNo, aKey, EMPTY_OBJECT_ARRAY);
+ }
+
+ /**
+ * Helper method to log a LocalizedMessage.
+ *
+ * @param aLineNo line number to associate with the message
+ * @param aColNo column number to associate with the message
+ * @param aKey key to locale message format
+ * @param aArg0 an Object value
+ */
+ protected final void log(int aLineNo, int aColNo, String aKey,
+ Object aArg0)
+ {
+ log(aLineNo, aColNo, aKey, new Object[] {aArg0});
+ }
+
+ /**
+ * Helper method to log a LocalizedMessage.
+ *
+ * @param aLineNo line number to associate with the message
+ * @param aColNo column number to associate with the message
+ * @param aKey key to locale message format
+ * @param aArg0 an Object value
+ * @param aArg1 an Object value
+ */
+ protected final void log(int aLineNo, int aColNo, String aKey,
+ Object aArg0, Object aArg1)
+ {
+ log(aLineNo, aColNo, aKey, new Object[] {aArg0, aArg1});
+ }
+
+
+ /**
+ * Returns the message bundle name resourcebundle that contains the messages
+ * used by this module.
+ *
+ * The default implementation expects the resource files to be named + * messages.properties, messages_de.properties, etc. The file must + * be placed in the same package as the module implementation. + *
+ *+ * Example: If you write com/foo/MyCoolCheck, create resource files + * com/foo/messages.properties, com/foo/messages_de.properties, etc. + *
+ * + * @return name of a resource bundle that contains the messages + * used by this module. + */ + protected String getMessageBundle() + { + final String className = this.getClass().getName(); + final int endIndex = className.lastIndexOf('.'); + final String packageName = className.substring(0, endIndex); + return packageName + "." + "messages"; + } + + /** + * Log a message that has no column information. + * + * @param aLine the line number where the error was found + * @param aKey the message that describes the error + * @param aArgs the details of the message + * + * @see java.text.MessageFormat + */ + protected abstract void log(int aLine, String aKey, Object aArgs[]); + + /** + * Log a message that has column information. + * + * @param aLine the line number where the error was found + * @param aCol the column number where the error was found + * @param aKey the message that describes the error + * @param aArgs the details of the message + * + * @see java.text.MessageFormat + */ + protected abstract void log(int aLine, int aCol, + String aKey, Object[] aArgs); + +} diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/api/Check.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/api/Check.java index f7c7f8fe3..827652f4b 100644 --- a/src/checkstyle/com/puppycrawl/tools/checkstyle/api/Check.java +++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/api/Check.java @@ -30,10 +30,8 @@ import java.util.Set; * @see Writing * your own checks */ -public abstract class Check extends AutomaticBean +public abstract class Check extends AbstractViolationReporter { - /** resuable constant for message formating */ - private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0]; /** the current file contents */ private FileContents mFileContents = null; @@ -47,9 +45,6 @@ public abstract class Check extends AutomaticBean /** the tab with for column reporting */ private int mTabWidth = 8; // meaningful default - /** the severity level of any violations found */ - private SeverityLevel mSeverityLevel = SeverityLevel.DEFAULT_LEVEL; - /** current class loader */ private ClassLoader mLoader = Thread.currentThread().getContextClassLoader(); @@ -227,49 +222,6 @@ public abstract class Check extends AutomaticBean mTabWidth = aTabWidth; } - /** - * Returns the severity level of the check. - * @return the severity level - * @see com.puppycrawl.tools.checkstyle.api.SeverityLevel - */ - public final SeverityLevel getSeverityLevel() - { - return mSeverityLevel; - } - - /** - * Sets the severity level. The string should be one of the names - * defined in theSeverityLevel class.
- *
- * @param aSeverity The new severity level
- * @see com.puppycrawl.tools.checkstyle.api.SeverityLevel
- */
- public void setSeverity(String aSeverity)
- {
- mSeverityLevel = SeverityLevel.getInstance(aSeverity);
- }
-
- /**
- * Get the severity level's name.
- *
- * @return the check's severity level name.
- */
- public String getSeverity()
- {
- return mSeverityLevel.getName();
- }
-
- /**
- * Log an error message.
- *
- * @param aLine the line number where the error was found
- * @param aKey the message that describes the error
- */
- protected final void log(int aLine, String aKey)
- {
- log(aLine, aKey, EMPTY_OBJECT_ARRAY);
- }
-
/**
* Log an error message.
*
@@ -282,93 +234,10 @@ public abstract class Check extends AutomaticBean
protected final void log(int aLine, String aKey, Object aArgs[])
{
mMessages.add(new LocalizedMessage(
- aLine, getResourceBundle(), aKey, aArgs, mSeverityLevel));
+ aLine, getMessageBundle(), aKey, aArgs, getSeverityLevel()));
}
- /**
- * Helper method to log a LocalizedMessage. Column defaults to 0.
- *
- * @param aLineNo line number to associate with the message
- * @param aKey key to locale message format
- * @param aArg0 first argument
- */
- protected final void log(int aLineNo, String aKey, Object aArg0)
- {
- log(aLineNo, aKey, new Object[] {aArg0});
- }
-
- /**
- * Helper method to log a LocalizedMessage. Column defaults to 0.
- *
- * @param aLineNo line number to associate with the message
- * @param aKey key to locale message format
- * @param aArg0 first argument
- * @param aArg1 second argument
- */
- protected final void log(int aLineNo, String aKey,
- Object aArg0, Object aArg1)
- {
- log(aLineNo, aKey, new Object[] {aArg0, aArg1});
- }
-
- /**
- * Helper method to log a LocalizedMessage. Column defaults to 0.
- *
- * @param aLineNo line number to associate with the message
- * @param aKey key to locale message format
- * @param aArg0 first argument
- * @param aArg1 second argument
- * @param aArg2 third argument
- */
- protected final void log(int aLineNo, String aKey,
- Object aArg0, Object aArg1, Object aArg2)
- {
- log(aLineNo, aKey, new Object[] {aArg0, aArg1, aArg2});
- }
-
-
- /**
- * Helper method to log a LocalizedMessage.
- *
- * @param aLineNo line number to associate with the message
- * @param aColNo column number to associate with the message
- * @param aKey key to locale message format
- */
- protected final void log(int aLineNo, int aColNo, String aKey)
- {
- log(aLineNo, aColNo, aKey, EMPTY_OBJECT_ARRAY);
- }
-
- /**
- * Helper method to log a LocalizedMessage.
- *
- * @param aLineNo line number to associate with the message
- * @param aColNo column number to associate with the message
- * @param aKey key to locale message format
- * @param aArg0 an Object value
- */
- protected final void log(int aLineNo, int aColNo, String aKey,
- Object aArg0)
- {
- log(aLineNo, aColNo, aKey, new Object[] {aArg0});
- }
-
- /**
- * Helper method to log a LocalizedMessage.
- *
- * @param aLineNo line number to associate with the message
- * @param aColNo column number to associate with the message
- * @param aKey key to locale message format
- * @param aArg0 an Object value
- * @param aArg1 an Object value
- */
- protected final void log(int aLineNo, int aColNo, String aKey,
- Object aArg0, Object aArg1)
- {
- log(aLineNo, aColNo, aKey, new Object[] {aArg0, aArg1});
- }
-
/**
* Helper method to log a LocalizedMessage.
*
@@ -383,27 +252,8 @@ public abstract class Check extends AutomaticBean
final int col = 1 + Utils.lengthExpandedTabs(
getLines()[aLineNo - 1], aColNo, getTabWidth());
mMessages.add(new LocalizedMessage(
- aLineNo, col, getResourceBundle(), aKey, aArgs, mSeverityLevel));
+ aLineNo, col, getMessageBundle(), aKey, aArgs, getSeverityLevel()));
}
- /**
- * The default implementation expects the resource files to be named
- * messages.properties, messages_de.properties, etc. The file must
- * be placed in the same package as the Check implementation.
- *
- * Example: If you write com/foo/MyCoolCheck, create resource files
- * com/foo/messages.properties, com/foo/messages_de.properties, etc.
- *
- * @return name of a resource bundle that contains the messages
- * used by this check
- */
- private String getResourceBundle()
- {
- // PERF: check perf impact, maybe cache result
- final String className = this.getClass().getName();
- final String packageName =
- className.substring(0, className.lastIndexOf('.'));
- return packageName + "." + "messages";
- }
}
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/api/LocalizedMessage.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/api/LocalizedMessage.java
index f287fdbf2..cb43810d0 100644
--- a/src/checkstyle/com/puppycrawl/tools/checkstyle/api/LocalizedMessage.java
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/api/LocalizedMessage.java
@@ -56,6 +56,9 @@ public final class LocalizedMessage
/** the severity level **/
private final SeverityLevel mSeverityLevel;
+ /** the default severity level if one is not specified */
+ private static final SeverityLevel DEFAULT_SEVERITY = SeverityLevel.ERROR;
+
/** key for the message format **/
private final String mKey;
@@ -127,7 +130,7 @@ public final class LocalizedMessage
mKey = aKey;
mArgs = aArgs;
mBundle = aBundle;
- mSeverityLevel = SeverityLevel.DEFAULT_LEVEL;
+ mSeverityLevel = DEFAULT_SEVERITY;
}
/**
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/api/SeverityLevel.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/api/SeverityLevel.java
index 1ed6e97b7..c87d5e8f7 100755
--- a/src/checkstyle/com/puppycrawl/tools/checkstyle/api/SeverityLevel.java
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/api/SeverityLevel.java
@@ -67,9 +67,6 @@ public final class SeverityLevel implements Comparable, Serializable
public static final SeverityLevel ERROR =
new SeverityLevel(SEVERITYCODE_ERROR, SEVERITYNAME_ERROR);
- /** the default severity */
- public static final SeverityLevel DEFAULT_LEVEL = ERROR;
-
/** map from level names to the respective level */
private static final Map NAME_TO_LEVEL = new HashMap();
static {
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/PackageHtmlCheck.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/PackageHtmlCheck.java
index 8e088c0bf..e53211ae1 100644
--- a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/PackageHtmlCheck.java
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/PackageHtmlCheck.java
@@ -26,6 +26,7 @@ import java.util.HashSet;
import com.puppycrawl.tools.checkstyle.api.MessageDispatcher;
import com.puppycrawl.tools.checkstyle.api.LocalizedMessage;
import com.puppycrawl.tools.checkstyle.api.AbstractFileSetCheck;
+import com.puppycrawl.tools.checkstyle.api.LocalizedMessages;
/**
* @@ -67,11 +68,10 @@ public class PackageHtmlCheck extends AbstractFileSetCheck final String path = packageHtml.getPath(); dispatcher.fireFileStarted(path); if (!packageHtml.exists()) { - LocalizedMessage[] errors = new LocalizedMessage[1]; - String bundle = getMessageBundle(); - errors[0] = new LocalizedMessage( - 0, bundle, "javadoc.packageHtml", null); - getMessageDispatcher().fireErrors(path, errors); + log(0, "javadoc.packageHtml"); + final LocalizedMessages messageList = getMessageCollector(); + final LocalizedMessage[] messages = messageList.getMessages(); + getMessageDispatcher().fireErrors(path, messages); } dispatcher.fireFileFinished(path); } diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/TranslationCheck.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/TranslationCheck.java index e0bab86aa..90a1fceee 100644 --- a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/TranslationCheck.java +++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/TranslationCheck.java @@ -187,14 +187,12 @@ public class TranslationCheck extends AbstractFileSetCheck // Remaining elements in the key set are missing in the current file if (!keysClone.isEmpty()) { for (Iterator it = keysClone.iterator(); it.hasNext();) { - Object[] key = new Object[]{it.next()}; - LocalizedMessage[] errors = new LocalizedMessage[1]; - final String bundle = getMessageBundle(); - errors[0] = new LocalizedMessage( - 0, bundle, "translation.missingKey", key); - getMessageDispatcher().fireErrors(path, errors); + Object key = it.next(); + log(0, "translation.missingKey", key); } } + LocalizedMessage[] errors = getMessageCollector().getMessages(); + getMessageDispatcher().fireErrors(path, errors); dispatcher.fireFileFinished(path); } }