void (@Nullable PsiResourceList resourceList, @Nullable PsiCodeBlock tryBlock) { Set<PsiClassType> closerExceptions = Collections.emptySet(); TwrFinally twrFinallyDescriptor = null; if (resourceList != null) { resourceList.accept(this); closerExceptions = StreamEx.of(resourceList.iterator()).flatCollection(ExceptionUtil::getCloserExceptions).toSet(); twrFinallyDescriptor = new TwrFinally(resourceList, getStartOffset(resourceList)); pushTrap(twrFinallyDescriptor); } if (tryBlock != null) { tryBlock.accept(this); } if (twrFinallyDescriptor != null) { InstructionTransfer gotoEnd = createTransfer(resourceList, tryBlock); controlTransfer(gotoEnd, FList.createFromReversed(ContainerUtil.createMaybeSingletonList(twrFinallyDescriptor))); popTrap(TwrFinally.class); pushTrap(new InsideFinallyTrap(resourceList)); startElement(resourceList); addInstruction(new FlushFieldsInstruction()); addThrows(closerExceptions); controlTransfer(new ExitFinallyTransfer(twrFinallyDescriptor), FList.emptyList()); // DfaControlTransferValue is on stack finishElement(resourceList); popTrap(InsideFinallyTrap.class); } }