public static void expandRegionAtCaret(final Project project, @Nullable final Editor editor) {
    if (editor == null) return;

    CodeFoldingManager foldingManager = CodeFoldingManager.getInstance(project);
    foldingManager.updateFoldRegions(editor);

    final int line = editor.getCaretModel().getLogicalPosition().line;
    Runnable processor =
        new Runnable() {
          public void run() {
            FoldRegion region = FoldingUtil.findFoldRegionStartingAtLine(editor, line);
            if (region != null && !region.isExpanded()) {
              region.setExpanded(true);
            } else {
              int offset = editor.getCaretModel().getOffset();
              FoldRegion[] regions = FoldingUtil.getFoldRegionsAtOffset(editor, offset);
              for (int i = regions.length - 1; i >= 0; i--) {
                region = regions[i];
                if (!region.isExpanded()) {
                  region.setExpanded(true);
                  break;
                }
              }
            }
          }
        };
    editor.getFoldingModel().runBatchFoldingOperation(processor);
  }