@Override
 public void visitMethodInvocation(MethodInvocation methodInvocation) {
   for (ExpressionStatement statement : methodInvocation.getArguments()) {
     statement.accept(this);
   }
   for (FunctionInvocation invocation : methodInvocation.getAnonymousFunctionInvocations()) {
     invocation.accept(this);
   }
 }
 @Override
 public void visitFunctionInvocation(FunctionInvocation functionInvocation) {
   if (context() != null) {
     Context context = context();
     String name = functionInvocation.getName();
     if (context.allReferences.contains(name)) {
       accessed(name);
       if (context.referenceTableStack.peek().get(name).isModuleState()) {
         functionInvocation.setOnModuleState(true);
       } else {
         functionInvocation.setOnReference(true);
       }
     }
   }
   for (ExpressionStatement statement : functionInvocation.getArguments()) {
     statement.accept(this);
   }
   for (FunctionInvocation invocation : functionInvocation.getAnonymousFunctionInvocations()) {
     invocation.accept(this);
   }
 }
 @Override
 public void visitCollectionLiteral(CollectionLiteral collectionLiteral) {
   for (ExpressionStatement statement : collectionLiteral.getExpressions()) {
     statement.accept(this);
   }
 }