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