diff --git a/ultimate/resources/META-INF/kotlin-spring.xml.181 b/ultimate/resources/META-INF/kotlin-spring.xml.181
index 8055f15fe09..6bb1fd74148 100644
--- a/ultimate/resources/META-INF/kotlin-spring.xml.181
+++ b/ultimate/resources/META-INF/kotlin-spring.xml.181
@@ -3,7 +3,6 @@
-
(myModule)
+ }
+
+ protected fun doTest(path: String) {
+ val configFilePath = "${KotlinTestUtils.getHomeDirectory()}/$path"
+ val configFile = File(configFilePath)
+ val testRoot = configFile.parentFile
+
+ val config = JsonParser().parse(FileUtil.loadFile(configFile, true)) as JsonObject
+
+ PluginTestCaseBase.addJdk(myFixture.projectDisposable, PluginTestCaseBase::mockJdk)
+
+ val withRuntime = config["withRuntime"]?.asBoolean ?: false
+ if (withRuntime) {
+ ConfigLibraryUtil.configureKotlinRuntimeAndSdk(myModule, PluginTestCaseBase.mockJdk())
+ }
+
+ try {
+ val springConfigFiles = (config["springConfig"] as JsonArray).map { it.asString }
+ myFixture.testDataPath = testRoot.absolutePath
+ for (file in testRoot.listFiles()) {
+ val name = file.name
+ if (file.isDirectory) myFixture.copyDirectoryToProject(name, name) else myFixture.configureByFile(name)
+ }
+ TestFixtureExtension.getFixture()!!.configureFileSet(myFixture, springConfigFiles)
+
+ val fileName = config.getString("file")
+ val iconName = config.getString("icon")
+ val icon = SpringApiIcons.Gutter::class.java.getField(iconName)[null]
+
+ val gutter = myFixture.findGutter(fileName) ?: throw AssertionError("no gutter for '$fileName'")
+ val gutterMark = gutter.let {
+ if (it.icon == icon) it
+ else myFixture.findGuttersAtCaret().let { gutters ->
+ gutters.firstOrNull() { it.icon == icon }
+ ?: throw AssertionFailedError("no $icon in gutters: ${gutters.map { it.icon }}")
+ }
+ }
+
+ val tooltip = config.getString("tooltip")
+ Assert.assertEquals(tooltip, gutterMark.tooltipText)
+
+ val naming = config.getString("naming")
+ val targets = (config["targets"] as JsonArray).map { it.asString }
+ when (naming) {
+ "bean" -> checkBeanGutterTargets(gutterMark, targets)
+ "property" -> checkBeanPropertyTargets(gutterMark, targets)
+ "generic" -> checkPsiElementGutterTargets(gutterMark, targets)
+ else -> error("Unexpected naming: $naming")
+ }
+ }
+ finally {
+ if (withRuntime) {
+ ConfigLibraryUtil.unConfigureKotlinRuntimeAndSdk(myModule, PluginTestCaseBase.mockJdk())
+ }
+ }
+ }
+
+ override fun tearDown() {
+ TestFixtureExtension.unloadFixture()
+ super.tearDown()
+ }
+}