| package org.chromium.devtools.jsdoc.checks; |
| |
| import com.google.javascript.jscomp.NodeUtil; |
| import com.google.javascript.rhino.JSDocInfo; |
| import com.google.javascript.rhino.Node; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| public class FunctionRecord { |
| final Node functionNode; |
| final JSDocInfo info; |
| final String name; |
| final List<String> parameterNames; |
| final TypeRecord enclosingType; |
| final FunctionRecord enclosingFunctionRecord; |
| |
| public FunctionRecord(Node functionNode, String name, List<String> parameterNames, |
| TypeRecord parentType, FunctionRecord enclosingFunctionRecord) { |
| this.functionNode = functionNode; |
| this.info = NodeUtil.getBestJSDocInfo(functionNode); |
| this.name = name; |
| this.parameterNames = parameterNames; |
| this.enclosingType = parentType; |
| this.enclosingFunctionRecord = enclosingFunctionRecord; |
| } |
| |
| public FunctionRecord() { |
| this.functionNode = null; |
| this.info = null; |
| this.name = ""; |
| this.parameterNames = new ArrayList<>(); |
| this.enclosingType = null; |
| this.enclosingFunctionRecord = null; |
| } |
| |
| public boolean isConstructor() { |
| return info != null && info.isConstructor(); |
| } |
| |
| public boolean isTopLevelFunction() { |
| return enclosingFunctionRecord == null; |
| } |
| |
| public boolean hasReturnAnnotation() { |
| return info != null && info.getReturnType() != null; |
| } |
| |
| public boolean hasThisAnnotation() { |
| return info != null && info.getThisType() != null; |
| } |
| |
| public boolean suppressesReceiverCheck() { |
| return info != null && info.getOriginalCommentString().contains("@suppressReceiverCheck"); |
| } |
| |
| public boolean suppressesGlobalPropertiesCheck() { |
| return info != null |
| && info.getOriginalCommentString().contains("@suppressGlobalPropertiesCheck"); |
| } |
| |
| @Override |
| public String toString() { |
| return (info == null ? "" : info.getOriginalCommentString() + "\n") |
| + (name == null ? "<anonymous>" : name) + "() @" + functionNode.getLineno(); |
| } |
| } |