From 603c43d506950014e6b757dbc8374e670bc08e0d Mon Sep 17 00:00:00 2001 From: Andrei Selkin Date: Sun, 19 Feb 2017 11:45:05 +0300 Subject: [PATCH] Issue #3843: Fix coverage problem for DesignForExtension --- .../design/DesignForExtensionCheck.java | 31 +++++++++---------- ...tDesignForExtensionOverridableMethods.java | 4 +++ 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/design/DesignForExtensionCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/design/DesignForExtensionCheck.java index b74a61454a35..1ad746a6f7c4 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/design/DesignForExtensionCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/design/DesignForExtensionCheck.java @@ -24,7 +24,6 @@ import java.util.Set; import java.util.function.Predicate; import java.util.stream.Collectors; -import java.util.stream.Stream; import com.puppycrawl.tools.checkstyle.api.AbstractCheck; import com.puppycrawl.tools.checkstyle.api.DetailAST; @@ -102,8 +101,8 @@ public class DesignForExtensionCheck extends AbstractCheck { /** * A set of annotations which allow the check to skip the method from validation. */ - private Set ignoredAnnotations = Stream.of("Test", "Before", "After", "BeforeClass", - "AfterClass").collect(Collectors.toSet()); + private Set ignoredAnnotations = Arrays.stream(new String[] {"Test", "Before", "After", + "BeforeClass", "AfterClass", }).collect(Collectors.toSet()); /** * Sets annotations which allow the check to skip the method from validation. @@ -139,9 +138,9 @@ public boolean isCommentNodesRequired() { @Override public void visitToken(DetailAST ast) { if (!hasJavadocComment(ast) + && canBeOverridden(ast) && (isNativeMethod(ast) || !hasEmptyImplementation(ast)) - && canBeOverridden(ast) && !hasIgnoredAnnotation(ast, ignoredAnnotations)) { final DetailAST classDef = getNearestClassOrEnumDefinition(ast); @@ -182,19 +181,17 @@ private boolean isNativeMethod(DetailAST ast) { private static boolean hasEmptyImplementation(DetailAST ast) { boolean hasEmptyBody = true; final DetailAST methodImplOpenBrace = ast.findFirstToken(TokenTypes.SLIST); - if (methodImplOpenBrace != null) { - final DetailAST methodImplCloseBrace = methodImplOpenBrace.getLastChild(); - final Predicate predicate = currentNode -> { - return currentNode != null - && currentNode != methodImplCloseBrace - && currentNode.getLineNo() <= methodImplCloseBrace.getLineNo() - && !TokenUtils.isCommentType(currentNode.getType()); - }; - final Optional methodBody = - TokenUtils.findFirstTokenByPredicate(methodImplOpenBrace, predicate); - if (methodBody.isPresent()) { - hasEmptyBody = false; - } + final DetailAST methodImplCloseBrace = methodImplOpenBrace.getLastChild(); + final Predicate predicate = currentNode -> { + return currentNode != null + && currentNode != methodImplCloseBrace + && currentNode.getLineNo() <= methodImplCloseBrace.getLineNo() + && !TokenUtils.isCommentType(currentNode.getType()); + }; + final Optional methodBody = + TokenUtils.findFirstTokenByPredicate(methodImplOpenBrace, predicate); + if (methodBody.isPresent()) { + hasEmptyBody = false; } return hasEmptyBody; } diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/design/InputDesignForExtensionOverridableMethods.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/design/InputDesignForExtensionOverridableMethods.java index afa1512b3981..8453755061dd 100644 --- a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/design/InputDesignForExtensionOverridableMethods.java +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/design/InputDesignForExtensionOverridableMethods.java @@ -218,4 +218,8 @@ public final class B { protected final int foo4(int a, int b) {return a + b;} } + + public abstract class C { + public abstract void foo1(int a); + } }