fun getFileById()

in psi/src/com/intellij/r/psi/rinterop/RSourceFileManager.kt [43:81]


  fun getFileById(fileId: String): VirtualFile? {
    if (fileId.isEmpty()) return null
    files[fileId]?.let { return it }
    if (fileId.startsWith(IDE_PREFIX)) {
      VirtualFileManager.getInstance().findFileByUrl(fileId.substring(IDE_PREFIX.length))?.let {
        fileToId[it] = fileId
        files[fileId] = it
        return it
      }
    } else if (fileId.startsWith(R_LOCAL_PREFIX)) {
      rInterop.interpreter.findFileByPathAtHost(fileId.substring(R_LOCAL_PREFIX.length))?.let {
        fileToId[it] = fileId
        files[fileId] = it
        return it
      }
    }
    val text = rInterop.getSourceFileText(fileId)
    if (text.isEmpty()) return null
    val name = rInterop.getSourceFileName(fileId)
                 .takeIf { it.isNotEmpty() } ?: "tmp"
    val filesystem = VirtualFileManager.getInstance().getFileSystem(PROTOCOL) as MyVirtualFileSystem
    val file = filesystem.createFile(name, text)
    fileToId[file] = fileId
    files[fileId] = file
    Disposer.register(this, Disposable {
      filesystem.removeFile(file.path)
      runInEdt {
        FileEditorManager.getInstance(rInterop.project).closeFile(file)
        runWriteAction {
          val breakpointManager = XDebuggerManager.getInstance(rInterop.project).breakpointManager
          val breakpointType = XDebuggerUtil.getInstance().findBreakpointType(RLineBreakpointType::class.java)
          breakpointManager.getBreakpoints(breakpointType)
            .filter { it.fileUrl == file.url }
            .forEach { breakpointManager.removeBreakpoint(it) }
        }
      }
    })
    return file
  }