109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)package org.chromium.devtools.jsdoc.checks;
209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
3197021e6b966cfb06891637935ef33fff06433d1Ben Murdochimport com.google.javascript.rhino.Node;
409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)import org.chromium.devtools.jsdoc.ValidatorContext;
609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)import java.util.Deque;
809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)import java.util.HashMap;
909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)import java.util.LinkedList;
1009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)import java.util.Map;
1109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
1209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)public class ContextTrackingState {
1309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    private final ValidatorContext context;
1409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
1509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    ContextTrackingState(ValidatorContext context) {
1609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this.context = context;
1709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
1809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
1909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    final Map<String, TypeRecord> typeRecordsByTypeName = new HashMap<>();
2009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    final Deque<TypeRecord> typeRecords = new LinkedList<>();
2109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    final Deque<FunctionRecord> functionRecords = new LinkedList<>();
2209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
2309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    TypeRecord getCurrentTypeRecord() {
2409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return typeRecords.peekLast();
2509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
2609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
2709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    FunctionRecord getCurrentFunctionRecord() {
2809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return functionRecords.peekLast();
2909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
3009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
3109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    ValidatorContext getContext() {
3209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return context;
3309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
3409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
3509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    Map<String, TypeRecord> getTypeRecordsByTypeName() {
3609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return typeRecordsByTypeName;
3709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
3809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
39197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    String getNodeText(Node node) {
4009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return getContext().getNodeText(node);
4109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
4209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
4309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void pushTypeRecord(TypeRecord record) {
4409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        typeRecords.addLast(record);
4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
4609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void popTypeRecord() {
4809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        typeRecords.removeLast();
4909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
5109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void pushFunctionRecord(FunctionRecord record) {
5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        functionRecords.addLast(record);
5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
5509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void popFunctionRecord() {
5609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        functionRecords.removeLast();
5709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
5809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
59