fun verify()

in intellij-plugin-verifier/verifier-intellij/src/main/java/com/jetbrains/pluginverifier/PluginVerifier.kt [93:165]


  fun verify(pluginDetails: PluginDetails): PluginVerificationResult {
    verificationDescriptor.classResolverProvider.provide(pluginDetails).use { (pluginResolver, allResolver, dependenciesGraph) ->
      val externalClassesPackageFilter = verificationDescriptor.classResolverProvider.provideExternalClassesPackageFilter()

      val context = PluginVerificationContext(
        pluginDetails.idePlugin,
        verificationDescriptor,
        pluginResolver,
        allResolver,
        externalClassesPackageFilter,
        dependenciesGraph
      )

      pluginDetails.pluginWarnings.forEach { context.registerPluginStructureWarning(PluginStructureWarning(it)) }
      context.findMistakenlyBundledIdeClasses(pluginResolver)
      context.findDependenciesCycles(dependenciesGraph)

      val classesToCheck = selectClassesForCheck(pluginDetails).also {
        it.reportTelemetry(pluginDetails, context)
      }

      BytecodeVerifier(
        classFilters,
        listOf(NonExtendableTypeInheritedProcessor(context)),
        listOf(
          MethodOverridingVerifier(
            listOf(
              ExperimentalMethodOverridingProcessor(context),
              DeprecatedMethodOverridingProcessor(context),
              NonExtendableMethodOverridingProcessor(context),
              InternalMethodOverridingProcessor(context)
            )
          )
        )
      ).verifyClasses(classesToCheck, context) {}

      context.runAnalyzers()

      analyzeMissingClassesCausedByMissingOptionalDependencies(
        context.compatibilityProblems,
        dependenciesGraph,
        context.idePlugin,
        context.pluginResolver
      )
      groupMissingClassesToMissingPackages(context.compatibilityProblems, context.classResolver)

      val compatibilityProblems = context.compatibilityProblems + structureProblemsResolver.resolveCompatibilityProblems(context)
      val compatibilityWarnings = context.compatibilityWarnings + structureProblemsResolver.resolveCompatibilityWarnings(context)
      val (reportProblems, ignoredProblems) = partitionReportAndIgnoredProblems(compatibilityProblems, context)

      val (reportedInternalApiUsages, ignoredInternalApiUsages) = partitionReportAndIgnoredInternalApiUsages(context.internalApiUsages, context)

      return with(context) {
        PluginVerificationResult.Verified(
          verificationDescriptor.checkedPlugin,
          verificationDescriptor.toTarget(),
          dependenciesGraph,
          reportProblems,
          ignoredProblems,
          compatibilityWarnings,
          deprecatedUsages,
          experimentalApiUsages,
          reportedInternalApiUsages,
          ignoredInternalApiUsages,
          nonExtendableApiUsages,
          overrideOnlyMethodUsages,
          pluginStructureWarnings,
          DynamicPlugins.getDynamicPluginStatus(this),
          context.telemetry
        )
      }
    }
  }