diff options
author | rnveach <rveach02@gmail.com> | 2016-05-15 11:14:17 -0400 |
---|---|---|
committer | rnveach <rveach02@gmail.com> | 2016-05-27 09:42:49 -0400 |
commit | 39b343a32a4f1ce18ee98a34618fda0a5404d6a0 (patch) | |
tree | 4bb62d3ec030aa1d1b7f21eebb34572f411ccbc6 /src/main | |
parent | 2483ddc5a4d286891da1922cadf9e66547a7ec48 (diff) | |
download | checkstyle-39b343a32a4f1ce18ee98a34618fda0a5404d6a0.tar.gz |
Issue #3143: forbid empty return statements and fixed violations
Diffstat (limited to 'src/main')
49 files changed, 767 insertions, 861 deletions
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/Checker.java b/src/main/java/com/puppycrawl/tools/checkstyle/Checker.java index b25714499..6a42b7482 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/Checker.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/Checker.java @@ -460,17 +460,17 @@ public class Checker extends AutomaticBean implements MessageDispatcher { public final void setFileExtensions(String... extensions) { if (extensions == null) { fileExtensions = null; - return; } - - fileExtensions = new String[extensions.length]; - for (int i = 0; i < extensions.length; i++) { - final String extension = extensions[i]; - if (CommonUtils.startsWithChar(extension, '.')) { - fileExtensions[i] = extension; - } - else { - fileExtensions[i] = "." + extension; + else { + fileExtensions = new String[extensions.length]; + for (int i = 0; i < extensions.length; i++) { + final String extension = extensions[i]; + if (CommonUtils.startsWithChar(extension, '.')) { + fileExtensions[i] = extension; + } + else { + fileExtensions[i] = "." + extension; + } } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/TreeWalker.java b/src/main/java/com/puppycrawl/tools/checkstyle/TreeWalker.java index cef7ab6a0..5933f0620 100755 --- a/src/main/java/com/puppycrawl/tools/checkstyle/TreeWalker.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/TreeWalker.java @@ -166,34 +166,32 @@ public final class TreeWalker extends AbstractFileSetCheck implements ExternalRe @Override protected void processFiltered(File file, List<String> lines) throws CheckstyleException { // check if already checked and passed the file - if (!CommonUtils.matchesFileExtension(file, getFileExtensions())) { - return; - } - - final String msg = "%s occurred during the analysis of file %s."; - final String fileName = file.getPath(); - try { - final FileText text = FileText.fromLines(file, lines); - final FileContents contents = new FileContents(text); - final DetailAST rootAST = parse(contents); + if (CommonUtils.matchesFileExtension(file, getFileExtensions())) { + final String msg = "%s occurred during the analysis of file %s."; + final String fileName = file.getPath(); + try { + final FileText text = FileText.fromLines(file, lines); + final FileContents contents = new FileContents(text); + final DetailAST rootAST = parse(contents); - getMessageCollector().reset(); + getMessageCollector().reset(); - walk(rootAST, contents, AstState.ORDINARY); + walk(rootAST, contents, AstState.ORDINARY); - final DetailAST astWithComments = appendHiddenCommentNodes(rootAST); + final DetailAST astWithComments = appendHiddenCommentNodes(rootAST); - walk(astWithComments, contents, AstState.WITH_COMMENTS); - } - catch (final TokenStreamRecognitionException tre) { - final String exceptionMsg = String.format(Locale.ROOT, msg, - "TokenStreamRecognitionException", fileName); - throw new CheckstyleException(exceptionMsg, tre); - } - catch (RecognitionException | TokenStreamException ex) { - final String exceptionMsg = String.format(Locale.ROOT, msg, - ex.getClass().getSimpleName(), fileName); - throw new CheckstyleException(exceptionMsg, ex); + walk(astWithComments, contents, AstState.WITH_COMMENTS); + } + catch (final TokenStreamRecognitionException tre) { + final String exceptionMsg = String.format(Locale.ROOT, msg, + "TokenStreamRecognitionException", fileName); + throw new CheckstyleException(exceptionMsg, tre); + } + catch (RecognitionException | TokenStreamException ex) { + final String exceptionMsg = String.format(Locale.ROOT, msg, + ex.getClass().getSimpleName(), fileName); + throw new CheckstyleException(exceptionMsg, ex); + } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/api/FullIdent.java b/src/main/java/com/puppycrawl/tools/checkstyle/api/FullIdent.java index 2eab72610..5dbda49aa 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/api/FullIdent.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/api/FullIdent.java @@ -107,18 +107,16 @@ public final class FullIdent { * @param ast the node to recurse from */ private static void extractFullIdent(FullIdent full, DetailAST ast) { - if (ast == null) { - return; - } - - if (ast.getType() == TokenTypes.DOT) { - extractFullIdent(full, ast.getFirstChild()); - full.append("."); - extractFullIdent( - full, ast.getFirstChild().getNextSibling()); - } - else { - full.append(ast); + if (ast != null) { + if (ast.getType() == TokenTypes.DOT) { + extractFullIdent(full, ast.getFirstChild()); + full.append("."); + extractFullIdent( + full, ast.getFirstChild().getNextSibling()); + } + else { + full.append(ast); + } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/AbstractTypeAwareCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/AbstractTypeAwareCheck.java index 47562febe..6d8390ea5 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/AbstractTypeAwareCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/AbstractTypeAwareCheck.java @@ -307,24 +307,22 @@ public abstract class AbstractTypeAwareCheck extends AbstractCheck { final Map<String, AbstractClassInfo> paramsMap = Maps.newHashMap(); typeParams.push(paramsMap); - if (params == null) { - return; - } - - for (DetailAST child = params.getFirstChild(); - child != null; - child = child.getNextSibling()) { - if (child.getType() == TokenTypes.TYPE_PARAMETER) { - final String alias = - child.findFirstToken(TokenTypes.IDENT).getText(); - final DetailAST bounds = - child.findFirstToken(TokenTypes.TYPE_UPPER_BOUNDS); - if (bounds != null) { - final FullIdent name = - FullIdent.createFullIdentBelow(bounds); - final AbstractClassInfo classInfo = - createClassInfo(new Token(name), currentClassName); - paramsMap.put(alias, classInfo); + if (params != null) { + for (DetailAST child = params.getFirstChild(); + child != null; + child = child.getNextSibling()) { + if (child.getType() == TokenTypes.TYPE_PARAMETER) { + final String alias = + child.findFirstToken(TokenTypes.IDENT).getText(); + final DetailAST bounds = + child.findFirstToken(TokenTypes.TYPE_UPPER_BOUNDS); + if (bounds != null) { + final FullIdent name = + FullIdent.createFullIdentBelow(bounds); + final AbstractClassInfo classInfo = + createClassInfo(new Token(name), currentClassName); + paramsMap.put(alias, classInfo); + } } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/ArrayTypeStyleCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/ArrayTypeStyleCheck.java index 858b549fc..0208e40eb 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/ArrayTypeStyleCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/ArrayTypeStyleCheck.java @@ -59,24 +59,19 @@ public class ArrayTypeStyleCheck extends AbstractCheck { @Override public void visitToken(DetailAST ast) { final DetailAST typeAST = ast.getParent(); - if (typeAST.getType() != TokenTypes.TYPE) { - return; - } - final DetailAST parentAst = typeAST.getParent(); - if (parentAst.getType() == TokenTypes.METHOD_DEF) { - // Do not check method's return type. - // We have no alternatives here. - return; - } - - final DetailAST variableAST = typeAST.getNextSibling(); - if (variableAST != null) { - final boolean isJavaStyle = - variableAST.getLineNo() > ast.getLineNo() - || variableAST.getColumnNo() > ast.getColumnNo(); + if (typeAST.getType() == TokenTypes.TYPE + // Do not check method's return type. + // We have no alternatives here. + && typeAST.getParent().getType() != TokenTypes.METHOD_DEF) { + final DetailAST variableAST = typeAST.getNextSibling(); + if (variableAST != null) { + final boolean isJavaStyle = + variableAST.getLineNo() > ast.getLineNo() + || variableAST.getColumnNo() > ast.getColumnNo(); - if (isJavaStyle != javaStyle) { - log(ast.getLineNo(), ast.getColumnNo(), MSG_KEY); + if (isJavaStyle != javaStyle) { + log(ast.getLineNo(), ast.getColumnNo(), MSG_KEY); + } } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/FinalParametersCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/FinalParametersCheck.java index fbe4f6888..18bf7320a 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/FinalParametersCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/FinalParametersCheck.java @@ -115,18 +115,16 @@ public class FinalParametersCheck extends AbstractCheck { public void visitToken(DetailAST ast) { // don't flag interfaces final DetailAST container = ast.getParent().getParent(); - if (container.getType() == TokenTypes.INTERFACE_DEF) { - return; - } - - if (ast.getType() == TokenTypes.LITERAL_CATCH) { - visitCatch(ast); - } - else if (ast.getType() == TokenTypes.FOR_EACH_CLAUSE) { - visitForEachClause(ast); - } - else { - visitMethod(ast); + if (container.getType() != TokenTypes.INTERFACE_DEF) { + if (ast.getType() == TokenTypes.LITERAL_CATCH) { + visitCatch(ast); + } + else if (ast.getType() == TokenTypes.FOR_EACH_CLAUSE) { + visitForEachClause(ast); + } + else { + visitMethod(ast); + } } } @@ -135,29 +133,25 @@ public class FinalParametersCheck extends AbstractCheck { * @param method method or ctor to check. */ private void visitMethod(final DetailAST method) { - // exit on fast lane if there is nothing to check here - if (!method.branchContains(TokenTypes.PARAMETER_DEF)) { - return; - } - - // ignore abstract and native methods final DetailAST modifiers = method.findFirstToken(TokenTypes.MODIFIERS); - if (modifiers.branchContains(TokenTypes.ABSTRACT) - || modifiers.branchContains(TokenTypes.LITERAL_NATIVE)) { - return; - } + // exit on fast lane if there is nothing to check here - // we can now be sure that there is at least one parameter - final DetailAST parameters = - method.findFirstToken(TokenTypes.PARAMETERS); - DetailAST child = parameters.getFirstChild(); - while (child != null) { - // children are PARAMETER_DEF and COMMA - if (child.getType() == TokenTypes.PARAMETER_DEF) { - checkParam(child); + if (method.branchContains(TokenTypes.PARAMETER_DEF) + // ignore abstract and native methods + && !modifiers.branchContains(TokenTypes.ABSTRACT) + && !modifiers.branchContains(TokenTypes.LITERAL_NATIVE)) { + // we can now be sure that there is at least one parameter + final DetailAST parameters = + method.findFirstToken(TokenTypes.PARAMETERS); + DetailAST child = parameters.getFirstChild(); + while (child != null) { + // children are PARAMETER_DEF and COMMA + if (child.getType() == TokenTypes.PARAMETER_DEF) { + checkParam(child); + } + child = child.getNextSibling(); } - child = child.getNextSibling(); } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/SuppressWarningsHolder.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/SuppressWarningsHolder.java index 72144f580..4afe625ff 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/SuppressWarningsHolder.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/SuppressWarningsHolder.java @@ -211,40 +211,38 @@ public class SuppressWarningsHolder if ("SuppressWarnings".equals(identifier)) { final List<String> values = getAllAnnotationValues(ast); - if (isAnnotationEmpty(values)) { - return; - } - - final DetailAST targetAST = getAnnotationTarget(ast); - - if (targetAST == null) { - log(ast.getLineNo(), MSG_KEY); - return; - } - - // get text range of target - final int firstLine = targetAST.getLineNo(); - final int firstColumn = targetAST.getColumnNo(); - final DetailAST nextAST = targetAST.getNextSibling(); - final int lastLine; - final int lastColumn; - if (nextAST == null) { - lastLine = Integer.MAX_VALUE; - lastColumn = Integer.MAX_VALUE; - } - else { - lastLine = nextAST.getLineNo(); - lastColumn = nextAST.getColumnNo() - 1; - } - - // add suppression entries for listed checks - final List<Entry> entries = ENTRIES.get(); - for (String value : values) { - String checkName = value; - // strip off the checkstyle-only prefix if present - checkName = removeCheckstylePrefixIfExists(checkName); - entries.add(new Entry(checkName, firstLine, firstColumn, - lastLine, lastColumn)); + if (!isAnnotationEmpty(values)) { + final DetailAST targetAST = getAnnotationTarget(ast); + + if (targetAST == null) { + log(ast.getLineNo(), MSG_KEY); + } + else { + // get text range of target + final int firstLine = targetAST.getLineNo(); + final int firstColumn = targetAST.getColumnNo(); + final DetailAST nextAST = targetAST.getNextSibling(); + final int lastLine; + final int lastColumn; + if (nextAST == null) { + lastLine = Integer.MAX_VALUE; + lastColumn = Integer.MAX_VALUE; + } + else { + lastLine = nextAST.getLineNo(); + lastColumn = nextAST.getColumnNo() - 1; + } + + // add suppression entries for listed checks + final List<Entry> entries = ENTRIES.get(); + for (String value : values) { + String checkName = value; + // strip off the checkstyle-only prefix if present + checkName = removeCheckstylePrefixIfExists(checkName); + entries.add(new Entry(checkName, firstLine, firstColumn, + lastLine, lastColumn)); + } + } } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/UncommentedMainCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/UncommentedMainCheck.java index d420bc4fa..07349c222 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/UncommentedMainCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/UncommentedMainCheck.java @@ -153,16 +153,13 @@ public class UncommentedMainCheck * @param method method definition node */ private void visitMethodDef(DetailAST method) { - if (classDepth != 1) { - // method in inner class or in interface definition - return; - } - - if (checkClassName() - && checkName(method) - && checkModifiers(method) - && checkType(method) - && checkParams(method)) { + if (classDepth == 1 + // method not in inner class or in interface definition + && checkClassName() + && checkName(method) + && checkModifiers(method) + && checkType(method) + && checkParams(method)) { log(method.getLineNo(), MSG_KEY); } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/annotation/AnnotationUseStyleCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/annotation/AnnotationUseStyleCheck.java index 595f06b6b..16d891f6d 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/annotation/AnnotationUseStyleCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/annotation/AnnotationUseStyleCheck.java @@ -435,26 +435,24 @@ public final class AnnotationUseStyleCheck extends AbstractCheck { * @param annotation the annotation token */ private void checkTrailingComma(final DetailAST annotation) { - if (trailingArrayComma == TrailingArrayComma.IGNORE) { - return; - } - - DetailAST child = annotation.getFirstChild(); - - while (child != null) { - DetailAST arrayInit = null; - - if (child.getType() == TokenTypes.ANNOTATION_MEMBER_VALUE_PAIR) { - arrayInit = child.findFirstToken(TokenTypes.ANNOTATION_ARRAY_INIT); - } - else if (child.getType() == TokenTypes.ANNOTATION_ARRAY_INIT) { - arrayInit = child; - } - - if (arrayInit != null) { - logCommaViolation(arrayInit); + if (trailingArrayComma != TrailingArrayComma.IGNORE) { + DetailAST child = annotation.getFirstChild(); + + while (child != null) { + DetailAST arrayInit = null; + + if (child.getType() == TokenTypes.ANNOTATION_MEMBER_VALUE_PAIR) { + arrayInit = child.findFirstToken(TokenTypes.ANNOTATION_ARRAY_INIT); + } + else if (child.getType() == TokenTypes.ANNOTATION_ARRAY_INIT) { + arrayInit = child; + } + + if (arrayInit != null) { + logCommaViolation(arrayInit); + } + child = child.getNextSibling(); } - child = child.getNextSibling(); } } @@ -489,23 +487,21 @@ public final class AnnotationUseStyleCheck extends AbstractCheck { * @param ast the annotation token */ private void checkCheckClosingParens(final DetailAST ast) { - if (closingParens == ClosingParens.IGNORE) { - return; - } - - final DetailAST paren = ast.getLastChild(); - final boolean parenExists = paren.getType() == TokenTypes.RPAREN; + if (closingParens != ClosingParens.IGNORE) { + final DetailAST paren = ast.getLastChild(); + final boolean parenExists = paren.getType() == TokenTypes.RPAREN; - if (closingParens == ClosingParens.ALWAYS - && !parenExists) { - log(ast.getLineNo(), MSG_KEY_ANNOTATION_PARENS_MISSING); - } - else if (closingParens == ClosingParens.NEVER - && parenExists - && !ast.branchContains(TokenTypes.EXPR) - && !ast.branchContains(TokenTypes.ANNOTATION_MEMBER_VALUE_PAIR) - && !ast.branchContains(TokenTypes.ANNOTATION_ARRAY_INIT)) { - log(ast.getLineNo(), MSG_KEY_ANNOTATION_PARENS_PRESENT); + if (closingParens == ClosingParens.ALWAYS + && !parenExists) { + log(ast.getLineNo(), MSG_KEY_ANNOTATION_PARENS_MISSING); + } + else if (closingParens == ClosingParens.NEVER + && parenExists + && !ast.branchContains(TokenTypes.EXPR) + && !ast.branchContains(TokenTypes.ANNOTATION_MEMBER_VALUE_PAIR) + && !ast.branchContains(TokenTypes.ANNOTATION_ARRAY_INIT)) { + log(ast.getLineNo(), MSG_KEY_ANNOTATION_PARENS_PRESENT); + } } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/annotation/MissingOverrideCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/annotation/MissingOverrideCheck.java index 82cbde526..7e9d69e3d 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/annotation/MissingOverrideCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/annotation/MissingOverrideCheck.java @@ -150,23 +150,26 @@ public final class MissingOverrideCheck extends AbstractCheck { if (containsTag && !JavadocTagInfo.INHERIT_DOC.isValidOn(ast)) { log(ast.getLineNo(), MSG_KEY_TAG_NOT_VALID_ON, JavadocTagInfo.INHERIT_DOC.getText()); - return; } + else { + boolean check = true; - if (javaFiveCompatibility) { - final DetailAST defOrNew = ast.getParent().getParent(); + if (javaFiveCompatibility) { + final DetailAST defOrNew = ast.getParent().getParent(); - if (defOrNew.branchContains(TokenTypes.EXTENDS_CLAUSE) - || defOrNew.branchContains(TokenTypes.IMPLEMENTS_CLAUSE) - || defOrNew.getType() == TokenTypes.LITERAL_NEW) { - return; + if (defOrNew.branchContains(TokenTypes.EXTENDS_CLAUSE) + || defOrNew.branchContains(TokenTypes.IMPLEMENTS_CLAUSE) + || defOrNew.getType() == TokenTypes.LITERAL_NEW) { + check = false; + } } - } - if (containsTag - && !AnnotationUtility.containsAnnotation(ast, OVERRIDE) - && !AnnotationUtility.containsAnnotation(ast, FQ_OVERRIDE)) { - log(ast.getLineNo(), MSG_KEY_ANNOTATION_MISSING_OVERRIDE); + if (check + && containsTag + && !AnnotationUtility.containsAnnotation(ast, OVERRIDE) + && !AnnotationUtility.containsAnnotation(ast, FQ_OVERRIDE)) { + log(ast.getLineNo(), MSG_KEY_ANNOTATION_MISSING_OVERRIDE); + } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/annotation/SuppressWarningsCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/annotation/SuppressWarningsCheck.java index 0ef6b09f2..1338b2a3a 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/annotation/SuppressWarningsCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/annotation/SuppressWarningsCheck.java @@ -153,62 +153,63 @@ public class SuppressWarningsCheck extends AbstractCheck { public void visitToken(final DetailAST ast) { final DetailAST annotation = getSuppressWarnings(ast); - if (annotation == null) { - return; - } - - final DetailAST warningHolder = - findWarningsHolder(annotation); - - final DetailAST token = - warningHolder.findFirstToken(TokenTypes.ANNOTATION_MEMBER_VALUE_PAIR); - DetailAST warning; + if (annotation != null) { + final DetailAST warningHolder = + findWarningsHolder(annotation); - if (token == null) { - warning = warningHolder.findFirstToken(TokenTypes.EXPR); - } - else { - // case like '@SuppressWarnings(value = UNUSED)' - warning = token.findFirstToken(TokenTypes.EXPR); - } + final DetailAST token = + warningHolder.findFirstToken(TokenTypes.ANNOTATION_MEMBER_VALUE_PAIR); + DetailAST warning; - //rare case with empty array ex: @SuppressWarnings({}) - if (warning == null) { - //check to see if empty warnings are forbidden -- are by default - logMatch(warningHolder.getLineNo(), - warningHolder.getColumnNo(), ""); - return; - } + if (token == null) { + warning = warningHolder.findFirstToken(TokenTypes.EXPR); + } + else { + // case like '@SuppressWarnings(value = UNUSED)' + warning = token.findFirstToken(TokenTypes.EXPR); + } - while (warning != null) { - if (warning.getType() == TokenTypes.EXPR) { - final DetailAST fChild = warning.getFirstChild(); - switch (fChild.getType()) { - //typical case - case TokenTypes.STRING_LITERAL: - final String warningText = - removeQuotes(warning.getFirstChild().getText()); - logMatch(warning.getLineNo(), - warning.getColumnNo(), warningText); - break; - // conditional case - // ex: @SuppressWarnings((false) ? (true) ? "unchecked" : "foo" : "unused") - case TokenTypes.QUESTION: - walkConditional(fChild); - break; - // param in constant case - // ex: public static final String UNCHECKED = "unchecked"; - // @SuppressWarnings(UNCHECKED) or @SuppressWarnings(SomeClass.UNCHECKED) - case TokenTypes.IDENT: - case TokenTypes.DOT: - break; - default: - // Known limitation: cases like @SuppressWarnings("un" + "used") or - // @SuppressWarnings((String) "unused") are not properly supported, - // but they should not cause exceptions. + //rare case with empty array ex: @SuppressWarnings({}) + if (warning == null) { + //check to see if empty warnings are forbidden -- are by default + logMatch(warningHolder.getLineNo(), + warningHolder.getColumnNo(), ""); + } + else { + while (warning != null) { + if (warning.getType() == TokenTypes.EXPR) { + final DetailAST fChild = warning.getFirstChild(); + switch (fChild.getType()) { + //typical case + case TokenTypes.STRING_LITERAL: + final String warningText = + removeQuotes(warning.getFirstChild().getText()); + logMatch(warning.getLineNo(), + warning.getColumnNo(), warningText); + break; + // conditional case + // ex: + // @SuppressWarnings((false) ? (true) ? "unchecked" : "foo" : "unused") + case TokenTypes.QUESTION: + walkConditional(fChild); + break; + // param in constant case + // ex: public static final String UNCHECKED = "unchecked"; + // @SuppressWarnings(UNCHECKED) + // or + // @SuppressWarnings(SomeClass.UNCHECKED) + case TokenTypes.IDENT: + case TokenTypes.DOT: + break; + default: + // Known limitation: cases like @SuppressWarnings("un" + "used") or + // @SuppressWarnings((String) "unused") are not properly supported, + // but they should not cause exceptions. + } + } + warning = warning.getNextSibling(); } } - warning = warning.getNextSibling(); } } @@ -301,15 +302,15 @@ public class SuppressWarningsCheck extends AbstractCheck { * {@link TokenTypes#QUESTION QUESTION} */ private void walkConditional(final DetailAST cond) { - if (cond.getType() != TokenTypes.QUESTION) { + if (cond.getType() == TokenTypes.QUESTION) { + walkConditional(getCondLeft(cond)); + walkConditional(getCondRight(cond)); + } + else { final String warningText = - removeQuotes(cond.getText()); + removeQuotes(cond.getText()); logMatch(cond.getLineNo(), cond.getColumnNo(), warningText); - return; } - - walkConditional(getCondLeft(cond)); - walkConditional(getCondRight(cond)); } /** diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/blocks/AvoidNestedBlocksCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/blocks/AvoidNestedBlocksCheck.java index 68a0f10a6..cc9c327b8 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/blocks/AvoidNestedBlocksCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/blocks/AvoidNestedBlocksCheck.java @@ -115,12 +115,10 @@ public class AvoidNestedBlocksCheck extends AbstractCheck { @Override public void visitToken(DetailAST ast) { final DetailAST parent = ast.getParent(); - if (parent.getType() == TokenTypes.SLIST) { - if (allowInSwitchCase - && parent.getParent().getType() == TokenTypes.CASE_GROUP - && parent.getNumberOfChildren() == 1) { - return; - } + if (parent.getType() == TokenTypes.SLIST + && (!allowInSwitchCase + || parent.getParent().getType() != TokenTypes.CASE_GROUP + || parent.getNumberOfChildren() != 1)) { log(ast.getLineNo(), ast.getColumnNo(), MSG_KEY_BLOCK_NESTED); } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/blocks/RightCurlyCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/blocks/RightCurlyCheck.java index 67a9ba602..e620742fb 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/blocks/RightCurlyCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/blocks/RightCurlyCheck.java @@ -175,22 +175,19 @@ public class RightCurlyCheck extends AbstractCheck { final Details details = getDetails(ast); final DetailAST rcurly = details.rcurly; - if (rcurly == null || rcurly.getType() != TokenTypes.RCURLY) { - // we need to have both tokens to perform the check - return; - } - - final String violation; - if (shouldStartLine) { - final String targetSourceLine = getLines()[rcurly.getLineNo() - 1]; - violation = validate(details, option, true, targetSourceLine); - } - else { - violation = validate(details, option, false, ""); - } + if (rcurly != null && rcurly.getType() == TokenTypes.RCURLY) { + final String violation; + if (shouldStartLine) { + final String targetSourceLine = getLines()[rcurly.getLineNo() - 1]; + violation = validate(details, option, true, targetSourceLine); + } + else { + violation = validate(details, option, false, ""); + } - if (!violation.isEmpty()) { - log(rcurly, violation, "}", rcurly.getColumnNo() + 1); + if (!violation.isEmpty()) { + log(rcurly, violation, "}", rcurly.getColumnNo() + 1); + } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/ArrayTrailingCommaCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/ArrayTrailingCommaCheck.java index aea9aed8a..eef6173eb 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/ArrayTrailingCommaCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/ArrayTrailingCommaCheck.java @@ -68,14 +68,12 @@ public class ArrayTrailingCommaCheck extends AbstractCheck { // if curlies are on the same line // or array is empty then check nothing - if (arrayInit.getLineNo() == rcurly.getLineNo() - || arrayInit.getChildCount() == 1) { - return; - } - - final DetailAST prev = rcurly.getPreviousSibling(); - if (prev.getType() != TokenTypes.COMMA) { - log(rcurly.getLineNo(), MSG_KEY); + if (arrayInit.getLineNo() != rcurly.getLineNo() + && arrayInit.getChildCount() != 1) { + final DetailAST prev = rcurly.getPreviousSibling(); + if (prev.getType() != TokenTypes.COMMA) { + log(rcurly.getLineNo(), MSG_KEY); + } } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/ExplicitInitializationCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/ExplicitInitializationCheck.java index b743e6c1d..ec1d12bf9 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/ExplicitInitializationCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/ExplicitInitializationCheck.java @@ -73,31 +73,29 @@ public class ExplicitInitializationCheck extends AbstractCheck { @Override public void visitToken(DetailAST ast) { - if (isSkipCase(ast)) { - return; - } - - final DetailAST ident = ast.findFirstToken(TokenTypes.IDENT); - final DetailAST assign = ast.findFirstToken(TokenTypes.ASSIGN); - final DetailAST exprStart = - assign.getFirstChild().getFirstChild(); - final DetailAST type = ast.findFirstToken(TokenTypes.TYPE); - if (isObjectType(type) - && exprStart.getType() == TokenTypes.LITERAL_NULL) { - log(ident, MSG_KEY, ident.getText(), "null"); - } + if (!isSkipCase(ast)) { + final DetailAST ident = ast.findFirstToken(TokenTypes.IDENT); + final DetailAST assign = ast.findFirstToken(TokenTypes.ASSIGN); + final DetailAST exprStart = + assign.getFirstChild().getFirstChild(); + final DetailAST type = ast.findFirstToken(TokenTypes.TYPE); + if (isObjectType(type) + && exprStart.getType() == TokenTypes.LITERAL_NULL) { + log(ident, MSG_KEY, ident.getText(), "null"); + } - final int primitiveType = type.getFirstChild().getType(); - if (primitiveType == TokenTypes.LITERAL_BOOLEAN - && exprStart.getType() == TokenTypes.LITERAL_FALSE) { - log(ident, MSG_KEY, ident.getText(), "false"); - } - if (isNumericType(primitiveType) && isZero(exprStart)) { - log(ident, MSG_KEY, ident.getText(), "0"); - } - if (primitiveType == TokenTypes.LITERAL_CHAR - && isZeroChar(exprStart)) { - log(ident, MSG_KEY, ident.getText(), "\\0"); + final int primitiveType = type.getFirstChild().getType(); + if (primitiveType == TokenTypes.LITERAL_BOOLEAN + && exprStart.getType() == TokenTypes.LITERAL_FALSE) { + log(ident, MSG_KEY, ident.getText(), "false"); + } + if (isNumericType(primitiveType) && isZero(exprStart)) { + log(ident, MSG_KEY, ident.getText(), "0"); + } + if (primitiveType == TokenTypes.LITERAL_CHAR + && isZeroChar(exprStart)) { + log(ident, MSG_KEY, ident.getText(), "\\0"); + } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/FallThroughCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/FallThroughCheck.java index f09ba9364..f2e672955 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/FallThroughCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/FallThroughCheck.java @@ -133,20 +133,17 @@ public class FallThroughCheck extends AbstractCheck { public void visitToken(DetailAST ast) { final DetailAST nextGroup = ast.getNextSibling(); final boolean isLastGroup = nextGroup.getType() != TokenTypes.CASE_GROUP; - if (isLastGroup && !checkLastCaseGroup) { - // we do not need to check last group - return; - } - - final DetailAST slist = ast.findFirstToken(TokenTypes.SLIST); + if (!isLastGroup || checkLastCaseGroup) { + final DetailAST slist = ast.findFirstToken(TokenTypes.SLIST); - if (slist != null && !isTerminated(slist, true, true) - && !hasFallThroughComment(ast, nextGroup)) { - if (isLastGroup) { - log(ast, MSG_FALL_THROUGH_LAST); - } - else { - log(nextGroup, MSG_FALL_THROUGH); + if (slist != null && !isTerminated(slist, true, true) + && !hasFallThroughComment(ast, nextGroup)) { + if (isLastGroup) { + log(ast, MSG_FALL_THROUGH_LAST); + } + else { + log(nextGroup, MSG_FALL_THROUGH); + } } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalInstantiationCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalInstantiationCheck.java index 31b4aa2a4..1ed9118d0 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalInstantiationCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalInstantiationCheck.java @@ -200,18 +200,16 @@ public class IllegalInstantiationCheck private void postProcessLiteralNew(DetailAST newTokenAst) { final DetailAST typeNameAst = newTokenAst.getFirstChild(); final AST nameSibling = typeNameAst.getNextSibling(); - if (nameSibling.getType() == TokenTypes.ARRAY_DECLARATOR) { - // ast == "new Boolean[]" - return; - } - - final FullIdent typeIdent = FullIdent.createFullIdent(typeNameAst); - final String typeName = typeIdent.getText(); - final int lineNo = newTokenAst.getLineNo(); - final int colNo = newTokenAst.getColumnNo(); - final String fqClassName = getIllegalInstantiation(typeName); - if (fqClassName != null) { - log(lineNo, colNo, MSG_KEY, fqClassName); + if (nameSibling.getType() != TokenTypes.ARRAY_DECLARATOR) { + // ast != "new Boolean[]" + final FullIdent typeIdent = FullIdent.createFullIdent(typeNameAst); + final String typeName = typeIdent.getText(); + final int lineNo = newTokenAst.getLineNo(); + final int colNo = newTokenAst.getColumnNo(); + final String fqClassName = getIllegalInstantiation(typeName); + if (fqClassName != null) { + log(lineNo, colNo, MSG_KEY, fqClassName); + } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/MagicNumberCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/MagicNumberCheck.java index a68310c6f..9294f3bb5 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/MagicNumberCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/MagicNumberCheck.java @@ -207,26 +207,21 @@ public class MagicNumberCheck extends AbstractCheck { @Override public void visitToken(DetailAST ast) { - if (ignoreAnnotation && isChildOf(ast, TokenTypes.ANNOTATION)) { - return; - } - - if (isInIgnoreList(ast) - || ignoreHashCodeMethod && isInHashCodeMethod(ast)) { - return; - } - - final DetailAST constantDefAST = findContainingConstantDef(ast); - - if (constantDefAST == null) { - if (!ignoreFieldDeclaration || !isFieldDeclaration(ast)) { - reportMagicNumber(ast); + if ((!ignoreAnnotation || !isChildOf(ast, TokenTypes.ANNOTATION)) + && !isInIgnoreList(ast) + && (!ignoreHashCodeMethod || !isInHashCodeMethod(ast))) { + final DetailAST constantDefAST = findContainingConstantDef(ast); + + if (constantDefAST == null) { + if (!ignoreFieldDeclaration || !isFieldDeclaration(ast)) { + reportMagicNumber(ast); + } } - } - else { - final boolean found = isMagicNumberExists(ast, constantDefAST); - if (found) { - reportMagicNumber(ast); + else { + final boolean found = isMagicNumberExists(ast, constantDefAST); + if (found) { + reportMagicNumber(ast); + } } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/MultipleStringLiteralsCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/MultipleStringLiteralsCheck.java index 18d8a5b7e..26603c3ab 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/MultipleStringLiteralsCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/MultipleStringLiteralsCheck.java @@ -130,19 +130,18 @@ public class MultipleStringLiteralsCheck extends AbstractCheck { @Override public void visitToken(DetailAST ast) { - if (isInIgnoreOccurrenceContext(ast)) { - return; - } - final String currentString = ast.getText(); - if (pattern == null || !pattern.matcher(currentString).find()) { - List<StringInfo> hitList = stringMap.get(currentString); - if (hitList == null) { - hitList = Lists.newArrayList(); - stringMap.put(currentString, hitList); + if (!isInIgnoreOccurrenceContext(ast)) { + final String currentString = ast.getText(); + if (pattern == null || !pattern.matcher(currentString).find()) { + List<StringInfo> hitList = stringMap.get(currentString); + if (hitList == null) { + hitList = Lists.newArrayList(); + stringMap.put(currentString, hitList); + } + final int line = ast.getLineNo(); + final int col = ast.getColumnNo(); + hitList.add(new StringInfo(line, col)); } - final int line = ast.getLineNo(); - final int col = ast.getColumnNo(); - hitList.add(new StringInfo(line, col)); } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/MultipleVariableDeclarationsCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/MultipleVariableDeclarationsCheck.java index 87c7411e7..54e5c6d28 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/MultipleVariableDeclarationsCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/MultipleVariableDeclarationsCheck.java @@ -76,42 +76,38 @@ public class MultipleVariableDeclarationsCheck extends AbstractCheck { public void visitToken(DetailAST ast) { DetailAST nextNode = ast.getNextSibling(); - if (nextNode == null) { - // no next statement - no check - return; - } - - final boolean isCommaSeparated = nextNode.getType() == TokenTypes.COMMA; - - if (isCommaSeparated - || nextNode.getType() == TokenTypes.SEMI) { - nextNode = nextNode.getNextSibling(); - } + if (nextNode != null) { + final boolean isCommaSeparated = nextNode.getType() == TokenTypes.COMMA; - if (nextNode != null - && nextNode.getType() == TokenTypes.VARIABLE_DEF) { - final DetailAST firstNode = CheckUtils.getFirstNode(ast); - if (isCommaSeparated) { - // Check if the multiple variable declarations are in a - // for loop initializer. If they are, then no warning - // should be displayed. Declaring multiple variables in - // a for loop initializer is a good way to minimize - // variable scope. Refer Feature Request Id - 2895985 - // for more details - if (ast.getParent().getType() != TokenTypes.FOR_INIT) { - log(firstNode, MSG_MULTIPLE_COMMA); - } - return; + if (isCommaSeparated + || nextNode.getType() == TokenTypes.SEMI) { + nextNode = nextNode.getNextSibling(); } - final DetailAST lastNode = getLastNode(ast); - final DetailAST firstNextNode = CheckUtils.getFirstNode(nextNode); + if (nextNode != null + && nextNode.getType() == TokenTypes.VARIABLE_DEF) { + final DetailAST firstNode = CheckUtils.getFirstNode(ast); + if (isCommaSeparated) { + // Check if the multiple variable declarations are in a + // for loop initializer. If they are, then no warning + // should be displayed. Declaring multiple variables in + // a for loop initializer is a good way to minimize + // variable scope. Refer Feature Request Id - 2895985 + // for more details + if (ast.getParent().getType() != TokenTypes.FOR_INIT) { + log(firstNode, MSG_MULTIPLE_COMMA); + } + } + else { + final DetailAST lastNode = getLastNode(ast); + final DetailAST firstNextNode = CheckUtils.getFirstNode(nextNode); - if (firstNextNode.getLineNo() == lastNode.getLineNo()) { - log(firstNode, MSG_MULTIPLE); + if (firstNextNode.getLineNo() == lastNode.getLineNo()) { + log(firstNode, MSG_MULTIPLE); + } + } } } - } /** diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/SimplifyBooleanReturnCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/SimplifyBooleanReturnCheck.java index 0c565e629..9e7ae5808 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/SimplifyBooleanReturnCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/SimplifyBooleanReturnCheck.java @@ -74,18 +74,17 @@ public class SimplifyBooleanReturnCheck // don't bother if this is not if then else final AST elseLiteral = ast.findFirstToken(TokenTypes.LITERAL_ELSE); - if (elseLiteral == null) { - return; - } - final AST elseStatement = elseLiteral.getFirstChild(); + if (elseLiteral != null) { + final AST elseStatement = elseLiteral.getFirstChild(); - // skip '(' and ')' - final AST condition = ast.getFirstChild().getNextSibling(); - final AST thenStatement = condition.getNextSibling().getNextSibling(); + // skip '(' and ')' + final AST condition = ast.getFirstChild().getNextSibling(); + final AST thenStatement = condition.getNextSibling().getNextSibling(); - if (canReturnOnlyBooleanLiteral(thenStatement) - && canReturnOnlyBooleanLiteral(elseStatement)) { - log(ast.getLineNo(), ast.getColumnNo(), MSG_KEY); + if (canReturnOnlyBooleanLiteral(thenStatement) + && canReturnOnlyBooleanLiteral(elseStatement)) { + log(ast.getLineNo(), ast.getColumnNo(), MSG_KEY); + } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/UnnecessaryParenthesesCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/UnnecessaryParenthesesCheck.java index 0110c3425..c5575bd2b 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/UnnecessaryParenthesesCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/UnnecessaryParenthesesCheck.java @@ -231,38 +231,36 @@ public class UnnecessaryParenthesesCheck extends AbstractCheck { final int type = ast.getType(); final DetailAST parent = ast.getParent(); - if (type == TokenTypes.ASSIGN - && parent.getType() == TokenTypes.ANNOTATION_MEMBER_VALUE_PAIR) { - // shouldn't process assign in annotation pairs - return; - } - - // An expression is surrounded by parentheses. - if (type == TokenTypes.EXPR) { + // shouldn't process assign in annotation pairs + if (type != TokenTypes.ASSIGN + || parent.getType() != TokenTypes.ANNOTATION_MEMBER_VALUE_PAIR) { + // An expression is surrounded by parentheses. + if (type == TokenTypes.EXPR) { - // If 'parentToSkip' == 'ast', then we've already logged a - // warning about an immediate child node in visitToken, so we don't - // need to log another one here. + // If 'parentToSkip' == 'ast', then we've already logged a + // warning about an immediate child node in visitToken, so we don't + // need to log another one here. - if (parentToSkip != ast && isExprSurrounded(ast)) { - if (assignDepth >= 1) { - log(ast, MSG_ASSIGN); - } - else if (ast.getParent().getType() == TokenTypes.LITERAL_RETURN) { - log(ast, MSG_RETURN); - } - else { - log(ast, MSG_EXPR); + if (parentToSkip != ast && isExprSurrounded(ast)) { + if (assignDepth >= 1) { + log(ast, MSG_ASSIGN); + } + else if (ast.getParent().getType() == TokenTypes.LITERAL_RETURN) { + log(ast, MSG_RETURN); + } + else { + log(ast, MSG_EXPR); + } } + + parentToSkip = null; + } + else if (isInTokenList(type, ASSIGNMENTS)) { + assignDepth--; } - parentToSkip = null; - } - else if (isInTokenList(type, ASSIGNMENTS)) { - assignDepth--; + super.leaveToken(ast); } - - super.leaveToken(ast); } /** diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/design/FinalClassCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/design/FinalClassCheck.java index dc5e18ef5..af8176ec0 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/design/FinalClassCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/design/FinalClassCheck.java @@ -125,20 +125,18 @@ public class FinalClassCheck @Override public void leaveToken(DetailAST ast) { - if (ast.getType() != TokenTypes.CLASS_DEF) { - return; - } - - final ClassDesc desc = classes.pop(); - if (desc.isWithPrivateCtor() - && !desc.isDeclaredAsAbstract() - && !desc.isDeclaredAsFinal() - && !desc.isWithNonPrivateCtor() - && !desc.isWithNestedSubclass() - && !ScopeUtils.isInInterfaceOrAnnotationBlock(ast)) { - final String qualifiedName = desc.getQualifiedName(); - final String className = getClassNameFromQualifiedName(qualifiedName); - log(ast.getLineNo(), MSG_KEY, className); + if (ast.getType() == TokenTypes.CLASS_DEF) { + final ClassDesc desc = classes.pop(); + if (desc.isWithPrivateCtor() + && !desc.isDeclaredAsAbstract() + && !desc.isDeclaredAsFinal() + && !desc.isWithNonPrivateCtor() + && !desc.isWithNestedSubclass() + && !ScopeUtils.isInInterfaceOrAnnotationBlock(ast)) { + final String qualifiedName = desc.getQualifiedName(); + final String className = getClassNameFromQualifiedName(qualifiedName); + log(ast.getLineNo(), MSG_KEY, className); + } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/design/HideUtilityClassConstructorCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/design/HideUtilityClassConstructorCheck.java index 4bba159d8..a265a336b 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/design/HideUtilityClassConstructorCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/design/HideUtilityClassConstructorCheck.java @@ -58,34 +58,33 @@ public class HideUtilityClassConstructorCheck extends AbstractCheck { @Override public void visitToken(DetailAST ast) { - if (isAbstract(ast)) { - // abstract class could not have private constructor - return; - } - final boolean hasStaticModifier = isStatic(ast); + // abstract class could not have private constructor + if (!isAbstract(ast)) { + final boolean hasStaticModifier = isStatic(ast); - final Details details = new Details(ast); - details.invoke(); + final Details details = new Details(ast); + details.invoke(); - final boolean hasDefaultCtor = details.isHasDefaultCtor(); - final boolean hasPublicCtor = details.isHasPublicCtor(); - final boolean hasMethodOrField = details.isHasMethodOrField(); - final boolean hasNonStaticMethodOrField = details.isHasNonStaticMethodOrField(); - final boolean hasNonPrivateStaticMethodOrField = - details.isHasNonPrivateStaticMethodOrField(); + final boolean hasDefaultCtor = details.isHasDefaultCtor(); + final boolean hasPublicCtor = details.isHasPublicCtor(); + final boolean hasMethodOrField = details.isHasMethodOrField(); + final boolean hasNonStaticMethodOrField = details.isHasNonStaticMethodOrField(); + final boolean hasNonPrivateStaticMethodOrField = + details.isHasNonPrivateStaticMethodOrField(); - final boolean hasAccessibleCtor = hasDefaultCtor || hasPublicCtor; + final boolean hasAccessibleCtor = hasDefaultCtor || hasPublicCtor; - // figure out if class extends java.lang.object directly - // keep it simple for now and get a 99% solution - final boolean extendsJlo = - ast.findFirstToken(TokenTypes.EXTENDS_CLAUSE) == null; + // figure out if class extends java.lang.object directly + // keep it simple for now and get a 99% solution + final boolean extendsJlo = + ast.findFirstToken(TokenTypes.EXTENDS_CLAUSE) == null; - final boolean isUtilClass = extendsJlo && hasMethodOrField - && !hasNonStaticMethodOrField && hasNonPrivateStaticMethodOrField; + final boolean isUtilClass = extendsJlo && hasMethodOrField + && !hasNonStaticMethodOrField && hasNonPrivateStaticMethodOrField; - if (isUtilClass && hasAccessibleCtor && !hasStaticModifier) { - log(ast.getLineNo(), ast.getColumnNo(), MSG_KEY); + if (isUtilClass && hasAccessibleCtor && !hasStaticModifier) { + log(ast.getLineNo(), ast.getColumnNo(), MSG_KEY); + } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/header/AbstractHeaderCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/header/AbstractHeaderCheck.java index 9a5ee4064..600a72331 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/header/AbstractHeaderCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/header/AbstractHeaderCheck.java @@ -145,24 +145,22 @@ public abstract class AbstractHeaderCheck extends AbstractFileSetCheck * @throws ConversionException if the header cannot be interpreted */ public void setHeader(String header) { - if (CommonUtils.isBlank(header)) { - return; - } - - checkHeaderNotInitialized(); + if (!CommonUtils.isBlank(header)) { + checkHeaderNotInitialized(); - final String headerExpandedNewLines = ESCAPED_LINE_FEED_PATTERN - .matcher(header).replaceAll("\n"); + final String headerExpandedNewLines = ESCAPED_LINE_FEED_PATTERN + .matcher(header).replaceAll("\n"); - final Reader headerReader = new StringReader(headerExpandedNewLines); - try { - loadHeader(headerReader); - } - catch (final IOException ex) { - throw new ConversionException("unable to load header", ex); - } - finally { - Closeables.closeQuietly(headerReader); + final Reader headerReader = new StringReader(headerExpandedNewLines); + try { + loadHeader(headerReader); + } + catch (final IOException ex) { + throw new ConversionException("unable to load header", ex); + } + finally { + Closeables.closeQuietly(headerReader); + } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/header/HeaderCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/header/HeaderCheck.java index 2e9349868..00c30d4e9 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/header/HeaderCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/header/HeaderCheck.java @@ -78,12 +78,12 @@ public class HeaderCheck extends AbstractHeaderCheck { public void setIgnoreLines(int... list) { if (list.length == 0) { ignoreLines = EMPTY_INT_ARRAY; - return; } - - ignoreLines = new int[list.length]; - System.arraycopy(list, 0, ignoreLines, 0, list.length); - Arrays.sort(ignoreLines); + else { + ignoreLines = new int[list.length]; + System.arraycopy(list, 0, ignoreLines, 0, list.length); + Arrays.sort(ignoreLines); + } } @Override diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/header/RegexpHeaderCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/header/RegexpHeaderCheck.java index c6fd46a2c..293e18734 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/header/RegexpHeaderCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/header/RegexpHeaderCheck.java @@ -70,12 +70,12 @@ public class RegexpHeaderCheck extends AbstractHeaderCheck { public void setMultiLines(int... list) { if (list.length == 0) { multiLines = EMPTY_INT_ARRAY; - return; } - - multiLines = new int[list.length]; - System.arraycopy(list, 0, multiLines, 0, list.length); - Arrays.sort(multiLines); + else { + multiLines = new int[list.length]; + System.arraycopy(list, 0, multiLines, 0, list.length); + Arrays.sort(multiLines); + } } @Override @@ -171,13 +171,12 @@ public class RegexpHeaderCheck extends AbstractHeaderCheck { */ @Override public void setHeader(String header) { - if (CommonUtils.isBlank(header)) { - return; - } - if (!CommonUtils.isPatternValid(header)) { - throw new ConversionException("Unable to parse format: " + header); + if (!CommonUtils.isBlank(header)) { + if (!CommonUtils.isPatternValid(header)) { + throw new ConversionException("Unable to parse format: " + header); + } + super.setHeader(header); } - super.setHeader(header); } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/CustomImportOrderCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/CustomImportOrderCheck.java index ec80a2fad..7c0a3e23e 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/CustomImportOrderCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/CustomImportOrderCheck.java @@ -492,10 +492,13 @@ public class CustomImportOrderCheck extends AbstractCheck { @Override public void finishTree(DetailAST rootAST) { - if (importToGroupList.isEmpty()) { - return; + if (!importToGroupList.isEmpty()) { + finishImportList(); } + } + /** Examine the order of all the imports and log any violations. */ + private void finishImportList() { final ImportDetails firstImport = importToGroupList.get(0); String currentGroup = getImportGroup(firstImport.isStaticImport(), firstImport.getImportFullPath()); diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportControlCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportControlCheck.java index 59cad1e4f..30e5c42b1 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportControlCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportControlCheck.java @@ -154,16 +154,14 @@ public class ImportControlCheck extends AbstractCheck implements ExternalResourc */ public void setFile(final String name) { // Handle empty param - if (CommonUtils.isBlank(name)) { - return; - } - - try { - root = ImportControlLoader.load(new File(name).toURI()); - fileLocation = name; - } - catch (final CheckstyleException ex) { - throw new ConversionException(UNABLE_TO_LOAD + name, ex); + if (!CommonUtils.isBlank(name)) { + try { + root = ImportControlLoader.load(new File(name).toURI()); + fileLocation = name; + } + catch (final CheckstyleException ex) { + throw new ConversionException(UNABLE_TO_LOAD + name, ex); + } } } @@ -175,22 +173,21 @@ public class ImportControlCheck extends AbstractCheck implements ExternalResourc */ public void setUrl(final String url) { // Handle empty param - if (CommonUtils.isBlank(url)) { - return; - } - final URI uri; - try { - uri = URI.create(url); - } - catch (final IllegalArgumentException ex) { - throw new ConversionException("Syntax error in url " + url, ex); - } - try { - root = ImportControlLoader.load(uri); - fileLocation = url; - } - catch (final CheckstyleException ex) { - throw new ConversionException(UNABLE_TO_LOAD + url, ex); + if (!CommonUtils.isBlank(url)) { + final URI uri; + try { + uri = URI.create(url); + } + catch (final IllegalArgumentException ex) { + throw new ConversionException("Syntax error in url " + url, ex); + } + try { + root = ImportControlLoader.load(uri); + fileLocation = url; + } + catch (final CheckstyleException ex) { + throw new ConversionException(UNABLE_TO_LOAD + url, ex); + } } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportOrderCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportOrderCheck.java index 33b73c08f..431953b26 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportOrderCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportOrderCheck.java @@ -457,32 +457,30 @@ public class ImportOrderCheck */ private void doVisitTokenInSameGroup(boolean isStatic, boolean previous, String name, int line) { - if (!ordered) { - return; - } - - if (option == ImportOrderOption.INFLOW) { - // out of lexicographic order - if (compare(lastImport, name, caseSensitive) > 0) { - log(line, MSG_ORDERING, name); + if (ordered) { + if (option == ImportOrderOption.INFLOW) { + // out of lexicographic order + if (compare(lastImport, name, caseSensitive) > 0) { + log(line, MSG_ORDERING, name); + } } - } - else { - final boolean shouldFireError = - // previous non-static but current is static (above) - // or - // previous static but current is non-static (under) - previous - || - // current and previous static or current and - // previous non-static - lastImportStatic == isStatic - && - // and out of lexicographic order - compare(lastImport, name, caseSensitive) > 0; - - if (shouldFireError) { - log(line, MSG_ORDERING, name); + else { + final boolean shouldFireError = + // previous non-static but current is static (above) + // or + // previous static but current is non-static (under) + previous + || + // current and previous static or current and + // previous non-static + lastImportStatic == isStatic + && + // and out of lexicographic order + compare(lastImport, name, caseSensitive) > 0; + + if (shouldFireError) { + log(line, MSG_ORDERING, name); + } } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/AbstractExpressionHandler.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/AbstractExpressionHandler.java index 9c01cf811..1a5fe911e 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/AbstractExpressionHandler.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/AbstractExpressionHandler.java @@ -288,44 +288,42 @@ public abstract class AbstractExpressionHandler { IndentLevel indentLevel, boolean firstLineMatches, int firstLine) { - if (lines.isEmpty()) { - return; - } - - // check first line - final int startLine = lines.firstLine(); - final int endLine = lines.lastLine(); - final int startCol = lines.firstLineCol(); - - final int realStartCol = - getLineStart(indentCheck.getLine(startLine - 1)); - - if (realStartCol == startCol) { - checkLineIndent(startLine, startCol, indentLevel, - firstLineMatches); - } + if (!lines.isEmpty()) { + // check first line + final int startLine = lines.firstLine(); + final int endLine = lines.lastLine(); + final int startCol = lines.firstLineCol(); + + final int realStartCol = + getLineStart(indentCheck.getLine(startLine - 1)); + + if (realStartCol == startCol) { + checkLineIndent(startLine, startCol, indentLevel, + firstLineMatches); + } - // if first line starts the line, following lines are indented - // one level; but if the first line of this expression is - // nested with the previous expression (which is assumed if it - // doesn't start the line) then don't indent more, the first - // indentation is absorbed by the nesting + // if first line starts the line, following lines are indented + // one level; but if the first line of this expression is + // nested with the previous expression (which is assumed if it + // doesn't start the line) then don't indent more, the first + // indentation is absorbed by the nesting - IndentLevel theLevel = indentLevel; - if (firstLineMatches - || firstLine > mainAst.getLineNo() && shouldIncreaseIndent()) { - theLevel = new IndentLevel(indentLevel, getBasicOffset()); - } + IndentLevel theLevel = indentLevel; + if (firstLineMatches + || firstLine > mainAst.getLineNo() && shouldIncreaseIndent()) { + theLevel = new IndentLevel(indentLevel, getBasicOffset()); + } - // check following lines - for (int i = startLine + 1; i <= endLine; i++) { - final Integer col = lines.getStartColumn(i); - // startCol could be null if this line didn't have an - // expression that was required to be checked (it could be - // checked by a child expression) + // check following lines + for (int i = startLine + 1; i <= endLine; i++) { + final Integer col = lines.getStartColumn(i); + // startCol could be null if this line didn't have an + // expression that was required to be checked (it could be + // checked by a child expression) - if (col != null) { - checkLineIndent(i, col, theLevel, false); + if (col != null) { + checkLineIndent(i, col, theLevel, false); + } } } } @@ -496,23 +494,21 @@ public abstract class AbstractExpressionHandler { */ protected final void findSubtreeLines(LineSet lines, DetailAST tree, boolean allowNesting) { - if (indentCheck.getHandlerFactory().isHandledType(tree.getType())) { - return; - } - - final int lineNum = tree.getLineNo(); - final Integer colNum = lines.getStartColumn(lineNum); + if (!indentCheck.getHandlerFactory().isHandledType(tree.getType())) { + final int lineNum = tree.getLineNo(); + final Integer colNum = lines.getStartColumn(lineNum); - final int thisLineColumn = expandedTabsColumnNo(tree); - if (colNum == null || thisLineColumn < colNum) { - lines.addLineAndCol(lineNum, thisLineColumn); - } + final int thisLineColumn = expandedTabsColumnNo(tree); + if (colNum == null || thisLineColumn < colNum) { + lines.addLineAndCol(lineNum, thisLineColumn); + } - // check children - for (DetailAST node = tree.getFirstChild(); - node != null; - node = node.getNextSibling()) { - findSubtreeLines(lines, node, allowNesting); + // check children + for (DetailAST node = tree.getFirstChild(); + node != null; + node = node.getNextSibling()) { + findSubtreeLines(lines, node, allowNesting); + } } } @@ -605,11 +601,10 @@ public abstract class AbstractExpressionHandler { protected final void checkLParen(final DetailAST lparen) { // the rcurly can either be at the correct indentation, or on the // same line as the lcurly - if (lparen == null - || getIndent().isAcceptable(expandedTabsColumnNo(lparen)) - || !isOnStartOfLine(lparen)) { - return; + if (lparen != null + && !getIndent().isAcceptable(expandedTabsColumnNo(lparen)) + && isOnStartOfLine(lparen)) { + logError(lparen, "lparen", expandedTabsColumnNo(lparen)); } - logError(lparen, "lparen", expandedTabsColumnNo(lparen)); } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/BlockParentHandler.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/BlockParentHandler.java index 42bc18057..e86f50177 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/BlockParentHandler.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/BlockParentHandler.java @@ -92,14 +92,12 @@ public class BlockParentHandler extends AbstractExpressionHandler { protected void checkTopLevelToken() { final DetailAST topLevel = getTopLevelAst(); - if (topLevel == null - || getIndent().isAcceptable(expandedTabsColumnNo(topLevel)) || hasLabelBefore()) { - return; + if (topLevel != null + && !getIndent().isAcceptable(expandedTabsColumnNo(topLevel)) + && !hasLabelBefore() + && (shouldTopLevelStartLine() || isOnStartOfLine(topLevel))) { + logError(topLevel, "", expandedTabsColumnNo(topLevel)); } - if (!shouldTopLevelStartLine() && !isOnStartOfLine(topLevel)) { - return; - } - logError(topLevel, "", expandedTabsColumnNo(topLevel)); } /** @@ -158,11 +156,9 @@ public class BlockParentHandler extends AbstractExpressionHandler { final DetailAST lcurly = getLCurly(); final int lcurlyPos = expandedTabsColumnNo(lcurly); - if (curlyIndent().isAcceptable(lcurlyPos) || !isOnStartOfLine(lcurly)) { - return; + if (!curlyIndent().isAcceptable(lcurlyPos) && isOnStartOfLine(lcurly)) { + logError(lcurly, "lcurly", lcurlyPos, curlyIndent()); } - - logError(lcurly, "lcurly", lcurlyPos, curlyIndent()); } /** @@ -202,12 +198,11 @@ public class BlockParentHandler extends AbstractExpressionHandler { final DetailAST rcurly = getRCurly(); final int rcurlyPos = expandedTabsColumnNo(rcurly); - if (curlyIndent().isAcceptable(rcurlyPos) - || !shouldStartWithRCurly() && !isOnStartOfLine(rcurly) - || areOnSameLine(rcurly, lcurly)) { - return; + if (!curlyIndent().isAcceptable(rcurlyPos) + && (shouldStartWithRCurly() || isOnStartOfLine(rcurly)) + && !areOnSameLine(rcurly, lcurly)) { + logError(rcurly, "rcurly", rcurlyPos, curlyIndent()); } - logError(rcurly, "rcurly", rcurlyPos, curlyIndent()); } /** @@ -224,12 +219,10 @@ public class BlockParentHandler extends AbstractExpressionHandler { */ private void checkNonListChild() { final DetailAST nonList = getNonListChild(); - if (nonList == null) { - return; + if (nonList != null) { + final IndentLevel expected = new IndentLevel(getIndent(), getBasicOffset()); + checkExpressionSubtree(nonList, expected, false, false); } - - final IndentLevel expected = new IndentLevel(getIndent(), getBasicOffset()); - checkExpressionSubtree(nonList, expected, false, false); } /** diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/ElseHandler.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/ElseHandler.java index 81d6c55c6..0405e4e44 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/ElseHandler.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/ElseHandler.java @@ -49,14 +49,16 @@ public class ElseHandler extends BlockParentHandler { final DetailAST ifAST = getMainAst().getParent(); final DetailAST slist = ifAST.findFirstToken(TokenTypes.SLIST); - if (slist != null) { + if (slist == null) { + super.checkTopLevelToken(); + } + else { final DetailAST lcurly = slist.getLastChild(); - if (lcurly.getLineNo() == getMainAst().getLineNo()) { - // indentation checked as part of LITERAL IF check - return; + // indentation checked as part of LITERAL IF check + if (lcurly.getLineNo() != getMainAst().getLineNo()) { + super.checkTopLevelToken(); } } - super.checkTopLevelToken(); } @Override diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/IfHandler.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/IfHandler.java index 97eea3969..eadce0605 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/IfHandler.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/IfHandler.java @@ -72,11 +72,9 @@ public class IfHandler extends BlockParentHandler { @Override protected void checkTopLevelToken() { - if (isIfAfterElse()) { - return; + if (!isIfAfterElse()) { + super.checkTopLevelToken(); } - - super.checkTopLevelToken(); } /** diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/MethodCallHandler.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/MethodCallHandler.java index c626fdaad..7c3349b52 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/MethodCallHandler.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/MethodCallHandler.java @@ -148,27 +148,24 @@ public class MethodCallHandler extends AbstractExpressionHandler { @Override public void checkIndentation() { final DetailAST exprNode = getMainAst().getParent(); - if (exprNode.getParent().getType() != TokenTypes.SLIST) { - return; - } - final DetailAST methodName = getMainAst().getFirstChild(); - checkExpressionSubtree(methodName, getIndent(), false, false); - - final DetailAST lparen = getMainAst(); - final DetailAST rparen = getMainAst().findFirstToken(TokenTypes.RPAREN); - checkLParen(lparen); - - if (rparen.getLineNo() == lparen.getLineNo()) { - return; + if (exprNode.getParent().getType() == TokenTypes.SLIST) { + final DetailAST methodName = getMainAst().getFirstChild(); + checkExpressionSubtree(methodName, getIndent(), false, false); + + final DetailAST lparen = getMainAst(); + final DetailAST rparen = getMainAst().findFirstToken(TokenTypes.RPAREN); + checkLParen(lparen); + + if (rparen.getLineNo() != lparen.getLineNo()) { + checkExpressionSubtree( + getMainAst().findFirstToken(TokenTypes.ELIST), + new IndentLevel(getIndent(), getBasicOffset()), + false, true); + + checkRParen(lparen, rparen); + checkWrappingIndentation(getMainAst(), getMethodCallLastNode(getMainAst())); + } } - - checkExpressionSubtree( - getMainAst().findFirstToken(TokenTypes.ELIST), - new IndentLevel(getIndent(), getBasicOffset()), - false, true); - - checkRParen(lparen, rparen); - checkWrappingIndentation(getMainAst(), getMethodCallLastNode(getMainAst())); } @Override diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/MethodDefHandler.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/MethodDefHandler.java index 666e4b96a..c251ffa01 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/MethodDefHandler.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/MethodDefHandler.java @@ -112,11 +112,10 @@ public class MethodDefHandler extends BlockParentHandler { checkThrows(); checkWrappingIndentation(getMainAst(), getMethodDefParamRightParen(getMainAst())); - if (getLCurly() == null) { - // abstract method def -- no body - return; + // abstract method def -- no body + if (getLCurly() != null) { + super.checkIndentation(); } - super.checkIndentation(); } /** diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/ObjectBlockHandler.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/ObjectBlockHandler.java index 090a154e8..5175af54d 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/ObjectBlockHandler.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/ObjectBlockHandler.java @@ -81,11 +81,9 @@ public class ObjectBlockHandler extends BlockParentHandler { // only do this if we have a new for a parent (anonymous inner // class) final DetailAST parentAST = getMainAst().getParent(); - if (parentAST.getType() != TokenTypes.LITERAL_NEW) { - return; + if (parentAST.getType() == TokenTypes.LITERAL_NEW) { + super.checkIndentation(); } - - super.checkIndentation(); } @Override diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/SlistHandler.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/SlistHandler.java index ea12228a9..8c3f00e6d 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/SlistHandler.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/SlistHandler.java @@ -122,10 +122,9 @@ public class SlistHandler extends BlockParentHandler { public void checkIndentation() { // only need to check this if parent is not // an if, else, while, do, ctor, method - if (hasBlockParent() || isSameLineCaseGroup()) { - return; + if (!hasBlockParent() && !isSameLineCaseGroup()) { + super.checkIndentation(); } - super.checkIndentation(); } /** diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocMethodCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocMethodCheck.java index 043186daf..5be87ca4f 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocMethodCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocMethodCheck.java @@ -480,33 +480,31 @@ public class JavadocMethodCheck extends AbstractTypeAwareCheck { private void checkComment(DetailAST ast, TextBlock comment) { final List<JavadocTag> tags = getMethodTags(comment); - if (hasShortCircuitTag(ast, tags)) { - return; - } - - final Iterator<JavadocTag> it = tags.iterator(); - if (ast.getType() == TokenTypes.ANNOTATION_FIELD_DEF) { - checkReturnTag(tags, ast.getLineNo(), true); - } - else { - // Check for inheritDoc - boolean hasInheritDocTag = false; - while (!hasInheritDocTag && it.hasNext()) { - hasInheritDocTag = it.next().isInheritDocTag(); + if (!hasShortCircuitTag(ast, tags)) { + final Iterator<JavadocTag> it = tags.iterator(); + if (ast.getType() == TokenTypes.ANNOTATION_FIELD_DEF) { + checkReturnTag(tags, ast.getLineNo(), true); } - final boolean reportExpectedTags = !hasInheritDocTag && !hasAllowedAnnotations(ast); + else { + // Check for inheritDoc + boolean hasInheritDocTag = false; + while (!hasInheritDocTag && it.hasNext()) { + hasInheritDocTag = it.next().isInheritDocTag(); + } + final boolean reportExpectedTags = !hasInheritDocTag && !hasAllowedAnnotations(ast); - checkParamTags(tags, ast, reportExpectedTags); - checkThrowsTags(tags, getThrows(ast), reportExpectedTags); - if (CheckUtils.isNonVoidMethod(ast)) { - checkReturnTag(tags, ast.getLineNo(), reportExpectedTags); + checkParamTags(tags, ast, reportExpectedTags); + checkThrowsTags(tags, getThrows(ast), reportExpectedTags); + if (CheckUtils.isNonVoidMethod(ast)) { + checkReturnTag(tags, ast.getLineNo(), reportExpectedTags); + } } - } - // Dump out all unused tags - for (JavadocTag javadocTag : tags) { - if (!javadocTag.isSeeOrInheritDocTag()) { - log(javadocTag.getLineNo(), MSG_UNUSED_TAG_GENERAL); + // Dump out all unused tags + for (JavadocTag javadocTag : tags) { + if (!javadocTag.isSeeOrInheritDocTag()) { + log(javadocTag.getLineNo(), MSG_UNUSED_TAG_GENERAL); + } } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocPackageCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocPackageCheck.java index dbbe707d1..053d56c0a 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocPackageCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocPackageCheck.java @@ -70,22 +70,21 @@ public class JavadocPackageCheck extends AbstractFileSetCheck { protected void processFiltered(File file, List<String> lines) { // Check if already processed directory final File dir = file.getParentFile(); - if (directoriesChecked.contains(dir)) { - return; - } - directoriesChecked.add(dir); + if (!directoriesChecked.contains(dir)) { + directoriesChecked.add(dir); - // Check for the preferred file. - final File packageInfo = new File(dir, "package-info.java"); - final File packageHtml = new File(dir, "package.html"); + // Check for the preferred file. + final File packageInfo = new File(dir, "package-info.java"); + final File packageHtml = new File(dir, "package.html"); - if (packageInfo.exists()) { - if (packageHtml.exists()) { - log(0, MSG_LEGACY_PACKAGE_HTML); + if (packageInfo.exists()) { + if (packageHtml.exists()) { + log(0, MSG_LEGACY_PACKAGE_HTML); + } + } + else if (!allowLegacy || !packageHtml.exists()) { + log(0, MSG_PACKAGE_INFO); } - } - else if (!allowLegacy || !packageHtml.exists()) { - log(0, MSG_PACKAGE_INFO); } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocStyleCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocStyleCheck.java index 252cc30d6..c6cb9d9c7 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocStyleCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocStyleCheck.java @@ -201,19 +201,19 @@ public class JavadocStyleCheck if (getFileContents().inPackageInfo()) { log(ast.getLineNo(), MSG_JAVADOC_MISSING); } - return; - } - - if (checkFirstSentence) { - checkFirstSentenceEnding(ast, comment); } + else { + if (checkFirstSentence) { + checkFirstSentenceEnding(ast, comment); + } - if (checkHtml) { - checkHtmlTags(ast, comment); - } + if (checkHtml) { + checkHtmlTags(ast, comment); + } - if (checkEmptyJavadoc) { - checkJavadocIsNotEmpty(comment); + if (checkEmptyJavadoc) { + checkJavadocIsNotEmpty(comment); + } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocTagContinuationIndentationCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocTagContinuationIndentationCheck.java index e2df00a5a..4a9140f66 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocTagContinuationIndentationCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocTagContinuationIndentationCheck.java @@ -84,18 +84,17 @@ public class JavadocTagContinuationIndentationCheck extends AbstractJavadocCheck @Override public void visitJavadocToken(DetailNode ast) { - if (isInlineDescription(ast)) { - return; - } - final List<DetailNode> textNodes = getAllNewlineNodes(ast); - for (DetailNode newlineNode : textNodes) { - final DetailNode textNode = JavadocUtils.getNextSibling(JavadocUtils - .getNextSibling(newlineNode)); - if (textNode != null && textNode.getType() == JavadocTokenTypes.TEXT - && textNode.getChildren().length > 1) { - final DetailNode whitespace = JavadocUtils.getFirstChild(textNode); - if (whitespace.getText().length() - 1 < offset) { - log(textNode.getLineNumber(), MSG_KEY, offset); + if (!isInlineDescription(ast)) { + final List<DetailNode> textNodes = getAllNewlineNodes(ast); + for (DetailNode newlineNode : textNodes) { + final DetailNode textNode = JavadocUtils.getNextSibling(JavadocUtils + .getNextSibling(newlineNode)); + if (textNode != null && textNode.getType() == JavadocTokenTypes.TEXT + && textNode.getChildren().length > 1) { + final DetailNode whitespace = JavadocUtils.getFirstChild(textNode); + if (whitespace.getText().length() - 1 < offset) { + log(textNode.getLineNumber(), MSG_KEY, offset); + } } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocTypeCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocTypeCheck.java index eaf55b76c..a40b932bb 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocTypeCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocTypeCheck.java @@ -276,23 +276,21 @@ public class JavadocTypeCheck */ private void checkTag(int lineNo, List<JavadocTag> tags, String tagName, Pattern formatPattern, String format) { - if (formatPattern == null) { - return; - } - - int tagCount = 0; - final String tagPrefix = "@"; - for (int i = tags.size() - 1; i >= 0; i--) { - final JavadocTag tag = tags.get(i); - if (tag.getTagName().equals(tagName)) { - tagCount++; - if (!formatPattern.matcher(tag.getFirstArg()).find()) { - log(lineNo, MSG_TAG_FORMAT, tagPrefix + tagName, format); + if (formatPattern != null) { + int tagCount = 0; + final String tagPrefix = "@"; + for (int i = tags.size() - 1; i >= 0; i--) { + final JavadocTag tag = tags.get(i); + if (tag.getTagName().equals(tagName)) { + tagCount++; + if (!formatPattern.matcher(tag.getFirstArg()).find()) { + log(lineNo, MSG_TAG_FORMAT, tagPrefix + tagName, format); + } } } - } - if (tagCount == 0) { - log(lineNo, MSG_MISSING_TAG, tagPrefix + tagName); + if (tagCount == 0) { + log(lineNo, MSG_MISSING_TAG, tagPrefix + tagName); + } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/WriteTagCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/WriteTagCheck.java index 164c9049e..9eabebecd 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/WriteTagCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/WriteTagCheck.java @@ -172,30 +172,27 @@ public class WriteTagCheck * @param comment the Javadoc comment for the type definition. */ private void checkTag(int lineNo, String... comment) { - if (tagRegExp == null) { - return; - } - - int tagCount = 0; - for (int i = 0; i < comment.length; i++) { - final String commentValue = comment[i]; - final Matcher matcher = tagRegExp.matcher(commentValue); - if (matcher.find()) { - tagCount += 1; - final int contentStart = matcher.start(1); - final String content = commentValue.substring(contentStart); - if (tagFormatRegExp == null || tagFormatRegExp.matcher(content).find()) { - logTag(lineNo + i - comment.length, tag, content); - } - else { - log(lineNo + i - comment.length, MSG_TAG_FORMAT, tag, tagFormat); + if (tagRegExp != null) { + int tagCount = 0; + for (int i = 0; i < comment.length; i++) { + final String commentValue = comment[i]; + final Matcher matcher = tagRegExp.matcher(commentValue); + if (matcher.find()) { + tagCount += 1; + final int contentStart = matcher.start(1); + final String content = commentValue.substring(contentStart); + if (tagFormatRegExp == null || tagFormatRegExp.matcher(content).find()) { + logTag(lineNo + i - comment.length, tag, content); + } + else { + log(lineNo + i - comment.length, MSG_TAG_FORMAT, tag, tagFormat); + } } } + if (tagCount == 0) { + log(lineNo, MSG_MISSING_TAG, tag); + } } - if (tagCount == 0) { - log(lineNo, MSG_MISSING_TAG, tag); - } - } /** diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/regexp/SinglelineDetector.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/regexp/SinglelineDetector.java index 2955b554b..7a47ebabf 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/regexp/SinglelineDetector.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/regexp/SinglelineDetector.java @@ -96,34 +96,32 @@ class SinglelineDetector { private void checkLine(int lineNo, String line, Matcher matcher, int startPosition) { final boolean foundMatch = matcher.find(startPosition); - if (!foundMatch) { - return; - } - - // match is found, check for intersection with comment - final int startCol = matcher.start(0); - final int endCol = matcher.end(0); - // Note that Matcher.end(int) returns the offset AFTER the - // last matched character, but shouldSuppress() - // needs column number of the last character. - // So we need to use (endCol - 1) here. - if (options.getSuppressor() - .shouldSuppress(lineNo, startCol, lineNo, endCol - 1)) { - if (endCol < line.length()) { - // check if the expression is on the rest of the line - checkLine(lineNo, line, matcher, endCol); - } - return; - } - - currentMatches++; - if (currentMatches > options.getMaximum()) { - if (options.getMessage().isEmpty()) { - options.getReporter().log(lineNo, MSG_REGEXP_EXCEEDED, - matcher.pattern().toString()); + if (foundMatch) { + // match is found, check for intersection with comment + final int startCol = matcher.start(0); + final int endCol = matcher.end(0); + // Note that Matcher.end(int) returns the offset AFTER the + // last matched character, but shouldSuppress() + // needs column number of the last character. + // So we need to use (endCol - 1) here. + if (options.getSuppressor() + .shouldSuppress(lineNo, startCol, lineNo, endCol - 1)) { + if (endCol < line.length()) { + // check if the expression is on the rest of the line + checkLine(lineNo, line, matcher, endCol); + } } else { - options.getReporter().log(lineNo, options.getMessage()); + currentMatches++; + if (currentMatches > options.getMaximum()) { + if (options.getMessage().isEmpty()) { + options.getReporter().log(lineNo, MSG_REGEXP_EXCEEDED, + matcher.pattern().toString()); + } + else { + options.getReporter().log(lineNo, options.getMessage()); + } + } } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/MethodParamPadCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/MethodParamPadCheck.java index 47db2e448..4cb2d6b64 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/MethodParamPadCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/MethodParamPadCheck.java @@ -127,26 +127,25 @@ public class MethodParamPadCheck else { parenAST = ast.findFirstToken(TokenTypes.LPAREN); // array construction => parenAST == null - if (parenAST == null) { - return; - } } - final String line = getLines()[parenAST.getLineNo() - 1]; - if (CommonUtils.hasWhitespaceBefore(parenAST.getColumnNo(), line)) { - if (!allowLineBreaks) { - log(parenAST, MSG_LINE_PREVIOUS, parenAST.getText()); - } - } - else { - final int before = parenAST.getColumnNo() - 1; - if (option == PadOption.NOSPACE - && Character.isWhitespace(line.charAt(before))) { - log(parenAST, MSG_WS_PRECEDED, parenAST.getText()); + if (parenAST != null) { + final String line = getLines()[parenAST.getLineNo() - 1]; + if (CommonUtils.hasWhitespaceBefore(parenAST.getColumnNo(), line)) { + if (!allowLineBreaks) { + log(parenAST, MSG_LINE_PREVIOUS, parenAST.getText()); + } } - else if (option == PadOption.SPACE - && !Character.isWhitespace(line.charAt(before))) { - log(parenAST, MSG_WS_NOT_PRECEDED, parenAST.getText()); + else { + final int before = parenAST.getColumnNo() - 1; + if (option == PadOption.NOSPACE + && Character.isWhitespace(line.charAt(before))) { + log(parenAST, MSG_WS_PRECEDED, parenAST.getText()); + } + else if (option == PadOption.SPACE + && !Character.isWhitespace(line.charAt(before))) { + log(parenAST, MSG_WS_NOT_PRECEDED, parenAST.getText()); + } } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/OperatorWrapCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/OperatorWrapCheck.java index 86a76ffa1..3ecde367c 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/OperatorWrapCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/OperatorWrapCheck.java @@ -201,31 +201,28 @@ public class OperatorWrapCheck @Override public void visitToken(DetailAST ast) { - if (ast.getType() == TokenTypes.COLON) { - final DetailAST parent = ast.getParent(); - if (parent.getType() == TokenTypes.LITERAL_DEFAULT - || parent.getType() == TokenTypes.LITERAL_CASE) { - //we do not want to check colon for cases and defaults - return; + final DetailAST parent = ast.getParent(); + //we do not want to check colon for cases and defaults + if (ast.getType() != TokenTypes.COLON + || parent.getType() != TokenTypes.LITERAL_DEFAULT + && parent.getType() != TokenTypes.LITERAL_CASE) { + final String text = ast.getText(); + final int colNo = ast.getColumnNo(); + final int lineNo = ast.getLineNo(); + final String currentLine = getLine(lineNo - 1); + + // Check if rest of line is whitespace, and not just the operator + // by itself. This last bit is to handle the operator on a line by + // itself. + if (option == WrapOption.NL + && !text.equals(currentLine.trim()) + && CommonUtils.isBlank(currentLine.substring(colNo + text.length()))) { + log(lineNo, colNo, MSG_LINE_NEW, text); + } + else if (option == WrapOption.EOL + && CommonUtils.hasWhitespaceBefore(colNo - 1, currentLine)) { + log(lineNo, colNo, MSG_LINE_PREVIOUS, text); } - } - - final String text = ast.getText(); - final int colNo = ast.getColumnNo(); - final int lineNo = ast.getLineNo(); - final String currentLine = getLine(lineNo - 1); - - // Check if rest of line is whitespace, and not just the operator - // by itself. This last bit is to handle the operator on a line by - // itself. - if (option == WrapOption.NL - && !text.equals(currentLine.trim()) - && CommonUtils.isBlank(currentLine.substring(colNo + text.length()))) { - log(lineNo, colNo, MSG_LINE_NEW, text); - } - else if (option == WrapOption.EOL - && CommonUtils.hasWhitespaceBefore(colNo - 1, currentLine)) { - log(lineNo, colNo, MSG_LINE_PREVIOUS, text); } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/WhitespaceAroundCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/WhitespaceAroundCheck.java index d368b0c0f..8bf4d05f9 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/WhitespaceAroundCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/WhitespaceAroundCheck.java @@ -364,29 +364,27 @@ public class WhitespaceAroundCheck extends AbstractCheck { @Override public void visitToken(DetailAST ast) { final int currentType = ast.getType(); - if (isNotRelevantSituation(ast, currentType)) { - return; - } - - final String line = getLine(ast.getLineNo() - 1); - final int before = ast.getColumnNo() - 1; - final int after = ast.getColumnNo() + ast.getText().length(); - - if (before >= 0) { - final char prevChar = line.charAt(before); - if (shouldCheckSeparationFromPreviousToken(ast) - && !Character.isWhitespace(prevChar)) { - log(ast.getLineNo(), ast.getColumnNo(), - MSG_WS_NOT_PRECEDED, ast.getText()); + if (!isNotRelevantSituation(ast, currentType)) { + final String line = getLine(ast.getLineNo() - 1); + final int before = ast.getColumnNo() - 1; + final int after = ast.getColumnNo() + ast.getText().length(); + + if (before >= 0) { + final char prevChar = line.charAt(before); + if (shouldCheckSeparationFromPreviousToken(ast) + && !Character.isWhitespace(prevChar)) { + log(ast.getLineNo(), ast.getColumnNo(), + MSG_WS_NOT_PRECEDED, ast.getText()); + } } - } - if (after < line.length()) { - final char nextChar = line.charAt(after); - if (shouldCheckSeparationFromNextToken(ast, nextChar) - && !Character.isWhitespace(nextChar)) { - log(ast.getLineNo(), ast.getColumnNo() + ast.getText().length(), - MSG_WS_NOT_FOLLOWED, ast.getText()); + if (after < line.length()) { + final char nextChar = line.charAt(after); + if (shouldCheckSeparationFromNextToken(ast, nextChar) + && !Character.isWhitespace(nextChar)) { + log(ast.getLineNo(), ast.getColumnNo() + ast.getText().length(), + MSG_WS_NOT_FOLLOWED, ast.getText()); + } } } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/utils/CommonUtils.java b/src/main/java/com/puppycrawl/tools/checkstyle/utils/CommonUtils.java index 4ddae6192..3bc4b830d 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/utils/CommonUtils.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/utils/CommonUtils.java @@ -343,14 +343,13 @@ public final class CommonUtils { * Closeable object */ public static void close(Closeable closeable) { - if (closeable == null) { - return; - } - try { - closeable.close(); - } - catch (IOException ex) { - throw new IllegalStateException("Cannot close the stream", ex); + if (closeable != null) { + try { + closeable.close(); + } + catch (IOException ex) { + throw new IllegalStateException("Cannot close the stream", ex); + } } } |