override fun analyze()

in runner/src/main/kotlin/org/jetbrains/idea/inspections/runners/FileInfoRunner.kt [23:66]


    override fun analyze(project: Project, parameters: FileInfoRunnerParameters<T>): Boolean {
        logger.info("Before psi manager creation")
        val psiManager = PsiManager.getInstance(project)
        logger.info("Before virtual file manager creation")
        val virtualFileManager = VirtualFileManager.getInstance()
        val virtualFileSystem = virtualFileManager.getFileSystem("file")
        val fileIndex = ProjectFileIndex.getInstance(project)
        val documentManager = FileDocumentManager.getInstance()
        val files = ArrayList<FileInfo>()
        runReadAction {
            val task = Runnable {
                for (file in parameters.files) {
                    val virtualFile = virtualFileSystem.findFileByPath(file.absolutePath)
                    if (virtualFile == null) {
                        logger.warn("Cannot find virtual file for $file")
                        continue
                    }
                    if (!fileIndex.isInSource(virtualFile)) {
                        logger.info("File $file is not in sources")
                    }
                    val psiFile = psiManager.findFile(virtualFile)
                    if (psiFile == null) {
                        logger.warn("Cannot find PSI file for $file")
                        continue
                    }
                    val document = documentManager.getDocument(virtualFile)
                    if (document == null) {
                        val message = when {
                            !virtualFile.isValid -> "is invalid"
                            virtualFile.isDirectory -> "is directory"
                            virtualFile.fileType.isBinary -> "is binary without decompiler"
                            FileUtilRt.isTooLarge(virtualFile.length) -> "is too large"
                            else -> ""
                        }
                        logger.warn("Cannot get document for file $file $message")
                        continue
                    }
                    files.add(FileInfo(psiFile, document, virtualFile))
                }
            }
            ProgressManager.getInstance().runProcess(task, EmptyProgressIndicator())
        }
        return analyze(files, project, parameters.childParameters)
    }