| Index: Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/MethodAnnotationChecker.java
|
| diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/MethodAnnotationChecker.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/MethodAnnotationChecker.java
|
| index a2edafa3a6812cc3999a422b93f50632070f7918..6c75a2ab19f4585fb791058dfb4512c16a941bb1 100644
|
| --- a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/MethodAnnotationChecker.java
|
| +++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/MethodAnnotationChecker.java
|
| @@ -40,39 +40,37 @@ public final class MethodAnnotationChecker extends ContextTrackingChecker {
|
| }
|
|
|
| private void handleFunction(Node functionNode) {
|
| - Node parametersNode = NodeUtil.getFunctionParameters(functionNode);
|
| - int actualParamCount = parametersNode.getChildCount();
|
| - if (actualParamCount == 0) {
|
| + FunctionRecord function = getState().getCurrentFunctionRecord();
|
| + if (function == null || function.parameterNames.size() == 0) {
|
| return;
|
| }
|
| - JSDocInfo jsDocInfo = NodeUtil.getBestJSDocInfo(functionNode);
|
| - String[] nonAnnotatedParams = getNonAnnotatedParamData(parametersNode, jsDocInfo);
|
| - if (nonAnnotatedParams.length > 0 && actualParamCount != nonAnnotatedParams.length) {
|
| - reportErrorAtOffset(jsDocInfo.getOriginalCommentPosition(),
|
| + String[] nonAnnotatedParams = getNonAnnotatedParamData(function);
|
| + if (nonAnnotatedParams.length > 0
|
| + && function.parameterNames.size() != nonAnnotatedParams.length) {
|
| + reportErrorAtOffset(function.info.getOriginalCommentPosition(),
|
| String.format(
|
| "No @param JSDoc tag found for parameters: [%s]",
|
| Joiner.on(',').join(nonAnnotatedParams)));
|
| }
|
| }
|
|
|
| - private String[] getNonAnnotatedParamData(Node params, JSDocInfo info) {
|
| - if (info == null) {
|
| + private String[] getNonAnnotatedParamData(FunctionRecord function) {
|
| + if (function.info == null) {
|
| return new String[0];
|
| }
|
| Set<String> formalParamNames = new HashSet<>();
|
| - for (int i = 0, childCount = params.getChildCount(); i < childCount; ++i) {
|
| - Node paramNode = params.getChildAtIndex(i);
|
| - String paramName = getContext().getNodeText(paramNode);
|
| + for (int i = 0; i < function.parameterNames.size(); ++i) {
|
| + String paramName = function.parameterNames.get(i);
|
| if (!formalParamNames.add(paramName)) {
|
| - reportErrorAtNodeStart(paramNode,
|
| + reportErrorAtNodeStart(function.functionNode,
|
| String.format("Duplicate function argument name: %s", paramName));
|
| }
|
| }
|
| - Matcher m = PARAM_PATTERN.matcher(info.getOriginalCommentString());
|
| + Matcher m = PARAM_PATTERN.matcher(function.info.getOriginalCommentString());
|
| while (m.find()) {
|
| String paramType = m.group(1);
|
| if (paramType == null) {
|
| - reportErrorAtOffset(info.getOriginalCommentPosition() + m.start(2),
|
| + reportErrorAtOffset(function.info.getOriginalCommentPosition() + m.start(2),
|
| String.format(
|
| "Invalid @param annotation found -"
|
| + " should be \"@param {<type>} paramName\""));
|
|
|