void (@NotNull GrThrowStatement throwStatement) { final GrExpression exception = throwStatement.getException(); if (exception == null) return; exception.accept(this); final InstructionImpl throwInstruction = new ThrowingInstruction(throwStatement); addNodeAndCheckPending(throwInstruction); interruptFlow(); final PsiType type = getNominalTypeNoRecursion(exception); // it is impossible to follow the consequences of throwing in closure, so throw will just interrupt the closure it was invoked within final GroovyPsiElement scopeElement = myFunctionalScopeStack.isEmpty() ? null : throwStatement; if (type != null) { ExceptionInfo info = findCatch(type); if (info != null) { info.myThrowers.add(throwInstruction); } else { addPendingEdge(scopeElement, throwInstruction); } } else { addPendingEdge(scopeElement, throwInstruction); } }