override fun provide()

in intellij-plugin-verifier/verifier-intellij/src/main/java/com/jetbrains/pluginverifier/resolution/DefaultClassResolverProvider.kt [71:109]


  override fun provide(checkedPluginDetails: PluginDetails): ClassResolverProvider.Result {
    val closeableResources = arrayListOf<Closeable>()
    closeableResources.closeOnException {
      val pluginResolver = checkedPluginDetails.pluginClassesLocations.createPluginResolver(checkedPluginDetails.pluginInfo.pluginId)

      // this fills the `pluginResolverProviderCache`
      val ideResolver = getIdeResolver(checkedPluginDetails.idePlugin, ideDescriptor)
      val allResolvers = mutableListOf<Resolver>()
      allResolvers += pluginResolver.also { closeableResources += it }
      allResolvers += ideDescriptor.jdkDescriptor.jdkResolver
      allResolvers += ideResolver

      val dependenciesGraph: DependenciesGraph
      if (!ideDescriptor.isProductInfoBased()
        || checkedPluginDetails.idePlugin.isLegacyPlugin()
        || ideResolver !is DependencyTreeAwareResolver
        ) {
        val (depGraph, dependenciesResults) =
          DependenciesGraphBuilder(dependencyFinder).buildDependenciesGraph(checkedPluginDetails.idePlugin, ideDescriptor.ide)
        closeableResources += dependenciesResults

        // Resolve dependencies via DependencyFinder mechanism.
        // For 'product-info.json'-based IDEs, the 'ideResolver' already contains
        // only overlap between plugin dependencies and IDE bundled plugins.
        createDependenciesClassResolver(checkedPluginDetails, dependenciesResults).also {
          allResolvers += it
        }
        dependenciesGraph = depGraph
      } else {
        val dependencyTreeResolution = ideResolver.dependencyTreeResolution
        dependenciesGraph = dependenciesGraphProvider.getDependenciesGraph(dependencyTreeResolution)
      }

      allResolvers += additionalClassResolvers

      val resolver = LazyCompositeResolver.create(allResolvers, checkedPluginDetails.pluginInfo.pluginId).caching()
      return ClassResolverProvider.Result(pluginResolver, resolver, dependenciesGraph, closeableResources)
    }
  }