From 2ce3fc4fd0ee5b731cd86459a46db89c085e4c19 Mon Sep 17 00:00:00 2001 From: Michal Kordas Date: Thu, 4 Jun 2015 16:16:43 +0200 Subject: [PATCH] Fix PackageDeclaration check for files with comments only. #1149 --- .../checks/coding/PackageDeclarationCheck.java | 9 ++++++++- .../tools/checkstyle/api/DetailASTTest.java | 4 +++- .../checks/coding/PackageDeclarationCheckTest.java | 11 +++++++++++ .../tools/checkstyle/InputWithCommentOnly.java | 1 + 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 src/test/resources/com/puppycrawl/tools/checkstyle/InputWithCommentOnly.java diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/PackageDeclarationCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/PackageDeclarationCheck.java index a317ded3f..f804afba9 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/PackageDeclarationCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/PackageDeclarationCheck.java @@ -39,6 +39,9 @@ public final class PackageDeclarationCheck extends Check { */ public static final String MSG_KEY = "missing.package.declaration"; + /** Line number used to log violation when no AST nodes are present in file. */ + private static final int DEFAULT_LINE_NUMBER = 1; + /** is package defined. */ private boolean defined; @@ -65,7 +68,11 @@ public final class PackageDeclarationCheck extends Check { @Override public void finishTree(DetailAST ast) { if (!defined) { - log(ast.getLineNo(), MSG_KEY); + int lineNumber = DEFAULT_LINE_NUMBER; + if (ast != null) { + lineNumber = ast.getLineNo(); + } + log(lineNumber, MSG_KEY); } } diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/api/DetailASTTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/api/DetailASTTest.java index ac186172f..63f5d9a29 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/api/DetailASTTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/api/DetailASTTest.java @@ -90,7 +90,9 @@ public class DetailASTTest { System.getProperty("file.encoding", "UTF-8")); final FileContents contents = new FileContents(text); final DetailAST rootAST = TreeWalker.parse(contents); - checkTree(rootAST, null, null, filename, rootAST); + if (rootAST != null) { + checkTree(rootAST, null, null, filename, rootAST); + } } private void checkTree(final DetailAST node, diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/PackageDeclarationCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/PackageDeclarationCheckTest.java index 0f7eeecad..d5ed47e12 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/PackageDeclarationCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/PackageDeclarationCheckTest.java @@ -38,4 +38,15 @@ public class PackageDeclarationCheckTest extends BaseCheckTestSupport { verify(checkConfig, new File("src/test/resources-noncompilable/com/puppycrawl/tools/" + "checkstyle/coding/InputNoPackage.java").getCanonicalPath(), expected); } + + @Test + public void testOnFileWithCommentOnly() throws Exception { + DefaultConfiguration checkConfig = createCheckConfig(PackageDeclarationCheck.class); + + String[] expected = { + "1: " + getCheckMessage(MSG_KEY), + }; + + verify(checkConfig, getPath("InputWithCommentOnly.java"), expected); + } } diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/InputWithCommentOnly.java b/src/test/resources/com/puppycrawl/tools/checkstyle/InputWithCommentOnly.java new file mode 100644 index 000000000..06842070a --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/InputWithCommentOnly.java @@ -0,0 +1 @@ +/* Comment only */