override fun provide()

in intellij-plugin-verifier/verifier-intellij/src/main/java/com/jetbrains/pluginverifier/resolution/PluginApiClassResolverProvider.kt [27:79]


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

      /**
       * Resolves classes in the following order:
       * 1) Verified plugin
       * 2) Classes of a plugin against which the plugin is verified
       * 3) Classes of JDK
       *
       * A class is considered external if:
       * 1) [basePluginResolver] doesn't contain it in class files
       * 2) [basePluginPackageFilter] rejects it, meaning that the class does not reside in the base plugin
       *
       * For instance, if the class is expected to reside in the base plugin and is not resolved among its classes,
       * a "Class not found" problem will be reported.
       */
      val resolver = CompositeResolver.create(checkedPluginClassResolver, basePluginResolver, jdkDescriptor.jdkResolver).caching()

      val checkedPluginNode = DependencyNode(
        checkedPluginDetails.pluginInfo.pluginId,
        checkedPluginDetails.pluginInfo.version
      )

      val basePluginNode = DependencyNode(
        basePluginDetails.pluginInfo.pluginId,
        basePluginDetails.pluginInfo.version
      )

      val dependenciesGraph = DependenciesGraph(
        checkedPluginNode,
        setOf(checkedPluginNode, basePluginNode),
        setOf(
          DependencyEdge(
            checkedPluginNode,
            basePluginNode,
            PluginDependencyImpl(basePluginNode.pluginId, false, false)
          )
        ),
        emptyMap()
      )

      return ClassResolverProvider.Result(
        checkedPluginClassResolver,
        resolver,
        dependenciesGraph,
        closeableResources
      )
    }
  }