1 package org.chromium.devtools.jsdoc.checks;
3 import com.google.javascript.jscomp.NodeUtil;
4 import com.google.javascript.rhino.JSDocInfo;
5 import com.google.javascript.rhino.Node;
7 import java.util.ArrayList;
10 public class FunctionRecord {
11 final Node functionNode;
14 final List<String> parameterNames;
15 final TypeRecord enclosingType;
16 final FunctionRecord enclosingFunctionRecord;
18 public FunctionRecord(Node functionNode, String name,
19 List<String> parameterNames, TypeRecord parentType,
20 FunctionRecord enclosingFunctionRecord) {
21 this.functionNode = functionNode;
22 this.info = NodeUtil.getBestJSDocInfo(functionNode);
24 this.parameterNames = parameterNames;
25 this.enclosingType = parentType;
26 this.enclosingFunctionRecord = enclosingFunctionRecord;
29 public FunctionRecord() {
30 this.functionNode = null;
33 this.parameterNames = new ArrayList<>();
34 this.enclosingType = null;
35 this.enclosingFunctionRecord = null;
38 public boolean isConstructor() {
39 return info != null && info.isConstructor();
42 public boolean isTopLevelFunction() {
43 return enclosingFunctionRecord == null;
46 public boolean hasReturnAnnotation() {
47 return info != null && info.getReturnType() != null;
50 public boolean hasThisAnnotation() {
51 return info != null && info.getThisType() != null;
54 public boolean suppressesReceiverCheck() {
55 return info != null && info.getOriginalCommentString().contains("@suppressReceiverCheck");
58 public boolean suppressesGlobalPropertiesCheck() {
60 && info.getOriginalCommentString().contains("@suppressGlobalPropertiesCheck");
64 public String toString() {
65 return (info == null ? "" : info.getOriginalCommentString() + "\n") +
66 (name == null ? "<anonymous>" : name) + "() @" +
67 functionNode.getLineno();