| Index: Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/AstUtil.java
|
| diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/AstUtil.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/AstUtil.java
|
| index a85680b86f6827f49c961018c22f9598840b581b..e930753e756c595a39c5cb44173d26b6c2f51aff 100644
|
| --- a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/AstUtil.java
|
| +++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/AstUtil.java
|
| @@ -3,10 +3,14 @@ package org.chromium.devtools.jsdoc.checks;
|
| import com.google.javascript.rhino.head.Token;
|
| import com.google.javascript.rhino.head.ast.Assignment;
|
| import com.google.javascript.rhino.head.ast.AstNode;
|
| +import com.google.javascript.rhino.head.ast.Comment;
|
| import com.google.javascript.rhino.head.ast.FunctionNode;
|
| +import com.google.javascript.rhino.head.ast.ObjectProperty;
|
|
|
| public class AstUtil {
|
|
|
| + private static final String PROTOTYPE_SUFFIX = ".prototype";
|
| +
|
| static boolean hasParentOfType(AstNode node, int tokenType) {
|
| AstNode parent = node.getParent();
|
| if (parent == null) {
|
| @@ -21,6 +25,10 @@ public class AstUtil {
|
| return nameNode;
|
| }
|
|
|
| + if (AstUtil.hasParentOfType(functionNode, Token.COLON)) {
|
| + return ((ObjectProperty) functionNode.getParent()).getLeft();
|
| + }
|
| +
|
| if (AstUtil.hasParentOfType(functionNode, Token.ASSIGN)) {
|
| Assignment assignment = (Assignment) functionNode.getParent();
|
| if (assignment.getRight() == functionNode) {
|
| @@ -30,5 +38,55 @@ public class AstUtil {
|
| return null;
|
| }
|
|
|
| + static String getTypeNameFromPrototype(String value) {
|
| + return value.substring(0, value.length() - PROTOTYPE_SUFFIX.length());
|
| + }
|
| +
|
| + static boolean isPrototypeName(String typeName) {
|
| + return typeName.endsWith(PROTOTYPE_SUFFIX);
|
| + }
|
| +
|
| + static AstNode getAssignedTypeNameNode(Assignment assignment) {
|
| + AstNode typeNameNode = assignment.getLeft();
|
| + if (typeNameNode.getType() != Token.GETPROP && typeNameNode.getType() != Token.NAME) {
|
| + return null;
|
| + }
|
| + return typeNameNode;
|
| + }
|
| +
|
| + static Comment getJsDocNode(AstNode node) {
|
| + if (node.getType() == Token.FUNCTION) {
|
| + return getJsDocNode((FunctionNode) node);
|
| + } else {
|
| + return node.getJsDocNode();
|
| + }
|
| + }
|
| +
|
| + static Comment getJsDocNode(FunctionNode functionNode) {
|
| + Comment jsDocNode = functionNode.getJsDocNode();
|
| + if (jsDocNode != null) {
|
| + return jsDocNode;
|
| + }
|
| +
|
| + // reader.onloadend = function() {...}
|
| + if (hasParentOfType(functionNode, Token.ASSIGN)) {
|
| + Assignment assignment = (Assignment) functionNode.getParent();
|
| + if (assignment.getRight() == functionNode) {
|
| + jsDocNode = assignment.getJsDocNode();
|
| + if (jsDocNode != null) {
|
| + return jsDocNode;
|
| + }
|
| + }
|
| + }
|
| +
|
| + if (hasParentOfType(functionNode, Token.COLON)) {
|
| + jsDocNode = ((ObjectProperty) functionNode.getParent()).getLeft().getJsDocNode();
|
| + if (jsDocNode != null) {
|
| + return jsDocNode;
|
| + }
|
| + }
|
| + return null;
|
| + }
|
| +
|
| private AstUtil() {}
|
| }
|
|
|