]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-1901: Fix UndocumentedApiCheck
authorGodin <mandrikov@gmail.com>
Wed, 3 Nov 2010 16:13:06 +0000 (16:13 +0000)
committerGodin <mandrikov@gmail.com>
Wed, 3 Nov 2010 16:13:06 +0000 (16:13 +0000)
plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/ast/check/UndocumentedApiCheck.java
plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/ast/visitor/PublicApiVisitor.java

index 0a8aa111b0497fb7808d372d8c006d233cc93664..2661a204dd24efc1de46a28d7dbac90b940e559c 100644 (file)
@@ -12,7 +12,6 @@ import org.sonar.squid.api.CheckMessage;
 import org.sonar.squid.api.SourceClass;
 import org.sonar.squid.api.SourceCode;
 import org.sonar.squid.api.SourceFile;
-import org.sonar.squid.measures.Metric;
 
 import com.puppycrawl.tools.checkstyle.api.DetailAST;
 
@@ -40,7 +39,7 @@ public class UndocumentedApiCheck extends JavaAstCheck {
     SourceCode currentResource = peekSourceCode();
     SourceClass sourceClass = peekParentClass();
     if (PatternUtils.matches(sourceClass.getKey(), getMatchers())) {
-      if (currentResource.getDouble(Metric.PUBLIC_API) > 0 && currentResource.getDouble(Metric.PUBLIC_DOC_API) == 0) {
+      if (PublicApiVisitor.isPublicApi(ast) && !PublicApiVisitor.isDocumentedApi(ast, getFileContents())) {
         SourceFile sourceFile = currentResource.getParent(SourceFile.class);
         CheckMessage message = new CheckMessage(this, "Avoid undocumented API");
         message.setLine(ast.getLineNo());
index 625387ba0fb8f91ae3dcfbda2b50078958d36148..a3ef8fa608ea4bb41b3248fd4cd0b0b8c7550946 100644 (file)
  */
 package org.sonar.java.ast.visitor;
 
+import org.sonar.java.ast.check.UndocumentedApiCheck;
 import org.sonar.squid.api.SourceCode;
 import org.sonar.squid.measures.Metric;
 
 import antlr.collections.AST;
 
 import com.puppycrawl.tools.checkstyle.api.DetailAST;
+import com.puppycrawl.tools.checkstyle.api.FileContents;
 import com.puppycrawl.tools.checkstyle.api.Scope;
 import com.puppycrawl.tools.checkstyle.api.TokenTypes;
 
@@ -57,19 +59,15 @@ public class PublicApiVisitor extends JavaAstVisitor {
     }
   }
 
-  private boolean isPublicApi(DetailAST ast) {
-    return isPublic(ast) && !isStaticFinalVariable(ast) && !isMethodWithOverrideAnnotation(ast) && !isEmptyDefaultConstructor(ast);
-  }
-
-  private boolean isEmptyDefaultConstructor(DetailAST ast) {
+  private static boolean isEmptyDefaultConstructor(DetailAST ast) {
     return (isConstructorWithoutParameters(ast)) && (ast.getLastChild().getChildCount() == 1);
   }
 
-  private boolean isConstructorWithoutParameters(DetailAST ast) {
+  private static boolean isConstructorWithoutParameters(DetailAST ast) {
     return ast.getType() == TokenTypes.CTOR_DEF && ast.findFirstToken(TokenTypes.PARAMETERS).getChildCount() == 0;
   }
 
-  private boolean isMethodWithOverrideAnnotation(DetailAST ast) {
+  private static boolean isMethodWithOverrideAnnotation(DetailAST ast) {
     if (isMethod(ast)) {
       DetailAST modifier = ast.findFirstToken(TokenTypes.MODIFIERS);
       for (AST annotation = modifier.getFirstChild(); annotation != null; annotation = annotation.getNextSibling()) {
@@ -82,23 +80,38 @@ public class PublicApiVisitor extends JavaAstVisitor {
     return false;
   }
 
-  private boolean isAnnotation(AST annotation) {
+  private static boolean isAnnotation(AST annotation) {
     return annotation.getType() == TokenTypes.ANNOTATION;
   }
 
-  private boolean isMethod(DetailAST ast) {
+  private static boolean isMethod(DetailAST ast) {
     return ast.getType() == TokenTypes.METHOD_DEF;
   }
 
-  private boolean isPublic(DetailAST ast) {
-    return (AstUtils.isScope(AstUtils.getScope(ast), Scope.PUBLIC) || AstUtils.isType(ast, TokenTypes.ANNOTATION_FIELD_DEF));
+  private boolean isDocumentedApi(DetailAST ast) {
+    return isDocumentedApi(ast, getFileContents());
   }
 
-  private boolean isDocumentedApi(DetailAST ast) {
-    return getFileContents().getJavadocBefore(ast.getLineNo()) != null;
+  private static boolean isPublic(DetailAST ast) {
+    return (AstUtils.isScope(AstUtils.getScope(ast), Scope.PUBLIC) || AstUtils.isType(ast, TokenTypes.ANNOTATION_FIELD_DEF));
   }
 
-  private boolean isStaticFinalVariable(DetailAST ast) {
+  private static boolean isStaticFinalVariable(DetailAST ast) {
     return (AstUtils.isClassVariable(ast) || AstUtils.isInterfaceVariable(ast)) && AstUtils.isFinal(ast) && AstUtils.isStatic(ast);
   }
+
+  /**
+   * Also used by {@link UndocumentedApiCheck}
+   */
+  public static boolean isDocumentedApi(DetailAST ast, FileContents fileContents) {
+    return fileContents.getJavadocBefore(ast.getLineNo()) != null;
+  }
+
+  /**
+   * Also used by {@link UndocumentedApiCheck}
+   */
+  public static boolean isPublicApi(DetailAST ast) {
+    return isPublic(ast) && !isStaticFinalVariable(ast) && !isMethodWithOverrideAnnotation(ast) && !isEmptyDefaultConstructor(ast);
+  }
+
 }