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 */