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)
}
}