fun main()

in intellij-plugin-verifier/verifier-cli/src/main/java/com/jetbrains/pluginverifier/PluginVerifierMain.kt [94:160]


  fun main(args: Array<String>) {
    println("Starting the IntelliJ Plugin Verifier $pluginVerifierVersion")
    val opts = CmdOpts()
    var freeArgs = Args.parse(opts, args, false)

    if (freeArgs.isEmpty()) {
      System.err.println(
        "The command is not specified. Should be one of: " + commandRunners.joinToString { "'" + it.commandName + "'" }
      )
      Args.usage(System.err, CmdOpts())

      exitProcess(1)
    }

    val command = freeArgs[0]
    freeArgs = freeArgs.drop(1)

    val runner = findTaskRunner(command)
    val outputOptions = OptionsParser.parseOutputOptions(opts)

    val pluginsExtractDirectory = getPluginsExtractDirectory()
    val pluginDownloadDirDiskSpaceSetting = getDiskSpaceSetting("plugin.verifier.cache.dir.max.space", 5L * 1024)

    PluginArchiveManager(pluginsExtractDirectory).use { pluginArchiveManager ->
      val pluginRepository =
        when (val repositoryProvision = LocalPluginRepositoryProvider.getLocalPluginRepository(opts, downloadDirectory, pluginArchiveManager)) {
          is Provided -> repositoryProvision.pluginRepository
          Unavailable -> MarketplaceRepository(URL(pluginRepositoryUrl))
        }

      val pluginFilesBank = PluginFilesBank.create(pluginRepository, downloadDirectory, pluginDownloadDirDiskSpaceSetting)

      DefaultPluginDetailsProvider(pluginArchiveManager).use { pluginDetailsProvider ->
        val reportageAggregator = LoggingPluginVerificationReportageAggregator()
        DirectoryBasedPluginVerificationReportage(reportageAggregator) { outputOptions.getTargetReportDirectory(it) }.use { reportage ->
          measurePluginVerification {
            val detailsCacheSize = System.getProperty("plugin.verifier.plugin.details.cache.size")?.toIntOrNull() ?: 32
            val taskResult = SizeLimitedPluginDetailsCache(
              detailsCacheSize,
              pluginFilesBank,
              pluginDetailsProvider
            ).use { pluginDetailsCache ->
              runner.getParametersBuilder(
                pluginRepository,
                pluginDetailsCache,
                pluginArchiveManager,
                reportage
              ).build(opts, freeArgs).use { parameters ->
                reportage.logVerificationStage("Task ${runner.commandName} parameters:\n${parameters.presentableText}")

                parameters
                  .createTask()
                  .execute(reportage, pluginDetailsCache)
              }
            }
            taskResult
          }.run {
            val taskResultsPrinter = taskResult.createTaskResultsPrinter(pluginRepository)
            taskResultsPrinter.printResults(taskResult, outputOptions)
            reportage.reportDownloadStatistics(outputOptions, pluginFilesBank)
            reportageAggregator.handleAggregatedReportage()
            reportage.reportVerificationDuration(this)
          }
        }
      }
    }
  }