diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/NoWhitespaceAfterCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/NoWhitespaceAfterCheck.java index 82aff06b9f4a..8070b6139a25 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/NoWhitespaceAfterCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/NoWhitespaceAfterCheck.java @@ -284,7 +284,10 @@ private static DetailAST getWhitespaceFollowedNode(DetailAST ast) { */ private static boolean shouldCheckWhitespaceAfter(DetailAST ast) { final DetailAST previousSibling = ast.getPreviousSibling(); - return previousSibling == null || previousSibling.getType() != TokenTypes.ANNOTATIONS; + final boolean isSynchronizedMethod = ast.getType() == TokenTypes.LITERAL_SYNCHRONIZED + && ast.getFirstChild() == null; + return (previousSibling == null || previousSibling.getType() != TokenTypes.ANNOTATIONS) + && !isSynchronizedMethod; } /** diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/whitespace/NoWhitespaceAfterCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/whitespace/NoWhitespaceAfterCheckTest.java index 262664fff982..67088fb0ebdd 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/whitespace/NoWhitespaceAfterCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/whitespace/NoWhitespaceAfterCheckTest.java @@ -354,6 +354,17 @@ public void testNoWhitespaceAfterWithEmoji() throws Exception { getPath("InputNoWhitespaceAfterWithEmoji.java"), expected); } + @Test + public void testNoWhitespaceAfterSynchronized() throws Exception { + + final String[] expected = { + "18:9: " + getCheckMessage(MSG_KEY, "synchronized"), + }; + + verifyWithInlineConfigParser( + getPath("InputNoWhitespaceAfterSynchronized.java"), expected); + } + /** * Creates MOCK lexical token and returns AST node for this token. * diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/nowhitespaceafter/InputNoWhitespaceAfterSynchronized.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/nowhitespaceafter/InputNoWhitespaceAfterSynchronized.java new file mode 100644 index 000000000000..4668e90e47a6 --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/nowhitespaceafter/InputNoWhitespaceAfterSynchronized.java @@ -0,0 +1,53 @@ +/* +NoWhitespaceAfter +allowLineBreaks = (default)true +tokens = LITERAL_SYNCHRONIZED + + +*/ +package com.puppycrawl.tools.checkstyle.checks.whitespace.nowhitespaceafter; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +public class InputNoWhitespaceAfterSynchronized { + + private final Object lock = new Object(); + + void m1() { + synchronized (lock) {} // violation + synchronized(lock) {} // ok + } + + synchronized int m2() { // ok + return 2; + } + + synchronized private int[] m3() { // ok + return new int[]{2}; + } + + synchronized int[] m4() { // ok + return new int[]{2}; + } + + private final synchronized int m5() { // ok + return 2; + } + + synchronized T m6() { // ok + return null; + } + + @SyncAnno synchronized T m7() { // ok + return null; + } + + @SyncAnno private synchronized T m8() { // ok + return null; + } +} + +@Target(ElementType.METHOD) +@interface SyncAnno { +}