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