NoJavadocForOverriddenMethodsCheck.java

  1. /*
  2.  * Copyright (c) 2011-2025 Yegor Bugayenko
  3.  *
  4.  * All rights reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met: 1) Redistributions of source code must retain the above
  9.  * copyright notice, this list of conditions and the following
  10.  * disclaimer. 2) Redistributions in binary form must reproduce the above
  11.  * copyright notice, this list of conditions and the following
  12.  * disclaimer in the documentation and/or other materials provided
  13.  * with the distribution. 3) Neither the name of the Qulice.com nor
  14.  * the names of its contributors may be used to endorse or promote
  15.  * products derived from this software without specific prior written
  16.  * permission.
  17.  *
  18.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  19.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
  20.  * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  21.  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
  22.  * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
  23.  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  24.  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  25.  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  26.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  27.  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  28.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  29.  * OF THE POSSIBILITY OF SUCH DAMAGE.
  30.  */
  31. package com.qulice.checkstyle;

  32. import com.puppycrawl.tools.checkstyle.api.AbstractCheck;
  33. import com.puppycrawl.tools.checkstyle.api.DetailAST;
  34. import com.puppycrawl.tools.checkstyle.api.FileContents;
  35. import com.puppycrawl.tools.checkstyle.api.TextBlock;
  36. import com.puppycrawl.tools.checkstyle.api.TokenTypes;
  37. import com.puppycrawl.tools.checkstyle.utils.AnnotationUtil;

  38. /**
  39.  * Checks that there is no Javadoc for inherited methods.
  40.  * Users may have a different understanding of your method
  41.  * based on whether they examine the method in the supertype
  42.  * or the subtype and it may cause confusion.
  43.  *
  44.  * @since 0.16
  45.  */
  46. public final class NoJavadocForOverriddenMethodsCheck extends AbstractCheck {

  47.     @Override
  48.     public int[] getDefaultTokens() {
  49.         return new int[] {
  50.             TokenTypes.METHOD_DEF,
  51.         };
  52.     }

  53.     @Override
  54.     public int[] getAcceptableTokens() {
  55.         return this.getDefaultTokens();
  56.     }

  57.     @Override
  58.     public int[] getRequiredTokens() {
  59.         return this.getDefaultTokens();
  60.     }

  61.     @Override
  62.     @SuppressWarnings("deprecation")
  63.     public void visitToken(final DetailAST ast) {
  64.         if (AnnotationUtil.containsAnnotation(ast, "Override")) {
  65.             final FileContents contents = getFileContents();
  66.             final TextBlock javadoc = contents.getJavadocBefore(
  67.                 ast.getLineNo()
  68.             );
  69.             if (javadoc != null) {
  70.                 log(ast, "Overridden methods should not have Javadoc");
  71.             }
  72.         }
  73.     }
  74. }