Skip to content

Commit

Permalink
Remove the UndeclaredKotlinK2CompatibilityMode from the plugin stru…
Browse files Browse the repository at this point in the history
…cture warnings
  • Loading branch information
novotnyr committed Sep 17, 2024
1 parent cd790cf commit 470e660
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,29 @@ import com.jetbrains.pluginverifier.verifiers.PluginVerificationContext
The `structure` library reports the [UndeclaredKotlinK2CompatibilityMode] as a warning.
However, depending on the Platform version, this warning might be either ignored or resolved to a Plugin Verifier
[CompatibilityProblem].
This resolver modifies the [PluginVerificationContext] by removing all instances of [UndeclaredKotlinK2CompatibilityMode]s
from the [PluginVerificationContext.pluginStructureWarnings].
*/
class KotlinCompatibilityModeProblemResolver : CompatibilityProblemResolver {
private val sinceIdeVersion = IdeVersion.createIdeVersion("242.21829.142")

/**
* Remaps any [UndeclaredKotlinK2CompatibilityMode] structure warning to an [UndeclaredKotlinK2CompatibilityModeProblem]
* and removes it from the [plugin verification context][PluginVerificationContext].
*/
override fun resolveCompatibilityProblems(context: PluginVerificationContext): List<CompatibilityProblem> {
if (!context.isSinceSupportedIdeVersion()) return emptyList()

return context.pluginStructureWarnings
.map { it.problem }
.filterIsInstance<UndeclaredKotlinK2CompatibilityMode>()
.map { UndeclaredKotlinK2CompatibilityModeProblem(it) }
.apply {
if (isNotEmpty()) {
context.pluginStructureWarnings.removeIf { it.problem is UndeclaredKotlinK2CompatibilityMode }
}
}
}

private fun PluginVerificationContext.isSinceSupportedIdeVersion(): Boolean {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,15 @@ abstract class BasePluginTest {
assertContains(problems, T::class, message)
}

@Throws(AssertionError::class)
protected fun assertNoProblems(problems: Collection<PluginProblem>) {
with(problems) {
if (!isEmpty()) {
fail("Expected no problems, but got $size problem(s): " + joinToString { it.message })
}
}
}

protected fun assertContains(
pluginProblems: Collection<PluginProblem>,
pluginProblemClass: KClass<out PluginProblem>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.jetbrains.plugin.structure.ide.Ide
import com.jetbrains.plugin.structure.ide.IdeManager
import com.jetbrains.plugin.structure.intellij.problems.UndeclaredKotlinK2CompatibilityMode
import com.jetbrains.pluginverifier.PluginVerificationResult
import com.jetbrains.pluginverifier.results.problems.UndeclaredKotlinK2CompatibilityModeProblem
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
Expand All @@ -17,7 +18,7 @@ private const val EXPECTED_MESSAGE = "Invalid plugin descriptor 'plugin.xml'. "
class K2ModeCompatibilityTest : BasePluginTest() {
@Test
fun `plugin does not declare K1-K2 compatibility for IDE 2024-2-1`() {
val ide = buildIde("IU-242.1")
val ide = buildIde("IU-242.21829.142")

val ideaPlugin = ideaPlugin()
val creationResult = buildPluginWithResult {
Expand All @@ -38,10 +39,13 @@ class K2ModeCompatibilityTest : BasePluginTest() {
val verificationResult = VerificationRunner().runPluginVerification(ide, plugin)
assertTrue(verificationResult is PluginVerificationResult.Verified)
val verifiedResult = verificationResult as PluginVerificationResult.Verified
val structureProblems = verifiedResult.pluginStructureWarnings.map { it.problem }
with(structureProblems.filterIsInstance<UndeclaredKotlinK2CompatibilityMode>()) {
with(verifiedResult.compatibilityProblems) {
assertEquals(1, size)
assertTrue(first() is UndeclaredKotlinK2CompatibilityModeProblem)
}

val structureProblems = verifiedResult.pluginStructureWarnings.map { it.problem }
assertNoProblems(structureProblems)
}
}

Expand Down

0 comments on commit 470e660

Please sign in to comment.