diff --git a/qodana.sarif.json b/qodana.sarif.json
index b41c7fff6..43a80cc75 100644
--- a/qodana.sarif.json
+++ b/qodana.sarif.json
@@ -7,13 +7,17 @@
         "driver": {
           "name": "QDJVM",
           "fullName": "Qodana for JVM",
-          "version": "221.5728.85",
+          "version": "221.5921.22.149",
           "rules": [],
           "taxa": [
             {
               "id": "Language injection",
               "name": "Language injection"
             },
+            {
+              "id": "JVM languages",
+              "name": "JVM languages"
+            },
             {
               "id": "Kotlin",
               "name": "Kotlin"
@@ -25,7 +29,7 @@
                 {
                   "target": {
                     "id": "Kotlin",
-                    "index": 1,
+                    "index": 2,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -36,10 +40,6 @@
                 }
               ]
             },
-            {
-              "id": "JVM languages",
-              "name": "JVM languages"
-            },
             {
               "id": "Kotlin/Redundant constructs",
               "name": "Redundant constructs",
@@ -47,7 +47,7 @@
                 {
                   "target": {
                     "id": "Kotlin",
-                    "index": 1,
+                    "index": 2,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -80,46 +80,6 @@
                 }
               ]
             },
-            {
-              "id": "Spring",
-              "name": "Spring"
-            },
-            {
-              "id": "Spring/Spring Core",
-              "name": "Spring Core",
-              "relationships": [
-                {
-                  "target": {
-                    "id": "Spring",
-                    "index": 7,
-                    "toolComponent": {
-                      "name": "QDJVM"
-                    }
-                  },
-                  "kinds": [
-                    "superset"
-                  ]
-                }
-              ]
-            },
-            {
-              "id": "Spring/Spring Core/XML",
-              "name": "XML",
-              "relationships": [
-                {
-                  "target": {
-                    "id": "Spring/Spring Core",
-                    "index": 8,
-                    "toolComponent": {
-                      "name": "QDJVM"
-                    }
-                  },
-                  "kinds": [
-                    "superset"
-                  ]
-                }
-              ]
-            },
             {
               "id": "Java/Performance",
               "name": "Performance",
@@ -138,6 +98,46 @@
                 }
               ]
             },
+            {
+              "id": "Spring",
+              "name": "Spring"
+            },
+            {
+              "id": "Spring/Spring Core",
+              "name": "Spring Core",
+              "relationships": [
+                {
+                  "target": {
+                    "id": "Spring",
+                    "index": 8,
+                    "toolComponent": {
+                      "name": "QDJVM"
+                    }
+                  },
+                  "kinds": [
+                    "superset"
+                  ]
+                }
+              ]
+            },
+            {
+              "id": "Spring/Spring Core/XML",
+              "name": "XML",
+              "relationships": [
+                {
+                  "target": {
+                    "id": "Spring/Spring Core",
+                    "index": 9,
+                    "toolComponent": {
+                      "name": "QDJVM"
+                    }
+                  },
+                  "kinds": [
+                    "superset"
+                  ]
+                }
+              ]
+            },
             {
               "id": "Java/Code style issues",
               "name": "Code style issues",
@@ -156,6 +156,24 @@
                 }
               ]
             },
+            {
+              "id": "Java/Error handling",
+              "name": "Error handling",
+              "relationships": [
+                {
+                  "target": {
+                    "id": "Java",
+                    "index": 5,
+                    "toolComponent": {
+                      "name": "QDJVM"
+                    }
+                  },
+                  "kinds": [
+                    "superset"
+                  ]
+                }
+              ]
+            },
             {
               "id": "Java/Declaration redundancy",
               "name": "Declaration redundancy",
@@ -181,25 +199,7 @@
                 {
                   "target": {
                     "id": "Spring/Spring Core",
-                    "index": 8,
-                    "toolComponent": {
-                      "name": "QDJVM"
-                    }
-                  },
-                  "kinds": [
-                    "superset"
-                  ]
-                }
-              ]
-            },
-            {
-              "id": "Java/Error handling",
-              "name": "Error handling",
-              "relationships": [
-                {
-                  "target": {
-                    "id": "Java",
-                    "index": 5,
+                    "index": 9,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -217,7 +217,7 @@
                 {
                   "target": {
                     "id": "Kotlin",
-                    "index": 1,
+                    "index": 2,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -247,8 +247,8 @@
               ]
             },
             {
-              "id": "Java/Class structure",
-              "name": "Class structure",
+              "id": "Java/Serialization issues",
+              "name": "Serialization issues",
               "relationships": [
                 {
                   "target": {
@@ -265,8 +265,8 @@
               ]
             },
             {
-              "id": "Java/Serialization issues",
-              "name": "Serialization issues",
+              "id": "Java/Class structure",
+              "name": "Class structure",
               "relationships": [
                 {
                   "target": {
@@ -337,7 +337,7 @@
                 {
                   "target": {
                     "id": "Kotlin",
-                    "index": 1,
+                    "index": 2,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -643,7 +643,7 @@
                 {
                   "target": {
                     "id": "Kotlin",
-                    "index": 1,
+                    "index": 2,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -755,7 +755,7 @@
                 {
                   "target": {
                     "id": "Kotlin",
-                    "index": 1,
+                    "index": 2,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -813,7 +813,7 @@
                 {
                   "target": {
                     "id": "Spring",
-                    "index": 7,
+                    "index": 8,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -943,7 +943,7 @@
                 {
                   "target": {
                     "id": "Spring/Spring Core",
-                    "index": 8,
+                    "index": 9,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -1383,7 +1383,7 @@
                 {
                   "target": {
                     "id": "Spring",
-                    "index": 7,
+                    "index": 8,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -1645,7 +1645,7 @@
                 {
                   "target": {
                     "id": "Spring",
-                    "index": 7,
+                    "index": 8,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -1765,7 +1765,7 @@
                 {
                   "target": {
                     "id": "Spring",
-                    "index": 7,
+                    "index": 8,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -1783,7 +1783,7 @@
                 {
                   "target": {
                     "id": "Java/Performance",
-                    "index": 10,
+                    "index": 7,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -1805,7 +1805,7 @@
                 {
                   "target": {
                     "id": "Spring",
-                    "index": 7,
+                    "index": 8,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -1903,7 +1903,7 @@
                 {
                   "target": {
                     "id": "Spring",
-                    "index": 7,
+                    "index": 8,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -1943,7 +1943,7 @@
                 {
                   "target": {
                     "id": "Spring",
-                    "index": 7,
+                    "index": 8,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -1983,7 +1983,7 @@
                 {
                   "target": {
                     "id": "Kotlin",
-                    "index": 1,
+                    "index": 2,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -2031,7 +2031,7 @@
                 {
                   "target": {
                     "id": "Spring",
-                    "index": 7,
+                    "index": 8,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -2121,7 +2121,7 @@
                 {
                   "target": {
                     "id": "Kotlin",
-                    "index": 1,
+                    "index": 2,
                     "toolComponent": {
                       "name": "QDJVM"
                     }
@@ -2179,7 +2179,7 @@
         "extensions": [
           {
             "name": "org.intellij.intelliLang",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "InjectionNotApplicable",
@@ -2427,8079 +2427,9 @@
             ],
             "isComprehensive": false
           },
-          {
-            "name": "org.jetbrains.kotlin",
-            "version": "221-1.6.21-release-337-IJ5728",
-            "rules": [
-              {
-                "id": "RedundantRunCatching",
-                "shortDescription": {
-                  "text": "Redundant 'runCatching' call"
-                },
-                "fullDescription": {
-                  "text": "Reports 'runCatching' calls that are immediately followed by 'getOrThrow'. Such calls can be replaced with just 'run'. Example: 'fun foo() = runCatching { doSomething() }.getOrThrow()' After the quick-fix is applied: 'fun foo() = run { doSomething() }'",
-                  "markdown": "Reports `runCatching` calls that are immediately followed by `getOrThrow`. Such calls can be replaced with just `run`.\n\n**Example:**\n\n\n      fun foo() = runCatching { doSomething() }.getOrThrow()\n\nAfter the quick-fix is applied:\n\n\n      fun foo() = run { doSomething() }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SimpleRedundantLet",
-                "shortDescription": {
-                  "text": "Redundant receiver-based 'let' call"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant receiver-based 'let' calls. The quick-fix removes the redundant 'let' call. Example: 'fun test(s: String?): Int? = s?.let { it.length }' After the quick-fix is applied: 'fun test(s: String?): Int? = s?.length'",
-                  "markdown": "Reports redundant receiver-based `let` calls.\n\nThe quick-fix removes the redundant `let` call.\n\n**Example:**\n\n\n      fun test(s: String?): Int? = s?.let { it.length }\n\nAfter the quick-fix is applied:\n\n\n      fun test(s: String?): Int? = s?.length\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RemoveSingleExpressionStringTemplate",
-                "shortDescription": {
-                  "text": "Redundant string template"
-                },
-                "fullDescription": {
-                  "text": "Reports single-expression string templates that can be safely removed. Example: 'val x = \"Hello\"\n  val y = \"$x\"' After the quick-fix is applied: 'val x = \"Hello\"\n  val y = x // <== Updated'",
-                  "markdown": "Reports single-expression string templates that can be safely removed.\n\n**Example:**\n\n      val x = \"Hello\"\n      val y = \"$x\"\n\nAfter the quick-fix is applied:\n\n      val x = \"Hello\"\n      val y = x // <== Updated\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "NonExhaustiveWhenStatementMigration",
-                "shortDescription": {
-                  "text": "Non-exhaustive 'when' statements will be prohibited since 1.7"
-                },
-                "fullDescription": {
-                  "text": "Reports a non-exhaustive 'when' statements that will lead to compilation error since 1.7. Motivation types: Problematic/meaningless usage patterns need to be discouraged/blocked (e.g. counterintuitive behaviors) Code is error-prone Inconsistency in the design (things are done differently in different contexts) Impact types: Compilation. Some code that used to compile won't compile any more There were cases when such code worked with no exceptions Some such code could compile without any warnings More details: KT-47709: Make when statements with enum, sealed, and Boolean subjects exhaustive by default The quick-fix adds the missing 'else -> {}' branch. Example: 'sealed class Base {\n      class A : Base()\n      class B : Base()\n  }\n\n  fun test(base: Base) {\n      when (base) {\n          is Base.A -> \"\"\n      }\n  }' After the quick-fix is applied: 'sealed class Base {\n      class A : Base()\n      class B : Base()\n  }\n\n  fun test(base: Base) {\n      when (base) {\n          is Base.A -> \"\"\n          else -> {}\n      }\n  }' This inspection only reports if the Kotlin language level of the project or module is 1.6 or higher.",
-                  "markdown": "Reports a non-exhaustive `when` statements that will lead to compilation error since 1.7.\n\nMotivation types:\n\n* Problematic/meaningless usage patterns need to be discouraged/blocked (e.g. counterintuitive behaviors)\n  * Code is error-prone\n* Inconsistency in the design (things are done differently in different contexts)\n\nImpact types:\n\n* Compilation. Some code that used to compile won't compile any more\n  * There were cases when such code worked with no exceptions\n    * Some such code could compile without any warnings\n\n**More details:** [KT-47709: Make when statements with enum, sealed, and Boolean subjects exhaustive by default](https://youtrack.jetbrains.com/issue/KT-47709)\n\nThe quick-fix adds the missing `else -> {}` branch.\n\n**Example:**\n\n\n      sealed class Base {\n          class A : Base()\n          class B : Base()\n      }\n\n      fun test(base: Base) {\n          when (base) {\n              is Base.A -> \"\"\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      sealed class Base {\n          class A : Base()\n          class B : Base()\n      }\n\n      fun test(base: Base) {\n          when (base) {\n              is Base.A -> \"\"\n              else -> {}\n          }\n      }\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.6 or higher."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Migration",
-                      "index": 15,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "IncompleteDestructuring",
-                "shortDescription": {
-                  "text": "Incomplete destructuring declaration"
-                },
-                "fullDescription": {
-                  "text": "Reports incomplete destructuring declaration. Example: 'data class Person(val name: String, val age: Int)\n  val person = Person(\"\", 0)\n  val (name) = person' The quick fix completes destructuring declaration with new variables: 'data class Person(val name: String, val age: Int)\n  val person = Person(\"\", 0)\n  val (name, age) = person'",
-                  "markdown": "Reports incomplete destructuring declaration.\n\n**Example:**\n\n\n      data class Person(val name: String, val age: Int)\n      val person = Person(\"\", 0)\n      val (name) = person\n\nThe quick fix completes destructuring declaration with new variables:\n\n\n      data class Person(val name: String, val age: Int)\n      val person = Person(\"\", 0)\n      val (name, age) = person\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ScopeFunctionConversion",
-                "shortDescription": {
-                  "text": "Scope function can be converted to another one"
-                },
-                "fullDescription": {
-                  "text": "Reports scope functions ('let', 'run', 'apply', 'also') that can be converted between each other. Using corresponding functions makes your code simpler. The quick-fix replaces the scope function to another one. Example: 'val x = \"\".let {\n      it.length\n  }' After the quick-fix is applied: 'val x = \"\".run {\n      length\n  }'",
-                  "markdown": "Reports scope functions (`let`, `run`, `apply`, `also`) that can be converted between each other.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the scope function to another one.\n\n**Example:**\n\n\n      val x = \"\".let {\n          it.length\n      }\n\nAfter the quick-fix is applied:\n\n\n      val x = \"\".run {\n          length\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "TrailingComma",
-                "shortDescription": {
-                  "text": "Trailing comma recommendations"
-                },
-                "fullDescription": {
-                  "text": "Reports trailing commas that are not follow the recommended style guide.",
-                  "markdown": "Reports trailing commas that are not follow the recommended [style guide](https://kotlinlang.org/docs/coding-conventions.html#trailing-commas)."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "FoldInitializerAndIfToElvis",
-                "shortDescription": {
-                  "text": "If-Null return/break/... foldable to '?:'"
-                },
-                "fullDescription": {
-                  "text": "Reports an 'if' expression that checks variable being null or not right after initializing it that can be converted into an elvis operator in the initializer. Example: 'fun test(foo: Int?, bar: Int): Int {\n      var i = foo\n      if (i == null) {\n          return bar\n      }\n      return i\n  }' The quick-fix converts the 'if' expression with an initializer into an elvis expression: 'fun test(foo: Int?, bar: Int): Int {\n      var i = foo ?: return bar\n      return i\n  }'",
-                  "markdown": "Reports an `if` expression that checks variable being null or not right after initializing it that can be converted into an elvis operator in the initializer.\n\n**Example:**\n\n\n      fun test(foo: Int?, bar: Int): Int {\n          var i = foo\n          if (i == null) {\n              return bar\n          }\n          return i\n      }\n\nThe quick-fix converts the `if` expression with an initializer into an elvis expression:\n\n\n      fun test(foo: Int?, bar: Int): Int {\n          var i = foo ?: return bar\n          return i\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KotlinInvalidBundleOrProperty",
-                "shortDescription": {
-                  "text": "Invalid property key"
-                },
-                "fullDescription": {
-                  "text": "Reports unresolved references to '.properties' file keys and resource bundles in Kotlin files.",
-                  "markdown": "Reports unresolved references to `.properties` file keys and resource bundles in Kotlin files."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "error",
-                  "parameters": {
-                    "ideaSeverity": "ERROR",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin",
-                      "index": 1,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "UselessCallOnCollection",
-                "shortDescription": {
-                  "text": "Useless call on collection type"
-                },
-                "fullDescription": {
-                  "text": "Reports 'filter…' calls from the standard library on already filtered collections. Several functions from the standard library such as 'filterNotNull()' or 'filterIsInstance' have sense only when they are called on receivers that have types distinct from the resulting one. Otherwise, such calls can be omitted as the result will be the same. Remove redundant call quick-fix can be used to amend the code automatically. Example: 'fun test(list: List<String>) {\n      val x = list.filterNotNull() // quick-fix simplifies to 'list'\n      val y = list.filterIsInstance<String>() // quick-fix simplifies to 'list'\n  }'",
-                  "markdown": "Reports `filter...` calls from the standard library on already filtered collections.\n\nSeveral functions from the standard library such as `filterNotNull()` or `filterIsInstance`\nhave sense only when they are called on receivers that have types distinct from the resulting one. Otherwise,\nsuch calls can be omitted as the result will be the same.\n\n**Remove redundant call** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n      fun test(list: List<String>) {\n          val x = list.filterNotNull() // quick-fix simplifies to 'list'\n          val y = list.filterIsInstance<String>() // quick-fix simplifies to 'list'\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantRequireNotNullCall",
-                "shortDescription": {
-                  "text": "Redundant 'requireNotNull' or 'checkNotNull' call"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant 'requireNotNull' or 'checkNotNull' call on non-nullable expressions. Example: 'fun foo(i: Int) {\n      requireNotNull(i) // This 'i' is always not null, so this 'requireNotNull' call is redundant.\n      ...\n  }' After the quick-fix is applied: 'fun foo(i: Int) {\n      ...\n  }'",
-                  "markdown": "Reports redundant `requireNotNull` or `checkNotNull` call on non-nullable expressions.\n\n**Example:**\n\n\n      fun foo(i: Int) {\n          requireNotNull(i) // This 'i' is always not null, so this 'requireNotNull' call is redundant.\n          ...\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(i: Int) {\n          ...\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ObjectPropertyName",
-                "shortDescription": {
-                  "text": "Object property naming convention"
-                },
-                "fullDescription": {
-                  "text": "Reports properties that do not follow the naming conventions. The following properties are reported: Top-level properties Properties in objects and companion objects You can specify the required pattern in the inspection options. Recommended naming conventions: it has to start with an uppercase letter, use camel case and no underscores. Example: '// top-level property\n  val USER_NAME_FIELD = \"UserName\"\n  // top-level property holding reference to singleton object\n  val PersonComparator: Comparator<Person> = /*...*/\n\n  class Person {\n    companion object {\n      // property in companion object\n      val NO_NAME = Person()\n    }\n  }'",
-                  "markdown": "Reports properties that do not follow the naming conventions.\n\nThe following properties are reported:\n\n* Top-level properties\n* Properties in objects and companion objects\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#naming-rules): it has to start with an uppercase letter, use camel case and no underscores.\n\n**Example:**\n\n\n      // top-level property\n      val USER_NAME_FIELD = \"UserName\"\n      // top-level property holding reference to singleton object\n      val PersonComparator: Comparator<Person> = /*...*/\n\n      class Person {\n        companion object {\n          // property in companion object\n          val NO_NAME = Person()\n        }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Naming conventions",
-                      "index": 48,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "PackageDirectoryMismatch",
-                "shortDescription": {
-                  "text": "Package name does not match containing directory"
-                },
-                "fullDescription": {
-                  "text": "Reports 'package' directives that do not match the location of the file.",
-                  "markdown": "Reports `package` directives that do not match the location of the file."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Java interop issues",
-                      "index": 55,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KotlinCovariantEquals",
-                "shortDescription": {
-                  "text": "Covariant 'equals()'"
-                },
-                "fullDescription": {
-                  "text": "Reports 'equals()' that takes an argument type other than 'Any?' if the class does not have another 'equals()' that takes 'Any?' as its argument type. Example: 'class Foo {\n      fun equals(other: Foo?): Boolean {\n          return true\n      }\n  }' To fix the problem create 'equals()' method that takes an argument of type 'Any?'.",
-                  "markdown": "Reports `equals()` that takes an argument type other than `Any?` if the class does not have another `equals()` that takes `Any?` as its argument type.\n\n**Example:**\n\n\n      class Foo {\n          fun equals(other: Foo?): Boolean {\n              return true\n          }\n      }\n\nTo fix the problem create `equals()` method that takes an argument of type `Any?`."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceSizeZeroCheckWithIsEmpty",
-                "shortDescription": {
-                  "text": "Size zero check can be replaced with 'isEmpty()'"
-                },
-                "fullDescription": {
-                  "text": "Reports 'size == 0' checks on 'Collections/Array/String' that should be replaced with 'isEmpty()'. Using 'isEmpty()' makes your code simpler. The quick-fix replaces the size check with 'isEmpty()'. Example: 'fun foo() {\n      val arrayOf = arrayOf(1, 2, 3)\n      arrayOf.size == 0\n  }' After the quick-fix is applied: 'fun foo() {\n      val arrayOf = arrayOf(1, 2, 3)\n      arrayOf.isEmpty()\n  }'",
-                  "markdown": "Reports `size == 0` checks on `Collections/Array/String` that should be replaced with `isEmpty()`.\n\nUsing `isEmpty()` makes your code simpler.\n\nThe quick-fix replaces the size check with `isEmpty()`.\n\n**Example:**\n\n\n      fun foo() {\n          val arrayOf = arrayOf(1, 2, 3)\n          arrayOf.size == 0\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo() {\n          val arrayOf = arrayOf(1, 2, 3)\n          arrayOf.isEmpty()\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantEnumConstructorInvocation",
-                "shortDescription": {
-                  "text": "Redundant enum constructor invocation"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant constructor invocation on an enum entry. Example: 'enum class Baz(i: Int = 0) {\n      A(1),\n      B(),\n      C(),\n  }' After the quick-fix is applied: 'enum class Baz(i: Int = 0) {\n      A(1),\n      B,\n      C,\n  }'",
-                  "markdown": "Reports redundant constructor invocation on an enum entry.\n\n**Example:**\n\n\n      enum class Baz(i: Int = 0) {\n          A(1),\n          B(),\n          C(),\n      }\n\nAfter the quick-fix is applied:\n\n\n      enum class Baz(i: Int = 0) {\n          A(1),\n          B,\n          C,\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "DirectUseOfResultType",
-                "shortDescription": {
-                  "text": "Function returning Result directly"
-                },
-                "fullDescription": {
-                  "text": "Reports functions that use 'Result' as a return type. 'Result' should never be used as a return type. Throw an exception, use a nullable type, or use a domain-specific result class to indicate failure. Example: 'fun foo() = Result.success(true)'",
-                  "markdown": "Reports functions that use `Result` as a return type.\n\n\n`Result` should never be used as a return type.\nThrow an exception, use a nullable type, or use a domain-specific result class to indicate failure.\n\n**Example:**\n\n\n      fun foo() = Result.success(true)\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "FakeJvmFieldConstant",
-                "shortDescription": {
-                  "text": "Kotlin non-const property used as Java constant"
-                },
-                "fullDescription": {
-                  "text": "Reports Kotlin properties that are not 'const' and used as Java annotation arguments. For example, a property with the '@JvmField' annotation has an initializer that can be evaluated at compile-time, and it has a primitive or 'String' type. Such properties have a 'ConstantValue' attribute in bytecode in Kotlin 1.1-1.2. This attribute allows javac to fold usages of the corresponding field and use that field in annotations. This can lead to incorrect behavior in the case of separate or incremental compilation in mixed Java/Kotlin code. This behavior is subject to change in Kotlin 1.3 (no 'ConstantValue' attribute any more). Example: Kotlin code in foo.kt file: 'annotation class Ann(val s: String)\n  @JvmField val importantString = \"important\"' Java code: 'public class JavaUser {\n      // This is dangerous\n      @Ann(s = FooKt.importantString)\n      public void foo() {}\n  }' To fix the problem replace the '@JvmField' annotation with the 'const' modifier on a relevant Kotlin property or inline it.",
-                  "markdown": "Reports Kotlin properties that are not `const` and used as Java annotation arguments.\n\n\nFor example, a property with the `@JvmField` annotation has an initializer that can be evaluated at compile-time,\nand it has a primitive or `String` type.\n\n\nSuch properties have a `ConstantValue` attribute in bytecode in Kotlin 1.1-1.2.\nThis attribute allows javac to fold usages of the corresponding field and use that field in annotations.\nThis can lead to incorrect behavior in the case of separate or incremental compilation in mixed Java/Kotlin code.\nThis behavior is subject to change in Kotlin 1.3 (no `ConstantValue` attribute any more).\n\n**Example:**\n\nKotlin code in foo.kt file:\n\n\n      annotation class Ann(val s: String)\n      @JvmField val importantString = \"important\"\n\nJava code:\n\n\n      public class JavaUser {\n          // This is dangerous\n          @Ann(s = FooKt.importantString)\n          public void foo() {}\n      }\n\nTo fix the problem replace the `@JvmField` annotation with the `const` modifier on a relevant Kotlin property or inline it."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Java interop issues",
-                      "index": 55,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "WhenWithOnlyElse",
-                "shortDescription": {
-                  "text": "'when' has only 'else' branch and can be simplified"
-                },
-                "fullDescription": {
-                  "text": "Reports 'when' expressions with only an 'else' branch that can be simplified. Simplify expression quick-fix can be used to amend the code automatically. Example: 'fun redundant() {\n      val x = when { // <== redundant, a quick-fix simplifies the when expression to \"val x = 1\"\n          else -> 1\n      }\n  }'",
-                  "markdown": "Reports `when` expressions with only an `else` branch that can be simplified.\n\n**Simplify expression** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n      fun redundant() {\n          val x = when { // <== redundant, a quick-fix simplifies the when expression to \"val x = 1\"\n              else -> 1\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KotlinTestJUnit",
-                "shortDescription": {
-                  "text": "kotlin-test-junit could be used"
-                },
-                "fullDescription": {
-                  "text": "Reports usage of 'kotlin-test' and 'junit' dependency without 'kotlin-test-junit'. It is recommended to use 'kotlin-test-junit' dependency to work with Kotlin and JUnit.",
-                  "markdown": "Reports usage of `kotlin-test` and `junit` dependency without `kotlin-test-junit`.\n\nIt is recommended to use `kotlin-test-junit` dependency to work with Kotlin and JUnit."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin",
-                      "index": 1,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SafeCastWithReturn",
-                "shortDescription": {
-                  "text": "Safe cast with 'return' should be replaced with 'if' type check"
-                },
-                "fullDescription": {
-                  "text": "Reports safe cast with 'return' that can be replaced with 'if' type check. Using corresponding functions makes your code simpler. The quick-fix replaces the safe cast with 'if' type check. Example: 'fun test(x: Any) {\n      x as? String ?: return\n  }' After the quick-fix is applied: 'fun test(x: Any) {\n      if (x !is String) return\n  }'",
-                  "markdown": "Reports safe cast with `return` that can be replaced with `if` type check.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the safe cast with `if` type check.\n\n**Example:**\n\n\n      fun test(x: Any) {\n          x as? String ?: return\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(x: Any) {\n          if (x !is String) return\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceAssertBooleanWithAssertEquality",
-                "shortDescription": {
-                  "text": "Assert boolean could be replaced with assert equality"
-                },
-                "fullDescription": {
-                  "text": "Reports calls to 'assertTrue()' and 'assertFalse()' that can be replaced with assert equality functions. 'assertEquals()', 'assertSame()', and their negating counterparts (-Not-) provide more informative messages on failure. Example: 'assertTrue(a == b)' After the quick-fix is applied: 'assertEquals(a, b)'",
-                  "markdown": "Reports calls to `assertTrue()` and `assertFalse()` that can be replaced with assert equality functions.\n\n\n`assertEquals()`, `assertSame()`, and their negating counterparts (-Not-) provide more informative messages on\nfailure.\n\n**Example:**\n\n      assertTrue(a == b)\n\nAfter the quick-fix is applied:\n\n      assertEquals(a, b)\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "UnnecessaryOptInAnnotation",
-                "shortDescription": {
-                  "text": "Unnecessary '@OptIn' annotation"
-                },
-                "fullDescription": {
-                  "text": "Reports unnecessary opt-in annotations that can be safely removed. '@OptIn' annotation is required for the code using experimental APIs that can change any time in the future. This annotation becomes useless and possibly misleading if no such API is used (e.g., when the experimental API becomes stable and does not require opting in its usage anymore). Remove annotation quick-fix can be used to remove the unnecessary '@OptIn' annotation. Example: '@OptIn(ExperimentalApi::class)\n  fun foo(x: Bar) {\n      x.baz()\n  }' After the quick-fix is applied: 'fun foo(x: Bar) {\n      x.baz()\n  }'",
-                  "markdown": "Reports unnecessary opt-in annotations that can be safely removed.\n\n`@OptIn` annotation is required for the code using experimental APIs that can change\nany time in the future. This annotation becomes useless and possibly misleading if no such API is used\n(e.g., when the experimental API becomes stable and does not require opting in its usage anymore).\n\n\n**Remove annotation** quick-fix can be used to remove the unnecessary `@OptIn` annotation.\n\nExample:\n\n\n      @OptIn(ExperimentalApi::class)\n      fun foo(x: Bar) {\n          x.baz()\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(x: Bar) {\n          x.baz()\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceStringFormatWithLiteral",
-                "shortDescription": {
-                  "text": "'String.format' call can be replaced with string templates"
-                },
-                "fullDescription": {
-                  "text": "Reports 'String.format' calls that can be replaced with string templates. Using string templates makes your code simpler. The quick-fix replaces the call with a string template. Example: 'fun main() {\n      val id = \"abc\"\n      val date = \"123\"\n      val s = String.format(\"%s_%s_%s\", id, date, id)\n  }' After the quick-fix is applied: 'fun main() {\n      val id = \"abc\"\n      val date = \"123\"\n      val s = \"${id}_${date}_$id\"\n  }'",
-                  "markdown": "Reports `String.format` calls that can be replaced with string templates.\n\nUsing string templates makes your code simpler.\n\nThe quick-fix replaces the call with a string template.\n\n**Example:**\n\n\n      fun main() {\n          val id = \"abc\"\n          val date = \"123\"\n          val s = String.format(\"%s_%s_%s\", id, date, id)\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun main() {\n          val id = \"abc\"\n          val date = \"123\"\n          val s = \"${id}_${date}_$id\"\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceNotNullAssertionWithElvisReturn",
-                "shortDescription": {
-                  "text": "Not-null assertion can be replaced with 'return'"
-                },
-                "fullDescription": {
-                  "text": "Reports not-null assertion ('!!') calls that can be replaced with the elvis operator and return ('?: return'). A not-null assertion can lead to NPE (NullPointerException) that is not expected. Avoiding the use of '!!' is good practice. The quick-fix replaces the not-null assertion with 'return' or 'return null'. Example: 'fun test(number: Int?) {\n      val x = number!!\n  }' After the quick-fix is applied: 'fun test(number: Int?) {\n      val x = number ?: return\n  }'",
-                  "markdown": "Reports not-null assertion (`!!`) calls that can be replaced with the elvis operator and return (`?: return`).\n\nA not-null assertion can lead to NPE (NullPointerException) that is not expected. Avoiding the use of `!!` is good practice.\n\nThe quick-fix replaces the not-null assertion with `return` or `return null`.\n\n**Example:**\n\n\n      fun test(number: Int?) {\n          val x = number!!\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(number: Int?) {\n          val x = number ?: return\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceSubstringWithSubstringBefore",
-                "shortDescription": {
-                  "text": "'substring' call should be replaced with 'substringBefore'"
-                },
-                "fullDescription": {
-                  "text": "Reports calls like 's.substring(0, s.indexOf(x))' that can be replaced with 's.substringBefore(x)'. Using 'substringBefore()' makes your code simpler. The quick-fix replaces the 'substring' call with 'substringBefore'. Example: 'fun foo(s: String) {\n      s.substring(0, s.indexOf('x'))\n  }' After the quick-fix is applied: 'fun foo(s: String) {\n      s.substringBefore('x')\n  }'",
-                  "markdown": "Reports calls like `s.substring(0, s.indexOf(x))` that can be replaced with `s.substringBefore(x)`.\n\nUsing `substringBefore()` makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `substringBefore`.\n\n**Example:**\n\n\n      fun foo(s: String) {\n          s.substring(0, s.indexOf('x'))\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(s: String) {\n          s.substringBefore('x')\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceWithOperatorAssignment",
-                "shortDescription": {
-                  "text": "Assignment can be replaced with operator assignment"
-                },
-                "fullDescription": {
-                  "text": "Reports modifications of variables with a simple assignment (such as 'y = y + x') that can be replaced with an operator assignment. The quick-fix replaces the assignment with an assignment operator. Example: 'fun foo() {\n      val list = mutableListOf(1, 2, 3)\n      list = list + 4\n  }' After the quick-fix is applied: 'fun foo() {\n      val list = mutableListOf(1, 2, 3)\n      list += 4\n  }'",
-                  "markdown": "Reports modifications of variables with a simple assignment (such as `y = y + x`) that can be replaced with an operator assignment.\n\nThe quick-fix replaces the assignment with an assignment operator.\n\n**Example:**\n\n\n      fun foo() {\n          val list = mutableListOf(1, 2, 3)\n          list = list + 4\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo() {\n          val list = mutableListOf(1, 2, 3)\n          list += 4\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "UnusedSymbol",
-                "shortDescription": {
-                  "text": "Unused symbol"
-                },
-                "fullDescription": {
-                  "text": "Reports symbols that are not used or not reachable from entry points.",
-                  "markdown": "Reports symbols that are not used or not reachable from entry points."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceCollectionCountWithSize",
-                "shortDescription": {
-                  "text": "Collection count can be converted to size"
-                },
-                "fullDescription": {
-                  "text": "Reports calls to 'Collection<T>.count()'. This function call can be replaced with '.size'. '.size' form ensures that the operation is O(1) and won't allocate extra objects, whereas 'count()' could be confused with 'Iterable<T>.count()', which is O(n) and allocating. Example: 'fun foo() {\n      var list = listOf(1,2,3)\n      list.count() // replaceable 'count()'\n  }' After the quick-fix is applied: 'fun foo() {\n      var list = listOf(1,2,3)\n      list.size\n  }'",
-                  "markdown": "Reports calls to `Collection<T>.count()`.\n\n\nThis function call can be replaced with `.size`.\n\n\n`.size` form ensures that the operation is O(1) and won't allocate extra objects, whereas\n`count()` could be confused with `Iterable<T>.count()`, which is O(n) and allocating.\n\n\n**Example:**\n\n      fun foo() {\n          var list = listOf(1,2,3)\n          list.count() // replaceable 'count()'\n      }\n\nAfter the quick-fix is applied:\n\n      fun foo() {\n          var list = listOf(1,2,3)\n          list.size\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceArrayEqualityOpWithArraysEquals",
-                "shortDescription": {
-                  "text": "Arrays comparison via '==' and '!='"
-                },
-                "fullDescription": {
-                  "text": "Reports usages of '==' or '!=' operator for arrays that should be replaced with 'contentEquals()'. The '==' and '!='operators compare array references instead of their content. Examples: 'fun test() {\n      val a = arrayOf(1, 2, 3)\n      val b = arrayOf(1, 2, 3)\n      println(a == b) // references comparison\n  }' After the quick-fix is applied: 'fun test() {\n      val a = arrayOf(1, 2, 3)\n      val b = arrayOf(1, 2, 3)\n      println(a.contentEquals(b))\n  }'",
-                  "markdown": "Reports usages of `==` or `!=` operator for arrays that should be replaced with `contentEquals()`.\n\n\nThe `==` and `!=`operators compare array references instead of their content.\n\n**Examples:**\n\n      fun test() {\n          val a = arrayOf(1, 2, 3)\n          val b = arrayOf(1, 2, 3)\n          println(a == b) // references comparison\n      }\n\nAfter the quick-fix is applied:\n\n      fun test() {\n          val a = arrayOf(1, 2, 3)\n          val b = arrayOf(1, 2, 3)\n          println(a.contentEquals(b))\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "DeprecatedGradleDependency",
-                "shortDescription": {
-                  "text": "Deprecated library is used in Gradle"
-                },
-                "fullDescription": {
-                  "text": "Reports deprecated dependencies in Gradle build scripts. Example: 'dependencies {\n      compile \"org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.0\"\n  }' After the quick-fix applied: 'dependencies {\n      compile \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.0\"\n  }'",
-                  "markdown": "Reports deprecated dependencies in Gradle build scripts.\n\n**Example:**\n\n\n      dependencies {\n          compile \"org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.0\"\n      }\n\nAfter the quick-fix applied:\n\n\n      dependencies {\n          compile \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.0\"\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin",
-                      "index": 1,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ConvertReferenceToLambda",
-                "shortDescription": {
-                  "text": "Can be replaced with lambda"
-                },
-                "fullDescription": {
-                  "text": "Reports a function reference expression that can be replaced with a function literal (lambda). Sometimes, passing a lambda looks more straightforward and more consistent with the rest of the code. Also, the fix might be handy if you need to replace a simple call with something more complex. Example: 'fun Int.isEven() = this % 2 == 0\n\n  fun example() {\n      val numbers = listOf(1, 2, 4, 7, 9, 10)\n      val evenNumbers = numbers.filter(Int::isEven)\n  }' After the quick-fix is applied: 'fun Int.isEven() = this % 2 == 0\n\n  fun example() {\n      val numbers = listOf(1, 2, 4, 7, 9, 10)\n      val evenNumbers = numbers.filter { it.isEven() }\n  }'",
-                  "markdown": "Reports a function reference expression that can be replaced with a function literal (lambda).\n\n\nSometimes, passing a lambda looks more straightforward and more consistent with the rest of the code.\nAlso, the fix might be handy if you need to replace a simple call with something more complex.\n\n**Example:**\n\n\n      fun Int.isEven() = this % 2 == 0\n\n      fun example() {\n          val numbers = listOf(1, 2, 4, 7, 9, 10)\n          val evenNumbers = numbers.filter(Int::isEven)\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun Int.isEven() = this % 2 == 0\n\n      fun example() {\n          val numbers = listOf(1, 2, 4, 7, 9, 10)\n          val evenNumbers = numbers.filter { it.isEven() }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "UnlabeledReturnInsideLambda",
-                "shortDescription": {
-                  "text": "Unlabeled return inside lambda"
-                },
-                "fullDescription": {
-                  "text": "Reports unlabeled 'return' expressions inside inline lambda. Such expressions can be confusing because it might be unclear which scope belongs to 'return'. Change to return@… quick-fix can be used to amend the code automatically. Example: 'fun test(list: List<Int>) {\n      list.forEach {\n          // This return expression returns from the function test\n          // One can change it to return@forEach to change the scope\n          if (it == 10) return\n      }\n  }' After the quick-fix is applied: 'fun test(list: List<Int>) {\n      list.forEach {\n          if (it == 10) return@test\n      }\n  }'",
-                  "markdown": "Reports unlabeled `return` expressions inside inline lambda.\n\nSuch expressions can be confusing because it might be unclear which scope belongs to `return`.\n\n**Change to return@...** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n      fun test(list: List<Int>) {\n          list.forEach {\n              // This return expression returns from the function test\n              // One can change it to return@forEach to change the scope\n              if (it == 10) return\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(list: List<Int>) {\n          list.forEach {\n              if (it == 10) return@test\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "LateinitVarOverridesLateinitVar",
-                "shortDescription": {
-                  "text": "'lateinit var' property overrides 'lateinit var' property"
-                },
-                "fullDescription": {
-                  "text": "Reports 'lateinit var' properties that override other 'lateinit var' properties. A subclass instance will have two fields for a single property, and the one from the superclass will remain effectively unused. Example: 'open class BaseClass {\n      open lateinit var name: String\n    }\n\n    class RealClass : BaseClass() {\n      override lateinit var name: String\n    }'",
-                  "markdown": "Reports `lateinit var` properties that override other `lateinit var` properties.\n\nA subclass instance will have two fields for a single property, and the one from the superclass will remain effectively unused.\n\n**Example:**\n\n\n        open class BaseClass {\n          open lateinit var name: String\n        }\n\n        class RealClass : BaseClass() {\n          override lateinit var name: String\n        }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "DifferentKotlinGradleVersion",
-                "shortDescription": {
-                  "text": "Kotlin Gradle and IDE plugins versions are different"
-                },
-                "fullDescription": {
-                  "text": "Reports that different IDE and Gradle plugin versions are used. This can cause inconsistencies between IDE and Gradle builds in error reporting or code behavior. Example: 'dependencies {\n    classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:0.0.1\"\n  }' To fix the problem change the kotlin gradle plugin version to match the version of kotlin that is bundled into the IDE plugin.",
-                  "markdown": "Reports that different IDE and Gradle plugin versions are used.\n\nThis can cause inconsistencies between IDE and Gradle builds in error reporting or code behavior.\n\n**Example:**\n\n\n      dependencies {\n        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:0.0.1\"\n      }\n\nTo fix the problem change the kotlin gradle plugin version to match the version of kotlin that is bundled into the IDE plugin."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin",
-                      "index": 1,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "JoinDeclarationAndAssignment",
-                "shortDescription": {
-                  "text": "Join declaration and assignment"
-                },
-                "fullDescription": {
-                  "text": "Reports property declarations that can be joined with the following assignment. Example: 'val x: String\n  x = System.getProperty(\"\")' The quick fix joins the declaration with the assignment: 'val x = System.getProperty(\"\")'",
-                  "markdown": "Reports property declarations that can be joined with the following assignment.\n\n**Example:**\n\n\n      val x: String\n      x = System.getProperty(\"\")\n\nThe quick fix joins the declaration with the assignment:\n\n\n      val x = System.getProperty(\"\")\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KotlinEqualsBetweenInconvertibleTypes",
-                "shortDescription": {
-                  "text": "'equals()' between objects of inconvertible types"
-                },
-                "fullDescription": {
-                  "text": "Reports calls to 'equals()' where the receiver and the argument are of incompatible primitive, enum, or string types. While such a call might theoretically be useful, most likely it represents a bug. Example: '5.equals(\"\");'",
-                  "markdown": "Reports calls to `equals()` where the receiver and the argument are of incompatible primitive, enum, or string types.\n\nWhile such a call might theoretically be useful, most likely it represents a bug.\n\n**Example:**\n\n      5.equals(\"\");\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "HasPlatformType",
-                "shortDescription": {
-                  "text": "Function or property has platform type"
-                },
-                "fullDescription": {
-                  "text": "Reports functions and properties that have a platform type. To prevent unexpected errors, the type should be declared explicitly. Example: 'fun foo() = java.lang.String.valueOf(1)' The quick fix allows you to specify the return type: 'fun foo(): String = java.lang.String.valueOf(1)'",
-                  "markdown": "Reports functions and properties that have a platform type.\n\nTo prevent unexpected errors, the type should be declared explicitly.\n\n**Example:**\n\n\n      fun foo() = java.lang.String.valueOf(1)\n\nThe quick fix allows you to specify the return type:\n\n\n      fun foo(): String = java.lang.String.valueOf(1)\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Java interop issues",
-                      "index": 55,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "DataClassPrivateConstructor",
-                "shortDescription": {
-                  "text": "Private data class constructor is exposed via the 'copy' method"
-                },
-                "fullDescription": {
-                  "text": "Reports the 'private' primary constructor in data classes. 'data' classes have a 'copy()' factory method that can be used similarly to a constructor. A constructor should not be marked as 'private' to provide enough safety. Example: 'data class User private constructor(val name: String)' A quick-fix changes the constructor visibility modifier to 'public': 'data class User(val name: String)'",
-                  "markdown": "Reports the `private` primary constructor in data classes.\n\n\n`data` classes have a `copy()` factory method that can be used similarly to a constructor.\nA constructor should not be marked as `private` to provide enough safety.\n\n**Example:**\n\n\n      data class User private constructor(val name: String)\n\nA quick-fix changes the constructor visibility modifier to `public`:\n\n\n      data class User(val name: String)\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantInnerClassModifier",
-                "shortDescription": {
-                  "text": "Redundant 'inner' modifier"
-                },
-                "fullDescription": {
-                  "text": "Reports the 'inner' modifier on a class as redundant if it doesn't reference members of its outer class. Example: 'class Foo {\n      inner class InnerClass { // redundant `inner` modifier\n          fun hello() {\n              println(\"Hi!\")\n          }\n      }\n  }\n\n  class List {\n      val objects = Array<Any>(42) { Any() }\n\n      inner class Iterator { // Not redundant `inner` modifier\n          fun next(): Any {\n              return objects[0]\n          }\n      }\n  }' After the quick-fix is applied: 'class Foo {\n      class InnerClass { // redundant `inner` modifier\n          fun hello() {\n              println(\"Hi!\")\n          }\n      }\n  }\n\n  class List {\n      val objects = Array<Any>(42) { Any() }\n\n      inner class Iterator { // Not redundant `inner` modifier\n          fun next(): Any {\n              return objects[0]\n          }\n      }\n  }'",
-                  "markdown": "Reports the `inner` modifier on a class as redundant if it doesn't reference members of its outer class.\n\n**Example:**\n\n\n      class Foo {\n          inner class InnerClass { // redundant `inner` modifier\n              fun hello() {\n                  println(\"Hi!\")\n              }\n          }\n      }\n\n      class List {\n          val objects = Array<Any>(42) { Any() }\n\n          inner class Iterator { // Not redundant `inner` modifier\n              fun next(): Any {\n                  return objects[0]\n              }\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      class Foo {\n          class InnerClass { // redundant `inner` modifier\n              fun hello() {\n                  println(\"Hi!\")\n              }\n          }\n      }\n\n      class List {\n          val objects = Array<Any>(42) { Any() }\n\n          inner class Iterator { // Not redundant `inner` modifier\n              fun next(): Any {\n                  return objects[0]\n              }\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "JavaCollectionsStaticMethodOnImmutableList",
-                "shortDescription": {
-                  "text": "Call of Java mutator method on immutable Kotlin collection"
-                },
-                "fullDescription": {
-                  "text": "Reports Java mutator methods calls (like 'fill', 'reverse', 'shuffle', 'sort') on an immutable Kotlin collection. This can lead to 'UnsupportedOperationException' at runtime. Example: 'import java.util.Collections\n\n  fun test() {\n      val immutableList = listOf(1, 2)\n      Collections.reverse(immutableList)\n  }' To fix the problem make the list mutable.",
-                  "markdown": "Reports Java mutator methods calls (like `fill`, `reverse`, `shuffle`, `sort`) on an immutable Kotlin collection.\n\nThis can lead to `UnsupportedOperationException` at runtime.\n\n**Example:**\n\n\n      import java.util.Collections\n\n      fun test() {\n          val immutableList = listOf(1, 2)\n          Collections.reverse(immutableList)\n      }\n\nTo fix the problem make the list mutable."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Java interop issues",
-                      "index": 55,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "MavenCoroutinesDeprecation",
-                "shortDescription": {
-                  "text": "Incompatible kotlinx.coroutines dependency is used with Kotlin 1.3+ in Maven"
-                },
-                "fullDescription": {
-                  "text": "Reports kotlinx.coroutines library dependencies in Maven that should be updated in order to be compatible with Kotlin 1.3 and later.",
-                  "markdown": "Reports **kotlinx.coroutines** library dependencies in Maven that should be updated in order to be compatible with Kotlin 1.3 and later."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "error",
-                  "parameters": {
-                    "ideaSeverity": "ERROR",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Migration/Maven",
-                      "index": 118,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "NullableBooleanElvis",
-                "shortDescription": {
-                  "text": "Equality check can be used instead of elvis for nullable boolean check"
-                },
-                "fullDescription": {
-                  "text": "Reports cases when an equality check should be used instead of the elvis operator. Example: 'fun check(a: Boolean? == null) {\n    if (a ?: false) throw IllegalStateException()\n}' After the quick-fix is applied: 'fun check(a: Boolean? == null) {\n    if (a == true) throw IllegalStateException()\n}'",
-                  "markdown": "Reports cases when an equality check should be used instead of the elvis operator.\n\n**Example:**\n\n\n    fun check(a: Boolean? == null) {\n        if (a ?: false) throw IllegalStateException()\n    }\n\nAfter the quick-fix is applied:\n\n\n    fun check(a: Boolean? == null) {\n        if (a == true) throw IllegalStateException()\n    }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "UnnecessaryVariable",
-                "shortDescription": {
-                  "text": "Unnecessary local variable"
-                },
-                "fullDescription": {
-                  "text": "Reports local variables that used only in the very next 'return' statement or exact copies of other variables. Such variables can be safely inlined to make the code more clear.",
-                  "markdown": "Reports local variables that used only in the very next `return` statement or exact copies of other variables.\n\nSuch variables can be safely inlined to make the code more clear."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "DeprecatedMavenDependency",
-                "shortDescription": {
-                  "text": "Deprecated library is used in Maven"
-                },
-                "fullDescription": {
-                  "text": "Reports deprecated maven dependency. Example: '<dependencies>\n    <dependency>\n        <groupId>org.jetbrains.kotlin</groupId>\n        <artifactId>kotlin-stdlib-jre7</artifactId>\n        <version>${kotlin.version}</version>\n    </dependency>\n  </dependencies>' The quick fix changes the deprecated dependency to a maintained one: '<dependencies>\n    <dependency>\n        <groupId>org.jetbrains.kotlin</groupId>\n        <artifactId>kotlin-stdlib-jdk7</artifactId>\n        <version>${kotlin.version}</version>\n    </dependency>\n  </dependencies>'",
-                  "markdown": "Reports deprecated maven dependency.\n\n**Example:**\n\n\n      <dependencies>\n        <dependency>\n            <groupId>org.jetbrains.kotlin</groupId>\n            <artifactId>kotlin-stdlib-jre7</artifactId>\n            <version>${kotlin.version}</version>\n        </dependency>\n      </dependencies>\n\nThe quick fix changes the deprecated dependency to a maintained one:\n\n\n       <dependencies>\n        <dependency>\n            <groupId>org.jetbrains.kotlin</groupId>\n            <artifactId>kotlin-stdlib-jdk7</artifactId>\n            <version>${kotlin.version}</version>\n        </dependency>\n      </dependencies>\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin",
-                      "index": 1,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantEmptyInitializerBlock",
-                "shortDescription": {
-                  "text": "Redundant empty initializer block"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant empty initializer blocks. Example: 'class Foo {\n      init {\n          // Empty init block\n      }\n  }' After the quick-fix is applied: 'class Foo {\n  }'",
-                  "markdown": "Reports redundant empty initializer blocks.\n\n**Example:**\n\n\n      class Foo {\n          init {\n              // Empty init block\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      class Foo {\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "GradleKotlinxCoroutinesDeprecation",
-                "shortDescription": {
-                  "text": "Incompatible kotlinx.coroutines dependency is used with Kotlin 1.3+ in Gradle"
-                },
-                "fullDescription": {
-                  "text": "Reports 'kotlinx.coroutines' library dependencies in Gradle that should be updated to be compatible with Kotlin 1.3+. Example: 'dependencies {\n      implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.0.1'\n  }' The quick fix changes the 'kotlinx.coroutines' library version to a compatible with Kotlin 1.3: 'dependencies {\n      implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.27.0-eap13'\n  }'",
-                  "markdown": "Reports `kotlinx.coroutines` library dependencies in Gradle that should be updated to be compatible with Kotlin 1.3+.\n\n**Example:**\n\n\n      dependencies {\n          implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.0.1'\n      }\n\nThe quick fix changes the `kotlinx.coroutines` library version to a compatible with Kotlin 1.3:\n\n\n      dependencies {\n          implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.27.0-eap13'\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "error",
-                  "parameters": {
-                    "ideaSeverity": "ERROR",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Migration/Gradle",
-                      "index": 126,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "WarningOnMainUnusedParameterMigration",
-                "shortDescription": {
-                  "text": "Unused 'args' on 'main' since 1.4"
-                },
-                "fullDescription": {
-                  "text": "Reports 'main' function with an unused single parameter. Since Kotlin 1.4, it is possible to use the 'main' function without parameter as the entry point to the Kotlin program. The compiler reports a warning for the 'main' function with an unused parameter.",
-                  "markdown": "Reports `main` function with an unused single parameter.\n\nSince Kotlin 1.4, it is possible to use the `main` function without parameter as the entry point to the Kotlin program.\nThe compiler reports a warning for the `main` function with an unused parameter."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Migration",
-                      "index": 15,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantWith",
-                "shortDescription": {
-                  "text": "Redundant 'with' call"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant 'with' function calls that don't access anything from the receiver. Examples: 'class MyClass {\n      fun f(): String = \"\"\n  }\n\n  fun testRedundant() {\n      with(c) { // <== 'with' is redundant since 'c' isn't used\n          println(\"1\")\n      }\n  }\n\n  fun testOk() {\n      val c = MyClass()\n      with(c) { // <== OK because 'f()' is effectively 'c.f()'\n          println(f())\n      }\n  }'",
-                  "markdown": "Reports redundant `with` function calls that don't access anything from the receiver.\n\n**Examples:**\n\n\n      class MyClass {\n          fun f(): String = \"\"\n      }\n\n      fun testRedundant() {\n          with(c) { // <== 'with' is redundant since 'c' isn't used\n              println(\"1\")\n          }\n      }\n\n      fun testOk() {\n          val c = MyClass()\n          with(c) { // <== OK because 'f()' is effectively 'c.f()'\n              println(f())\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantLabelMigration",
-                "shortDescription": {
-                  "text": "Redundant label"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant labels which cause compilation errors since Kotlin 1.4. Since Kotlin 1.0, one can mark any statement with a label: 'fun foo() {\n    L1@ val x = L2@bar()\n  }' However, these labels can be referenced only in a limited number of ways: break / continue from a loop non-local return from an inline lambda or inline anonymous function sssss Such labels are prohibited since Kotlin 1.4. This inspection only reports if the Kotlin language level of the project or module is 1.4 or higher.",
-                  "markdown": "Reports redundant labels which cause compilation errors since Kotlin 1.4.\n\nSince Kotlin 1.0, one can mark any statement with a label:\n\n\n      fun foo() {\n        L1@ val x = L2@bar()\n      }\n\nHowever, these labels can be referenced only in a limited number of ways:\n\n* break / continue from a loop\n* non-local return from an inline lambda or inline anonymous function\nsssss\n\nSuch labels are prohibited since Kotlin 1.4.\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Migration",
-                      "index": 15,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceNegatedIsEmptyWithIsNotEmpty",
-                "shortDescription": {
-                  "text": "Negated call can be simplified"
-                },
-                "fullDescription": {
-                  "text": "Reports negation 'isEmpty()' and 'isNotEmpty()' for collections and 'String', or 'isBlank()' and 'isNotBlank()' for 'String'. Using corresponding functions makes your code simpler. The quick-fix replaces the negation call with the corresponding call from the Standard Library. Example: 'fun main() {\n      val list = listOf(1,2,3)\n      if (!list.isEmpty()) {\n          // do smth\n      }\n  }' After the quick-fix is applied: 'fun main() {\n      val list = listOf(1,2,3)\n      if (list.isNotEmpty()) {\n          // do smth\n      }\n  }'",
-                  "markdown": "Reports negation `isEmpty()` and `isNotEmpty()` for collections and `String`, or `isBlank()` and `isNotBlank()` for `String`.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the negation call with the corresponding call from the Standard Library.\n\n**Example:**\n\n\n      fun main() {\n          val list = listOf(1,2,3)\n          if (!list.isEmpty()) {\n              // do smth\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun main() {\n          val list = listOf(1,2,3)\n          if (list.isNotEmpty()) {\n              // do smth\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "DelegationToVarProperty",
-                "shortDescription": {
-                  "text": "Delegating to 'var' property"
-                },
-                "fullDescription": {
-                  "text": "Reports interface delegation to a 'var' property. Only initial value of a property is used for delegation, any later assignments do not affect it. Example: 'class Example(var text: CharSequence): CharSequence by text' A quick-fix replaces a property with immutable one: 'class Example(val text: CharSequence): CharSequence by text' Alternative way, if you rely on mutability for some reason: 'class Example(text: CharSequence): CharSequence by text {\n      var text = text\n  }'",
-                  "markdown": "Reports interface delegation to a `var` property.\n\nOnly initial value of a property is used for delegation, any later assignments do not affect it.\n\n**Example:**\n\n\n      class Example(var text: CharSequence): CharSequence by text\n\nA quick-fix replaces a property with immutable one:\n\n\n      class Example(val text: CharSequence): CharSequence by text\n\nAlternative way, if you rely on mutability for some reason:\n\n\n      class Example(text: CharSequence): CharSequence by text {\n          var text = text\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ConstantConditionIf",
-                "shortDescription": {
-                  "text": "Condition of 'if' expression is constant"
-                },
-                "fullDescription": {
-                  "text": "Reports 'if' expressions that have 'true' or 'false' constant literal condition and can be simplified. While occasionally intended, this construction is confusing and often the result of a typo or previous refactoring. Example: 'fun example() {\n      if (true) {\n          throw IllegalStateException(\"Unexpected state\")\n      }\n  }' A quick-fix removes the 'if' condition: 'fun example() {\n      throw IllegalStateException(\"Unexpected state\")\n  }'",
-                  "markdown": "Reports `if` expressions that have `true` or `false` constant literal condition and can be simplified.\n\nWhile occasionally intended, this construction is confusing and often the result of a typo\nor previous refactoring.\n\n**Example:**\n\n\n      fun example() {\n          if (true) {\n              throw IllegalStateException(\"Unexpected state\")\n          }\n      }\n\nA quick-fix removes the `if` condition:\n\n\n      fun example() {\n          throw IllegalStateException(\"Unexpected state\")\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantLambdaArrow",
-                "shortDescription": {
-                  "text": "Redundant lambda arrow"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant lambda arrows in lambdas without parameters. Example: 'fun foo(f: () -> Unit) = f()\n\n  fun bar() {\n      foo { -> println(\"Hi!\") }\n  }' After the quick-fix is applied: 'fun foo(f: () -> Unit) = f()\n\n  fun bar() {\n      foo { println(\"Hi!\") }\n  }'",
-                  "markdown": "Reports redundant lambda arrows in lambdas without parameters.\n\n**Example:**\n\n\n      fun foo(f: () -> Unit) = f()\n\n      fun bar() {\n          foo { -\\> println(\"Hi!\") }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(f: () -> Unit) = f()\n\n      fun bar() {\n          foo { println(\"Hi!\") }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KotlinInternalInJava",
-                "shortDescription": {
-                  "text": "Usage of Kotlin internal declarations from Java"
-                },
-                "fullDescription": {
-                  "text": "Reports usages of Kotlin 'internal' declarations in Java code that is located in a different module. The 'internal' keyword is designed to restrict access to a class, function, or property from other modules. Due to JVM limitations, 'internal' classes, functions, and properties can still be accessed from outside Kotlin, which may later lead to compatibility problems.",
-                  "markdown": "Reports usages of Kotlin `internal` declarations in Java code that is located in a different module.\n\n\nThe `internal` keyword is designed to restrict access to a class, function, or property from other modules.\nDue to JVM limitations, `internal` classes, functions, and properties can still be\naccessed from outside Kotlin, which may later lead to compatibility problems."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "error",
-                  "parameters": {
-                    "ideaSeverity": "ERROR",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Java interop issues",
-                      "index": 55,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "UseWithIndex",
-                "shortDescription": {
-                  "text": "Manually incremented index variable can be replaced with use of 'withIndex()'"
-                },
-                "fullDescription": {
-                  "text": "Reports 'for' loops with a manually incremented index variable. 'for' loops with a manually incremented index variable can be simplified with the 'withIndex()' function. Use withIndex() instead of manual index increment quick-fix can be used to amend the code automatically. Example: 'fun foo(list: List<String>): Int? {\n      var index = 0\n      for (s in list) { <== can be simplified\n          val x = s.length * index\n          index++\n          if (x > 0) return x\n      }\n      return null\n  }' After the quick-fix is applied: 'fun foo(list: List<String>): Int? {\n      for ((index, s) in list.withIndex()) {\n          val x = s.length * index\n          if (x > 0) return x\n      }\n      return null\n  }'",
-                  "markdown": "Reports `for` loops with a manually incremented index variable.\n\n`for` loops with a manually incremented index variable can be simplified with the `withIndex()` function.\n\n**Use withIndex() instead of manual index increment** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n      fun foo(list: List<String>): Int? {\n          var index = 0\n          for (s in list) { <== can be simplified\n              val x = s.length * index\n              index++\n              if (x > 0) return x\n          }\n          return null\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(list: List<String>): Int? {\n          for ((index, s) in list.withIndex()) {\n              val x = s.length * index\n              if (x > 0) return x\n          }\n          return null\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ImplicitThis",
-                "shortDescription": {
-                  "text": "Implicit 'this'"
-                },
-                "fullDescription": {
-                  "text": "Reports usages of implicit this. Example: 'class Foo {\n      fun s() = \"\"\n\n      fun test() {\n          s()\n      }\n  }' The quick fix specifies this explicitly: 'class Foo {\n      fun s() = \"\"\n\n      fun test() {\n          this.s()\n      }\n  }'",
-                  "markdown": "Reports usages of implicit **this** .\n\n**Example:**\n\n\n      class Foo {\n          fun s() = \"\"\n\n          fun test() {\n              s()\n          }\n      }\n\nThe quick fix specifies **this** explicitly:\n\n\n      class Foo {\n          fun s() = \"\"\n\n          fun test() {\n              this.s()\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KotlinCatchMayIgnoreException",
-                "shortDescription": {
-                  "text": "'catch' block may ignore exception"
-                },
-                "fullDescription": {
-                  "text": "Reports 'catch' blocks that are empty or may ignore an exception. While occasionally intended, empty 'catch' blocks may complicate debugging. Also, ignoring a 'catch' parameter might be wrong. The inspection won't report any 'catch' parameters named 'ignore', 'ignored', or '_'. You can use a quick-fix to change the exception name to '_'. Example: 'try {\n    throwingMethod()\n  } catch (ex: IOException) {\n\n  }' After the quick-fix is applied: 'try {\n    throwingMethod()\n  } catch (_: IOException) {\n\n  }' Use the Do not warn when 'catch' block contains a comment option to ignore 'catch' blocks with comments.",
-                  "markdown": "Reports `catch` blocks that are empty or may ignore an exception.\n\nWhile occasionally intended, empty `catch` blocks may complicate debugging.\nAlso, ignoring a `catch` parameter might be wrong.\n\n\nThe inspection won't report any `catch` parameters named `ignore`, `ignored`, or `_`.\n\n\nYou can use a quick-fix to change the exception name to `_`.\n\n**Example:**\n\n\n      try {\n        throwingMethod()\n      } catch (ex: IOException) {\n\n      }\n\nAfter the quick-fix is applied:\n\n\n      try {\n        throwingMethod()\n      } catch (_: IOException) {\n\n      }\n\nUse the **Do not warn when 'catch' block contains a comment** option to ignore `catch` blocks with comments."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "DifferentStdlibGradleVersion",
-                "shortDescription": {
-                  "text": "Kotlin library and Gradle plugin versions are different"
-                },
-                "fullDescription": {
-                  "text": "Reports different Kotlin stdlib and compiler versions. Example: 'dependencies {\n    classpath \"org.jetbrains.kotlin:kotlin-stdlib:0.0.1\"\n  }' To fix the problem change the kotlin stdlib version to match the kotlin compiler version.",
-                  "markdown": "Reports different Kotlin stdlib and compiler versions.\n\n**Example:**\n\n\n      dependencies {\n        classpath \"org.jetbrains.kotlin:kotlin-stdlib:0.0.1\"\n      }\n\nTo fix the problem change the kotlin stdlib version to match the kotlin compiler version."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin",
-                      "index": 1,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "CanBeVal",
-                "shortDescription": {
-                  "text": "Local 'var' is never modified and can be declared as 'val'"
-                },
-                "fullDescription": {
-                  "text": "Reports local variables declared with the 'var' keyword that are never modified. Kotlin encourages to declare practically immutable variables using the 'val' keyword, ensuring that their value will never change. Example: 'fun example() {\n      var primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n      var fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n      print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n  }' A quick-fix replaces the 'var' keyword with 'val': 'fun example() {\n      val primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n      val fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n      print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n  }'",
-                  "markdown": "Reports local variables declared with the `var` keyword that are never modified.\n\nKotlin encourages to declare practically immutable variables using the `val` keyword, ensuring that their value will never change.\n\n**Example:**\n\n\n      fun example() {\n          var primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n          var fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n          print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n      }\n\nA quick-fix replaces the `var` keyword with `val`:\n\n\n      fun example() {\n          val primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n          val fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n          print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceWithIgnoreCaseEquals",
-                "shortDescription": {
-                  "text": "Should be replaced with 'equals(..., ignoreCase = true)'"
-                },
-                "fullDescription": {
-                  "text": "Reports case-insensitive comparisons that can be replaced with 'equals(..., ignoreCase = true)'. By using 'equals()' you don't have to allocate extra strings with 'toLowerCase()' or 'toUpperCase()' to compare strings. The quick-fix replaces the case-insensitive comparison that uses 'toLowerCase()' or 'toUpperCase()' with 'equals(..., ignoreCase = true)'. Note: May change semantics for some locales. Example: 'fun main() {\n      val a = \"KoTliN\"\n      val b = \"KOTLIN\"\n      println(a.toLowerCase() == b.toLowerCase())\n  }' After the quick-fix is applied: 'fun main() {\n      val a = \"KoTliN\"\n      val b = \"KOTLIN\"\n      println(a.equals(b, ignoreCase = true))\n  }'",
-                  "markdown": "Reports case-insensitive comparisons that can be replaced with `equals(..., ignoreCase = true)`.\n\nBy using `equals()` you don't have to allocate extra strings with `toLowerCase()` or `toUpperCase()` to compare strings.\n\nThe quick-fix replaces the case-insensitive comparison that uses `toLowerCase()` or `toUpperCase()` with `equals(..., ignoreCase = true)`.\n\n**Note:** May change semantics for some locales.\n\n**Example:**\n\n\n      fun main() {\n          val a = \"KoTliN\"\n          val b = \"KOTLIN\"\n          println(a.toLowerCase() == b.toLowerCase())\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun main() {\n          val a = \"KoTliN\"\n          val b = \"KOTLIN\"\n          println(a.equals(b, ignoreCase = true))\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceSubstringWithSubstringAfter",
-                "shortDescription": {
-                  "text": "'substring' call should be replaced with 'substringAfter'"
-                },
-                "fullDescription": {
-                  "text": "Reports calls like 's.substring(s.indexOf(x))' that can be replaced with 's.substringAfter(x)'. Using 's.substringAfter(x)' makes your code simpler. The quick-fix replaces the 'substring' call with 'substringAfter'. Example: 'fun foo(s: String) {\n      s.substring(s.indexOf('x'))\n  }' After the quick-fix is applied: 'fun foo(s: String) {\n      s.substringAfter('x')\n  }'",
-                  "markdown": "Reports calls like `s.substring(s.indexOf(x))` that can be replaced with `s.substringAfter(x)`.\n\nUsing `s.substringAfter(x)` makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `substringAfter`.\n\n**Example:**\n\n\n      fun foo(s: String) {\n          s.substring(s.indexOf('x'))\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(s: String) {\n          s.substringAfter('x')\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantCompanionReference",
-                "shortDescription": {
-                  "text": "Redundant 'Companion' reference"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant 'Companion' reference. Example: 'class A {\n      companion object {\n          fun create() = A()\n      }\n  }\n  fun test() {\n      val s = A.Companion.create()\n  }' After the quick-fix is applied: 'class A {\n      companion object {\n          fun create() = A()\n      }\n  }\n  fun test() {\n      val s = A.create()\n  }'",
-                  "markdown": "Reports redundant `Companion` reference.\n\n**Example:**\n\n\n      class A {\n          companion object {\n              fun create() = A()\n          }\n      }\n      fun test() {\n          val s = A.Companion.create()\n      }\n\nAfter the quick-fix is applied:\n\n\n      class A {\n          companion object {\n              fun create() = A()\n          }\n      }\n      fun test() {\n          val s = A.create()\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KDocUnresolvedReference",
-                "shortDescription": {
-                  "text": "Unresolved reference in KDoc"
-                },
-                "fullDescription": {
-                  "text": "Reports unresolved references in KDoc comments. Example: '/**\n   * [unresolvedLink]\n   */\n  fun foo() {}' To fix the problem make the link valid.",
-                  "markdown": "Reports unresolved references in KDoc comments.\n\n**Example:**\n\n\n      /**\n       * [unresolvedLink]\n       */\n      fun foo() {}\n\nTo fix the problem make the link valid."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "NestedLambdaShadowedImplicitParameter",
-                "shortDescription": {
-                  "text": "Nested lambda has shadowed implicit parameter"
-                },
-                "fullDescription": {
-                  "text": "Reports nested lambdas with shadowed implicit parameters. Example: 'fun foo(listOfLists: List<List<String>>) {\n  listOfLists.forEach {\n    it.forEach {\n      println(it)\n    }\n  }\n}' After the quick-fix is applied: 'fun foo(listOfLists: List<List<String>>) {\n  listOfLists.forEach {\n    it.forEach { it1 ->\n      println(it1)\n    }\n  }\n}'",
-                  "markdown": "Reports nested lambdas with shadowed implicit parameters.\n\n**Example:**\n\n\n    fun foo(listOfLists: List<List<String>>) {\n      listOfLists.forEach {\n        it.forEach {\n          println(it)\n        }\n      }\n    }\n\nAfter the quick-fix is applied:\n\n\n    fun foo(listOfLists: List<List<String>>) {\n      listOfLists.forEach {\n        it.forEach { it1 ->\n          println(it1)\n        }\n      }\n    }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantSamConstructor",
-                "shortDescription": {
-                  "text": "Redundant SAM constructor"
-                },
-                "fullDescription": {
-                  "text": "Reports SAM (Single Abstract Method) constructor usages which can be replaced with lambdas. Example: 'fun main() {\n      foo(Runnable { println(\"Hi!\") })\n  }\n\n  fun foo(other: Runnable) {}' After the quick-fix is applied: 'fun main() {\n      foo( { println(\"Hi!\") })\n  }\n\n  fun foo(other: Runnable) {}'",
-                  "markdown": "Reports SAM (Single Abstract Method) constructor usages which can be replaced with lambdas.\n\n**Example:**\n\n\n      fun main() {\n          foo(Runnable { println(\"Hi!\") })\n      }\n\n      fun foo(other: Runnable) {}\n\nAfter the quick-fix is applied:\n\n\n      fun main() {\n          foo( { println(\"Hi!\") })\n      }\n\n      fun foo(other: Runnable) {}\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "InconsistentCommentForJavaParameter",
-                "shortDescription": {
-                  "text": "Inconsistent comment for Java parameter"
-                },
-                "fullDescription": {
-                  "text": "Reports inconsistent parameter name for java method specified in a comment block. Examples: '// Java\n  public class JavaService {\n      public void invoke(String command) {}\n  }' '// Kotlin\n  fun main() {\n      JavaService().invoke(/* name = */ \"fix\")\n  }' The quick fix corrects parameter name in a comment block: 'fun main() {\n      JavaService().invoke(/* command = */ \"fix\")\n  }'",
-                  "markdown": "Reports inconsistent parameter name for **java** method specified in a comment block.\n\n**Examples:**\n\n\n      // Java\n      public class JavaService {\n          public void invoke(String command) {}\n      }\n\n\n      // Kotlin\n      fun main() {\n          JavaService().invoke(/* name = */ \"fix\")\n      }\n\nThe quick fix corrects parameter name in a comment block:\n\n\n      fun main() {\n          JavaService().invoke(/* command = */ \"fix\")\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Naming conventions",
-                      "index": 48,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RemoveRedundantCallsOfConversionMethods",
-                "shortDescription": {
-                  "text": "Redundant call of conversion method"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant calls to conversion methods (for example, 'toString()' on a 'String' or 'toDouble()' on a 'Double'). Use the 'Remove redundant calls of the conversion method' quick-fix to clean up the code.",
-                  "markdown": "Reports redundant calls to conversion methods (for example, `toString()` on a `String` or `toDouble()` on a `Double`).\n\nUse the 'Remove redundant calls of the conversion method' quick-fix to clean up the code."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KotlinThrowableNotThrown",
-                "shortDescription": {
-                  "text": "Throwable not thrown"
-                },
-                "fullDescription": {
-                  "text": "Reports instantiations of 'Throwable' or its subclasses, when the created 'Throwable' is never actually thrown. The reported code indicates mistakes that are hard to catch in tests. Also, this inspection reports method calls that return instances of 'Throwable' or its subclasses, when the resulting 'Throwable' instance is not thrown. Example: 'fun check(condition: Boolean) {\n      if (!condition) /* throw is missing here */ IllegalArgumentException(\"condition is not met\");\n  }\n\n  fun createError() = RuntimeException()\n\n  fun foo() {\n      /* throw is missing here */ createError()\n  }'",
-                  "markdown": "Reports instantiations of `Throwable` or its subclasses, when the created `Throwable` is never actually thrown.\n\nThe reported code indicates mistakes that are hard to catch in tests.\n\n\nAlso, this inspection reports method calls that return instances of `Throwable` or its subclasses,\nwhen the resulting `Throwable` instance is not thrown.\n\n**Example:**\n\n\n      fun check(condition: Boolean) {\n          if (!condition) /* throw is missing here */ IllegalArgumentException(\"condition is not met\");\n      }\n\n      fun createError() = RuntimeException()\n\n      fun foo() {\n          /* throw is missing here */ createError()\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KotlinSealedInheritorsInJava",
-                "shortDescription": {
-                  "text": "Inheritance of Kotlin sealed interface/class from Java"
-                },
-                "fullDescription": {
-                  "text": "Reports attempts to inherit from Kotlin sealed interfaces or classes in Java code. Example: '// Kotlin file: MathExpression.kt\n\nsealed class MathExpression\n\ndata class Const(val number: Double) : MathExpression()\ndata class Sum(val e1: MathExpression, val e2: MathExpression) : MathExpression()' '// Java file: NotANumber.java\n\npublic class NotANumber extends MathExpression {\n}'",
-                  "markdown": "Reports attempts to inherit from Kotlin sealed interfaces or classes in Java code.\n\n**Example:**\n\n\n    // Kotlin file: MathExpression.kt\n\n    sealed class MathExpression\n\n    data class Const(val number: Double) : MathExpression()\n    data class Sum(val e1: MathExpression, val e2: MathExpression) : MathExpression()\n\n\n    // Java file: NotANumber.java\n\n    public class NotANumber extends MathExpression {\n    }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "error",
-                  "parameters": {
-                    "ideaSeverity": "ERROR",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Java interop issues",
-                      "index": 55,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SimplifyNegatedBinaryExpression",
-                "shortDescription": {
-                  "text": "Negated boolean expression can be simplified"
-                },
-                "fullDescription": {
-                  "text": "Reports negated binary expressions that can be simplified. The quick-fix simplifies the binary expression. Example: 'fun test(n: Int) {\n      !(0 == 1)\n  }' After the quick-fix is applied: 'fun test(n: Int) {\n      0 != 1\n  }'",
-                  "markdown": "Reports negated binary expressions that can be simplified.\n\nThe quick-fix simplifies the binary expression.\n\n**Example:**\n\n\n      fun test(n: Int) {\n          !(0 == 1)\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(n: Int) {\n          0 != 1\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "MemberVisibilityCanBePrivate",
-                "shortDescription": {
-                  "text": "Class member can have 'private' visibility"
-                },
-                "fullDescription": {
-                  "text": "Reports declarations that can be made 'private' to follow the encapsulation principle. Example: 'class Service(val url: String) {\n    fun connect(): URLConnection = URL(url).openConnection()\n}' After the quick-fix is applied (considering there are no usages of 'url' outside of 'Service' class): 'class Service(private val url: String) {\n    fun connect(): URLConnection = URL(url).openConnection()\n}'",
-                  "markdown": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n    class Service(val url: String) {\n        fun connect(): URLConnection = URL(url).openConnection()\n    }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n    class Service(private val url: String) {\n        fun connect(): URLConnection = URL(url).openConnection()\n    }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SelfAssignment",
-                "shortDescription": {
-                  "text": "Redundant assignment"
-                },
-                "fullDescription": {
-                  "text": "Reports assignments of a variable to itself. The quick-fix removes the redundant assignment. Example: 'fun test() {\n      var bar = 1\n      bar = bar\n  }' After the quick-fix is applied: 'fun test() {\n      var bar = 1\n  }'",
-                  "markdown": "Reports assignments of a variable to itself.\n\nThe quick-fix removes the redundant assignment.\n\n**Example:**\n\n\n      fun test() {\n          var bar = 1\n          bar = bar\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test() {\n          var bar = 1\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RecursiveEqualsCall",
-                "shortDescription": {
-                  "text": "Recursive equals call"
-                },
-                "fullDescription": {
-                  "text": "Reports recursive 'equals'('==') calls. In Kotlin, '==' compares object values by calling 'equals' method under the hood. '===', on the other hand, compares objects by reference. '===' is commonly used in 'equals' method implementation. But '===' may be mistakenly mixed up with '==' leading to infinite recursion. Example: 'class X {\n      override fun equals(other: Any?): Boolean {\n          if (this == other) return true\n          return false\n      }\n  }' After the quick-fix is applied: 'class X {\n      override fun equals(other: Any?): Boolean {\n          if (this === other) return true\n          return false\n      }\n  }'",
-                  "markdown": "Reports recursive `equals`(`==`) calls.\n\n\nIn Kotlin, `==` compares object values by calling `equals` method under the hood.\n`===`, on the other hand, compares objects by reference.\n\n\n`===` is commonly used in `equals` method implementation.\nBut `===` may be mistakenly mixed up with `==` leading to infinite recursion.\n\n**Example:**\n\n\n      class X {\n          override fun equals(other: Any?): Boolean {\n              if (this == other) return true\n              return false\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      class X {\n          override fun equals(other: Any?): Boolean {\n              if (this === other) return true\n              return false\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ExplicitThis",
-                "shortDescription": {
-                  "text": "Redundant explicit 'this'"
-                },
-                "fullDescription": {
-                  "text": "Reports an explicit 'this' when it can be omitted. Example: 'class C {\n      private val i = 1\n      fun f() = this.i\n  }' The quick-fix removes the redundant 'this': 'class C {\n      private val i = 1\n      fun f() = i\n  }'",
-                  "markdown": "Reports an explicit `this` when it can be omitted.\n\n**Example:**\n\n\n      class C {\n          private val i = 1\n          fun f() = this.i\n      }\n\nThe quick-fix removes the redundant `this`:\n\n\n      class C {\n          private val i = 1\n          fun f() = i\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "NullChecksToSafeCall",
-                "shortDescription": {
-                  "text": "Null-checks can be replaced with safe-calls"
-                },
-                "fullDescription": {
-                  "text": "Reports chained null-checks that can be replaced with safe-calls. Example: 'fun test(my: My?) {\n      if (my != null && my.foo() != null) {}\n  }' After the quick-fix is applied: 'fun test(my: My?) {\n      if (my?.foo() != null) {}\n  }'",
-                  "markdown": "Reports chained null-checks that can be replaced with safe-calls.\n\n**Example:**\n\n\n      fun test(my: My?) {\n          if (my != null && my.foo() != null) {}\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(my: My?) {\n          if (my?.foo() != null) {}\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "UnusedMainParameter",
-                "shortDescription": {
-                  "text": "Main parameter is not necessary"
-                },
-                "fullDescription": {
-                  "text": "Reports 'main' function with an unused single parameter.",
-                  "markdown": "Reports `main` function with an unused single parameter."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "FunctionWithLambdaExpressionBody",
-                "shortDescription": {
-                  "text": "Function with '= { ... }' and inferred return type"
-                },
-                "fullDescription": {
-                  "text": "Reports functions with '= { ... }' and inferred return type. Example: 'fun sum(a: Int, b: Int) = { a + b } // The return type of this function is '() -> Int'.' The quick fix removes braces: 'fun sum(a: Int, b: Int) = a + b'",
-                  "markdown": "Reports functions with `= { ... }` and inferred return type.\n\n**Example:**\n\n\n      fun sum(a: Int, b: Int) = { a + b } // The return type of this function is '() -> Int'.\n\nThe quick fix removes braces:\n\n\n      fun sum(a: Int, b: Int) = a + b\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ArrayInDataClass",
-                "shortDescription": {
-                  "text": "Array property in data class"
-                },
-                "fullDescription": {
-                  "text": "Reports properties with an 'Array' type in a 'data' class without overridden 'equals()' or 'hashCode()'. Array parameters are compared by reference equality, which is likely an unexpected behavior. It is strongly recommended to override 'equals()' and 'hashCode()' in such cases. Example: 'data class Text(val lines: Array<String>)' A quick-fix generates missing 'equals()' and 'hashCode()' implementations: 'data class Text(val lines: Array<String>) {\n      override fun equals(other: Any?): Boolean {\n          if (this === other) return true\n          if (javaClass != other?.javaClass) return false\n\n          other as Text\n\n          if (!lines.contentEquals(other.lines)) return false\n\n          return true\n      }\n\n      override fun hashCode(): Int {\n          return lines.contentHashCode()\n      }\n  }'",
-                  "markdown": "Reports properties with an `Array` type in a `data` class without overridden `equals()` or `hashCode()`.\n\n\nArray parameters are compared by reference equality, which is likely an unexpected behavior.\nIt is strongly recommended to override `equals()` and `hashCode()` in such cases.\n\n**Example:**\n\n\n      data class Text(val lines: Array<String>)\n\nA quick-fix generates missing `equals()` and `hashCode()` implementations:\n\n\n      data class Text(val lines: Array<String>) {\n          override fun equals(other: Any?): Boolean {\n              if (this === other) return true\n              if (javaClass != other?.javaClass) return false\n\n              other as Text\n\n              if (!lines.contentEquals(other.lines)) return false\n\n              return true\n          }\n\n          override fun hashCode(): Int {\n              return lines.contentHashCode()\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ConvertTwoComparisonsToRangeCheck",
-                "shortDescription": {
-                  "text": "Two comparisons should be converted to a range check"
-                },
-                "fullDescription": {
-                  "text": "Reports two consecutive comparisons that can be converted to a range check. Checking against a range makes code simpler by removing test subject duplication. Example: 'fun checkMonth(month: Int): Boolean {\n      return month >= 1 && month <= 12\n  }' A quick-fix replaces the comparison-based check with a range one: 'fun checkMonth(month: Int): Boolean {\n      return month in 1..12\n  }'",
-                  "markdown": "Reports two consecutive comparisons that can be converted to a range check.\n\nChecking against a range makes code simpler by removing test subject duplication.\n\n**Example:**\n\n\n      fun checkMonth(month: Int): Boolean {\n          return month >= 1 && month <= 12\n      }\n\nA quick-fix replaces the comparison-based check with a range one:\n\n\n      fun checkMonth(month: Int): Boolean {\n          return month in 1..12\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "LocalVariableName",
-                "shortDescription": {
-                  "text": "Local variable naming convention"
-                },
-                "fullDescription": {
-                  "text": "Reports local variables that do not follow the naming conventions. You can specify the required pattern in the inspection options. Recommended naming conventions: it has to start with a lowercase letter, use camel case and no underscores. Example: 'fun fibonacciNumber(index: Int): Long = when(index) {\n      0 -> 0\n      else -> {\n          // does not follow naming conventions: contains underscore symbol (`_`)\n          var number_one: Long = 0\n          // does not follow naming conventions: starts with an uppercase letter\n          var NUMBER_TWO: Long = 1\n          // follow naming conventions: starts with a lowercase letter, use camel case and no underscores.\n          var numberThree: Long = number_one + NUMBER_TWO\n\n          for(currentIndex in 2..index) {\n              numberThree = number_one + NUMBER_TWO\n              number_one = NUMBER_TWO\n              NUMBER_TWO = numberThree\n          }\n          numberThree\n      }\n  }'",
-                  "markdown": "Reports local variables that do not follow the naming conventions.\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#function-names): it has to start with a lowercase letter, use camel case and no underscores.\n\n**Example:**\n\n\n      fun fibonacciNumber(index: Int): Long = when(index) {\n          0 -> 0\n          else -> {\n              // does not follow naming conventions: contains underscore symbol (`_`)\n              var number_one: Long = 0\n              // does not follow naming conventions: starts with an uppercase letter\n              var NUMBER_TWO: Long = 1\n              // follow naming conventions: starts with a lowercase letter, use camel case and no underscores.\n              var numberThree: Long = number_one + NUMBER_TWO\n\n              for(currentIndex in 2..index) {\n                  numberThree = number_one + NUMBER_TWO\n                  number_one = NUMBER_TWO\n                  NUMBER_TWO = numberThree\n              }\n              numberThree\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Naming conventions",
-                      "index": 48,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RemoveRedundantQualifierName",
-                "shortDescription": {
-                  "text": "Redundant qualifier name"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant qualifiers (or their parts) on class names, functions, and properties. A fully qualified name is an unambiguous identifier that specifies which object, function, or property a call refers to. In the contexts where the name can be shortened, the inspection informs on the opportunity and the associated 'Remove redundant qualifier name' quick-fix allows amending the code. Examples: 'package my.simple.name\n  import kotlin.Int.Companion.MAX_VALUE\n\n  class Foo\n\n  fun main() {\n      val a = my.simple.name.Foo()    // 'Foo' resides in the declared 'my.simple.name' package, qualifier is redundant\n      val b = kotlin.Int.MAX_VALUE    // Can be replaced with 'MAX_VALUE' since it's imported\n      val c = kotlin.Double.MAX_VALUE // Can be replaced with 'Double.MAX_VALUE' since built-in types are imported automatically\n  }' After the quick-fix is applied: 'package my.simple.name\n  import kotlin.Int.Companion.MAX_VALUE\n\n  class Foo\n\n  fun main() {\n      val a = Foo()\n      val b = MAX_VALUE\n      val c = Double.MAX_VALUE\n  }'",
-                  "markdown": "Reports redundant qualifiers (or their parts) on class names, functions, and properties.\n\n\nA fully qualified name is an unambiguous identifier that specifies which object, function, or property a call refers to.\nIn the contexts where the name can be shortened, the inspection informs on the opportunity and the associated\n'Remove redundant qualifier name' quick-fix allows amending the code.\n\n**Examples:**\n\n\n      package my.simple.name\n      import kotlin.Int.Companion.MAX_VALUE\n\n      class Foo\n\n      fun main() {\n          val a = my.simple.name.Foo()    // 'Foo' resides in the declared 'my.simple.name' package, qualifier is redundant\n          val b = kotlin.Int.MAX_VALUE    // Can be replaced with 'MAX_VALUE' since it's imported\n          val c = kotlin.Double.MAX_VALUE // Can be replaced with 'Double.MAX_VALUE' since built-in types are imported automatically\n      }\n\nAfter the quick-fix is applied:\n\n\n      package my.simple.name\n      import kotlin.Int.Companion.MAX_VALUE\n\n      class Foo\n\n      fun main() {\n          val a = Foo()\n          val b = MAX_VALUE\n          val c = Double.MAX_VALUE\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RemoveCurlyBracesFromTemplate",
-                "shortDescription": {
-                  "text": "Redundant curly braces in string template"
-                },
-                "fullDescription": {
-                  "text": "Reports usages of curly braces in string templates around simple identifiers. Use the 'Remove curly braces' quick-fix to remove the redundant braces. Examples: 'fun redundant() {\n     val x = 4\n     val y = \"${x}\" // <== redundant\n  }\n\n  fun correctUsage() {\n      val x = \"x\"\n      val y = \"${x.length}\" // <== Ok\n  }' After the quick-fix is applied: 'fun redundant() {\n     val x = 4\n     val y = \"$x\"\n  }\n\n  fun correctUsage() {\n      val x = \"x\" <== Updated\n      val y = \"${x.length}\"\n  }'",
-                  "markdown": "Reports usages of curly braces in string templates around simple identifiers.\n\nUse the 'Remove curly braces' quick-fix to remove the redundant braces.\n\n**Examples:**\n\n\n      fun redundant() {\n         val x = 4\n         val y = \"${x}\" // <== redundant\n      }\n\n      fun correctUsage() {\n          val x = \"x\"\n          val y = \"${x.length}\" // <== Ok\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun redundant() {\n         val x = 4\n         val y = \"$x\"\n      }\n\n      fun correctUsage() {\n          val x = \"x\" <== Updated\n          val y = \"${x.length}\"\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceSubstringWithIndexingOperation",
-                "shortDescription": {
-                  "text": "'substring' call should be replaced with indexing operator"
-                },
-                "fullDescription": {
-                  "text": "Reports calls like '\"abc\".substring(0, 1)' that can be replaced with '\"abc\"[0]'. Obtaining the element by index makes your code simpler. The quick-fix replaces the 'substring' call with the indexing operator. Example: 'fun foo() {\n      \"abc\".substring(0, 1)\n  }' After the quick-fix is applied: 'fun foo() {\n      \"abc\"[0]\n  }'",
-                  "markdown": "Reports calls like `\"abc\".substring(0, 1)` that can be replaced with `\"abc\"[0]`.\n\nObtaining the element by index makes your code simpler.\n\nThe quick-fix replaces the `substring` call with the indexing operator.\n\n**Example:**\n\n\n      fun foo() {\n          \"abc\".substring(0, 1)\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo() {\n          \"abc\"[0]\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "MoveLambdaOutsideParentheses",
-                "shortDescription": {
-                  "text": "Lambda argument inside parentheses"
-                },
-                "fullDescription": {
-                  "text": "Reports lambda expressions in parentheses which can be moved outside. Example: 'fun square(a: Int, b: (Int) -> Int) {\n  b(a * a)\n}\n\nfun foo() {\n  square(2, { it })\n}' After the quick-fix is applied: 'fun foo() {\n  square(2){ it }\n}'",
-                  "markdown": "Reports lambda expressions in parentheses which can be moved outside.\n\n**Example:**\n\n\n    fun square(a: Int, b: (Int) -> Int) {\n      b(a * a)\n    }\n\n    fun foo() {\n      square(2, { it })\n    }\n\nAfter the quick-fix is applied:\n\n\n    fun foo() {\n      square(2){ it }\n    }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "OverridingDeprecatedMember",
-                "shortDescription": {
-                  "text": "Overriding deprecated member"
-                },
-                "fullDescription": {
-                  "text": "Reports declarations that inherit from deprecated members. Example: 'open class BaseService {\n  @Deprecated(\"obsolete\", replaceWith = ReplaceWith(\"connection\"))\n  open fun connect() {}\n\n  open fun connection() {}\n} \n\nclass SomeService: BaseService() {\n  override fun connect() {\n    super.connect()\n  }\n}'",
-                  "markdown": "Reports declarations that inherit from deprecated members.\n\n**Example:**\n\n\n    open class BaseService {\n      @Deprecated(\"obsolete\", replaceWith = ReplaceWith(\"connection\"))\n      open fun connect() {}\n\n      open fun connection() {}\n    } \n\n    class SomeService: BaseService() {\n      override fun connect() {\n        super.connect()\n      }\n    }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Other problems",
-                      "index": 145,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ProhibitTypeParametersForLocalVariablesMigration",
-                "shortDescription": {
-                  "text": "Local variable with type parameters"
-                },
-                "fullDescription": {
-                  "text": "Reports local variables with type parameters. A type parameter for a local variable doesn't make sense because it can't be specialized. Example: 'fun main() {\n      val <T> x = \"\"\n  }' After the quick-fix is applied: 'fun main() {\n      val x = \"\"\n  }' This inspection only reports if the Kotlin language level of the project or module is 1.4 or higher.",
-                  "markdown": "Reports local variables with type parameters.\n\nA type parameter for a local variable doesn't make sense because it can't be specialized.\n\n**Example:**\n\n\n      fun main() {\n          val <T> x = \"\"\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun main() {\n          val x = \"\"\n      }\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "error",
-                  "parameters": {
-                    "ideaSeverity": "ERROR",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Migration",
-                      "index": 15,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "TestFunctionName",
-                "shortDescription": {
-                  "text": "Test function naming convention"
-                },
-                "fullDescription": {
-                  "text": "Reports test function names that do not follow the recommended naming conventions.",
-                  "markdown": "Reports test function names that do not follow the [recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#names-for-test-methods)."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Naming conventions",
-                      "index": 48,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RecursivePropertyAccessor",
-                "shortDescription": {
-                  "text": "Recursive property accessor"
-                },
-                "fullDescription": {
-                  "text": "Reports recursive property accessor calls which can end up with a 'StackOverflowError'. Such calls are usually confused with backing field access. Example: 'var counter: Int = 0\n      set(value) {\n          counter = if (value < 0) 0 else value\n      }' After the quick-fix is applied: 'var counter: Int = 0\n      set(value) {\n          field = if (value < 0) 0 else value\n      }'",
-                  "markdown": "Reports recursive property accessor calls which can end up with a `StackOverflowError`.\nSuch calls are usually confused with backing field access.\n\n**Example:**\n\n\n      var counter: Int = 0\n          set(value) {\n              counter = if (value < 0) 0 else value\n          }\n\nAfter the quick-fix is applied:\n\n\n      var counter: Int = 0\n          set(value) {\n              field = if (value < 0) 0 else value\n          }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantUnitExpression",
-                "shortDescription": {
-                  "text": "Redundant 'Unit'"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant 'Unit' expressions. 'Unit' in Kotlin can be used as the return type of functions that do not return anything meaningful. The 'Unit' type has only one possible value, which is the 'Unit' object. Examples: 'fun redundantA(): Unit {\n      return Unit // redundant, 'Unit' is returned by default and matches the expected return type\n  }\n\n  fun requiredA(condition: Boolean): Any {\n      if (condition) return \"hello\"\n      return Unit // explicit 'Unit' is required since the expected type is 'Any'\n  }\n\n  fun redundantB(condition: Boolean): Any = if (condition) {\n      fun ancillary(): Int = 1\n      println(\"${ancillary()}\")\n      Unit // redundant since the last expression is already of type 'Unit'\n  } else {\n      println(\"else\")\n  }\n\n  fun requiredB(condition: Boolean): Any = if (condition) {\n      1024\n      Unit // required, otherwise '1024' (Int) would be the return value\n  } else {\n      println(\"else\")\n  }'",
-                  "markdown": "Reports redundant `Unit` expressions.\n\n\n`Unit` in Kotlin can be used as the return type of functions that do not return anything meaningful.\nThe `Unit` type has only one possible value, which is the `Unit` object.\n\n**Examples:**\n\n\n      fun redundantA(): Unit {\n          return Unit // redundant, 'Unit' is returned by default and matches the expected return type\n      }\n\n      fun requiredA(condition: Boolean): Any {\n          if (condition) return \"hello\"\n          return Unit // explicit 'Unit' is required since the expected type is 'Any'\n      }\n\n      fun redundantB(condition: Boolean): Any = if (condition) {\n          fun ancillary(): Int = 1\n          println(\"${ancillary()}\")\n          Unit // redundant since the last expression is already of type 'Unit'\n      } else {\n          println(\"else\")\n      }\n\n      fun requiredB(condition: Boolean): Any = if (condition) {\n          1024\n          Unit // required, otherwise '1024' (Int) would be the return value\n      } else {\n          println(\"else\")\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "PlatformExtensionReceiverOfInline",
-                "shortDescription": {
-                  "text": "'inline fun' with nullable receiver until Kotlin 1.2"
-                },
-                "fullDescription": {
-                  "text": "Reports potentially unsafe calls of inline functions with flexible nullable (platform type with unknown nullability) extension receivers. Before Kotlin 1.2, calls of 'inline fun' with flexible nullable extension receiver (a platform type with an unknown nullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode (see KT-12899). It's recommended to add an explicit '!!' you want an exception to be thrown, or consider changing the function's receiver type to nullable if it should work without exceptions. Example: 'inline fun String.removePrefix(prefix: String): String {\n      return this.substring(prefix.length)\n  }\n\n  fun main() {\n      // `System.getProperty` returns not denotable `String!` type\n      val property = System.getProperty(\"user.dir\")\n      println(property.removePrefix(\"/home\"))\n  }' After the quick-fix is applied: 'inline fun String.removePrefix(prefix: String): String {\n      return this.substring(prefix.length)\n  }\n\n  fun main() {\n      // `System.getProperty` returns not denotable `String!` type\n      val property = System.getProperty(\"user.dir\")\n      println(property!!.removePrefix(\"/home\"))\n  }' This inspection only reports if the Kotlin language level of the project or module is lower than 1.2.",
-                  "markdown": "Reports potentially unsafe calls of inline functions with flexible nullable (platform type with unknown nullability) extension receivers.\n\n\nBefore Kotlin 1.2, calls of `inline fun` with flexible nullable extension receiver (a platform type with an unknown\nnullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode\n(see [KT-12899](https://youtrack.jetbrains.com/issue/KT-12899)).\n\n\nIt's recommended to add an explicit `!!` you want an exception to be thrown,\nor consider changing the function's receiver type to nullable if it should work without exceptions.\n\n**Example:**\n\n\n      inline fun String.removePrefix(prefix: String): String {\n          return this.substring(prefix.length)\n      }\n\n      fun main() {\n          // `System.getProperty` returns not denotable `String!` type\n          val property = System.getProperty(\"user.dir\")\n          println(property.removePrefix(\"/home\"))\n      }\n\nAfter the quick-fix is applied:\n\n\n      inline fun String.removePrefix(prefix: String): String {\n          return this.substring(prefix.length)\n      }\n\n      fun main() {\n          // `System.getProperty` returns not denotable `String!` type\n          val property = System.getProperty(\"user.dir\")\n          println(property!!.removePrefix(\"/home\"))\n      }\n\nThis inspection only reports if the Kotlin language level of the project or module is lower than 1.2."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Java interop issues",
-                      "index": 55,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SuspiciousEqualsCombination",
-                "shortDescription": {
-                  "text": "Suspicious combination of == and ==="
-                },
-                "fullDescription": {
-                  "text": "Reports '==' and '===' comparisons that are both used on the same variable within a single expression. Due to similarities '==' and '===' could be mixed without notice, and it takes a close look to check that '==' used instead of '===' Example: 'if (type === FIELD || type == METHOD || type == ANNOTATION_METHOD || // Note that \"==\" is used incorrectly\n      type === LAMBDA_EXPRESSION) return'",
-                  "markdown": "Reports `==` and `===` comparisons that are both used on the same variable within a single expression.\n\nDue to similarities `==` and `===` could be mixed without notice, and\nit takes a close look to check that `==` used instead of `===`\n\nExample:\n\n\n      if (type === FIELD || type == METHOD || type == ANNOTATION_METHOD || // Note that \"==\" is used incorrectly\n          type === LAMBDA_EXPRESSION) return\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "UnusedDataClassCopyResult",
-                "shortDescription": {
-                  "text": "Unused result of data class copy"
-                },
-                "fullDescription": {
-                  "text": "Reports calls to data class 'copy' function without using its result.",
-                  "markdown": "Reports calls to data class `copy` function without using its result."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantElseInIf",
-                "shortDescription": {
-                  "text": "Redundant 'else' in 'if'"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant 'else' in 'if' with 'return' Example: 'fun foo(arg: Boolean): Int {\n      if (arg) return 0\n      else { // This else is redundant, code in braces could be just shifted left\n          someCode()\n      }\n  }' After the quick-fix is applied: 'fun foo(arg: Boolean): Int {\n      if (arg) return 0\n      someCode()\n  }'",
-                  "markdown": "Reports redundant `else` in `if` with `return`\n\n**Example:**\n\n\n      fun foo(arg: Boolean): Int {\n          if (arg) return 0\n          else { // This else is redundant, code in braces could be just shifted left\n              someCode()\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(arg: Boolean): Int {\n          if (arg) return 0\n          someCode()\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplacePutWithAssignment",
-                "shortDescription": {
-                  "text": "'map.put()' can be converted to assignment"
-                },
-                "fullDescription": {
-                  "text": "Reports 'map.put' function calls that can be replaced with indexing operator ('[]'). Using syntactic sugar makes your code simpler. The quick-fix replaces 'put' call with the assignment. Example: 'fun foo(map: MutableMap<Int, String>) {\n      map.put(42, \"foo\")\n  }' After the quick-fix is applied: 'fun foo(map: MutableMap<Int, String>) {\n      map[42] = \"foo\"\n  }'",
-                  "markdown": "Reports `map.put` function calls that can be replaced with indexing operator (`[]`).\n\nUsing syntactic sugar makes your code simpler.\n\nThe quick-fix replaces `put` call with the assignment.\n\n**Example:**\n\n\n      fun foo(map: MutableMap<Int, String>) {\n          map.put(42, \"foo\")\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(map: MutableMap<Int, String>) {\n          map[42] = \"foo\"\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KotlinDoubleNegation",
-                "shortDescription": {
-                  "text": "Redundant double negation"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant double negations. Example: 'val truth = !!true'",
-                  "markdown": "Reports redundant double negations.\n\n**Example:**\n\n      val truth = !!true\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "FunctionName",
-                "shortDescription": {
-                  "text": "Function naming convention"
-                },
-                "fullDescription": {
-                  "text": "Reports function names that do not follow the recommended naming conventions. Example: 'fun Foo() {}' To fix the problem change the name of the function to match the recommended naming conventions.",
-                  "markdown": "Reports function names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n      fun Foo() {}\n\nTo fix the problem change the name of the function to match the recommended naming conventions."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Naming conventions",
-                      "index": 48,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "DifferentKotlinMavenVersion",
-                "shortDescription": {
-                  "text": "Maven and IDE plugins versions are different"
-                },
-                "fullDescription": {
-                  "text": "Reports the Maven plugin version of the Kotlin compiler that is different from the one that is used in the IDE plugin. This inconsistency may lead to different error reporting behavior in the IDE and the compiler",
-                  "markdown": "Reports the Maven plugin version of the Kotlin compiler that is different from the one that is used in the IDE plugin.\n\nThis inconsistency may lead to different error reporting behavior in the IDE and the compiler"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin",
-                      "index": 1,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantUnitReturnType",
-                "shortDescription": {
-                  "text": "Redundant 'Unit' return type"
-                },
-                "fullDescription": {
-                  "text": "Reports a redundant 'Unit' return type which can be omitted.",
-                  "markdown": "Reports a redundant `Unit` return type which can be omitted."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceRangeToWithUntil",
-                "shortDescription": {
-                  "text": "'rangeTo' or the '..' call should be replaced with 'until'"
-                },
-                "fullDescription": {
-                  "text": "Reports calls to 'rangeTo' or the '..' operator instead of calls to 'until'. Using corresponding functions makes your code simpler. The quick-fix replaces 'rangeTo' or the '..' call with 'until'. Example: 'fun foo(a: Int) {\n      for (i in 0..a - 1) {\n\n      }\n  }' After the quick-fix is applied: 'fun foo(a: Int) {\n      for (i in 0 until a) {\n\n      }\n  }'",
-                  "markdown": "Reports calls to `rangeTo` or the `..` operator instead of calls to `until`.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces `rangeTo` or the `..` call with `until`.\n\n**Example:**\n\n\n      fun foo(a: Int) {\n          for (i in 0..a - 1) {\n\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(a: Int) {\n          for (i in 0 until a) {\n\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "UnusedEquals",
-                "shortDescription": {
-                  "text": "Unused equals expression"
-                },
-                "fullDescription": {
-                  "text": "Reports unused 'equals'('==') expressions.",
-                  "markdown": "Reports unused `equals`(`==`) expressions."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "UnclearPrecedenceOfBinaryExpression",
-                "shortDescription": {
-                  "text": "Multiple operators with different precedence"
-                },
-                "fullDescription": {
-                  "text": "Reports binary expressions that consist of different operators without parentheses. Such expressions can be less readable due to different precedence rules of operators. Example:   fun foo(b: Boolean?, i: Int?) {\n      val x = b ?: i == null // evaluated as `(b ?: i) == null`\n      val y = i ?: 0 + 1 // evaluated as `i ?: (0 + 1)`\n  }",
-                  "markdown": "Reports binary expressions that consist of different operators without parentheses.\n\nSuch expressions can be less readable due to different [precedence rules](https://kotlinlang.org/docs/reference/grammar.html#expressions) of operators.\n\nExample:\n\n```\n  fun foo(b: Boolean?, i: Int?) {\n      val x = b ?: i == null // evaluated as `(b ?: i) == null`\n      val y = i ?: 0 + 1 // evaluated as `i ?: (0 + 1)`\n  }\n```"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "UnusedLambdaExpressionBody",
-                "shortDescription": {
-                  "text": "Unused return value of a function with lambda expression body"
-                },
-                "fullDescription": {
-                  "text": "Reports calls with an unused return value when the called function returns a lambda from an expression body. If there is '=' between function header and body block, code from the function will not be evaluated which can lead to incorrect behavior. Remove = token from function declaration can be used to amend the code automatically. Example: 'fun printHello() = { println(\"Hello\") }\n\n  fun main() {\n      printHello() // This function doesn't print anything\n  }' After the quick-fix is applied: 'fun printHello() { println(\"Hello\") }\n\n  fun main() {\n      printHello()\n  }'",
-                  "markdown": "Reports calls with an unused return value when the called function returns a lambda from an expression body.\n\n\nIf there is `=` between function header and body block,\ncode from the function will not be evaluated which can lead to incorrect behavior.\n\n**Remove = token from function declaration** can be used to amend the code automatically.\n\nExample:\n\n\n      fun printHello() = { println(\"Hello\") }\n\n      fun main() {\n          printHello() // This function doesn't print anything\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun printHello() { println(\"Hello\") }\n\n      fun main() {\n          printHello()\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ConvertLambdaToReference",
-                "shortDescription": {
-                  "text": "Can be replaced with function reference"
-                },
-                "fullDescription": {
-                  "text": "Reports function literal expressions that can be replaced with function references. Replacing lambdas with function references often makes code look more concise and understandable. Example: 'fun Int.isEven() = this % 2 == 0\n\n  fun example() {\n      val numbers = listOf(1, 2, 4, 7, 9, 10)\n      val evenNumbers = numbers.filter { it.isEven() }\n  }' After the quick-fix is applied: 'fun Int.isEven() = this % 2 == 0\n\n  fun example() {\n      val numbers = listOf(1, 2, 4, 7, 9, 10)\n      val evenNumbers = numbers.filter(Int::isEven)\n  }'",
-                  "markdown": "Reports function literal expressions that can be replaced with function references.\n\nReplacing lambdas with function references often makes code look more concise and understandable.\n\n**Example:**\n\n\n      fun Int.isEven() = this % 2 == 0\n\n      fun example() {\n          val numbers = listOf(1, 2, 4, 7, 9, 10)\n          val evenNumbers = numbers.filter { it.isEven() }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun Int.isEven() = this % 2 == 0\n\n      fun example() {\n          val numbers = listOf(1, 2, 4, 7, 9, 10)\n          val evenNumbers = numbers.filter(Int::isEven)\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantSetter",
-                "shortDescription": {
-                  "text": "Redundant property setter"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant property setters. Setter is considered to be redundant in one of the following cases: Setter has no body. Accessor visibility isn't changed, declaration isn't 'external' and has no annotations. 'var myPropWithRedundantSetter: Int = 0\n      set // redundant\n\n  var myPropA: Int = 0\n      private set // OK - property visibility is changed to private\n\n  var myPropB: Int = 0\n      external set // OK - implemented not in Kotlin (external)\n\n  var myPropC: Int = 0\n      @Inject set // OK - accessor is annotated' Setter body is a block with a single statement assigning the parameter to the backing field. 'var prop: Int = 0\n      set(value) { // redundant\n          field = value\n      }'",
-                  "markdown": "Reports redundant property setters.\n\n\nSetter is considered to be redundant in one of the following cases:\n\n1. Setter has no body. Accessor visibility isn't changed, declaration isn't `external` and has no annotations.\n\n\n         var myPropWithRedundantSetter: Int = 0\n             set // redundant\n\n         var myPropA: Int = 0\n             private set // OK - property visibility is changed to private\n\n         var myPropB: Int = 0\n             external set // OK - implemented not in Kotlin (external)\n\n         var myPropC: Int = 0\n             @Inject set // OK - accessor is annotated\n               \n2. Setter body is a block with a single statement assigning the parameter to the backing field.\n\n\n         var prop: Int = 0\n             set(value) { // redundant\n                 field = value\n             }\n              \n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "CanSealedSubClassBeObject",
-                "shortDescription": {
-                  "text": "Sealed sub-class without state and overridden equals"
-                },
-                "fullDescription": {
-                  "text": "Reports direct inheritors of 'sealed' classes that have no state and overridden 'equals()' method. It's highly recommended to override 'equals()' to provide comparison stability, or convert the 'class' to an 'object' to reach the same effect. Example: 'sealed class Receiver {\n      class Everyone : Receiver()\n      class User(val id: Int) : Receiver()\n  }' A quick-fix converts a 'class' into an 'object': 'sealed class Receiver {\n      object Everyone : Receiver()\n      class User(val id: Int) : Receiver()\n  }'",
-                  "markdown": "Reports direct inheritors of `sealed` classes that have no state and overridden `equals()` method.\n\nIt's highly recommended to override `equals()` to provide comparison stability, or convert the `class` to an `object` to reach the same effect.\n\n**Example:**\n\n\n      sealed class Receiver {\n          class Everyone : Receiver()\n          class User(val id: Int) : Receiver()\n      }\n\nA quick-fix converts a `class` into an `object`:\n\n\n      sealed class Receiver {\n          object Everyone : Receiver()\n          class User(val id: Int) : Receiver()\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "PropertyName",
-                "shortDescription": {
-                  "text": "Property naming convention"
-                },
-                "fullDescription": {
-                  "text": "Reports property names that do not follow the recommended naming conventions. Consistent naming allows for easier code reading and understanding. According to the Kotlin official style guide, property names should start with a lowercase letter and use camel case. It is possible to introduce other naming rules by changing the \"Pattern\" regular expression. Example: 'val My_Cool_Property = \"\"' A quick-fix renames the class according to the Kotlin naming conventions: 'val myCoolProperty = \"\"'",
-                  "markdown": "Reports property names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#naming-rules),\nproperty names should start with a lowercase letter and use camel case.\n\nIt is possible to introduce other naming rules by changing the \"Pattern\" regular expression.\n\n**Example:**\n\n\n      val My_Cool_Property = \"\"\n\nA quick-fix renames the class according to the Kotlin naming conventions:\n\n\n      val myCoolProperty = \"\"\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Naming conventions",
-                      "index": 48,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KotlinMavenPluginPhase",
-                "shortDescription": {
-                  "text": "Kotlin Maven Plugin misconfigured"
-                },
-                "fullDescription": {
-                  "text": "Reports kotlin-maven-plugin configuration issues",
-                  "markdown": "Reports kotlin-maven-plugin configuration issues"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin",
-                      "index": 1,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ConvertToStringTemplate",
-                "shortDescription": {
-                  "text": "String concatenation that can be converted to string template"
-                },
-                "fullDescription": {
-                  "text": "Reports string concatenation that can be converted to a string template. Using string templates is recommended as it makes code easier to read. Example: 'fun example() {\n      val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n      for ((country, capital) in capitals) {\n          print(capital + \" is a capital of \" + country)\n      }\n  }' After the quick-fix is applied: 'fun example() {\n      val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n      for ((country, capital) in capitals) {\n          print(\"$capital is a capital of $country\")\n      }\n  }'",
-                  "markdown": "Reports string concatenation that can be converted to a string template.\n\nUsing string templates is recommended as it makes code easier to read.\n\n**Example:**\n\n\n      fun example() {\n          val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n          for ((country, capital) in capitals) {\n              print(capital + \" is a capital of \" + country)\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun example() {\n          val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n          for ((country, capital) in capitals) {\n              print(\"$capital is a capital of $country\")\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SimplifiableCall",
-                "shortDescription": {
-                  "text": "Library function call could be simplified"
-                },
-                "fullDescription": {
-                  "text": "Reports library function calls which could be replaced by simplified one. Using corresponding functions makes your code simpler. The quick-fix replaces the function calls with another one. Example: 'fun test(list: List<Any>) {\n      list.filter { it is String }\n  }' After the quick-fix is applied: 'fun test(list: List<Any>) {\n      list.filterIsInstance<String>()\n  }'",
-                  "markdown": "Reports library function calls which could be replaced by simplified one.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the function calls with another one.\n\n**Example:**\n\n\n      fun test(list: List<Any>) {\n          list.filter { it is String }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(list: List<Any>) {\n          list.filterIsInstance<String>()\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ObjectLiteralToLambda",
-                "shortDescription": {
-                  "text": "Object literal can be converted to lambda"
-                },
-                "fullDescription": {
-                  "text": "Reports anonymous object literals implementing a Java interface with a single abstract method that can be converted into a call with a lambda expression. Example: 'class SomeService {\n  val threadPool = Executors.newCachedThreadPool()\n    \n  fun foo() {\n    threadPool.submit(object : Runnable {\n      override fun run() {\n        println(\"hello\")\n      }\n    })\n  }\n}' After the quick-fix is applied: 'fun foo() {\n    threadPool.submit { println(\"hello\") }\n  }'",
-                  "markdown": "Reports anonymous object literals implementing a Java interface with a single abstract method that can be converted into a call with a lambda expression.\n\n**Example:**\n\n\n    class SomeService {\n      val threadPool = Executors.newCachedThreadPool()\n        \n      fun foo() {\n        threadPool.submit(object : Runnable {\n          override fun run() {\n            println(\"hello\")\n          }\n        })\n      }\n    }\n\nAfter the quick-fix is applied:\n\n\n      fun foo() {\n        threadPool.submit { println(\"hello\") }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantLambdaOrAnonymousFunction",
-                "shortDescription": {
-                  "text": "Redundant creation of lambda or anonymous function"
-                },
-                "fullDescription": {
-                  "text": "Reports lambdas or anonymous functions that are created and used immediately. 'fun test() {\n      ({ println() })() // redundant\n      (fun() { println() })() // redundant\n  }'",
-                  "markdown": "Reports lambdas or anonymous functions that are created and used immediately.\n\n\n      fun test() {\n          ({ println() })() // redundant\n          (fun() { println() })() // redundant\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "BooleanLiteralArgument",
-                "shortDescription": {
-                  "text": "Boolean literal argument without parameter name"
-                },
-                "fullDescription": {
-                  "text": "Reports call arguments with 'Boolean' type without explicit parameter names specified. When multiple boolean literals are passed sequentially, it's easy to forget parameter ordering that could lead to mistakes. Explicit parameter names allow for easier code reading and understanding. Example: 'fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n  fun usage() {\n      check(true, false, true) // What does this mean?\n  }' A quick-fix adds missing parameter names: 'fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n  fun usage() {\n      check(checkName = true, checkAddress = false, checkPhone = true)\n  }'",
-                  "markdown": "Reports call arguments with `Boolean` type without explicit parameter names specified.\n\n\nWhen multiple boolean literals are passed sequentially, it's easy to forget parameter ordering that could lead to mistakes.\nExplicit parameter names allow for easier code reading and understanding.\n\n**Example:**\n\n\n      fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n      fun usage() {\n          check(true, false, true) // What does this mean?\n      }\n\nA quick-fix adds missing parameter names:\n\n\n      fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n      fun usage() {\n          check(checkName = true, checkAddress = false, checkPhone = true)\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ConvertArgumentToSet",
-                "shortDescription": {
-                  "text": "Argument could be converted to 'Set' to improve performance"
-                },
-                "fullDescription": {
-                  "text": "Detects the function calls that could work faster with an argument converted to 'Set'. Operations like 'minus' or 'intersect' are more effective when their argument is a set. An explicit conversion of an 'Iterable<T>' or an 'Array<T>' into a 'Set<T>' can often make code more effective. The quick-fix adds an explicit conversion to the function call. Example: 'fun <T> f(a: Iterable<T>, b: Iterable<T>): Int =\n      a.intersect(b).size' After the quick-fix is applied: 'fun <T> f(a: Iterable<T>, b: Iterable<T>): Int =\n      a.intersect(b.toSet()).size'",
-                  "markdown": "Detects the function calls that could work faster with an argument converted to `Set`.\n\n\nOperations like 'minus' or 'intersect' are more effective when their argument is a set.\nAn explicit conversion of an `Iterable<T>` or an `Array<T>`\ninto a `Set<T>` can often make code more effective.\n\n\nThe quick-fix adds an explicit conversion to the function call.\n\n**Example:**\n\n\n      fun <T> f(a: Iterable<T>, b: Iterable<T>): Int =\n          a.intersect(b).size\n\nAfter the quick-fix is applied:\n\n\n      fun <T> f(a: Iterable<T>, b: Iterable<T>): Int =\n          a.intersect(b.toSet()).size\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Other problems",
-                      "index": 145,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceGuardClauseWithFunctionCall",
-                "shortDescription": {
-                  "text": "Guard clause can be replaced with Kotlin's function call"
-                },
-                "fullDescription": {
-                  "text": "Reports guard clauses that can be replaced with a function call. Example: 'fun test(foo: Int?) {\n      if (foo == null) throw IllegalArgumentException(\"foo\") // replaceable clause\n  }' After the quick-fix is applied: 'fun test(foo: Int?) {\n      checkNotNull(foo)\n  }'",
-                  "markdown": "Reports guard clauses that can be replaced with a function call.\n\n**Example:**\n\n      fun test(foo: Int?) {\n          if (foo == null) throw IllegalArgumentException(\"foo\") // replaceable clause\n      }\n\nAfter the quick-fix is applied:\n\n      fun test(foo: Int?) {\n          checkNotNull(foo)\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceToStringWithStringTemplate",
-                "shortDescription": {
-                  "text": "Call of 'toString' could be replaced with string template"
-                },
-                "fullDescription": {
-                  "text": "Reports 'toString' function calls that can be replaced with a string template. Using string templates makes your code simpler. The quick-fix replaces 'toString' with a string template. Example: 'fun test(): String {\n      val x = 1\n      return x.toString()\n  }' After the quick-fix is applied: 'fun test(): String {\n      val x = 1\n      return \"$x\"\n  }'",
-                  "markdown": "Reports `toString` function calls that can be replaced with a string template.\n\nUsing string templates makes your code simpler.\n\nThe quick-fix replaces `toString` with a string template.\n\n**Example:**\n\n\n      fun test(): String {\n          val x = 1\n          return x.toString()\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(): String {\n          val x = 1\n          return \"$x\"\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ProtectedInFinal",
-                "shortDescription": {
-                  "text": "'protected' visibility is effectively 'private' in a final class"
-                },
-                "fullDescription": {
-                  "text": "Reports 'protected' visibility used inside of a 'final' class. In such cases 'protected' members are accessible only in the class itself, so they are effectively 'private'. Example: 'class FinalClass {\n      protected fun foo() {}\n  }' After the quick-fix is applied: 'class FinalClass {\n      private fun foo() {}\n  }'",
-                  "markdown": "Reports `protected` visibility used inside of a `final` class. In such cases `protected` members are accessible only in the class itself, so they are effectively `private`.\n\n**Example:**\n\n\n      class FinalClass {\n          protected fun foo() {}\n      }\n\nAfter the quick-fix is applied:\n\n\n      class FinalClass {\n          private fun foo() {}\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceRangeStartEndInclusiveWithFirstLast",
-                "shortDescription": {
-                  "text": "Boxed properties should be replaced with unboxed"
-                },
-                "fullDescription": {
-                  "text": "Reports boxed 'Range.start' and 'Range.endInclusive' properties. These properties can be replaced with unboxed 'first' and 'last' properties to avoid redundant calls. The quick-fix replaces 'start' and 'endInclusive' properties with the corresponding 'first' and 'last'. Example: 'fun foo(range: CharRange) {\n      val lastElement = range.endInclusive\n  }' After the quick-fix is applied: 'fun foo(range: CharRange) {\n      val lastElement = range.last\n  }'",
-                  "markdown": "Reports **boxed** `Range.start` and `Range.endInclusive` properties.\n\nThese properties can be replaced with **unboxed** `first` and `last` properties to avoid redundant calls.\n\nThe quick-fix replaces `start` and `endInclusive` properties with the corresponding `first` and `last`.\n\n**Example:**\n\n\n      fun foo(range: CharRange) {\n          val lastElement = range.endInclusive\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(range: CharRange) {\n          val lastElement = range.last\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceSizeCheckWithIsNotEmpty",
-                "shortDescription": {
-                  "text": "Size check can be replaced with 'isNotEmpty()'"
-                },
-                "fullDescription": {
-                  "text": "Reports size checks of 'Collections/Array/String' that should be replaced with 'isNotEmpty()'. Using 'isNotEmpty()' makes your code simpler. The quick-fix replaces the size check with 'isNotEmpty()'. Example: 'fun foo() {\n      val arrayOf = arrayOf(1, 2, 3)\n      arrayOf.size > 0\n  }' After the quick-fix is applied: 'fun foo() {\n      val arrayOf = arrayOf(1, 2, 3)\n      arrayOf.isNotEmpty()\n  }'",
-                  "markdown": "Reports size checks of `Collections/Array/String` that should be replaced with `isNotEmpty()`.\n\nUsing `isNotEmpty()` makes your code simpler.\n\nThe quick-fix replaces the size check with `isNotEmpty()`.\n\n**Example:**\n\n\n      fun foo() {\n          val arrayOf = arrayOf(1, 2, 3)\n          arrayOf.size > 0\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo() {\n          val arrayOf = arrayOf(1, 2, 3)\n          arrayOf.isNotEmpty()\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantSemicolon",
-                "shortDescription": {
-                  "text": "Redundant semicolon"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant semicolons (';') that can be safely removed. Kotlin does not require a semicolon at the end of each statement or expression. A quick-fix is suggested to remove redundant semicolons. Example: 'val myMap = mapOf(\"one\" to 1, \"two\" to 2);\n  myMap.forEach { (key, value) ->  print(\"$key -> $value\")};' After the quick-fix is applied: 'val myMap = mapOf(\"one\" to 1, \"two\" to 2)\n  myMap.forEach { (key, value) ->  print(\"$key -> $value\")}' There are two cases though where a semicolon is required: Several statements placed on a single line need to be separated with semicolons: 'map.forEach { val (key, value) = it; println(\"$key -> $value\") }' 'enum' classes that also declare properties or functions, require a semicolon after the list of enum constants: 'enum class Mode {\n      SILENT, VERBOSE;\n\n      fun isSilent(): Boolean = this == SILENT\n  }'",
-                  "markdown": "Reports redundant semicolons (`;`) that can be safely removed.\n\n\nKotlin does not require a semicolon at the end of each statement or expression.\nA quick-fix is suggested to remove redundant semicolons.\n\n**Example:**\n\n\n      val myMap = mapOf(\"one\" to 1, \"two\" to 2);\n      myMap.forEach { (key, value) ->  print(\"$key -> $value\")};\n\nAfter the quick-fix is applied:\n\n\n      val myMap = mapOf(\"one\" to 1, \"two\" to 2)\n      myMap.forEach { (key, value) ->  print(\"$key -> $value\")}\n\nThere are two cases though where a semicolon is required:\n\n1. Several statements placed on a single line need to be separated with semicolons:\n\n\n         map.forEach { val (key, value) = it; println(\"$key -> $value\") }\n\n2. `enum` classes that also declare properties or functions, require a semicolon after the list of enum constants:\n\n\n         enum class Mode {\n             SILENT, VERBOSE;\n\n             fun isSilent(): Boolean = this == SILENT\n         }\n               \n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "IntroduceWhenSubject",
-                "shortDescription": {
-                  "text": "'when' that can be simplified by introducing an argument"
-                },
-                "fullDescription": {
-                  "text": "Reports a 'when' expression that can be simplified by introducing a subject argument. Example: 'fun test(obj: Any): String {\n      return when {\n          obj is String -> \"string\"\n          obj is Int -> \"int\"\n          else -> \"unknown\"\n      }\n  }' The quick fix introduces a subject argument: 'fun test(obj: Any): String {\n      return when (obj) {\n          is String -> \"string\"\n          is Int -> \"int\"\n          else -> \"unknown\"\n      }\n  }'",
-                  "markdown": "Reports a `when` expression that can be simplified by introducing a subject argument.\n\n**Example:**\n\n\n      fun test(obj: Any): String {\n          return when {\n              obj is String -> \"string\"\n              obj is Int -> \"int\"\n              else -> \"unknown\"\n          }\n      }\n\nThe quick fix introduces a subject argument:\n\n\n      fun test(obj: Any): String {\n          return when (obj) {\n              is String -> \"string\"\n              is Int -> \"int\"\n              else -> \"unknown\"\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "DeprecatedCallableAddReplaceWith",
-                "shortDescription": {
-                  "text": "@Deprecated annotation without 'replaceWith' argument"
-                },
-                "fullDescription": {
-                  "text": "Reports deprecated functions and properties that do not have the 'kotlin.ReplaceWith' argument in its 'kotlin.deprecated' annotation and suggests to add one based on their body. Kotlin provides the 'ReplaceWith' argument to replace deprecated declarations automatically. It is recommended to use the argument to fix deprecation issues in code. Example: '@Deprecated(\"Use refined() instead.\")\n  fun deprecated() = refined()\n\n  fun refined() = 42' A quick-fix adds the 'ReplaceWith()' argument: '@Deprecated(\"Use refined() instead.\", ReplaceWith(\"refined()\"))\n  fun deprecated() = refined()\n\n  fun refined() = 42'",
-                  "markdown": "Reports deprecated functions and properties that do not have the `kotlin.ReplaceWith` argument in its `kotlin.deprecated` annotation and suggests to add one based on their body.\n\n\nKotlin provides the `ReplaceWith` argument to replace deprecated declarations automatically.\nIt is recommended to use the argument to fix deprecation issues in code.\n\n**Example:**\n\n\n      @Deprecated(\"Use refined() instead.\")\n      fun deprecated() = refined()\n\n      fun refined() = 42\n\nA quick-fix adds the `ReplaceWith()` argument:\n\n\n      @Deprecated(\"Use refined() instead.\", ReplaceWith(\"refined()\"))\n      fun deprecated() = refined()\n\n      fun refined() = 42\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Other problems",
-                      "index": 145,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ComplexRedundantLet",
-                "shortDescription": {
-                  "text": "Redundant argument-based 'let' call"
-                },
-                "fullDescription": {
-                  "text": "Reports a redundant argument-based 'let' call. 'let' is redundant when the lambda parameter is only used as a qualifier in a call expression. If you need to give a name to the qualifying expression, declare a local variable. Example: 'fun splitNumbers() {\n      \"1,2,3\".let { it.split(',') }\n  }' A quick-fix removes the extra 'let()' call: 'fun example() {\n      \"1,2,3\".split(',')\n  }' Alternative: 'fun splitNumbers() {\n      val numbers = \"1,2,3\"\n      numbers.split(',')\n  }'",
-                  "markdown": "Reports a redundant argument-based `let` call.\n\n`let` is redundant when the lambda parameter is only used as a qualifier in a call expression.\n\nIf you need to give a name to the qualifying expression, declare a local variable.\n\n**Example:**\n\n\n      fun splitNumbers() {\n          \"1,2,3\".let { it.split(',') }\n      }\n\nA quick-fix removes the extra `let()` call:\n\n\n      fun example() {\n          \"1,2,3\".split(',')\n      }\n\nAlternative:\n\n\n      fun splitNumbers() {\n          val numbers = \"1,2,3\"\n          numbers.split(',')\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RemoveRedundantSpreadOperator",
-                "shortDescription": {
-                  "text": "Redundant spread operator"
-                },
-                "fullDescription": {
-                  "text": "Reports the use of a redundant spread operator for a family of 'arrayOf' function calls. Use the 'Remove redundant spread operator' quick-fix to clean up the code. Examples: 'fun foo(vararg s: String) { }\n\n  fun bar(ss: Array<String>) {\n      foo(*arrayOf(\"abc\"))       // for the both calls of 'foo', array creation\n      foo(*arrayOf(*ss, \"zzz\"))  // and its subsequent \"spreading\" is redundant\n  }' After the quick-fix is applied: 'fun foo(vararg s: String) { }\n\n  fun bar(ss: Array<String>) {\n      foo(\"abc\")\n      foo(*ss, \"zzz\")\n  }'",
-                  "markdown": "Reports the use of a redundant spread operator for a family of `arrayOf` function calls.\n\nUse the 'Remove redundant spread operator' quick-fix to clean up the code.\n\n**Examples:**\n\n\n      fun foo(vararg s: String) { }\n\n      fun bar(ss: Array<String>) {\n          foo(*arrayOf(\"abc\"))       // for the both calls of 'foo', array creation\n          foo(*arrayOf(*ss, \"zzz\"))  // and its subsequent \"spreading\" is redundant\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(vararg s: String) { }\n\n      fun bar(ss: Array<String>) {\n          foo(\"abc\")\n          foo(*ss, \"zzz\")\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration",
-                "shortDescription": {
-                  "text": "'@JvmOverloads' annotation cannot be used on constructors of annotation classes since 1.4"
-                },
-                "fullDescription": {
-                  "text": "Reports '@JvmOverloads' on constructors of annotation classes because it's meaningless. There is no footprint of '@JvmOverloads' in the generated bytecode and Kotlin metadata, so '@JvmOverloads' doesn't affect the generated bytecode and the code behavior. '@JvmOverloads' on constructors of annotation classes causes a compilation error since Kotlin 1.4. Example: 'annotation class A @JvmOverloads constructor(val x: Int = 1)' After the quick-fix is applied: 'annotation class A constructor(val x: Int = 1)'",
-                  "markdown": "Reports `@JvmOverloads` on constructors of annotation classes because it's meaningless.\n\n\nThere is no footprint of `@JvmOverloads` in the generated bytecode and Kotlin metadata,\nso `@JvmOverloads` doesn't affect the generated bytecode and the code behavior.\n\n`@JvmOverloads` on constructors of annotation classes causes a compilation error since Kotlin 1.4.\n\n**Example:**\n\n\n      annotation class A @JvmOverloads constructor(val x: Int = 1)\n\nAfter the quick-fix is applied:\n\n\n      annotation class A constructor(val x: Int = 1)\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "error",
-                  "parameters": {
-                    "ideaSeverity": "ERROR",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Migration",
-                      "index": 15,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RemoveSetterParameterType",
-                "shortDescription": {
-                  "text": "Redundant setter parameter type"
-                },
-                "fullDescription": {
-                  "text": "Reports explicitly specified parameter types in property setters. Setter parameter type always matches the property type, so it's not required to be explicit. The 'Remove explicit type specification' quick-fix allows amending the code accordingly. Examples: 'fun process(x: Int) {}\n\n  var x: Int = 0\n      set(value: Int) = process(value) // <== 'Int' specification can be safely omitted' After the quick-fix is applied: 'fun process(x: Int) {}\n\n  var x: Int = 0\n      set(value) = process(value)'",
-                  "markdown": "Reports explicitly specified parameter types in property setters.\n\n\nSetter parameter type always matches the property type, so it's not required to be explicit.\nThe 'Remove explicit type specification' quick-fix allows amending the code accordingly.\n\n**Examples:**\n\n\n      fun process(x: Int) {}\n\n      var x: Int = 0\n          set(value: Int) = process(value) // <== 'Int' specification can be safely omitted\n\nAfter the quick-fix is applied:\n\n\n      fun process(x: Int) {}\n\n      var x: Int = 0\n          set(value) = process(value)\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "IfThenToElvis",
-                "shortDescription": {
-                  "text": "If-Then foldable to '?:'"
-                },
-                "fullDescription": {
-                  "text": "Reports 'if-then' expressions that can be folded into elvis ('?:') expressions. Example: 'fun maybeFoo(): String? = \"foo\"\n\n  var foo = maybeFoo()\n  val bar = if (foo == null) \"hello\" else foo' The quick fix converts the 'if-then' expression into an elvis ('?:') expression: 'fun maybeFoo(): String? = \"foo\"\n\n  var foo = maybeFoo()\n  val bar = foo ?: \"hello\"'",
-                  "markdown": "Reports `if-then` expressions that can be folded into elvis (`?:`) expressions.\n\n**Example:**\n\n\n      fun maybeFoo(): String? = \"foo\"\n\n      var foo = maybeFoo()\n      val bar = if (foo == null) \"hello\" else foo\n\nThe quick fix converts the `if-then` expression into an elvis (`?:`) expression:\n\n\n      fun maybeFoo(): String? = \"foo\"\n\n      var foo = maybeFoo()\n      val bar = foo ?: \"hello\"\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "WrapUnaryOperator",
-                "shortDescription": {
-                  "text": "Ambiguous unary operator use with number constant"
-                },
-                "fullDescription": {
-                  "text": "Reports an unary operator followed by a dot qualifier such as '-1.inc()'. Code like '-1.inc()' can be misleading because '-' has a lower precedence than '.inc()'. As a result, '-1.inc()' evaluates to '-2' and not '0' as it might be expected. Wrap unary operator and value with () quick-fix can be used to amend the code automatically.",
-                  "markdown": "Reports an unary operator followed by a dot qualifier such as `-1.inc()`.\n\nCode like `-1.inc()` can be misleading because `-` has a lower precedence than `.inc()`.\nAs a result, `-1.inc()` evaluates to `-2` and not `0` as it might be expected.\n\n**Wrap unary operator and value with ()** quick-fix can be used to amend the code automatically."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ConflictingExtensionProperty",
-                "shortDescription": {
-                  "text": "Extension property conflicting with synthetic one"
-                },
-                "fullDescription": {
-                  "text": "Reports extension properties that conflict with synthetic ones that have been automatically produced from Java 'get' or 'set' methods. Such properties should be either removed or renamed to avoid breaking code by future changes in the compiler. A quick-fix deletes an extention property. Example: 'val File.name: String\n      get() = getName()' A quick-fix adds the '@Deprecated' annotation: '@Deprecated(\"Is replaced with automatic synthetic extension\", ReplaceWith(\"name\"), level = DeprecationLevel.HIDDEN)\n  val File.name: String\n      get() = getName()'",
-                  "markdown": "Reports extension properties that conflict with synthetic ones that have been automatically produced from Java `get` or `set` methods.\n\nSuch properties should be either removed or renamed to avoid breaking code by future changes in the compiler.\n\nA quick-fix deletes an extention property.\n\n**Example:**\n\n\n      val File.name: String\n          get() = getName()\n\nA quick-fix adds the `@Deprecated` annotation:\n\n\n      @Deprecated(\"Is replaced with automatic synthetic extension\", ReplaceWith(\"name\"), level = DeprecationLevel.HIDDEN)\n      val File.name: String\n          get() = getName()\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceJavaStaticMethodWithKotlinAnalog",
-                "shortDescription": {
-                  "text": "Java methods should be replaced with Kotlin analog"
-                },
-                "fullDescription": {
-                  "text": "Reports a Java method call that can be replaced with a Kotlin function, for example, 'System.out.println()'. Replacing the code gets rid of the dependency to Java and makes the idiomatic Kotlin code. The quick-fix replaces the Java method calls on the same Kotlin call. Example: 'import java.util.Arrays\n\n  fun main() {\n      val a = Arrays.asList(1, 3, null)\n  }' After the quick-fix is applied: 'fun main() {\n      val a = listOf(1, 3, null)\n  }'",
-                  "markdown": "Reports a Java method call that can be replaced with a Kotlin function, for example, `System.out.println()`.\n\nReplacing the code gets rid of the dependency to Java and makes the idiomatic Kotlin code.\n\nThe quick-fix replaces the Java method calls on the same Kotlin call.\n\n**Example:**\n\n\n      import java.util.Arrays\n\n      fun main() {\n          val a = Arrays.asList(1, 3, null)\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun main() {\n          val a = listOf(1, 3, null)\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RemoveEmptyParenthesesFromLambdaCall",
-                "shortDescription": {
-                  "text": "Remove unnecessary parentheses from function call with lambda"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant empty parentheses of function calls where the only parameter is a lambda that's outside the parentheses. Use the 'Remove unnecessary parentheses from function call with lambda' quick-fix to clean up the code. Examples: 'fun foo() {\n      listOf(1).forEach() {  }\n  }' After the quick-fix is applied: 'fun foo() {\n      listOf(1).forEach {  }\n  }'",
-                  "markdown": "Reports redundant empty parentheses of function calls where the only parameter is a lambda that's outside the parentheses.\n\nUse the 'Remove unnecessary parentheses from function call with lambda' quick-fix to clean up the code.\n\n**Examples:**\n\n\n      fun foo() {\n          listOf(1).forEach() {  }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo() {\n          listOf(1).forEach {  }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RemoveExplicitSuperQualifier",
-                "shortDescription": {
-                  "text": "Unnecessary supertype qualification"
-                },
-                "fullDescription": {
-                  "text": "Reports 'super' member calls with redundant supertype qualification. Code in a derived class can call its superclass functions and property accessors implementations using the 'super' keyword. To specify the supertype from which the inherited implementation is taken, 'super' can be qualified by the supertype name in angle brackets, e.g. 'super<Base>'. Sometimes this qualification is redundant and can be omitted. Use the 'Remove explicit supertype qualification' quick-fix to clean up the code. Examples: 'open class B {\n      open fun foo(){}\n  }\n\n  class A : B() {\n      override fun foo() {\n         super<B>.foo() // <== redundant because 'B' is the only supertype\n      }\n  }\n\n  interface I {\n      fun foo() {}\n  }\n\n  class C : B(), I {\n      override fun foo() {\n          super<B>.foo() // <== here <B> qualifier is needed to distinguish 'B.foo()' from 'I.foo()'\n      }\n  }' After the quick-fix is applied: 'open class B {\n      open fun foo(){}\n  }\n\n  class A : B() {\n      override fun foo() {\n         super.foo() // <== Updated\n      }\n  }\n\n  interface I {\n      fun foo() {}\n  }\n\n  class C : B(), I {\n      override fun foo() {\n          super<B>.foo()\n      }\n  }'",
-                  "markdown": "Reports `super` member calls with redundant supertype qualification.\n\n\nCode in a derived class can call its superclass functions and property accessors implementations using the `super` keyword.\nTo specify the supertype from which the inherited implementation is taken, `super` can be qualified by the supertype name in\nangle brackets, e.g. `super<Base>`. Sometimes this qualification is redundant and can be omitted.\nUse the 'Remove explicit supertype qualification' quick-fix to clean up the code.\n\n**Examples:**\n\n\n      open class B {\n          open fun foo(){}\n      }\n\n      class A : B() {\n          override fun foo() {\n             super<B>.foo() // <== redundant because 'B' is the only supertype\n          }\n      }\n\n      interface I {\n          fun foo() {}\n      }\n\n      class C : B(), I {\n          override fun foo() {\n              super<B>.foo() // <== here <B> qualifier is needed to distinguish 'B.foo()' from 'I.foo()'\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      open class B {\n          open fun foo(){}\n      }\n\n      class A : B() {\n          override fun foo() {\n             super.foo() // <== Updated\n          }\n      }\n\n      interface I {\n          fun foo() {}\n      }\n\n      class C : B(), I {\n          override fun foo() {\n              super<B>.foo()\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantExplicitType",
-                "shortDescription": {
-                  "text": "Obvious explicit type"
-                },
-                "fullDescription": {
-                  "text": "Reports local variables' explicitly given types which are obvious and thus redundant, like 'val f: Foo = Foo()'. Example: 'class Point(val x: Int, val y: Int)\n\n  fun foo() {\n      val t: Boolean = true\n      val p: Point = Point(1, 2)\n      val i: Int = 42\n  }' After the quick-fix is applied: 'class Point(val x: Int, val y: Int)\n\n  fun foo() {\n      val t = true\n      val p = Point(1, 2)\n      val i = 42\n  }'",
-                  "markdown": "Reports local variables' explicitly given types which are obvious and thus redundant, like `val f: Foo = Foo()`.\n\n**Example:**\n\n\n      class Point(val x: Int, val y: Int)\n\n      fun foo() {\n          val t: Boolean = true\n          val p: Point = Point(1, 2)\n          val i: Int = 42\n      }\n\nAfter the quick-fix is applied:\n\n\n      class Point(val x: Int, val y: Int)\n\n      fun foo() {\n          val t = true\n          val p = Point(1, 2)\n          val i = 42\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SuspiciousVarProperty",
-                "shortDescription": {
-                  "text": "Suspicious 'var' property: its setter does not influence its getter result"
-                },
-                "fullDescription": {
-                  "text": "Reports 'var' properties with default setter and getter that do not reference backing field. Such properties do not affect calling its setter; therefore, it will be clearer to change such property to 'val' and delete the initializer. Change to val and delete initializer quick-fix can be used to amend the code automatically. Example: '// This property always returns '1' and it doesn't important that the property is a 'var'\n  var foo: Int = 0\n      get() = 1'",
-                  "markdown": "Reports `var` properties with default setter and getter that do not reference backing field.\n\n\nSuch properties do not affect calling its setter; therefore, it will be clearer to change such property to `val` and delete the initializer.\n\n**Change to val and delete initializer** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n      // This property always returns '1' and it doesn't important that the property is a 'var'\n      var foo: Int = 0\n          get() = 1\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantAsync",
-                "shortDescription": {
-                  "text": "Redundant 'async' call"
-                },
-                "fullDescription": {
-                  "text": "Reports 'async' calls that are immediately followed by 'await'. Such calls can be replaced with blocking calls. Example: 'suspend fun test(ctx: CoroutineContext, scope: CoroutineScope) {\n      scope.async(ctx) { doSomeJob() }.await()\n  }' After the quick-fix is applied: 'suspend fun test(ctx: CoroutineContext, scope: CoroutineScope) {\n      withContext(scope.coroutineContext + ctx) { doSomeJob() }\n  }'",
-                  "markdown": "Reports `async` calls that are immediately followed by `await`.\nSuch calls can be replaced with blocking calls.\n\n**Example:**\n\n\n      suspend fun test(ctx: CoroutineContext, scope: CoroutineScope) {\n          scope.async(ctx) { doSomeJob() }.await()\n      }\n\nAfter the quick-fix is applied:\n\n\n      suspend fun test(ctx: CoroutineContext, scope: CoroutineScope) {\n          withContext(scope.coroutineContext + ctx) { doSomeJob() }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "JavaCollectionsStaticMethod",
-                "shortDescription": {
-                  "text": "Java Collections static method call can be replaced with Kotlin stdlib"
-                },
-                "fullDescription": {
-                  "text": "Reports a Java 'Collections' static method call that can be replaced with Kotlin stdlib. Example: 'import java.util.Collections\n\n  fun test() {\n      val mutableList = mutableListOf(1, 2)\n      Collections.fill(mutableList, 3)\n  }' The quick fix replaces Java 'Collections' static method call with the corresponding Kotlin stdlib method call: 'import java.util.Collections\n\n  fun test() {\n      val mutableList = mutableListOf(1, 2)\n      mutableList.fill(3)\n  }'",
-                  "markdown": "Reports a Java `Collections` static method call that can be replaced with Kotlin stdlib.\n\n**Example:**\n\n\n      import java.util.Collections\n\n      fun test() {\n          val mutableList = mutableListOf(1, 2)\n          Collections.fill(mutableList, 3)\n      }\n\nThe quick fix replaces Java `Collections` static method call with the corresponding Kotlin stdlib method call:\n\n\n      import java.util.Collections\n\n      fun test() {\n          val mutableList = mutableListOf(1, 2)\n          mutableList.fill(3)\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "MoveVariableDeclarationIntoWhen",
-                "shortDescription": {
-                  "text": "Variable declaration could be moved inside 'when'"
-                },
-                "fullDescription": {
-                  "text": "Reports variable declarations that can be moved inside a 'when' expression. Example: 'fun someCalc(x: Int) = x * 42\n\nfun foo(x: Int): Int {\n  val a = someCalc(x)\n  return when (a) {\n    1 -> a\n    2 -> 2 * a\n    else -> 24\n  }\n}' After the quick-fix is applied: 'fun foo(x: Int): Int {\n  return when (val a = someCalc(x)) {\n    1 -> a\n    2 -> 2 * a\n    else -> 24\n  }\n}'",
-                  "markdown": "Reports variable declarations that can be moved inside a `when` expression.\n\n**Example:**\n\n\n    fun someCalc(x: Int) = x * 42\n\n    fun foo(x: Int): Int {\n      val a = someCalc(x)\n      return when (a) {\n        1 -> a\n        2 -> 2 * a\n        else -> 24\n      }\n    }\n\nAfter the quick-fix is applied:\n\n\n    fun foo(x: Int): Int {\n      return when (val a = someCalc(x)) {\n        1 -> a\n        2 -> 2 * a\n        else -> 24\n      }\n    }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "DeferredIsResult",
-                "shortDescription": {
-                  "text": "Function returning Deferred directly"
-                },
-                "fullDescription": {
-                  "text": "Reports functions with the 'kotlinx.coroutines.Deferred' return type. Functions that use 'Deferred' as return type should have a name with the 'Async' suffix. Otherwise, it's recommended to mark a function as 'suspend' and unwrap 'Deferred' inside it. Example: 'fun calcEverything(): Deferred<Int> {\n      return CompletableDeferred(42)\n  }' After the quick-fix that adds the 'Async' suffix applied: 'fun calcEverythingAsync(): Deferred<Int> {\n      return CompletableDeferred(42)\n  }' After the quick-fix that converts the function into a 'suspend' one applied: 'suspend fun calcEverything(): Int {\n      return CompletableDeferred(42).await()\n  }'",
-                  "markdown": "Reports functions with the `kotlinx.coroutines.Deferred` return type.\n\n\nFunctions that use `Deferred` as return type should have a name with the `Async` suffix.\nOtherwise, it's recommended to mark a function as `suspend` and unwrap `Deferred` inside it.\n\n**Example:**\n\n\n      fun calcEverything(): Deferred<Int> {\n          return CompletableDeferred(42)\n      }\n\nAfter the quick-fix that adds the `Async` suffix applied:\n\n\n      fun calcEverythingAsync(): Deferred<Int> {\n          return CompletableDeferred(42)\n      }\n\nAfter the quick-fix that converts the function into a `suspend` one applied:\n\n\n      suspend fun calcEverything(): Int {\n          return CompletableDeferred(42).await()\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RemoveEmptyParenthesesFromAnnotationEntry",
-                "shortDescription": {
-                  "text": "Remove unnecessary parentheses"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant empty parentheses in annotation entries. Use the 'Remove unnecessary parentheses' quick-fix to clean up the code. Examples: 'annotation class MyAnnotationA\n  annotation class MyAnnotationB(val x: Int)\n  annotation class MyAnnotationC(val x: Int = 10) // default value is present\n\n  @MyAnnotationA() // <== parentheses are redundant\n  fun testA() {\n  }\n\n  @MyAnnotationB() // <== missing argument, parentheses are required\n  fun testB() {\n  }\n\n  @MyAnnotationC() // <== parentheses are redundant\n  fun testC() {\n  }'",
-                  "markdown": "Reports redundant empty parentheses in annotation entries.\n\nUse the 'Remove unnecessary parentheses' quick-fix to clean up the code.\n\n**Examples:**\n\n\n      annotation class MyAnnotationA\n      annotation class MyAnnotationB(val x: Int)\n      annotation class MyAnnotationC(val x: Int = 10) // default value is present\n\n      @MyAnnotationA() // <== parentheses are redundant\n      fun testA() {\n      }\n\n      @MyAnnotationB() // <== missing argument, parentheses are required\n      fun testB() {\n      }\n\n      @MyAnnotationC() // <== parentheses are redundant\n      fun testC() {\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SimplifiableCallChain",
-                "shortDescription": {
-                  "text": "Call chain on collection type can be simplified"
-                },
-                "fullDescription": {
-                  "text": "Reports two-call chains replaceable by a single call. It can help you to avoid redundant code execution. The quick-fix replaces the call chain with a single call. Example: 'fun main() {\n      listOf(1, 2, 3).filter { it > 1 }.count()\n  }' After the quick-fix is applied: 'fun main() {\n      listOf(1, 2, 3).count { it > 1 }\n  }'",
-                  "markdown": "Reports two-call chains replaceable by a single call.\n\nIt can help you to avoid redundant code execution.\n\nThe quick-fix replaces the call chain with a single call.\n\n**Example:**\n\n\n      fun main() {\n          listOf(1, 2, 3).filter { it > 1 }.count()\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun main() {\n          listOf(1, 2, 3).count { it > 1 }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceCallWithBinaryOperator",
-                "shortDescription": {
-                  "text": "Can be replaced with binary operator"
-                },
-                "fullDescription": {
-                  "text": "Reports function calls that can be replaced with binary operators, in particular comparison-related ones. Example: 'fun test(): Boolean {\n      return 2.compareTo(1) > 0 // replaceable 'compareTo()'\n  }' After the quick-fix is applied: 'fun test(): Boolean {\n      return 2 > 1\n  }'",
-                  "markdown": "Reports function calls that can be replaced with binary operators, in particular comparison-related ones.\n\n**Example:**\n\n      fun test(): Boolean {\n          return 2.compareTo(1) > 0 // replaceable 'compareTo()'\n      }\n\nAfter the quick-fix is applied:\n\n      fun test(): Boolean {\n          return 2 > 1\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "UnusedUnaryOperator",
-                "shortDescription": {
-                  "text": "Unused unary operator"
-                },
-                "fullDescription": {
-                  "text": "Reports unary operators for number types on unused expressions. Unary operators break previous expression if they are used without braces. As a result, mathematical expressions spanning multi lines can be misleading. Example: 'fun main() {\n      val result = 1 + 2 * 3\n                  + 3              // <== note that '+ 3' doesn't belong to the 'result' variable, it is unused\n      println(\"Result = $result\")  // The result is '7' and not '10' as it might be expected\n  }'",
-                  "markdown": "Reports unary operators for number types on unused expressions.\n\nUnary operators break previous expression if they are used without braces.\nAs a result, mathematical expressions spanning multi lines can be misleading.\n\nExample:\n\n\n      fun main() {\n          val result = 1 + 2 * 3\n                      + 3              // <== note that '+ 3' doesn't belong to the 'result' variable, it is unused\n          println(\"Result = $result\")  // The result is '7' and not '10' as it might be expected\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ClassName",
-                "shortDescription": {
-                  "text": "Class naming convention"
-                },
-                "fullDescription": {
-                  "text": "Reports class names that do not follow the recommended naming conventions. Consistent naming allows for easier code reading and understanding. According to the Kotlin official style guide, class names should start with an uppercase letter and use camel case. It is possible to introduce other naming rules by changing the \"Pattern\" regular expression. Example: 'class user(val name: String)' A quick-fix renames the class according to the Kotlin naming conventions: 'class User(val name: String)'",
-                  "markdown": "Reports class names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#naming-rules),\nclass names should start with an uppercase letter and use camel case.\n\nIt is possible to introduce other naming rules by changing the \"Pattern\" regular expression.\n\n**Example:**\n\n\n      class user(val name: String)\n\nA quick-fix renames the class according to the Kotlin naming conventions:\n\n\n      class User(val name: String)\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Naming conventions",
-                      "index": 48,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RemoveEmptyPrimaryConstructor",
-                "shortDescription": {
-                  "text": "Redundant empty primary constructor"
-                },
-                "fullDescription": {
-                  "text": "Reports empty primary constructors when they are implicitly available anyway. A primary constructor is redundant and can be safely omitted when it does not have any annotations or visibility modifiers. Use the 'Remove empty primary constructor' quick-fix to clean up the code. Examples: 'class MyClassA constructor() //  redundant, can be replaced with 'class MyClassA'\n\n  annotation class MyAnnotation\n  class MyClassB @MyAnnotation constructor() //  required because of annotation\n\n  class MyClassC private constructor() // required because of visibility modifier'",
-                  "markdown": "Reports empty primary constructors when they are implicitly available anyway.\n\n\nA primary constructor is redundant and can be safely omitted when it does not have any annotations or visibility modifiers.\nUse the 'Remove empty primary constructor' quick-fix to clean up the code.\n\n**Examples:**\n\n\n      class MyClassA constructor() //  redundant, can be replaced with 'class MyClassA'\n\n      annotation class MyAnnotation\n      class MyClassB @MyAnnotation constructor() //  required because of annotation\n\n      class MyClassC private constructor() // required because of visibility modifier\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RemoveEmptySecondaryConstructorBody",
-                "shortDescription": {
-                  "text": "Redundant constructor body"
-                },
-                "fullDescription": {
-                  "text": "Reports empty bodies of secondary constructors.",
-                  "markdown": "Reports empty bodies of secondary constructors."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "FloatingPointLiteralPrecision",
-                "shortDescription": {
-                  "text": "Floating-point literal exceeds the available precision"
-                },
-                "fullDescription": {
-                  "text": "Reports floating-point literals that cannot be represented with the required precision using IEEE 754 'Float' and 'Double' types. For example, '1.9999999999999999999' has too many significant digits, so its representation as a 'Double' will be rounded to '2.0'. Specifying excess digits may be misleading as it hides the fact that computations use rounded values instead. The quick-fix replaces the literal with a rounded value that matches the actual representation of the constant. Example: 'val x: Float = 3.14159265359f' After the quick-fix is applied: 'val x: Float = 3.1415927f'",
-                  "markdown": "Reports floating-point literals that cannot be represented with the required precision using [IEEE 754](https://en.wikipedia.org/wiki/IEEE_754) `Float` and `Double` types.\n\n\nFor example, `1.9999999999999999999` has too many significant digits,\nso its representation as a `Double` will be rounded to `2.0`.\nSpecifying excess digits may be misleading as it hides the fact that computations\nuse rounded values instead.\n\n\nThe quick-fix replaces the literal with a rounded value that matches the actual representation\nof the constant.\n\n**Example:**\n\n\n      val x: Float = 3.14159265359f\n\nAfter the quick-fix is applied:\n\n\n      val x: Float = 3.1415927f\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Other problems",
-                      "index": 145,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ConvertPairConstructorToToFunction",
-                "shortDescription": {
-                  "text": "Convert Pair constructor to 'to' function"
-                },
-                "fullDescription": {
-                  "text": "Reports a 'Pair' constructor invocation that can be replaced with a 'to()' infix function call. Explicit constructor invocations may add verbosity, especially if they are used multiple times. Replacing constructor calls with 'to()' makes code easier to read and maintain. Example: 'val countries = mapOf(\n      Pair(\"France\", \"Paris\"),\n      Pair(\"Spain\", \"Madrid\"),\n      Pair(\"Germany\", \"Berlin\")\n  )' After the quick-fix is applied: 'val countries = mapOf(\n      \"France\" to \"Paris\",\n      \"Spain\" to \"Madrid\",\n      \"Germany\" to \"Berlin\"\n  )'",
-                  "markdown": "Reports a `Pair` constructor invocation that can be replaced with a `to()` infix function call.\n\n\nExplicit constructor invocations may add verbosity, especially if they are used multiple times.\nReplacing constructor calls with `to()` makes code easier to read and maintain.\n\n**Example:**\n\n\n      val countries = mapOf(\n          Pair(\"France\", \"Paris\"),\n          Pair(\"Spain\", \"Madrid\"),\n          Pair(\"Germany\", \"Berlin\")\n      )\n\nAfter the quick-fix is applied:\n\n\n      val countries = mapOf(\n          \"France\" to \"Paris\",\n          \"Spain\" to \"Madrid\",\n          \"Germany\" to \"Berlin\"\n      )\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantGetter",
-                "shortDescription": {
-                  "text": "Redundant property getter"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant property getters. Example: 'class Test {\n      val a = 1\n          get\n      val b = 1\n          get() = field\n  }' After the quick-fix is applied: 'class Test {\n      val a = 1\n      val b = 1\n  }'",
-                  "markdown": "Reports redundant property getters.\n\n**Example:**\n\n\n      class Test {\n          val a = 1\n              get\n          val b = 1\n              get() = field\n      }\n\nAfter the quick-fix is applied:\n\n\n      class Test {\n          val a = 1\n          val b = 1\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantIf",
-                "shortDescription": {
-                  "text": "Redundant 'if' statement"
-                },
-                "fullDescription": {
-                  "text": "Reports 'if' statements which can be simplified to a single statement. Example: 'fun test() {\n      if (foo()) {\n         return true\n      } else {\n         return false\n      }\n  }' After the quick-fix is applied: 'fun test() {\n      return foo()\n  }'",
-                  "markdown": "Reports `if` statements which can be simplified to a single statement.\n\n**Example:**\n\n\n      fun test() {\n          if (foo()) {\n             return true\n          } else {\n             return false\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test() {\n          return foo()\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KDocMissingDocumentation",
-                "shortDescription": {
-                  "text": "Missing KDoc comments for public declarations"
-                },
-                "fullDescription": {
-                  "text": "Reports public declarations that do not have KDoc comments. Example: 'class A' The quick fix generates the comment block above the declaration: '/**\n   *\n   */\n  class A'",
-                  "markdown": "Reports public declarations that do not have KDoc comments.\n\n**Example:**\n\n\n      class A\n\nThe quick fix generates the comment block above the declaration:\n\n\n      /**\n       *\n       */\n      class A\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Other problems",
-                      "index": 145,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RemoveExplicitTypeArguments",
-                "shortDescription": {
-                  "text": "Unnecessary type argument"
-                },
-                "fullDescription": {
-                  "text": "Reports function calls with type arguments that can be automatically inferred. Such type arguments are redundant and can be safely omitted. Use the 'Remove explicit type arguments' quick-fix to clean up the code. Examples: '// 'String' type can be inferred here\n  fun foo(): MutableList<String> = mutableListOf<String>()\n\n  // Here 'String' cannot be inferred, type argument is required.\n  fun bar() = mutableListOf<String>()' After the quick-fix is applied: 'fun foo(): MutableList<String> = mutableListOf() <== Updated\n\n  fun bar() = mutableListOf<String>()'",
-                  "markdown": "Reports function calls with type arguments that can be automatically inferred. Such type arguments are redundant and can be safely omitted.\n\nUse the 'Remove explicit type arguments' quick-fix to clean up the code.\n\n**Examples:**\n\n\n      // 'String' type can be inferred here\n      fun foo(): MutableList<String> = mutableListOf<String>()\n\n      // Here 'String' cannot be inferred, type argument is required.\n      fun bar() = mutableListOf<String>()\n\nAfter the quick-fix is applied:\n\n\n      fun foo(): MutableList<String> = mutableListOf() <== Updated\n\n      fun bar() = mutableListOf<String>()\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantVisibilityModifier",
-                "shortDescription": {
-                  "text": "Redundant visibility modifier"
-                },
-                "fullDescription": {
-                  "text": "Reports visibility modifiers that match the default visibility of an element ('public' for most elements, 'protected' for members that override a protected member).",
-                  "markdown": "Reports visibility modifiers that match the default visibility of an element (`public` for most elements, `protected` for members that override a protected member)."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "UsePropertyAccessSyntax",
-                "shortDescription": {
-                  "text": "Accessor call that can be replaced with property access syntax"
-                },
-                "fullDescription": {
-                  "text": "Reports Java 'get' and 'set' method calls that can be replaced with the Kotlin synthetic properties. Use property access syntax quick-fix can be used to amen the code automatically. Example: '// Java:\n  public class JavaClassWithGetter {\n      private final String expr = \"result\";\n\n      // ...\n\n      public String getExpr() {\n          return expr;\n      }\n  }' '// Kotlin:\n  fun test(j: JavaClassWithGetter) {\n      // ...\n      j.getExpr() // <== A quick-fix simplifies the expression to 'j.expr'\n  }'",
-                  "markdown": "Reports Java `get` and `set` method calls that can be replaced with the Kotlin synthetic properties.\n\n**Use property access syntax** quick-fix can be used to amen the code automatically.\n\nExample:\n\n\n      // Java:\n      public class JavaClassWithGetter {\n          private final String expr = \"result\";\n\n          // ...\n\n          public String getExpr() {\n              return expr;\n          }\n      }\n\n\n      // Kotlin:\n      fun test(j: JavaClassWithGetter) {\n          // ...\n          j.getExpr() // <== A quick-fix simplifies the expression to 'j.expr'\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "UseExpressionBody",
-                "shortDescription": {
-                  "text": "Expression body syntax is preferable here"
-                },
-                "fullDescription": {
-                  "text": "Reports 'return' expressions (one-liners or 'when') that can be replaced with expression body syntax. Expression body syntax is recommended by the style guide. Convert to expression body quick-fix can be used to amend the code automatically. Example: 'fun sign(x: Int): Int {\n      return when { // <== can be simplified\n          x < 0 -> -1\n          x > 0 -> 1\n          else -> 0\n      }\n  }' After the quick-fix is applied: 'fun sign(x: Int): Int = when {\n      x < 0 -> -1\n      x > 0 -> 1\n      else -> 0\n  }'",
-                  "markdown": "Reports `return` expressions (one-liners or `when`) that can be replaced with expression body syntax.\n\nExpression body syntax is recommended by the [style guide](https://kotlinlang.org/docs/coding-conventions.html#functions).\n\n**Convert to expression body** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n      fun sign(x: Int): Int {\n          return when { // <== can be simplified\n              x < 0 -> -1\n              x > 0 -> 1\n              else -> 0\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun sign(x: Int): Int = when {\n          x < 0 -> -1\n          x > 0 -> 1\n          else -> 0\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "MapGetWithNotNullAssertionOperator",
-                "shortDescription": {
-                  "text": "'map.get()' with not-null assertion operator (!!)"
-                },
-                "fullDescription": {
-                  "text": "Reports 'map.get()!!' that can be replaced with 'map.getValue()', 'map.getOrElse()', and so on. Example: 'fun test(map: Map<Int, String>): String = map.get(0)!!' After the quick-fix is applied: 'fun test(map: Map<Int, String>): String = map.getValue(0)'",
-                  "markdown": "Reports `map.get()!!` that can be replaced with `map.getValue()`, `map.getOrElse()`, and so on.\n\n**Example:**\n\n\n    fun test(map: Map<Int, String>): String = map.get(0)!!\n\nAfter the quick-fix is applied:\n\n\n    fun test(map: Map<Int, String>): String = map.getValue(0)\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SortModifiers",
-                "shortDescription": {
-                  "text": "Non-canonical modifier order"
-                },
-                "fullDescription": {
-                  "text": "Reports modifiers that do not follow the order recommended by the style guide. Sort modifiers quick-fix can be used to amend the code automatically. Examples: 'private inline fun correctOrder(f: () -> Unit) {} // <== Ok\n\n  infix private fun Int.wrongOrder(expr: Int) {} // <== wrong order, quick-fix amends the modifiers to \"private infix\"'",
-                  "markdown": "Reports modifiers that do not follow the order recommended by the [style guide](https://kotlinlang.org/docs/coding-conventions.html#modifiers-order).\n\n**Sort modifiers** quick-fix can be used to amend the code automatically.\n\nExamples:\n\n\n      private inline fun correctOrder(f: () -> Unit) {} // <== Ok\n\n      infix private fun Int.wrongOrder(expr: Int) {} // <== wrong order, quick-fix amends the modifiers to \"private infix\"\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "EnumEntryName",
-                "shortDescription": {
-                  "text": "Enum entry naming convention"
-                },
-                "fullDescription": {
-                  "text": "Reports enum entry names that do not follow the recommended naming conventions. Example: 'enum class Foo {\n    _Foo,\n    foo\n  }' To fix the problem rename enum entries to match the recommended naming conventions.",
-                  "markdown": "Reports enum entry names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n      enum class Foo {\n        _Foo,\n        foo\n      }\n\nTo fix the problem rename enum entries to match the recommended naming conventions."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Naming conventions",
-                      "index": 48,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceSubstringWithDropLast",
-                "shortDescription": {
-                  "text": "'substring' call should be replaced with 'dropLast' call"
-                },
-                "fullDescription": {
-                  "text": "Reports calls like 's.substring(0, s.length - x)' that can be replaced with 's.dropLast(x)'. Using corresponding functions makes your code simpler. The quick-fix replaces the 'substring' call with 'dropLast'. Example: 'fun foo(s: String) {\n      s.substring(0, s.length - 5)\n  }' After the quick-fix is applied: 'fun foo(s: String) {\n      s.dropLast(5)\n  }'",
-                  "markdown": "Reports calls like `s.substring(0, s.length - x)` that can be replaced with `s.dropLast(x)`.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `dropLast`.\n\n**Example:**\n\n\n      fun foo(s: String) {\n          s.substring(0, s.length - 5)\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(s: String) {\n          s.dropLast(5)\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SetterBackingFieldAssignment",
-                "shortDescription": {
-                  "text": "Existing backing field without assignment"
-                },
-                "fullDescription": {
-                  "text": "Reports property setters that don't update the backing field. The quick-fix adds an assignment to the backing field. Example: 'class Test {\n      var foo: Int = 1\n          set(value) {\n          }\n  }' After the quick-fix is applied: 'class Test {\n      var foo: Int = 1\n          set(value) {\n              field = value\n          }\n  }'",
-                  "markdown": "Reports property setters that don't update the backing field.\n\nThe quick-fix adds an assignment to the backing field.\n\n**Example:**\n\n\n      class Test {\n          var foo: Int = 1\n              set(value) {\n              }\n      }\n\nAfter the quick-fix is applied:\n\n\n      class Test {\n          var foo: Int = 1\n              set(value) {\n                  field = value\n              }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "CopyWithoutNamedArguments",
-                "shortDescription": {
-                  "text": "'copy' method of data class is called without named arguments"
-                },
-                "fullDescription": {
-                  "text": "Reports calls to a data class' 'copy()' method without named arguments. As all arguments of the 'copy()' function are optional, it might be hard to understand what properties are modified. Providing parameter names explicitly makes code easy to understand without navigating to the 'data class' declaration. Example: 'data class User(val name: String, val age: Int)\n\n  fun copyUser(user: User): User {\n      return user.copy(\"John\")\n  }' A quick-fix provides parameter names to all 'copy()' arguments: 'data class User(val name: String, val age: Int)\n\n  fun copyUser(user: User): User {\n      return user.copy(name = \"John\")\n  }'",
-                  "markdown": "Reports calls to a data class' `copy()` method without named arguments.\n\n\nAs all arguments of the `copy()` function are optional, it might be hard to understand what properties are modified.\nProviding parameter names explicitly makes code easy to understand without navigating to the `data class` declaration.\n\n**Example:**\n\n\n      data class User(val name: String, val age: Int)\n\n      fun copyUser(user: User): User {\n          return user.copy(\"John\")\n      }\n\nA quick-fix provides parameter names to all `copy()` arguments:\n\n\n      data class User(val name: String, val age: Int)\n\n      fun copyUser(user: User): User {\n          return user.copy(name = \"John\")\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KotlinDeprecation",
-                "shortDescription": {
-                  "text": "Usage of redundant or deprecated syntax or deprecated symbols"
-                },
-                "fullDescription": {
-                  "text": "Reports obsolete language features and unnecessarily verbose code constructs during the code cleanup operation (Code | Code Cleanup). A quick-fix automatically replaces usages of obsolete language features or unnecessarily verbose code constructs with compact and up-to-date syntax. It also replaces deprecated symbols with their proposed substitutions.",
-                  "markdown": "Reports obsolete language features and unnecessarily verbose code constructs during the code cleanup operation (**Code \\| Code Cleanup** ).\n\n\nA quick-fix automatically replaces usages of obsolete language features or unnecessarily verbose code constructs with compact and up-to-date syntax.\n\n\nIt also replaces deprecated symbols with their proposed substitutions."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Migration",
-                      "index": 15,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceSubstringWithTake",
-                "shortDescription": {
-                  "text": "'substring' call should be replaced with 'take' call"
-                },
-                "fullDescription": {
-                  "text": "Reports calls like 's.substring(0, x)' that can be replaced with 's.take(x)'. Using 'take()' makes your code simpler. The quick-fix replaces the 'substring' call with 'take()'. Example: 'fun foo(s: String) {\n      s.substring(0, 10)\n  }' After the quick-fix is applied: 'fun foo(s: String) {\n      s.take(10)\n  }'",
-                  "markdown": "Reports calls like `s.substring(0, x)` that can be replaced with `s.take(x)`.\n\nUsing `take()` makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `take()`.\n\n**Example:**\n\n\n      fun foo(s: String) {\n          s.substring(0, 10)\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(s: String) {\n          s.take(10)\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ConvertCallChainIntoSequence",
-                "shortDescription": {
-                  "text": "Call chain on collection could be converted into 'Sequence' to improve performance"
-                },
-                "fullDescription": {
-                  "text": "Reports call chain on a 'Collection' that should be converted into Sequence. Each 'Collection' transforming function (such as 'map()' or 'filter()') creates a new 'Collection' (typically 'List' or 'Set') under the hood. In case of multiple consequent calls, and a huge number of items in 'Collection', memory traffic might be significant. In such a case, using 'Sequence' is preferred. Example: 'class Entity(val key: String, val value: String)\n\n  fun getValues(lines: List<String>) = lines\n      .filter { it.isNotEmpty() }\n      .map { it.split(',', limit = 2) }\n      .filter { it.size == 2 }\n      .map { Entity(it[0], it[1]) }' A quick-fix wraps call chain into 'asSequence()' and 'toList()': 'class Entity(val key: String, val value: String)\n\n  fun getValues(lines: List<String>) = lines\n      .asSequence()\n      .filter { it.isNotEmpty() }\n      .map { it.split(',', limit = 2) }\n      .filter { it.size == 2 }\n      .map { Entity(it[0], it[1]) }\n      .toList()'",
-                  "markdown": "Reports call chain on a `Collection` that should be converted into **Sequence** .\n\nEach `Collection` transforming function (such as `map()` or `filter()`) creates a new\n`Collection` (typically `List` or `Set`) under the hood.\nIn case of multiple consequent calls, and a huge number of items in `Collection`, memory traffic might be significant.\nIn such a case, using `Sequence` is preferred.\n\n**Example:**\n\n\n      class Entity(val key: String, val value: String)\n\n      fun getValues(lines: List<String>) = lines\n          .filter { it.isNotEmpty() }\n          .map { it.split(',', limit = 2) }\n          .filter { it.size == 2 }\n          .map { Entity(it[0], it[1]) }\n\nA quick-fix wraps call chain into `asSequence()` and `toList()`:\n\n\n      class Entity(val key: String, val value: String)\n\n      fun getValues(lines: List<String>) = lines\n          .asSequence()\n          .filter { it.isNotEmpty() }\n          .map { it.split(',', limit = 2) }\n          .filter { it.size == 2 }\n          .map { Entity(it[0], it[1]) }\n          .toList()\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "AddOperatorModifier",
-                "shortDescription": {
-                  "text": "Function should have 'operator' modifier"
-                },
-                "fullDescription": {
-                  "text": "Reports a function that matches one of the operator conventions but lacks the 'operator' keyword. By adding the 'operator' modifier, you might allow function consumers to write idiomatic Kotlin code. Example: 'class Complex(val real: Double, val imaginary: Double) {\n      fun plus(other: Complex) =\n          Complex(real + other.real, imaginary + other.imaginary)\n  }\n\n  fun usage(a: Complex, b: Complex) {\n      a.plus(b)\n  }' A quick-fix adds the 'operator' modifier keyword: 'class Complex(val real: Double, val imaginary: Double) {\n      operator fun plus(other: Complex) =\n          Complex(real + other.real, imaginary + other.imaginary)\n  }\n\n  fun usage(a: Complex, b: Complex) {\n      a + b\n  }'",
-                  "markdown": "Reports a function that matches one of the operator conventions but lacks the `operator` keyword.\n\nBy adding the `operator` modifier, you might allow function consumers to write idiomatic Kotlin code.\n\n**Example:**\n\n\n      class Complex(val real: Double, val imaginary: Double) {\n          fun plus(other: Complex) =\n              Complex(real + other.real, imaginary + other.imaginary)\n      }\n\n      fun usage(a: Complex, b: Complex) {\n          a.plus(b)\n      }\n\nA quick-fix adds the `operator` modifier keyword:\n\n\n      class Complex(val real: Double, val imaginary: Double) {\n          operator fun plus(other: Complex) =\n              Complex(real + other.real, imaginary + other.imaginary)\n      }\n\n      fun usage(a: Complex, b: Complex) {\n          a + b\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "MayBeConstant",
-                "shortDescription": {
-                  "text": "Might be 'const'"
-                },
-                "fullDescription": {
-                  "text": "Reports top-level 'val' properties in objects that might be declared as 'const' for better performance and Java interoperability. Example: 'object A {\n      val foo = 1\n  }' After the quick-fix is applied: 'object A {\n      const val foo = 1\n  }'",
-                  "markdown": "Reports top-level `val` properties in objects that might be declared as `const` for better performance and Java interoperability.\n\n**Example:**\n\n\n      object A {\n          val foo = 1\n      }\n\nAfter the quick-fix is applied:\n\n\n      object A {\n          const val foo = 1\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceIsEmptyWithIfEmpty",
-                "shortDescription": {
-                  "text": "'if' condition can be replaced with lambda call"
-                },
-                "fullDescription": {
-                  "text": "Reports 'isEmpty', 'isBlank', 'isNotEmpty', or 'isNotBlank' calls in an 'if' statement to assign a default value. The quick-fix replaces the 'if' condition with 'ifEmpty' or 'ifBlank' calls. Example: 'fun test(list: List<Int>): List<Int> {\n      return if (list.isEmpty()) {\n          println()\n          foo()\n      } else {\n          list\n      }\n  }' After the quick-fix is applied: 'fun test(list: List<Int>): List<Int> {\n      return list.ifEmpty {\n          println()\n          foo()\n      }\n  }' This inspection only reports if the Kotlin language version of the project or module is 1.3 or higher.",
-                  "markdown": "Reports `isEmpty`, `isBlank`, `isNotEmpty`, or `isNotBlank` calls in an `if` statement to assign a default value.\n\nThe quick-fix replaces the `if` condition with `ifEmpty` or `ifBlank` calls.\n\n**Example:**\n\n\n      fun test(list: List<Int>): List<Int> {\n          return if (list.isEmpty()) {\n              println()\n              foo()\n          } else {\n              list\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(list: List<Int>): List<Int> {\n          return list.ifEmpty {\n              println()\n              foo()\n          }\n      }\n\nThis inspection only reports if the Kotlin language version of the project or module is 1.3 or higher."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceWithImportAlias",
-                "shortDescription": {
-                  "text": "Fully qualified name can be replaced with existing import alias"
-                },
-                "fullDescription": {
-                  "text": "Reports fully qualified names that can be replaced with an existing import alias. Example: 'import foo.Foo as Bar\nfun main() {\n    foo.Foo()\n}' After the quick-fix is applied: 'import foo.Foo as Bar\nfun main() {\n    Bar()\n}'",
-                  "markdown": "Reports fully qualified names that can be replaced with an existing import alias.\n\n**Example:**\n\n\n    import foo.Foo as Bar\n    fun main() {\n        foo.Foo()\n    }\n\nAfter the quick-fix is applied:\n\n\n    import foo.Foo as Bar\n    fun main() {\n        Bar()\n    }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SimplifyBooleanWithConstants",
-                "shortDescription": {
-                  "text": "Boolean expression can be simplified"
-                },
-                "fullDescription": {
-                  "text": "Reports boolean expression parts that can be reduced to constants. The quick-fix simplifies the condition. Example: 'fun use(arg: Boolean) {\n      if (false == arg) {\n\n      }\n  }' After the quick-fix is applied: 'fun use(arg: Boolean) {\n      if (!arg) {\n\n      }\n  }'",
-                  "markdown": "Reports boolean expression parts that can be reduced to constants.\n\nThe quick-fix simplifies the condition.\n\n**Example:**\n\n\n      fun use(arg: Boolean) {\n          if (false == arg) {\n\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun use(arg: Boolean) {\n          if (!arg) {\n\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantModalityModifier",
-                "shortDescription": {
-                  "text": "Redundant modality modifier"
-                },
-                "fullDescription": {
-                  "text": "Reports the modality modifiers that match the default modality of an element ('final' for most elements, 'open' for members with an 'override'). Example: 'final class Foo\n\n  open class Bar : Comparable<Bar> {\n      open override fun compareTo(other: Bar): Int = 0\n  }' After the quick-fix is applied: 'class Foo\n\n  open class Bar : Comparable<Bar> {\n      open override fun compareTo(other: Bar): Int = 0\n  }'",
-                  "markdown": "Reports the modality modifiers that match the default modality of an element (`final` for most elements, `open` for members with an `override`).\n\n**Example:**\n\n\n      final class Foo\n\n      open class Bar : Comparable<Bar> {\n          open override fun compareTo(other: Bar): Int = 0\n      }\n\nAfter the quick-fix is applied:\n\n\n      class Foo\n\n      open class Bar : Comparable<Bar> {\n          open override fun compareTo(other: Bar): Int = 0\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SimplifyAssertNotNull",
-                "shortDescription": {
-                  "text": "'assert' call can be replaced with '!!' or '?:'"
-                },
-                "fullDescription": {
-                  "text": "Reports 'assert' calls that check a not null value of the declared variable. Using '!!' or '?:' makes your code simpler. The quick-fix replaces 'assert' with '!!' or '?:' operator in the variable initializer. Example: 'fun foo(p: Array<String?>) {\n      val v = p[0]\n      assert(v != null, { \"Should be not null\" })\n  }' After the quick-fix is applied: 'fun foo(p: Array<String?>) {\n      val v = p[0] ?: error(\"Should be not null\")\n  }'",
-                  "markdown": "Reports `assert` calls that check a not null value of the declared variable.\n\nUsing `!!` or `?:` makes your code simpler.\n\nThe quick-fix replaces `assert` with `!!` or `?:` operator in the variable initializer.\n\n**Example:**\n\n\n      fun foo(p: Array<String?>) {\n          val v = p[0]\n          assert(v != null, { \"Should be not null\" })\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(p: Array<String?>) {\n          val v = p[0] ?: error(\"Should be not null\")\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ConvertNaNEquality",
-                "shortDescription": {
-                  "text": "Convert equality check with 'NaN' to 'isNaN' call"
-                },
-                "fullDescription": {
-                  "text": "Reports an equality check with 'Float.NaN' or 'Double.NaN' that should be replaced with an 'isNaN()' check. According to IEEE 754, equality check against NaN always returns 'false', even for 'NaN == NaN'. Therefore, such a check is likely to be a mistake. A quick-fix replaces comparison with 'isNaN()' check that uses a different comparison technique and handles 'NaN' values correctly. Example: 'fun check(value: Double): Boolean {\n      return Double.NaN == value\n  }' After the fix is applied: 'fun check(value: Double): Boolean {\n      return value.isNaN()\n  }'",
-                  "markdown": "Reports an equality check with `Float.NaN` or `Double.NaN` that should be replaced with an `isNaN()` check.\n\n\nAccording to IEEE 754, equality check against NaN always returns `false`, even for `NaN == NaN`.\nTherefore, such a check is likely to be a mistake.\n\nA quick-fix replaces comparison with `isNaN()` check that uses a different comparison technique and handles `NaN` values correctly.\n\n**Example:**\n\n\n      fun check(value: Double): Boolean {\n          return Double.NaN == value\n      }\n\nAfter the fix is applied:\n\n\n      fun check(value: Double): Boolean {\n          return value.isNaN()\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KotlinPlaceholderCountMatchesArgumentCount",
-                "shortDescription": {
-                  "text": "Number of placeholders does not match number of arguments in logging call"
-                },
-                "fullDescription": {
-                  "text": "Reports SLF4J or Log4j 2 logging calls, such as 'logger.info(\"{}: {}\", key)' where the number of '{}' placeholders in the logger message doesn't match the number of other arguments to the logging call.",
-                  "markdown": "Reports SLF4J or Log4j 2 logging calls, such as `logger.info(\"{}: {}\", key)` where the number of `{}` placeholders in the logger message doesn't match the number of other arguments to the logging call."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Logging",
-                      "index": 155,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceManualRangeWithIndicesCalls",
-                "shortDescription": {
-                  "text": "Range can be converted to indices or iteration"
-                },
-                "fullDescription": {
-                  "text": "Reports 'until' and 'rangeTo' operators that can be replaced with 'Collection.indices' or iteration over collection inside 'for' loop. Using syntactic sugar makes your code simpler. The quick-fix replaces the manual range with the corresponding construction. Example: 'fun main(args: Array<String>) {\n      for (index in 0..args.size - 1) {\n          println(args[index])\n      }\n  }' After the quick-fix is applied: 'fun main(args: Array<String>) {\n      for (element in args) {\n          println(element)\n      }\n  }'",
-                  "markdown": "Reports `until` and `rangeTo` operators that can be replaced with `Collection.indices` or iteration over collection inside `for` loop.\n\nUsing syntactic sugar makes your code simpler.\n\nThe quick-fix replaces the manual range with the corresponding construction.\n\n**Example:**\n\n\n      fun main(args: Array<String>) {\n          for (index in 0..args.size - 1) {\n              println(args[index])\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun main(args: Array<String>) {\n          for (element in args) {\n              println(element)\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KotlinLoggerInitializedWithForeignClass",
-                "shortDescription": {
-                  "text": "Logger initialized with foreign class"
-                },
-                "fullDescription": {
-                  "text": "Reports 'Logger' instances initialized with a class literal other than the class the 'Logger' resides in. This can happen when copy-pasting from another class. It may result in logging events under an unexpected category and incorrect filtering. Use the inspection options to specify the logger factory classes and methods recognized by this inspection. Example: 'class AnotherService\nclass MyService {\n    private val logger = LoggerFactory.getLogger(AnotherService::class.java)\n}' After the quick-fix is applied: 'class MyService {\n    private val logger = LoggerFactory.getLogger(MyService::class.java)\n}'",
-                  "markdown": "Reports `Logger` instances initialized with a class literal other than the class the `Logger` resides in.\n\n\nThis can happen when copy-pasting from another class.\nIt may result in logging events under an unexpected category and incorrect filtering.\n\n\nUse the inspection options to specify the logger factory classes and methods recognized by this inspection.\n\n**Example:**\n\n\n    class AnotherService\n    class MyService {\n        private val logger = LoggerFactory.getLogger(AnotherService::class.java)\n    }\n\nAfter the quick-fix is applied:\n\n\n    class MyService {\n        private val logger = LoggerFactory.getLogger(MyService::class.java)\n    }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Logging",
-                      "index": 155,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RemoveToStringInStringTemplate",
-                "shortDescription": {
-                  "text": "Redundant call to 'toString()' in string template"
-                },
-                "fullDescription": {
-                  "text": "Reports calls to 'toString()' in string templates that can be safely removed. Example: 'fun foo(a: Int, b: Int) = a + b\n\n  fun test(): String {\n      return \"Foo: ${foo(0, 4).toString()}\" // 'toString()' is redundant\n  }' After the quick-fix is applied: 'fun foo(a: Int, b: Int) = a + b\n\n  fun test(): String {\n      return \"Foo: ${foo(0, 4)}\"\n  }'",
-                  "markdown": "Reports calls to `toString()` in string templates that can be safely removed.\n\n**Example:**\n\n      fun foo(a: Int, b: Int) = a + b\n\n      fun test(): String {\n          return \"Foo: ${foo(0, 4).toString()}\" // 'toString()' is redundant\n      }\n\nAfter the quick-fix is applied:\n\n      fun foo(a: Int, b: Int) = a + b\n\n      fun test(): String {\n          return \"Foo: ${foo(0, 4)}\"\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantAsSequence",
-                "shortDescription": {
-                  "text": "Redundant 'asSequence' call"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant 'asSequence()' call that can never have a positive performance effect. 'asSequence()' speeds up collection processing that includes multiple operations because it performs operations lazily and doesn't create intermediate collections. However, if a terminal operation (such as 'toList()') is used right after 'asSequence()', this doesn't give you any positive performance effect. Example: 'fun test(list: List<String>) {\n      list.asSequence().last()\n  }' After the quick-fix is applied: 'fun test(list: List<String>) {\n      list.last()\n  }'",
-                  "markdown": "Reports redundant `asSequence()` call that can never have a positive performance effect.\n\n\n`asSequence()` speeds up collection processing that includes multiple operations because it performs operations lazily\nand doesn't create intermediate collections.\n\n\nHowever, if a terminal operation (such as `toList()`) is used right after `asSequence()`, this doesn't give\nyou any positive performance effect.\n\n**Example:**\n\n\n      fun test(list: List<String>) {\n          list.asSequence().last()\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(list: List<String>) {\n          list.last()\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KotlinUnusedImport",
-                "shortDescription": {
-                  "text": "Unused import directive"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant 'import' statements. Default and unused imports can be safely removed. Example: 'import kotlin.*\n  import kotlin.collections.*\n  import kotlin.comparisons.*\n  import kotlin.io.*\n  import kotlin.ranges.*\n  import kotlin.sequences.*\n  import kotlin.text.*\n\n  // jvm specific\n  import java.lang.*\n  import kotlin.jvm.*\n\n  // js specific\n  import kotlin.js.*\n\n  import java.io.* // this import is unused and could be removed\n  import java.util.*\n\n  fun foo(list: ArrayList<String>) {\n      list.add(\"\")\n  }'",
-                  "markdown": "Reports redundant `import` statements.\n\nDefault and unused imports can be safely removed.\n\n**Example:**\n\n\n      import kotlin.*\n      import kotlin.collections.*\n      import kotlin.comparisons.*\n      import kotlin.io.*\n      import kotlin.ranges.*\n      import kotlin.sequences.*\n      import kotlin.text.*\n\n      // jvm specific\n      import java.lang.*\n      import kotlin.jvm.*\n\n      // js specific\n      import kotlin.js.*\n\n      import java.io.* // this import is unused and could be removed\n      import java.util.*\n\n      fun foo(list: ArrayList<String>) {\n          list.add(\"\")\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "CanBePrimaryConstructorProperty",
-                "shortDescription": {
-                  "text": "Property is explicitly assigned to constructor parameter"
-                },
-                "fullDescription": {
-                  "text": "Reports properties that are explicitly assigned to primary constructor parameters. Properties can be declared directly in the primary constructor, reducing the amount of code and increasing code readability. Example: 'class User(name: String) {\n      val name = name\n  }' A quick-fix joins the parameter and property declaration into a primary constructor parameter: 'class User(val name: String) {\n  }'",
-                  "markdown": "Reports properties that are explicitly assigned to primary constructor parameters.\n\nProperties can be declared directly in the primary constructor, reducing the amount of code and increasing code readability.\n\n**Example:**\n\n\n      class User(name: String) {\n          val name = name\n      }\n\nA quick-fix joins the parameter and property declaration into a primary constructor parameter:\n\n\n      class User(val name: String) {\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "JavaMapForEach",
-                "shortDescription": {
-                  "text": "Java Map.forEach method call should be replaced with Kotlin's forEach"
-                },
-                "fullDescription": {
-                  "text": "Reports a Java Map.'forEach' method call that can be replaced with Kotlin's forEach. Example: 'fun test(map: HashMap<Int, String>) {\n      map.forEach { (key, value) ->\n          foo(key, value)\n      }\n  }\n\n  fun foo(i: Int, s: String) {}' The quick fix removes parentheses: 'fun test(map: HashMap<Int, String>) {\n      map.forEach { key, value ->\n          foo(key, value)\n      }\n  }\n\n  fun foo(i: Int, s: String) {}'",
-                  "markdown": "Reports a Java Map.`forEach` method call that can be replaced with Kotlin's **forEach** .\n\n**Example:**\n\n\n      fun test(map: HashMap<Int, String>) {\n          map.forEach { (key, value) ->\n              foo(key, value)\n          }\n      }\n\n      fun foo(i: Int, s: String) {}\n\nThe quick fix removes parentheses:\n\n\n      fun test(map: HashMap<Int, String>) {\n          map.forEach { key, value ->\n              foo(key, value)\n          }\n      }\n\n      fun foo(i: Int, s: String) {}\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantObjectTypeCheck",
-                "shortDescription": {
-                  "text": "Non-idiomatic 'is' type check for an object"
-                },
-                "fullDescription": {
-                  "text": "Reports non-idiomatic 'is' type checks for an object. It's recommended to replace such checks with reference comparison. Example: 'object Foo\n\n  fun foo(arg: Any) = when {\n      arg is Foo -> ...\n      arg !is Foo -> ...\n  }' After the quick-fix is applied: 'object Foo\n\n  fun foo(arg: Any) = when {\n      arg === Foo -> ...\n      arg !== Foo -> ...\n  }'",
-                  "markdown": "Reports non-idiomatic `is` type checks for an object.\n\nIt's recommended to replace such checks with reference comparison.\n\n**Example:**\n\n\n      object Foo\n\n      fun foo(arg: Any) = when {\n          arg is Foo -> ...\n          arg !is Foo -> ...\n      }\n\nAfter the quick-fix is applied:\n\n\n      object Foo\n\n      fun foo(arg: Any) = when {\n          arg === Foo -> ...\n          arg !== Foo -> ...\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SuspendFunctionOnCoroutineScope",
-                "shortDescription": {
-                  "text": "Ambiguous coroutineContext due to CoroutineScope receiver of suspend function"
-                },
-                "fullDescription": {
-                  "text": "Reports calls and accesses of 'CoroutineScope' extensions or members inside suspend functions with 'CoroutineScope' receiver. When a function is 'suspend' and has 'CoroutineScope' receiver, it has ambiguous access to 'CoroutineContext' via 'kotlin.coroutines.coroutineContext' and via 'CoroutineScope.coroutineContext', and two these contexts are different in general. To improve this situation, one can wrap suspicious call inside 'coroutineScope { ... }' or get rid of 'CoroutineScope' function receiver.",
-                  "markdown": "Reports calls and accesses of `CoroutineScope` extensions or members inside suspend functions with `CoroutineScope` receiver.\n\nWhen a function is `suspend` and has `CoroutineScope` receiver,\nit has ambiguous access to `CoroutineContext` via `kotlin.coroutines.coroutineContext` and via `CoroutineScope.coroutineContext`,\nand two these contexts are different in general.\n\n\nTo improve this situation, one can wrap suspicious call inside `coroutineScope { ... }` or\nget rid of `CoroutineScope` function receiver."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "DifferentMavenStdlibVersion",
-                "shortDescription": {
-                  "text": "Library and maven plugin versions are different"
-                },
-                "fullDescription": {
-                  "text": "Reports different Kotlin stdlib and compiler versions. Using different versions of the Kotlin compiler and the standard library can lead to unpredictable runtime problems and should be avoided.",
-                  "markdown": "Reports different Kotlin stdlib and compiler versions.\n\nUsing different versions of the Kotlin compiler and the standard library can lead to unpredictable\nruntime problems and should be avoided."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin",
-                      "index": 1,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ImplicitNullableNothingType",
-                "shortDescription": {
-                  "text": "Implicit 'Nothing?' type"
-                },
-                "fullDescription": {
-                  "text": "Reports variables and functions with the implicit Nothing? type. Example: 'fun foo() = null' The quick fix specifies the return type explicitly: 'fun foo(): Nothing? = null'",
-                  "markdown": "Reports variables and functions with the implicit **Nothing?** type.\n\n**Example:**\n\n\n      fun foo() = null\n\nThe quick fix specifies the return type explicitly:\n\n\n      fun foo(): Nothing? = null\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceAssociateFunction",
-                "shortDescription": {
-                  "text": "'associate' can be replaced with 'associateBy' or 'associateWith'"
-                },
-                "fullDescription": {
-                  "text": "Reports calls to 'associate()' and 'associateTo()' that can be replaced with 'associateBy()' or 'associateWith()'. Both functions accept a transformer function applied to elements of a given sequence or collection (as a receiver). The pairs are then used to build the resulting 'Map'. Given the transformer refers to 'it', the 'associate[To]()' call can be replaced with more performant 'associateBy()' or 'associateWith()'. Examples: 'fun getKey(i: Int) = 1L\n  fun getValue(i: Int) = 1L\n\n  fun test() {\n      arrayOf(1).associate { getKey(it) to it }  // replaceable 'associate()'\n      listOf(1).associate { it to getValue(it) } // replaceable 'associate()'\n  }' After the quick-fix is applied: 'fun getKey(i: Int) = 1L\n  fun getValue(i: Int) = 1L\n\n  fun test() {\n      arrayOf(1).associateBy { getKey(it) }\n      listOf(1).associateWith { getValue(it) }\n  }'",
-                  "markdown": "Reports calls to `associate()` and `associateTo()` that can be replaced with `associateBy()` or `associateWith()`.\n\n\nBoth functions accept a transformer function applied to elements of a given sequence or collection (as a receiver).\nThe pairs are then used to build the resulting `Map`.\n\n\nGiven the transformer refers to `it`, the `associate[To]()` call can be replaced with more performant `associateBy()`\nor `associateWith()`.\n\n**Examples:**\n\n      fun getKey(i: Int) = 1L\n      fun getValue(i: Int) = 1L\n\n      fun test() {\n          arrayOf(1).associate { getKey(it) to it }  // replaceable 'associate()'\n          listOf(1).associate { it to getValue(it) } // replaceable 'associate()'\n      }\n\nAfter the quick-fix is applied:\n\n      fun getKey(i: Int) = 1L\n      fun getValue(i: Int) = 1L\n\n      fun test() {\n          arrayOf(1).associateBy { getKey(it) }\n          listOf(1).associateWith { getValue(it) }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ObsoleteExperimentalCoroutines",
-                "shortDescription": {
-                  "text": "Experimental coroutines usages are deprecated since 1.3"
-                },
-                "fullDescription": {
-                  "text": "Reports code that uses experimental coroutines. Such usages are incompatible with Kotlin 1.3+ and should be updated.",
-                  "markdown": "Reports code that uses experimental coroutines.\n\nSuch usages are incompatible with Kotlin 1.3+ and should be updated."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "error",
-                  "parameters": {
-                    "ideaSeverity": "ERROR",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Migration",
-                      "index": 15,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "LiftReturnOrAssignment",
-                "shortDescription": {
-                  "text": "Return or assignment can be lifted out"
-                },
-                "fullDescription": {
-                  "text": "Reports 'if', 'when', and 'try' statements that can be converted to expressions by lifting the 'return' statement or an assignment out. Example: 'fun foo(arg: Int): String {\n      when (arg) {\n          0 -> return \"Zero\"\n          1 -> return \"One\"\n          else -> return \"Multiple\"\n      }\n  }' After the quick-fix is applied: 'fun foo(arg: Int): String {\n      return when (arg) {\n          0 -> \"Zero\"\n          1 -> \"One\"\n          else -> \"Multiple\"\n      }\n  }'",
-                  "markdown": "Reports `if`, `when`, and `try` statements that can be converted to expressions by lifting the `return` statement or an assignment out.\n\n**Example:**\n\n\n      fun foo(arg: Int): String {\n          when (arg) {\n              0 -> return \"Zero\"\n              1 -> return \"One\"\n              else -> return \"Multiple\"\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(arg: Int): String {\n          return when (arg) {\n              0 -> \"Zero\"\n              1 -> \"One\"\n              else -> \"Multiple\"\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SimplifyWhenWithBooleanConstantCondition",
-                "shortDescription": {
-                  "text": "Simplifiable 'when'"
-                },
-                "fullDescription": {
-                  "text": "Reports 'when' expressions with the constant 'true' or 'false' branches. Simplify \"when\" quick-fix can be used to amend the code automatically. Examples: 'fun redundant() {\n      when { // <== redundant, quick-fix simplifies the when expression to \"println(\"true\")\"\n          true -> println(\"true\")\n          else -> println(\"false\")\n      }\n  }'",
-                  "markdown": "Reports `when` expressions with the constant `true` or `false` branches.\n\n**Simplify \"when\"** quick-fix can be used to amend the code automatically.\n\nExamples:\n\n\n      fun redundant() {\n          when { // <== redundant, quick-fix simplifies the when expression to \"println(\"true\")\"\n              true -> println(\"true\")\n              else -> println(\"false\")\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KotlinConstantConditions",
-                "shortDescription": {
-                  "text": "Constant conditions"
-                },
-                "fullDescription": {
-                  "text": "Reports non-trivial conditions and values that are statically known to be always true, false, null or zero. While sometimes intended, often this is a sign of logical error in the program. Additionally, reports never reachable 'when' branches and some expressions that are statically known to fail always. Examples: 'fun process(x: Int?) {\n  val isNull = x == null\n  if (!isNull) {\n    if (x != null) {} // condition is always true\n    require(x!! < 0 && x > 10) // condition is always false\n  } else {\n    println(x!!) // !! operator will always fail\n  }\n}\nfun process(v: Any) {\n  when(v) {\n    is CharSequence -> println(v as Int) // cast will always fail\n    is String -> println(v) // branch is unreachable\n  }\n}' New in 2021.3",
-                  "markdown": "Reports non-trivial conditions and values that are statically known to be always true, false, null or zero. While sometimes intended, often this is a sign of logical error in the program. Additionally, reports never reachable `when` branches and some expressions that are statically known to fail always.\n\nExamples:\n\n\n    fun process(x: Int?) {\n      val isNull = x == null\n      if (!isNull) {\n        if (x != null) {} // condition is always true\n        require(x!! < 0 && x > 10) // condition is always false\n      } else {\n        println(x!!) // !! operator will always fail\n      }\n    }\n    fun process(v: Any) {\n      when(v) {\n        is CharSequence -> println(v as Int) // cast will always fail\n        is String -> println(v) // branch is unreachable\n      }\n    }\n\nNew in 2021.3"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ForEachParameterNotUsed",
-                "shortDescription": {
-                  "text": "Iterated elements are not used in forEach"
-                },
-                "fullDescription": {
-                  "text": "Reports 'forEach' loops that do not use iterable values. Example: 'listOf(1, 2, 3).forEach { }' The quick fix introduces anonymous parameter in the 'forEach' section: 'listOf(1, 2, 3).forEach { _ -> }'",
-                  "markdown": "Reports `forEach` loops that do not use iterable values.\n\n**Example:**\n\n\n      listOf(1, 2, 3).forEach { }\n\nThe quick fix introduces anonymous parameter in the `forEach` section:\n\n\n      listOf(1, 2, 3).forEach { _ -> }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "LeakingThis",
-                "shortDescription": {
-                  "text": "Leaking 'this' in constructor"
-                },
-                "fullDescription": {
-                  "text": "Reports unsafe operations with 'this' during object construction including: Accessing a non-final property during class initialization: from a constructor or property initialization Calling a non-final function during class initialization Using 'this' as a function argument in a constructor of a non-final class If other classes inherit from the given class, they may not be fully initialized at the moment when an unsafe operation is carried out. Example: 'abstract class Base {\n      val code = calculate()\n      abstract fun calculate(): Int\n  }\n\n  class Derived(private val x: Int) : Base() {\n      override fun calculate() = x\n  }\n\n  fun testIt() {\n      println(Derived(42).code) // Expected: 42, actual: 0\n  }'",
-                  "markdown": "Reports unsafe operations with `this` during object construction including:\n\n* Accessing a non-final property during class initialization: from a constructor or property initialization\n* Calling a non-final function during class initialization\n* Using `this` as a function argument in a constructor of a non-final class\n\n\nIf other classes inherit from the given class,\nthey may not be fully initialized at the moment when an unsafe operation is carried out.\n\n**Example:**\n\n\n      abstract class Base {\n          val code = calculate()\n          abstract fun calculate(): Int\n      }\n\n      class Derived(private val x: Int) : Base() {\n          override fun calculate() = x\n      }\n\n      fun testIt() {\n          println(Derived(42).code) // Expected: 42, actual: 0\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "AddVarianceModifier",
-                "shortDescription": {
-                  "text": "Type parameter can have 'in' or 'out' variance"
-                },
-                "fullDescription": {
-                  "text": "Reports type parameters that can have 'in' or 'out' variance. Using 'in' and 'out' variance provides more precise type inference in Kotlin and clearer code semantics. Example: 'class Box<T>(val obj: T)\n\n  fun consumeString(box: Box<String>) {}\n  fun consumeCharSequence(box: Box<CharSequence>) {}\n\n  fun usage(box: Box<String>) {\n      consumeString(box)\n      consumeCharSequence(box) // Compilation error\n  }' A quick-fix adds the matching variance modifier: 'class Box<out T>(val obj: T)\n\n  fun consumeString(box: Box<String>) {}\n  fun consumeCharSequence(box: Box<CharSequence>) {}\n\n  fun usage(box: Box<String>) ++{\n      consumeString(box)\n      consumeCharSequence(box) // OK\n  }'",
-                  "markdown": "Reports type parameters that can have `in` or `out` variance.\n\nUsing `in` and `out` variance provides more precise type inference in Kotlin and clearer code semantics.\n\n**Example:**\n\n\n      class Box<T>(val obj: T)\n\n      fun consumeString(box: Box<String>) {}\n      fun consumeCharSequence(box: Box<CharSequence>) {}\n\n      fun usage(box: Box<String>) {\n          consumeString(box)\n          consumeCharSequence(box) // Compilation error\n      }\n\nA quick-fix adds the matching variance modifier:\n\n\n      class Box<out T>(val obj: T)\n\n      fun consumeString(box: Box<String>) {}\n      fun consumeCharSequence(box: Box<CharSequence>) {}\n\n      fun usage(box: Box<String>) ++{\n          consumeString(box)\n          consumeCharSequence(box) // OK\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RemoveForLoopIndices",
-                "shortDescription": {
-                  "text": "Unused loop index"
-                },
-                "fullDescription": {
-                  "text": "Reports 'for' loops iterating over a collection using the 'withIndex()' function and not using the index variable. Use the \"Remove indices in 'for' loop\" quick-fix to clean up the code. Examples: 'fun foo(bar: List<String>) {\n     for ((index : Int, value: String) in bar.withIndex()) { // <== 'index' is unused\n         println(value)\n     }\n  }' After the quick-fix is applied: 'fun foo(bar: List<String>) {\n      for (value: String in bar) { // <== '.withIndex()' and 'index' are removed\n          println(value)\n      }\n  }'",
-                  "markdown": "Reports `for` loops iterating over a collection using the `withIndex()` function and not using the index variable.\n\nUse the \"Remove indices in 'for' loop\" quick-fix to clean up the code.\n\n**Examples:**\n\n\n      fun foo(bar: List<String>) {\n         for ((index : Int, value: String) in bar.withIndex()) { // <== 'index' is unused\n             println(value)\n         }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(bar: List<String>) {\n          for (value: String in bar) { // <== '.withIndex()' and 'index' are removed\n              println(value)\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantSuspendModifier",
-                "shortDescription": {
-                  "text": "Redundant 'suspend' modifier"
-                },
-                "fullDescription": {
-                  "text": "Reports 'suspend' modifier as redundant if no other suspending functions are called inside.",
-                  "markdown": "Reports `suspend` modifier as redundant if no other suspending functions are called inside."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SuspiciousAsDynamic",
-                "shortDescription": {
-                  "text": "Suspicious 'asDynamic' member invocation"
-                },
-                "fullDescription": {
-                  "text": "Reports usages of 'asDynamic' function on a receiver of dynamic type. 'asDynamic' function has no effect for expressions of dynamic type. 'asDynamic' function on a receiver of dynamic type can lead to runtime problems because 'asDynamic' will be executed in JavaScript environment, and such function may not be present at runtime. The intended way is to use this function on usual Kotlin type. Remove \"asDynamic\" invocation quick-fix can be used to amend the code automatically. Example: 'fun wrongUsage(d: Dynamic) {\n     d.asDynamic().foo() // <== redundant, quick-fix simplifies the call expression to \"d.foo()\"\n  }'",
-                  "markdown": "Reports usages of `asDynamic` function on a receiver of dynamic type.\n\n`asDynamic` function has no effect for expressions of dynamic type.\n\n`asDynamic` function on a receiver of dynamic type can lead to runtime problems because `asDynamic`\nwill be executed in JavaScript environment, and such function may not be present at runtime.\nThe intended way is to use this function on usual Kotlin type.\n\n**Remove \"asDynamic\" invocation** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n      fun wrongUsage(d: Dynamic) {\n         d.asDynamic().foo() // <== redundant, quick-fix simplifies the call expression to \"d.foo()\"\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "FromClosedRangeMigration",
-                "shortDescription": {
-                  "text": "MIN_VALUE step in fromClosedRange() since 1.3"
-                },
-                "fullDescription": {
-                  "text": "Reports 'IntProgression.fromClosedRange()' and 'LongProgression.fromClosedRange()' with 'MIN_VALUE' step. It is prohibited to call 'IntProgression.fromClosedRange()' and 'LongProgression.fromClosedRange()' with 'MIN_VALUE' step. All such calls should be checked during migration to Kotlin 1.3+. Example: 'IntProgression.fromClosedRange(12, 143, Int.MIN_VALUE)' To fix the problem change the step of the progression.",
-                  "markdown": "Reports `IntProgression.fromClosedRange()` and `LongProgression.fromClosedRange()` with `MIN_VALUE` step.\n\n\nIt is prohibited to call `IntProgression.fromClosedRange()` and `LongProgression.fromClosedRange()` with\n`MIN_VALUE` step. All such calls should be checked during migration to Kotlin 1.3+.\n\n**Example:**\n\n\n      IntProgression.fromClosedRange(12, 143, Int.MIN_VALUE)\n\nTo fix the problem change the step of the progression."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Migration",
-                      "index": 15,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RemoveRedundantBackticks",
-                "shortDescription": {
-                  "text": "Redundant backticks"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant backticks in references. Some of the Kotlin keywords are valid identifiers in Java, for example: 'in', 'object', 'is'. If a Java library uses a Kotlin keyword for a method, you can still call the method escaping it with the backtick character ('`'), for example, 'foo.`is`(bar)'. Sometimes this escaping is redundant and can be safely omitted. The inspection discovers and reports such cases and is paired with the 'Remove redundant backticks' quick-fix, which allows you to amend the highlighted code. Examples: 'fun `is`(x: String) {}\n  fun foo() {\n      `is`(\"bar\") // 'is' is a keyword, backticks are required\n  }\n\n  fun `test that smth works as designed`() {} // OK, complex identifier for readability improvement\n\n  val `a` = 1  // no need for backticks'",
-                  "markdown": "Reports redundant backticks in references.\n\n\nSome of the Kotlin keywords are valid identifiers in Java, for example: `in`, `object`, `is`.\nIf a Java library uses a Kotlin keyword for a method, you can still call the method escaping it\nwith the backtick character (`````), for example, ``foo.`is`(bar)``.\nSometimes this escaping is redundant and can be safely omitted. The inspection discovers and reports such cases and is\npaired with the 'Remove redundant backticks' quick-fix, which allows you to amend the highlighted code.\n\n**Examples:**\n\n\n      fun `is`(x: String) {}\n      fun foo() {\n          `is`(\"bar\") // 'is' is a keyword, backticks are required\n      }\n\n      fun `test that smth works as designed`() {} // OK, complex identifier for readability improvement\n\n      val `a` = 1  // no need for backticks\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SimplifyNestedEachInScopeFunction",
-                "shortDescription": {
-                  "text": "Scope function with nested forEach can be simplified"
-                },
-                "fullDescription": {
-                  "text": "Reports 'forEach' functions in the scope functions such as 'also' or 'apply' that can be simplified. Convert forEach call to onEach quick-fix can be used to amend the code automatically. Examples: 'fun test(list: List<Int>) {\n      val x = list.also { it.forEach { it + 4 } }.toString()\n      val y = list.apply { forEach { println(it) } }\n  }' After the quick-fix is applied: 'fun test(list: List<Int>) {\n      val x = list.onEach { it + 4 }.toString()\n      val y = list.onEach { println(it) }\n  }'",
-                  "markdown": "Reports `forEach` functions in the scope functions such as `also` or `apply` that can be simplified.\n\n**Convert forEach call to onEach** quick-fix can be used to amend the code automatically.\n\nExamples:\n\n\n      fun test(list: List<Int>) {\n          val x = list.also { it.forEach { it + 4 } }.toString()\n          val y = list.apply { forEach { println(it) } }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(list: List<Int>) {\n          val x = list.onEach { it + 4 }.toString()\n          val y = list.onEach { println(it) }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "UnsafeCastFromDynamic",
-                "shortDescription": {
-                  "text": "Implicit (unsafe) cast from dynamic type"
-                },
-                "fullDescription": {
-                  "text": "Reports expressions with a dynamic type in the specified inspection scope that are implicitly cast to another type.",
-                  "markdown": "Reports expressions with a dynamic type in the specified inspection scope that are implicitly cast to another type."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "PublicApiImplicitType",
-                "shortDescription": {
-                  "text": "Public API declaration with implicit return type"
-                },
-                "fullDescription": {
-                  "text": "Reports 'public' and 'protected' functions and properties that have an implicit return type. For API stability reasons, it's recommended to specify such types explicitly. Example: 'fun publicFunctionWhichAbusesTypeInference() =\n      otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()' After the quick-fix is applied: 'fun publicFunctionWhichAbusesTypeInference(): Api =\n      otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()'",
-                  "markdown": "Reports `public` and `protected` functions and properties that have an implicit return type.\nFor API stability reasons, it's recommended to specify such types explicitly.\n\n**Example:**\n\n\n      fun publicFunctionWhichAbusesTypeInference() =\n          otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()\n\nAfter the quick-fix is applied:\n\n\n      fun publicFunctionWhichAbusesTypeInference(): Api =\n          otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Other problems",
-                      "index": 145,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceMapIndexedWithListGenerator",
-                "shortDescription": {
-                  "text": "Replace 'mapIndexed' with List generator"
-                },
-                "fullDescription": {
-                  "text": "Reports a 'mapIndexed' call that can be replaced by 'List' generator. Example: 'val a = listOf(1, 2, 3).mapIndexed { i, _ ->\n      i + 42\n  }' After the quick-fix is applied: 'val a = List(listOf(1, 2, 3).size) { i ->\n          i + 42\n  }'",
-                  "markdown": "Reports a `mapIndexed` call that can be replaced by `List` generator.\n\n**Example:**\n\n\n      val a = listOf(1, 2, 3).mapIndexed { i, _ ->\n          i + 42\n      }\n\nAfter the quick-fix is applied:\n\n\n      val a = List(listOf(1, 2, 3).size) { i ->\n              i + 42\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ControlFlowWithEmptyBody",
-                "shortDescription": {
-                  "text": "Control flow with empty body"
-                },
-                "fullDescription": {
-                  "text": "Reports 'if', 'while', 'do' or 'for' statements with empty bodies. While occasionally intended, this construction is confusing and often the result of a typo. A quick-fix removes a statement. Example: 'if (a > b) {}'",
-                  "markdown": "Reports `if`, `while`, `do` or `for` statements with empty bodies.\n\nWhile occasionally intended, this construction is confusing and often the result of a typo.\n\nA quick-fix removes a statement.\n\n**Example:**\n\n\n      if (a > b) {}\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "LoopToCallChain",
-                "shortDescription": {
-                  "text": "Loop can be replaced with stdlib operations"
-                },
-                "fullDescription": {
-                  "text": "Reports 'for' loops that can be replaced with a sequence of stdlib operations (like 'map', 'filter', and so on). Example: 'fun foo(list: List<String>): List<Int> {\n  val result = ArrayList<Int>()\n  for (s in list) {\n     if (s.length > 0)\n       result.add(s.hashCode())\n     }\n  return result\n}' After the quick-fix is applied: 'fun foo(list: List<String>): List<Int> {\n  val result = list\n    .filter { it.length > 0 }\n    .map { it.hashCode() }\n  return result\n}'",
-                  "markdown": "Reports `for` loops that can be replaced with a sequence of stdlib operations (like `map`, `filter`, and so on).\n\n**Example:**\n\n\n    fun foo(list: List<String>): List<Int> {\n      val result = ArrayList<Int>()\n      for (s in list) {\n         if (s.length > 0)\n           result.add(s.hashCode())\n         }\n      return result\n    }\n\nAfter the quick-fix is applied:\n\n\n    fun foo(list: List<String>): List<Int> {\n      val result = list\n        .filter { it.length > 0 }\n        .map { it.hashCode() }\n      return result\n    }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RemoveEmptyClassBody",
-                "shortDescription": {
-                  "text": "Replace empty class body"
-                },
-                "fullDescription": {
-                  "text": "Reports declarations of classes and objects with an empty body. Use the 'Remove redundant empty class body' quick-fix to clean up the code. Examples: 'class EmptyA() {} // <== empty body\n\n  class EmptyB {\n      companion object {} // <== empty body\n  }\n\n  fun emptyC() {\n     object {} // <== anonymous object, it's ok (not reported)\n  }' After the quick fix is applied: 'class EmptyA()\n\n  class EmptyB {\n      companion object\n  }\n\n  fun emptyC() {\n     object {}\n  }'",
-                  "markdown": "Reports declarations of classes and objects with an empty body.\n\nUse the 'Remove redundant empty class body' quick-fix to clean up the code.\n\n**Examples:**\n\n\n      class EmptyA() {} // <== empty body\n\n      class EmptyB {\n          companion object {} // <== empty body\n      }\n\n      fun emptyC() {\n         object {} // <== anonymous object, it's ok (not reported)\n      }\n\nAfter the quick fix is applied:\n\n\n      class EmptyA()\n\n      class EmptyB {\n          companion object\n      }\n\n      fun emptyC() {\n         object {}\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "CanBeParameter",
-                "shortDescription": {
-                  "text": "Constructor parameter is never used as a property"
-                },
-                "fullDescription": {
-                  "text": "Reports primary constructor parameters that can have 'val' or 'var' removed. Class properties declared in the constructor increase memory consumption. If the parameter value is only used in the constructor, you can omit them. Note that the referenced object might be garbage-collected earlier. Example: 'class Task(val name: String) {\n      init {\n          print(\"Task created: $name\")\n      }\n  }' A quick-fix removes the extra 'val' or 'var' keyword: 'class Task(name: String) {\n      init {\n          print(\"Task created: $name\")\n      }\n  }'",
-                  "markdown": "Reports primary constructor parameters that can have `val` or `var` removed.\n\n\nClass properties declared in the constructor increase memory consumption.\nIf the parameter value is only used in the constructor, you can omit them.\n\nNote that the referenced object might be garbage-collected earlier.\n\n**Example:**\n\n\n      class Task(val name: String) {\n          init {\n              print(\"Task created: $name\")\n          }\n      }\n\nA quick-fix removes the extra `val` or `var` keyword:\n\n\n      class Task(name: String) {\n          init {\n              print(\"Task created: $name\")\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantReturnLabel",
-                "shortDescription": {
-                  "text": "Redundant 'return' label"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant return labels outside of lambda expressions. Example: 'fun test() {\n      return@test\n  }' After the quick-fix is applied: 'fun test() {\n      return\n  }'",
-                  "markdown": "Reports redundant return labels outside of lambda expressions.\n\n**Example:**\n\n\n      fun test() {\n          return@test\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test() {\n          return\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "PackageName",
-                "shortDescription": {
-                  "text": "Package naming convention"
-                },
-                "fullDescription": {
-                  "text": "Reports package names that do not follow the naming conventions. You can specify the required pattern in the inspection options. Recommended naming conventions: names of packages are always lowercase and should not contain underscores. Example: 'org.example.project' Using multi-word names is generally discouraged, but if you do need to use multiple words, you can either just concatenate them together or use camel case Example: 'org.example.myProject'",
-                  "markdown": "Reports package names that do not follow the naming conventions.\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#naming-rules): names of packages are always lowercase and should not contain underscores.\n\n**Example:**\n`org.example.project`\n\nUsing multi-word names is generally discouraged, but if you do need to use multiple words, you can either just concatenate them together or use camel case\n\n**Example:**\n`org.example.myProject`"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Naming conventions",
-                      "index": 48,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ProhibitUseSiteTargetAnnotationsOnSuperTypesMigration",
-                "shortDescription": {
-                  "text": "Meaningless annotations targets on superclass"
-                },
-                "fullDescription": {
-                  "text": "Reports meaningless annotation targets on superclasses since Kotlin 1.4. Annotation targets such as '@get:' are meaningless on superclasses and are prohibited. Example: 'interface Foo\n\n  annotation class Ann\n\n  class E : @field:Ann @get:Ann @set:Ann @setparam:Ann Foo' After the quick-fix is applied: 'interface Foo\n\n  annotation class Ann\n\n  class E : Foo' This inspection only reports if the Kotlin language level of the project or module is 1.4 or higher.",
-                  "markdown": "Reports meaningless annotation targets on superclasses since Kotlin 1.4.\n\nAnnotation targets such as `@get:` are meaningless on superclasses and are prohibited.\n\n**Example:**\n\n\n      interface Foo\n\n      annotation class Ann\n\n      class E : @field:Ann @get:Ann @set:Ann @setparam:Ann Foo\n\nAfter the quick-fix is applied:\n\n\n      interface Foo\n\n      annotation class Ann\n\n      class E : Foo\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "error",
-                  "parameters": {
-                    "ideaSeverity": "ERROR",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Migration",
-                      "index": 15,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceWithEnumMap",
-                "shortDescription": {
-                  "text": "'HashMap' can be replaced with 'EnumMap'"
-                },
-                "fullDescription": {
-                  "text": "Reports 'hashMapOf' function or 'HashMap' constructor calls that can be replaced with an 'EnumMap' constructor call. Using 'EnumMap' constructor makes your code simpler. The quick-fix replaces the function call with the 'EnumMap' constructor call. Example: 'enum class E {\n      A, B\n  }\n\n  fun getMap(): Map<E, String> = hashMapOf()' After the quick-fix is applied: 'enum class E {\n      A, B\n  }\n\n  fun getMap(): Map<E, String> = EnumMap(E::class.java)'",
-                  "markdown": "Reports `hashMapOf` function or `HashMap` constructor calls that can be replaced with an `EnumMap` constructor call.\n\nUsing `EnumMap` constructor makes your code simpler.\n\nThe quick-fix replaces the function call with the `EnumMap` constructor call.\n\n**Example:**\n\n\n      enum class E {\n          A, B\n      }\n\n      fun getMap(): Map<E, String> = hashMapOf()\n\nAfter the quick-fix is applied:\n\n\n      enum class E {\n          A, B\n      }\n\n      fun getMap(): Map<E, String> = EnumMap(E::class.java)\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Other problems",
-                      "index": 145,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SuspiciousCollectionReassignment",
-                "shortDescription": {
-                  "text": "Augmented assignment creates a new collection under the hood"
-                },
-                "fullDescription": {
-                  "text": "Reports augmented assignment ('+=') expressions on read-only 'Collection'. Augment assignment ('+=') expression on read-only 'Collection' doesn't modify the target collection, it creates a new one under the hood which can be misleading and lead to performance issues. Change type to mutable quick-fix can be used to amend the code automatically. Example: 'fun test() {\n      var list = listOf(0)\n      list += 42 // new list is created, variable 'list' still contains only '0'\n  }' After the quick-fix is applied: 'fun test() {\n      val list = mutableListOf(0)\n      list += 42\n  }'",
-                  "markdown": "Reports augmented assignment (`+=`) expressions on read-only `Collection`.\n\nAugment assignment (`+=`) expression on read-only `Collection` doesn't modify the target collection,\nit creates a new one under the hood which can be misleading and lead to performance issues.\n\n**Change type to mutable** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n      fun test() {\n          var list = listOf(0)\n          list += 42 // new list is created, variable 'list' still contains only '0'\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test() {\n          val list = mutableListOf(0)\n          list += 42\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantNotNullExtensionReceiverOfInline",
-                "shortDescription": {
-                  "text": "'inline fun' extension receiver can be explicitly nullable until Kotlin 1.2"
-                },
-                "fullDescription": {
-                  "text": "Reports inline functions with non-nullable extension receivers which don't use the fact that extension receiver is not nullable. Before Kotlin 1.2, calls of 'inline fun' with flexible nullable extension receiver (a platform type with an unknown nullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode (see KT-12899). Thus functions which do not use the fact that extension receiver is not nullable are dangerous in Kotlin until 1.2 and it's recommended to make such functions to have nullable receiver. Example: 'inline fun String.greet() {\n      println(\"Hello, $this!\")\n  }\n\n  fun main() {\n      // `System.getProperty` returns not denotable `String!` type\n      val user = System.getProperty(\"user.name\")\n      user.greet()\n  }' After the quick-fix is applied: 'inline fun String.greet() {\n      println(\"Hello, $this!\")\n  }\n\n  fun main() {\n      // `System.getProperty` returns not denotable `String!` type\n      val user = System.getProperty(\"user.name\")\n      user.greet()\n  }' This inspection only reports if the Kotlin language level of the project or module is lower than 1.2.",
-                  "markdown": "Reports inline functions with non-nullable extension receivers which don't use the fact that extension receiver is not nullable.\n\n\nBefore Kotlin 1.2, calls of `inline fun` with flexible nullable extension receiver (a platform type with an unknown\nnullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode\n(see [KT-12899](https://youtrack.jetbrains.com/issue/KT-12899)).\n\n\nThus functions which do not use the fact that extension receiver is not nullable are dangerous in Kotlin until 1.2 and it's\nrecommended to make such functions to have nullable receiver.\n\n**Example:**\n\n\n      inline fun String.greet() {\n          println(\"Hello, $this!\")\n      }\n\n      fun main() {\n          // `System.getProperty` returns not denotable `String!` type\n          val user = System.getProperty(\"user.name\")\n          user.greet()\n      }\n\nAfter the quick-fix is applied:\n\n\n      inline fun String.greet() {\n          println(\"Hello, $this!\")\n      }\n\n      fun main() {\n          // `System.getProperty` returns not denotable `String!` type\n          val user = System.getProperty(\"user.name\")\n          user.greet()\n      }\n\nThis inspection only reports if the Kotlin language level of the project or module is lower than 1.2."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Java interop issues",
-                      "index": 55,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantElvisReturnNull",
-                "shortDescription": {
-                  "text": "Redundant '?: return null'"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant '?: return null' Example: 'fun foo(): Int? {\n      ...\n  }\n\n  fun test() : Int? {\n      return foo() ?: return null\n  }' After the quick-fix is applied: 'fun foo(): Int? {\n      ...\n  }\n\n  fun test() : Int? {\n      return foo()\n  }'",
-                  "markdown": "Reports redundant `?: return null`\n\n**Example:**\n\n\n      fun foo(): Int? {\n          ...\n      }\n\n      fun test() : Int? {\n          return foo() ?: return null\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(): Int? {\n          ...\n      }\n\n      fun test() : Int? {\n          return foo()\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "PrivatePropertyName",
-                "shortDescription": {
-                  "text": "Private property naming convention"
-                },
-                "fullDescription": {
-                  "text": "Reports private property names that do not follow the recommended naming conventions. Consistent naming allows for easier code reading and understanding. According to the Kotlin official style guide, private property names should start with a lowercase letter and use camel case. Optionally, underscore prefix is allowed but only for private properties. It is possible to introduce other naming rules by changing the \"Pattern\" regular expression. Example: 'val _My_Cool_Property = \"\"' A quick-fix renames the class according to the Kotlin naming conventions: 'val _myCoolProperty = \"\"'",
-                  "markdown": "Reports private property names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#naming-rules),\nprivate property names should start with a lowercase letter and use camel case.\nOptionally, underscore prefix is allowed but only for **private** properties.\n\nIt is possible to introduce other naming rules by changing the \"Pattern\" regular expression.\n\n**Example:**\n\n\n      val _My_Cool_Property = \"\"\n\nA quick-fix renames the class according to the Kotlin naming conventions:\n\n\n      val _myCoolProperty = \"\"\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Naming conventions",
-                      "index": 48,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ObsoleteKotlinJsPackages",
-                "shortDescription": {
-                  "text": "'kotlin.browser' and 'kotlin.dom' packages are deprecated since 1.4"
-                },
-                "fullDescription": {
-                  "text": "Reports usages of 'kotlin.dom' and 'kotlin.browser' packages. These packages were moved to 'kotlinx.dom' and 'kotlinx.browser' respectively in Kotlin 1.4+.",
-                  "markdown": "Reports usages of `kotlin.dom` and `kotlin.browser` packages.\n\nThese packages were moved to `kotlinx.dom` and `kotlinx.browser`\nrespectively in Kotlin 1.4+."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "error",
-                  "parameters": {
-                    "ideaSeverity": "ERROR",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Migration",
-                      "index": 15,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "CascadeIf",
-                "shortDescription": {
-                  "text": "Cascade if can be replaced with when"
-                },
-                "fullDescription": {
-                  "text": "Reports 'if' statements with three or more branches that can be replaced with the 'when' expression. Example: 'fun checkIdentifier(id: String) {\n      fun Char.isIdentifierStart() = this in 'A'..'z'\n      fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n      if (id.isEmpty()) {\n          print(\"Identifier is empty\")\n      } else if (!id.first().isIdentifierStart()) {\n          print(\"Identifier should start with a letter\")\n      } else if (!id.subSequence(1, id.length).all(Char::isIdentifierPart)) {\n          print(\"Identifier should contain only letters and numbers\")\n      }\n  }' A quick-fix converts the 'if' expression to 'when': 'fun checkIdentifier(id: String) {\n      fun Char.isIdentifierStart() = this in 'A'..'z'\n      fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n      when {\n          id.isEmpty() -> {\n              print(\"Identifier is empty\")\n          }\n          !id.first().isIdentifierStart() -> {\n              print(\"Identifier should start with a letter\")\n          }\n          !id.subSequence(1, id.length).all(Char::isIdentifierPart) -> {\n              print(\"Identifier should contain only letters and numbers\")\n          }\n      }\n  }'",
-                  "markdown": "Reports `if` statements with three or more branches that can be replaced with the `when` expression.\n\n**Example:**\n\n\n      fun checkIdentifier(id: String) {\n          fun Char.isIdentifierStart() = this in 'A'..'z'\n          fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n          if (id.isEmpty()) {\n              print(\"Identifier is empty\")\n          } else if (!id.first().isIdentifierStart()) {\n              print(\"Identifier should start with a letter\")\n          } else if (!id.subSequence(1, id.length).all(Char::isIdentifierPart)) {\n              print(\"Identifier should contain only letters and numbers\")\n          }\n      }\n\nA quick-fix converts the `if` expression to `when`:\n\n\n      fun checkIdentifier(id: String) {\n          fun Char.isIdentifierStart() = this in 'A'..'z'\n          fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n          when {\n              id.isEmpty() -> {\n                  print(\"Identifier is empty\")\n              }\n              !id.first().isIdentifierStart() -> {\n                  print(\"Identifier should start with a letter\")\n              }\n              !id.subSequence(1, id.length).all(Char::isIdentifierPart) -> {\n                  print(\"Identifier should contain only letters and numbers\")\n              }\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "EmptyRange",
-                "shortDescription": {
-                  "text": "Range with start greater than endInclusive is empty"
-                },
-                "fullDescription": {
-                  "text": "Reports ranges that are empty because the 'start' value is greater than the 'endInclusive' value. Example: 'val range = 2..1' The quick-fix changes the '..' operator to 'downTo': 'val range = 2 downTo 1'",
-                  "markdown": "Reports ranges that are empty because the `start` value is greater than the `endInclusive` value.\n\n**Example:**\n\n\n      val range = 2..1\n\nThe quick-fix changes the `..` operator to `downTo`:\n\n\n      val range = 2 downTo 1\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "OptionalExpectation",
-                "shortDescription": {
-                  "text": "Optionally expected annotation has no actual annotation"
-                },
-                "fullDescription": {
-                  "text": "Reports optionally expected annotations without actual annotation in some platform modules. Example: '// common code\n@OptionalExpectation\nexpect annotation class JvmName(val name: String)\n\n@JvmName(name = \"JvmFoo\")\nfun foo() { }\n\n// jvm code\nactual annotation class JvmName(val name: String)' The inspection also reports cases when 'actual annotation class JvmName' is omitted for non-JVM platforms (for example, Native).",
-                  "markdown": "Reports optionally expected annotations without actual annotation in some platform modules.\n\n**Example:**\n\n    // common code\n    @OptionalExpectation\n    expect annotation class JvmName(val name: String)\n\n    @JvmName(name = \"JvmFoo\")\n    fun foo() { }\n\n    // jvm code\n    actual annotation class JvmName(val name: String)\n\nThe inspection also reports cases when `actual annotation class JvmName` is omitted for non-JVM platforms (for example, Native)."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "DestructuringWrongName",
-                "shortDescription": {
-                  "text": "Variable in destructuring declaration uses name of a wrong data class property"
-                },
-                "fullDescription": {
-                  "text": "Reports entries of destructuring declarations that match the name of a different property of the destructured data class. Example: 'data class Foo(val a: String, val b: Int, val c: String)\n\n  fun bar(f: Foo) {\n      val (a, c) = f\n  }' The quick-fix changes variable's name to match the name of the corresponding class field: 'data class Foo(val a: String, val b: Int, val c: String)\n\n  fun bar(f: Foo) {\n      val (a, b) = f\n  }'",
-                  "markdown": "Reports entries of destructuring declarations that match the name of a different property of the destructured data class.\n\n**Example:**\n\n\n      data class Foo(val a: String, val b: Int, val c: String)\n\n      fun bar(f: Foo) {\n          val (a, c) = f\n      }\n\nThe quick-fix changes variable's name to match the name of the corresponding class field:\n\n\n      data class Foo(val a: String, val b: Int, val c: String)\n\n      fun bar(f: Foo) {\n          val (a, b) = f\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "IfThenToSafeAccess",
-                "shortDescription": {
-                  "text": "If-Then foldable to '?.'"
-                },
-                "fullDescription": {
-                  "text": "Reports 'if-then' expressions that can be folded into safe-access ('?.') expressions. Example: 'fun bar(x: String) = \"\"\n\n  fun foo(a: String?) {\n     if (a != null) bar(a) else null\n  }' The quick fix converts the 'if-then' expression into a safe-access ('?.') expression: 'fun bar(x: String) = \"\"\n\n  fun foo(a: String?) {\n     a?.let { bar(it) }\n  }'",
-                  "markdown": "Reports `if-then` expressions that can be folded into safe-access (`?.`) expressions.\n\n**Example:**\n\n\n      fun bar(x: String) = \"\"\n\n      fun foo(a: String?) {\n         if (a != null) bar(a) else null\n      }\n\nThe quick fix converts the `if-then` expression into a safe-access (`?.`) expression:\n\n\n      fun bar(x: String) = \"\"\n\n      fun foo(a: String?) {\n         a?.let { bar(it) }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RestrictReturnStatementTargetMigration",
-                "shortDescription": {
-                  "text": "Target label does not denote a function since 1.4"
-                },
-                "fullDescription": {
-                  "text": "Reports labels that don't points to a functions. It's forbidden to declare a target label that does not denote a function. The quick-fix removes the label. Example: 'fun testValLabelInReturn() {\n      L@ val fn = { return@L }\n      fn()\n  }' After the quick-fix is applied: 'fun testValLabelInReturn() {\n      L@ val fn = { return }\n      fn()\n  }' This inspection only reports if the language level of the project or module is 1.4 or higher.",
-                  "markdown": "Reports labels that don't points to a functions.\n\nIt's forbidden to declare a target label that does not denote a function.\n\nThe quick-fix removes the label.\n\n**Example:**\n\n\n      fun testValLabelInReturn() {\n          L@ val fn = { return@L }\n          fn()\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun testValLabelInReturn() {\n          L@ val fn = { return }\n          fn()\n      }\n\nThis inspection only reports if the language level of the project or module is 1.4 or higher."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "error",
-                  "parameters": {
-                    "ideaSeverity": "ERROR",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Migration",
-                      "index": 15,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "MigrateDiagnosticSuppression",
-                "shortDescription": {
-                  "text": "Diagnostic name should be replaced"
-                },
-                "fullDescription": {
-                  "text": "Reports suppressions with old diagnostic names, for example '@Suppress(\"HEADER_WITHOUT_IMPLEMENTATION\")'. Some of diagnostics from Kotlin 1.2 and earlier are now obsolete, making such suppressions redundant. Example: '@Suppress(\"HEADER_DECLARATION_WITH_BODY\")\nexpect fun connection() {\n  // ...\n}' After the quick-fix is applied: '@Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\nexpect fun connection() {\n  // ...\n}'",
-                  "markdown": "Reports suppressions with old diagnostic names, for example `@Suppress(\"HEADER_WITHOUT_IMPLEMENTATION\")`.\n\n\nSome of diagnostics from Kotlin 1.2 and earlier are now obsolete, making such suppressions redundant.\n\n**Example:**\n\n\n    @Suppress(\"HEADER_DECLARATION_WITH_BODY\")\n    expect fun connection() {\n      // ...\n    }\n\nAfter the quick-fix is applied:\n\n\n    @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n    expect fun connection() {\n      // ...\n    }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Other problems",
-                      "index": 145,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "DeferredResultUnused",
-                "shortDescription": {
-                  "text": "'@Deferred' result is unused"
-                },
-                "fullDescription": {
-                  "text": "Reports function calls with the 'Deferred' result type if the return value is not used. If the 'Deferred' return value is not used, the call site would not wait to complete this function. Example: 'fun calcEverythingAsync() = CompletableDeferred(42)\n\n  fun usage() {\n      calcEverythingAsync()\n  }' A quick-fix provides a variable with the 'Deferred' initializer: 'fun calcEverythingAsync() = CompletableDeferred(42)\n\n  fun usage() {\n      val answer = calcEverythingAsync()\n  }'",
-                  "markdown": "Reports function calls with the `Deferred` result type if the return value is not used.\n\nIf the `Deferred` return value is not used, the call site would not wait to complete this function.\n\n**Example:**\n\n\n      fun calcEverythingAsync() = CompletableDeferred(42)\n\n      fun usage() {\n          calcEverythingAsync()\n      }\n\nA quick-fix provides a variable with the `Deferred` initializer:\n\n\n      fun calcEverythingAsync() = CompletableDeferred(42)\n\n      fun usage() {\n          val answer = calcEverythingAsync()\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SelfReferenceConstructorParameter",
-                "shortDescription": {
-                  "text": "Constructor can never be complete"
-                },
-                "fullDescription": {
-                  "text": "Reports constructors with a non-null self-reference parameter. Such constructors never instantiate a class. The quick-fix converts the parameter type to nullable. Example: 'class SelfRef(val ref: SelfRef)' After the quick-fix is applied: 'class SelfRef(val ref: SelfRef?)'",
-                  "markdown": "Reports constructors with a non-null self-reference parameter.\n\nSuch constructors never instantiate a class.\n\nThe quick-fix converts the parameter type to nullable.\n\n**Example:**\n\n\n      class SelfRef(val ref: SelfRef)\n\nAfter the quick-fix is applied:\n\n\n      class SelfRef(val ref: SelfRef?)\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "MainFunctionReturnUnit",
-                "shortDescription": {
-                  "text": "Entry point function should return Unit"
-                },
-                "fullDescription": {
-                  "text": "Reports entry point functions with an incorrect return type (should be 'Unit'). Example: 'fun main() = \"Hello world!\"'",
-                  "markdown": "Reports entry point functions with an incorrect return type (should be `Unit`).\n\n**Example:**\n`fun main() = \"Hello world!\"`"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "SuspiciousCallableReferenceInLambda",
-                "shortDescription": {
-                  "text": "Suspicious callable reference used as lambda result"
-                },
-                "fullDescription": {
-                  "text": "Reports lambda expressions with one callable reference. It is a common error to replace a lambda with a callable reference without changing curly braces to parentheses. Example: 'listOf(1,2,3).map { it::toString }' After the quick-fix is applied: 'listOf(1,2,3).map(Int::toString)'",
-                  "markdown": "Reports lambda expressions with one callable reference.\n\nIt is a common error to replace a lambda with a callable reference without changing curly braces to parentheses.\n\n**Example:**\n\n      listOf(1,2,3).map { it::toString }\n\nAfter the quick-fix is applied:\n\n      listOf(1,2,3).map(Int::toString)\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ConvertSecondaryConstructorToPrimary",
-                "shortDescription": {
-                  "text": "Convert to primary constructor"
-                },
-                "fullDescription": {
-                  "text": "Reports a secondary constructor that can be replaced with a more concise primary constructor. Example: 'class User {\n      val name: String\n\n      constructor(name: String) {\n          this.name = name\n      }\n  }' A quick-fix converts code automatically: 'class User(val name: String) {\n  }'",
-                  "markdown": "Reports a secondary constructor that can be replaced with a more concise primary constructor.\n\n**Example:**\n\n\n      class User {\n          val name: String\n\n          constructor(name: String) {\n              this.name = name\n          }\n      }\n\nA quick-fix converts code automatically:\n\n\n      class User(val name: String) {\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceGetOrSet",
-                "shortDescription": {
-                  "text": "Explicit 'get' or 'set' call"
-                },
-                "fullDescription": {
-                  "text": "Reports explicit calls to 'get' or 'set' functions which can be replaced by an indexing operator '[]'. Kotlin allows custom implementations for the predefined set of operators on types. To overload an operator, you can mark the corresponding function with the 'operator' modifier: 'operator fun get(index: Int) {}\n  operator fun set(index: Int, value: Int) {}' The functions above correspond to the indexing operator. Example: 'class Test {\n      operator fun get(i: Int): Int = 0\n  }\n\n  fun test() {\n      Test().get(0) // replaceable 'get()'\n  }' After the quick-fix is applied: 'class Test {\n      operator fun get(i: Int): Int = 0\n  }\n\n  fun test() {\n      Test()[0]\n  }'",
-                  "markdown": "Reports explicit calls to `get` or `set` functions which can be replaced by an indexing operator `[]`.\n\n\nKotlin allows custom implementations for the predefined set of operators on types.\nTo overload an operator, you can mark the corresponding function with the `operator` modifier:\n\n\n      operator fun get(index: Int) {}\n      operator fun set(index: Int, value: Int) {}\n        \nThe functions above correspond to the indexing operator.\n\n**Example:**\n\n      class Test {\n          operator fun get(i: Int): Int = 0\n      }\n\n      fun test() {\n          Test().get(0) // replaceable 'get()'\n      }\n\nAfter the quick-fix is applied:\n\n      class Test {\n          operator fun get(i: Int): Int = 0\n      }\n\n      fun test() {\n          Test()[0]\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ProhibitRepeatedUseSiteTargetAnnotationsMigration",
-                "shortDescription": {
-                  "text": "Repeated annotation which is not marked as '@Repeatable'"
-                },
-                "fullDescription": {
-                  "text": "Reports the repeated use of a non-'@Repeatable' annotation on property accessors. As a result of using non-'@Repeatable' annotation multiple times, both annotation usages will appear in the bytecode leading to an ambiguity in reflection calls. Since Kotlin 1.4 it's mandatory to either mark annotation as '@Repeatable' or not repeat the annotation, otherwise it will lead to compilation error. Example: 'annotation class Foo(val x: Int)\n\n  @get:Foo(10)\n  val a: String\n      @Foo(20) get() = \"foo\" // annotation repeated twice but not marked as @Repeatable' This inspection only reports if the Kotlin language level of the project or module is 1.4 or higher.",
-                  "markdown": "Reports the repeated use of a non-`@Repeatable` annotation on property accessors.\n\n\nAs a result of using non-`@Repeatable` annotation multiple times, both annotation usages\nwill appear in the bytecode leading to an ambiguity in reflection calls.\n\n\nSince Kotlin 1.4 it's mandatory to either mark annotation as `@Repeatable` or not\nrepeat the annotation, otherwise it will lead to compilation error.\n\n**Example:**\n\n\n      annotation class Foo(val x: Int)\n\n      @get:Foo(10)\n      val a: String\n          @Foo(20) get() = \"foo\" // annotation repeated twice but not marked as @Repeatable\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "error",
-                  "parameters": {
-                    "ideaSeverity": "ERROR",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Migration",
-                      "index": 15,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "Destructure",
-                "shortDescription": {
-                  "text": "Use destructuring declaration"
-                },
-                "fullDescription": {
-                  "text": "Reports declarations that can be destructured. Example: 'data class My(val first: String, val second: Int, val third: Boolean)\n\n  fun foo(list: List<My>) {\n      list.forEach { my ->\n          println(my.second)\n          println(my.third)\n      }\n  }' The quick-fix destructures the declaration and introduces new variables with names from the corresponding class: 'data class My(val first: String, val second: Int, val third: Boolean)\n\n  fun foo(list: List<My>) {\n      list.forEach { (_, second, third) ->\n          println(second)\n          println(third)\n      }\n  }'",
-                  "markdown": "Reports declarations that can be destructured.\n\n**Example:**\n\n\n      data class My(val first: String, val second: Int, val third: Boolean)\n\n      fun foo(list: List<My>) {\n          list.forEach { my ->\n              println(my.second)\n              println(my.third)\n          }\n      }\n\nThe quick-fix destructures the declaration and introduces new variables with names from the corresponding class:\n\n\n      data class My(val first: String, val second: Int, val third: Boolean)\n\n      fun foo(list: List<My>) {\n          list.forEach { (_, second, third) ->\n              println(second)\n              println(third)\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFO",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "UnusedReceiverParameter",
-                "shortDescription": {
-                  "text": "Unused receiver parameter"
-                },
-                "fullDescription": {
-                  "text": "Reports receiver parameter of extension functions and properties that is not used. Remove redundant receiver parameter can be used to amend the code automatically.",
-                  "markdown": "Reports receiver parameter of extension functions and properties that is not used.\n\n**Remove redundant receiver parameter** can be used to amend the code automatically."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ConvertTryFinallyToUseCall",
-                "shortDescription": {
-                  "text": "Convert try / finally to use() call"
-                },
-                "fullDescription": {
-                  "text": "Reports a 'try-finally' block with 'resource.close()' in 'finally' which can be converted to a 'resource.use()' call. 'use()' is easier to read and less error-prone as there is no need in explicit 'close()' call. Example: 'fun example() {\n      val reader = File(\"file.txt\").bufferedReader()\n      try {\n          reader.lineSequence().forEach(::print)\n      } finally {\n          reader.close()\n      }\n  }' After the quick-fix applied: 'fun example() {\n      File(\"file.txt\").bufferedReader().use { reader ->\n          reader.lineSequence().forEach(::print)\n      }\n  }'",
-                  "markdown": "Reports a `try-finally` block with `resource.close()` in `finally` which can be converted to a `resource.use()` call.\n\n`use()` is easier to read and less error-prone as there is no need in explicit `close()` call.\n\n**Example:**\n\n\n      fun example() {\n          val reader = File(\"file.txt\").bufferedReader()\n          try {\n              reader.lineSequence().forEach(::print)\n          } finally {\n              reader.close()\n          }\n      }\n\nAfter the quick-fix applied:\n\n\n      fun example() {\n          File(\"file.txt\").bufferedReader().use { reader ->\n              reader.lineSequence().forEach(::print)\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "KotlinRedundantOverride",
-                "shortDescription": {
-                  "text": "Redundant overriding method"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant overriding declarations. An override can be omitted if it does not modify the inherited signature semantics, for example, by changing visibility. Example: 'open class Foo {\n      open fun singleExpression() {\n      }\n  }\n\n  class Bar : Foo() {\n      override fun singleExpression() = super.singleExpression()\n  }' After the quick-fix is applied: 'class Bar : Foo() {\n  }'",
-                  "markdown": "Reports redundant overriding declarations.\n\n\nAn override can be omitted if it does not modify the inherited signature semantics, for example, by changing visibility.\n\n**Example:**\n\n\n      open class Foo {\n          open fun singleExpression() {\n          }\n      }\n\n      class Bar : Foo() {\n          override fun singleExpression() = super.singleExpression()\n      }\n\nAfter the quick-fix is applied:\n\n\n      class Bar : Foo() {\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceArrayOfWithLiteral",
-                "shortDescription": {
-                  "text": "'arrayOf' call can be replaced with array literal [...]"
-                },
-                "fullDescription": {
-                  "text": "Reports 'arrayOf' calls that can be replaced with array literals '[...]'. Examples: 'annotation class MyAnnotation(val strings: Array<String>)\n\n  @MyAnnotation(arrayOf(\"alpha\", \"beta\", \"omega\")) // replaceable 'arrayOf()'\n  class MyClass' After the quick-fix is applied: 'annotation class MyAnnotation(val strings: Array<String>)\n\n  @MyAnnotation([\"alpha\", \"beta\", \"omega\"])\n  class MyClass'",
-                  "markdown": "Reports `arrayOf` calls that can be replaced with array literals `[...]`.\n\n**Examples:**\n\n      annotation class MyAnnotation(val strings: Array<String>)\n\n      @MyAnnotation(arrayOf(\"alpha\", \"beta\", \"omega\")) // replaceable 'arrayOf()'\n      class MyClass\n\nAfter the quick-fix is applied:\n\n      annotation class MyAnnotation(val strings: Array<String>)\n\n      @MyAnnotation([\"alpha\", \"beta\", \"omega\"])\n      class MyClass\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceToWithInfixForm",
-                "shortDescription": {
-                  "text": "'to' call should be replaced with infix form"
-                },
-                "fullDescription": {
-                  "text": "Reports 'to' function calls that can be replaced with the infix form. Using the infix form makes your code simpler. The quick-fix replaces 'to' with the infix form. Example: 'fun foo(a: Int, b: Int) {\n      val pair = a.to(b)\n  }' After the quick-fix is applied: 'fun foo(a: Int, b: Int) {\n      val pair = a to b\n  }'",
-                  "markdown": "Reports `to` function calls that can be replaced with the infix form.\n\nUsing the infix form makes your code simpler.\n\nThe quick-fix replaces `to` with the infix form.\n\n**Example:**\n\n\n      fun foo(a: Int, b: Int) {\n          val pair = a.to(b)\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(a: Int, b: Int) {\n          val pair = a to b\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Style issues",
-                      "index": 2,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ConstPropertyName",
-                "shortDescription": {
-                  "text": "Const property naming convention"
-                },
-                "fullDescription": {
-                  "text": "Reports 'const' property names that do not follow the recommended naming conventions. Consistent naming allows for easier code reading and understanding. According to the Kotlin official style guide, 'const' properties should use uppercase underscore-separated names. Example: 'const val Planck: Double = 6.62607015E-34' A quick-fix renames the property: 'const val PLANCK: Double = 6.62607015E-34'",
-                  "markdown": "Reports `const` property names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#property-names),\n`const` properties should use uppercase underscore-separated names.\n\n**Example:**\n\n\n      const val Planck: Double = 6.62607015E-34\n\nA quick-fix renames the property:\n\n\n      const val PLANCK: Double = 6.62607015E-34\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "WEAK WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Naming conventions",
-                      "index": 48,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "RedundantNullableReturnType",
-                "shortDescription": {
-                  "text": "Redundant nullable return type"
-                },
-                "fullDescription": {
-                  "text": "Reports functions and variables with nullable return type which never return or become 'null'. Example: 'fun greeting(user: String): String? = \"Hello, $user!\"' After the quick-fix is applied: 'fun greeting(user: String): String = \"Hello, $user!\"'",
-                  "markdown": "Reports functions and variables with nullable return type which never return or become `null`.\n\n**Example:**\n\n\n      fun greeting(user: String): String? = \"Hello, $user!\"\n\nAfter the quick-fix is applied:\n\n\n      fun greeting(user: String): String = \"Hello, $user!\"\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Redundant constructs",
-                      "index": 4,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "UselessCallOnNotNull",
-                "shortDescription": {
-                  "text": "Useless call on not-null type"
-                },
-                "fullDescription": {
-                  "text": "Reports calls on not-null receiver that make sense only for nullable receiver. Several functions from the standard library such as 'orEmpty()' or 'isNullOrEmpty' have sense only when they are called on receivers of nullable types. Otherwise, they can be omitted or simplified as the result will be the same. Remove redundant call and Change call to … quick-fixes can be used to amend the code automatically. Examples: 'fun test(s: String) {\n      val x = s.orEmpty() // quick-fix simplifies to 's'\n      val y = s.isNullOrEmpty() // quick-fix simplifies to 's.isEmpty()'\n  }'",
-                  "markdown": "Reports calls on not-null receiver that make sense only for nullable receiver.\n\nSeveral functions from the standard library such as `orEmpty()` or `isNullOrEmpty`\nhave sense only when they are called on receivers of nullable types. Otherwise, they can be omitted or simplified as the result will be the same.\n\n**Remove redundant call** and **Change call to ...** quick-fixes can be used to amend the code automatically.\n\nExamples:\n\n\n      fun test(s: String) {\n          val x = s.orEmpty() // quick-fix simplifies to 's'\n          val y = s.isNullOrEmpty() // quick-fix simplifies to 's.isEmpty()'\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "EqualsOrHashCode",
-                "shortDescription": {
-                  "text": "'equals()' and 'hashCode()' not paired"
-                },
-                "fullDescription": {
-                  "text": "Reports classes that override 'equals()' but do not override 'hashCode()', or vice versa. It also reports object declarations that override either 'equals()' or 'hashCode()'. This can lead to undesired behavior when a class is added to a 'Collection' Example: 'class C1 {\n      override fun equals(other: Any?) = true\n  }\n\n  class C2 {\n      override fun hashCode() = 0\n  }\n\n  object O1 {\n      override fun equals(other: Any?) = true\n  }\n\n  object O2 {\n      override fun hashCode() = 0\n  }' The quick-fix overrides 'equals()' or 'hashCode()' for classes and deletes these methods for objects: 'class C1 {\n       override fun equals(other: Any?) = true\n       override fun hashCode(): Int {\n           return javaClass.hashCode()\n       }\n   }\n\n   class C2 {\n       override fun hashCode() = 0\n       override fun equals(other: Any?): Boolean {\n           if (this === other) return true\n           if (javaClass != other?.javaClass) return false\n           return true\n       }\n   }\n\n   object O1 {\n   }\n\n   object O2 {\n   }'",
-                  "markdown": "Reports classes that override `equals()` but do not override `hashCode()`, or vice versa. It also reports object declarations that override either `equals()` or `hashCode()`.\n\nThis can lead to undesired behavior when a class is added to a `Collection`\n\n**Example:**\n\n\n      class C1 {\n          override fun equals(other: Any?) = true\n      }\n\n      class C2 {\n          override fun hashCode() = 0\n      }\n\n      object O1 {\n          override fun equals(other: Any?) = true\n      }\n\n      object O2 {\n          override fun hashCode() = 0\n      }\n\nThe quick-fix overrides `equals()` or `hashCode()` for classes and deletes these methods for objects:\n\n\n       class C1 {\n           override fun equals(other: Any?) = true\n           override fun hashCode(): Int {\n               return javaClass.hashCode()\n           }\n       }\n\n       class C2 {\n           override fun hashCode() = 0\n           override fun equals(other: Any?): Boolean {\n               if (this === other) return true\n               if (javaClass != other?.javaClass) return false\n               return true\n           }\n       }\n\n       object O1 {\n       }\n\n       object O2 {\n       }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Kotlin/Probable bugs",
-                      "index": 24,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              }
-            ],
-            "language": "en-US",
-            "contents": [
-              "localizedData",
-              "nonLocalizedData"
-            ],
-            "isComprehensive": false
-          },
           {
             "name": "com.intellij.java",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "OverrideOnly",
@@ -10524,7 +2454,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -10592,7 +2522,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -10637,40 +2567,6 @@
                   }
                 ]
               },
-              {
-                "id": "UnusedReturnValue",
-                "shortDescription": {
-                  "text": "Method can be made 'void'"
-                },
-                "fullDescription": {
-                  "text": "Reports methods whose return values are never used when called. The return type of such methods can be made 'void'. Methods annotated with Error Prone's or AssertJ's '@CanIgnoreReturnValue' annotation will not be reported. The quick-fix updates the method signature and removes 'return' statements from inside the method. Example: '// reported if visibility setting is Protected or Public\n  protected String myToUpperCase(String s) {\n    return s.toUpperCase();\n  }\n\n  // simple setter, reporting depends on setting\n  public String setStr(String str) {\n    myStr = str;\n    return myStr;\n  }\n\n  void test() {\n    setStr(\"value\");          // return value is unused\n    myToUpperCase(\"result\");  // return value is unused\n  }' After the quick-fix is applied to both methods: 'protected void myToUpperCase(String s) {\n      // 'return' removed completely\n      // as 's.toUpperCase()' has no side effect\n    }\n\n    public void setStr(String str) {\n      myStr = str;\n      // 'return' removed\n    }\n  ...' NOTE: Some methods might not be reported during in-editor highlighting due to performance reasons. To see all results, run the inspection using Code | Inspect Code or Code | Analyze Code | Run Inspection by Name> Use the Ignore simple setters option to ignore unused return values from simple setter calls. Use the Maximal reported method visibility option to control the maximum visibility of methods to be reported.",
-                  "markdown": "Reports methods whose return values are never used when called. The return type of such methods can be made `void`.\n\nMethods annotated with Error Prone's or AssertJ's `@CanIgnoreReturnValue` annotation will not be reported.\nThe quick-fix updates the method signature and removes `return` statements from inside the method.\n\n**Example:**\n\n\n      // reported if visibility setting is Protected or Public\n      protected String myToUpperCase(String s) {\n        return s.toUpperCase();\n      }\n\n      // simple setter, reporting depends on setting\n      public String setStr(String str) {\n        myStr = str;\n        return myStr;\n      }\n\n      void test() {\n        setStr(\"value\");          // return value is unused\n        myToUpperCase(\"result\");  // return value is unused\n      }\n\nAfter the quick-fix is applied to both methods:\n\n\n        protected void myToUpperCase(String s) {\n          // 'return' removed completely\n          // as 's.toUpperCase()' has no side effect\n        }\n\n        public void setStr(String str) {\n          myStr = str;\n          // 'return' removed\n        }\n      ...\n\n\n**NOTE:** Some methods might not be reported during in-editor highlighting due to performance reasons.\nTo see all results, run the inspection using **Code \\| Inspect Code** or **Code \\| Analyze Code \\| Run Inspection by Name**\\>\n\nUse the **Ignore simple setters** option to ignore unused return values from simple setter calls.\n\nUse the **Maximal reported method visibility** option to control the maximum visibility of methods to be reported."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Declaration redundancy",
-                      "index": 12,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "UncheckedExceptionClass",
                 "shortDescription": {
@@ -10694,7 +2590,41 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UnusedReturnValue",
+                "shortDescription": {
+                  "text": "Method can be made 'void'"
+                },
+                "fullDescription": {
+                  "text": "Reports methods whose return values are never used when called. The return type of such methods can be made 'void'. Methods annotated with Error Prone's or AssertJ's '@CanIgnoreReturnValue' annotation will not be reported. The quick-fix updates the method signature and removes 'return' statements from inside the method. Example: '// reported if visibility setting is Protected or Public\n  protected String myToUpperCase(String s) {\n    return s.toUpperCase();\n  }\n\n  // simple setter, reporting depends on setting\n  public String setStr(String str) {\n    myStr = str;\n    return myStr;\n  }\n\n  void test() {\n    setStr(\"value\");          // return value is unused\n    myToUpperCase(\"result\");  // return value is unused\n  }' After the quick-fix is applied to both methods: 'protected void myToUpperCase(String s) {\n      // 'return' removed completely\n      // as 's.toUpperCase()' has no side effect\n    }\n\n    public void setStr(String str) {\n      myStr = str;\n      // 'return' removed\n    }\n  ...' NOTE: Some methods might not be reported during in-editor highlighting due to performance reasons. To see all results, run the inspection using Code | Inspect Code or Code | Analyze Code | Run Inspection by Name> Use the Ignore simple setters option to ignore unused return values from simple setter calls. Use the Maximal reported method visibility option to control the maximum visibility of methods to be reported.",
+                  "markdown": "Reports methods whose return values are never used when called. The return type of such methods can be made `void`.\n\nMethods annotated with Error Prone's or AssertJ's `@CanIgnoreReturnValue` annotation will not be reported.\nThe quick-fix updates the method signature and removes `return` statements from inside the method.\n\n**Example:**\n\n\n      // reported if visibility setting is Protected or Public\n      protected String myToUpperCase(String s) {\n        return s.toUpperCase();\n      }\n\n      // simple setter, reporting depends on setting\n      public String setStr(String str) {\n        myStr = str;\n        return myStr;\n      }\n\n      void test() {\n        setStr(\"value\");          // return value is unused\n        myToUpperCase(\"result\");  // return value is unused\n      }\n\nAfter the quick-fix is applied to both methods:\n\n\n        protected void myToUpperCase(String s) {\n          // 'return' removed completely\n          // as 's.toUpperCase()' has no side effect\n        }\n\n        public void setStr(String str) {\n          myStr = str;\n          // 'return' removed\n        }\n      ...\n\n\n**NOTE:** Some methods might not be reported during in-editor highlighting due to performance reasons.\nTo see all results, run the inspection using **Code \\| Inspect Code** or **Code \\| Analyze Code \\| Run Inspection by Name**\\>\n\nUse the **Ignore simple setters** option to ignore unused return values from simple setter calls.\n\nUse the **Maximal reported method visibility** option to control the maximum visibility of methods to be reported."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Declaration redundancy",
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -10773,40 +2703,6 @@
                   }
                 ]
               },
-              {
-                "id": "ClassWithOnlyPrivateConstructors",
-                "shortDescription": {
-                  "text": "Class with only 'private' constructors should be declared 'final'"
-                },
-                "fullDescription": {
-                  "text": "Reports classes with only 'private' constructors. A class that only has 'private' constructors cannot be extended outside a file and should be declared as 'final'.",
-                  "markdown": "Reports classes with only `private` constructors.\n\nA class that only has `private` constructors cannot be extended outside a file and should be declared as `final`."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Class structure",
-                      "index": 17,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "ComparatorNotSerializable",
                 "shortDescription": {
@@ -10830,6 +2726,40 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
+                      "index": 17,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ClassWithOnlyPrivateConstructors",
+                "shortDescription": {
+                  "text": "Class with only 'private' constructors should be declared 'final'"
+                },
+                "fullDescription": {
+                  "text": "Reports classes with only 'private' constructors. A class that only has 'private' constructors cannot be extended outside a file and should be declared as 'final'.",
+                  "markdown": "Reports classes with only `private` constructors.\n\nA class that only has `private` constructors cannot be extended outside a file and should be declared as `final`."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Class structure",
                       "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
@@ -11068,7 +2998,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -11408,7 +3338,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -11442,7 +3372,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -11624,16 +3554,16 @@
                 ]
               },
               {
-                "id": "ClassGetClass",
+                "id": "ResultOfObjectAllocationIgnored",
                 "shortDescription": {
-                  "text": "Suspicious 'Class.getClass()' call"
+                  "text": "Result of object allocation ignored"
                 },
                 "fullDescription": {
-                  "text": "Reports 'getClass()' methods that are called on a 'java.lang.Class' instance. This is usually a mistake as the result is always equivalent to 'Class.class'. If it's a mistake, then it's better to remove the 'getClass()' call and use the qualifier directly. If the behavior is intended, then it's better to write 'Class.class' explicitly to avoid confusion. Example: 'void test(Class<?> clazz) {\n    String name = clazz.getClass().getName();\n  }' After one of the possible quick-fixes is applied: 'void test(Class<?> clazz) {\n    String name = clazz.getName();\n  }' New in 2018.2",
-                  "markdown": "Reports `getClass()` methods that are called on a `java.lang.Class` instance.\n\nThis is usually a mistake as the result is always equivalent to `Class.class`.\nIf it's a mistake, then it's better to remove the `getClass()` call and use the qualifier directly.\nIf the behavior is intended, then it's better to write `Class.class` explicitly to avoid confusion.\n\nExample:\n\n\n      void test(Class<?> clazz) {\n        String name = clazz.getClass().getName();\n      }\n\nAfter one of the possible quick-fixes is applied:\n\n\n      void test(Class<?> clazz) {\n        String name = clazz.getName();\n      }\n\nNew in 2018.2"
+                  "text": "Reports object allocations where the allocated object is ignored and neither assigned to a variable nor used in another way. Such allocation expressions are legal in Java, but are usually either unintended, or evidence of a very odd object initialization strategy. Use the options to list classes whose allocations should be ignored by this inspection.",
+                  "markdown": "Reports object allocations where the allocated object is ignored and neither assigned to a variable nor used in another way.\n\n\nSuch allocation expressions are legal in Java, but are usually either unintended, or\nevidence of a very odd object initialization strategy.\n\n\nUse the options to list classes whose allocations should be ignored by this inspection."
                 },
                 "defaultConfiguration": {
-                  "enabled": true,
+                  "enabled": false,
                   "level": "warning",
                   "parameters": {
                     "ideaSeverity": "WARNING",
@@ -11658,16 +3588,16 @@
                 ]
               },
               {
-                "id": "ResultOfObjectAllocationIgnored",
+                "id": "ClassGetClass",
                 "shortDescription": {
-                  "text": "Result of object allocation ignored"
+                  "text": "Suspicious 'Class.getClass()' call"
                 },
                 "fullDescription": {
-                  "text": "Reports object allocations where the allocated object is ignored and neither assigned to a variable nor used in another way. Such allocation expressions are legal in Java, but are usually either unintended, or evidence of a very odd object initialization strategy. Use the options to list classes whose allocations should be ignored by this inspection.",
-                  "markdown": "Reports object allocations where the allocated object is ignored and neither assigned to a variable nor used in another way.\n\n\nSuch allocation expressions are legal in Java, but are usually either unintended, or\nevidence of a very odd object initialization strategy.\n\n\nUse the options to list classes whose allocations should be ignored by this inspection."
+                  "text": "Reports 'getClass()' methods that are called on a 'java.lang.Class' instance. This is usually a mistake as the result is always equivalent to 'Class.class'. If it's a mistake, then it's better to remove the 'getClass()' call and use the qualifier directly. If the behavior is intended, then it's better to write 'Class.class' explicitly to avoid confusion. Example: 'void test(Class<?> clazz) {\n    String name = clazz.getClass().getName();\n  }' After one of the possible quick-fixes is applied: 'void test(Class<?> clazz) {\n    String name = clazz.getName();\n  }' New in 2018.2",
+                  "markdown": "Reports `getClass()` methods that are called on a `java.lang.Class` instance.\n\nThis is usually a mistake as the result is always equivalent to `Class.class`.\nIf it's a mistake, then it's better to remove the `getClass()` call and use the qualifier directly.\nIf the behavior is intended, then it's better to write `Class.class` explicitly to avoid confusion.\n\nExample:\n\n\n      void test(Class<?> clazz) {\n        String name = clazz.getClass().getName();\n      }\n\nAfter one of the possible quick-fixes is applied:\n\n\n      void test(Class<?> clazz) {\n        String name = clazz.getName();\n      }\n\nNew in 2018.2"
                 },
                 "defaultConfiguration": {
-                  "enabled": false,
+                  "enabled": true,
                   "level": "warning",
                   "parameters": {
                     "ideaSeverity": "WARNING",
@@ -11714,7 +3644,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -12156,7 +4086,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -12258,7 +4188,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -12530,7 +4460,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -12734,41 +4664,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "NonFinalFieldInImmutable",
-                "shortDescription": {
-                  "text": "Non-final field in '@Immutable' class"
-                },
-                "fullDescription": {
-                  "text": "Reports any non-final field in a class with the '@Immutable' annotation. This violates the contract of the '@Immutable' annotation. Example: 'import javax.annotation.concurrent.Immutable;\n  @Immutable\n  class Foo {\n    String bar = \"foo\";\n  }' Supported '@GuardedBy' annotations are: 'net.jcip.annotations.GuardedBy' 'javax.annotation.concurrent.GuardedBy' 'org.apache.http.annotation.GuardedBy' 'com.android.annotations.concurrency.GuardedBy' 'androidx.annotation.GuardedBy' 'com.google.errorprone.annotations.concurrent.GuardedBy'",
-                  "markdown": "Reports any non-final field in a class with the `@Immutable` annotation. This violates the contract of the `@Immutable` annotation.\n\nExample:\n\n\n      import javax.annotation.concurrent.Immutable;\n      @Immutable\n      class Foo {\n        String bar = \"foo\";\n      }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Concurrency annotation issues",
-                      "index": 77,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -12813,6 +4709,40 @@
                   }
                 ]
               },
+              {
+                "id": "NonFinalFieldInImmutable",
+                "shortDescription": {
+                  "text": "Non-final field in '@Immutable' class"
+                },
+                "fullDescription": {
+                  "text": "Reports any non-final field in a class with the '@Immutable' annotation. This violates the contract of the '@Immutable' annotation. Example: 'import javax.annotation.concurrent.Immutable;\n  @Immutable\n  class Foo {\n    String bar = \"foo\";\n  }' Supported '@GuardedBy' annotations are: 'net.jcip.annotations.GuardedBy' 'javax.annotation.concurrent.GuardedBy' 'org.apache.http.annotation.GuardedBy' 'com.android.annotations.concurrency.GuardedBy' 'androidx.annotation.GuardedBy' 'com.google.errorprone.annotations.concurrent.GuardedBy'",
+                  "markdown": "Reports any non-final field in a class with the `@Immutable` annotation. This violates the contract of the `@Immutable` annotation.\n\nExample:\n\n\n      import javax.annotation.concurrent.Immutable;\n      @Immutable\n      class Foo {\n        String bar = \"foo\";\n      }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Concurrency annotation issues",
+                      "index": 77,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "CallToStringConcatCanBeReplacedByOperator",
                 "shortDescription": {
@@ -13176,7 +5106,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -13255,40 +5185,6 @@
                   }
                 ]
               },
-              {
-                "id": "RedundantLambdaParameterType",
-                "shortDescription": {
-                  "text": "Redundant lambda parameter types"
-                },
-                "fullDescription": {
-                  "text": "Reports lambda formal parameter types that are redundant because they can be inferred from the context. Example: 'Map<String, Integer> map = ...\n  map.forEach((String s, Integer i) -> log.info(s + \"=\" + i));' The quick-fix removes the parameter types from the lambda. 'Map<String, Integer> map = ...\n  map.forEach((s, i) -> log.info(s + \"=\" + i));'",
-                  "markdown": "Reports lambda formal parameter types that are redundant because they can be inferred from the context.\n\n**Example:**\n\n\n      Map<String, Integer> map = ...\n      map.forEach((String s, Integer i) -> log.info(s + \"=\" + i));\n\nThe quick-fix removes the parameter types from the lambda.\n\n\n      Map<String, Integer> map = ...\n      map.forEach((s, i) -> log.info(s + \"=\" + i));\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Declaration redundancy",
-                      "index": 12,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "LoggingConditionDisagreesWithLogStatement",
                 "shortDescription": {
@@ -13323,6 +5219,40 @@
                   }
                 ]
               },
+              {
+                "id": "RedundantLambdaParameterType",
+                "shortDescription": {
+                  "text": "Redundant lambda parameter types"
+                },
+                "fullDescription": {
+                  "text": "Reports lambda formal parameter types that are redundant because they can be inferred from the context. Example: 'Map<String, Integer> map = ...\n  map.forEach((String s, Integer i) -> log.info(s + \"=\" + i));' The quick-fix removes the parameter types from the lambda. 'Map<String, Integer> map = ...\n  map.forEach((s, i) -> log.info(s + \"=\" + i));'",
+                  "markdown": "Reports lambda formal parameter types that are redundant because they can be inferred from the context.\n\n**Example:**\n\n\n      Map<String, Integer> map = ...\n      map.forEach((String s, Integer i) -> log.info(s + \"=\" + i));\n\nThe quick-fix removes the parameter types from the lambda.\n\n\n      Map<String, Integer> map = ...\n      map.forEach((s, i) -> log.info(s + \"=\" + i));\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Declaration redundancy",
+                      "index": 13,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "ConditionalExpression",
                 "shortDescription": {
@@ -13448,7 +5378,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -13584,7 +5514,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -13686,7 +5616,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -13822,7 +5752,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -14298,7 +6228,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -14570,7 +6500,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -14672,7 +6602,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -14842,7 +6772,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -15046,7 +6976,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -15148,7 +7078,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -15182,7 +7112,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -15216,7 +7146,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -15420,7 +7350,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -15454,7 +7384,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -15760,7 +7690,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -15828,7 +7758,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -15896,7 +7826,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -15930,41 +7860,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ClassWithTooManyTransitiveDependencies",
-                "shortDescription": {
-                  "text": "Class with too many transitive dependencies"
-                },
-                "fullDescription": {
-                  "text": "Reports classes that are directly or indirectly dependent on too many other classes. Modifications to any dependency of such a class may require changing the class thus making it prone to instability. Only top-level classes are reported. Use the Maximum number of transitive dependencies field to specify the maximum allowed number of direct or indirect dependencies for a class. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.",
-                  "markdown": "Reports classes that are directly or indirectly dependent on too many other classes.\n\nModifications to any dependency of such a class may require changing the class thus making it prone to instability.\n\nOnly top-level classes are reported.\n\nUse the **Maximum number of transitive dependencies** field to specify the maximum allowed number of direct or indirect dependencies\nfor a class.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Dependency issues",
-                      "index": 109,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -16010,13 +7906,13 @@
                 ]
               },
               {
-                "id": "LoopWithImplicitTerminationCondition",
+                "id": "ClassWithTooManyTransitiveDependencies",
                 "shortDescription": {
-                  "text": "Loop with implicit termination condition"
+                  "text": "Class with too many transitive dependencies"
                 },
                 "fullDescription": {
-                  "text": "Reports any 'while', 'do-while', and 'for' loops that have the 'true' constant as their only condition. At the same time, such loops can be still terminated by a containing 'if' statement which can break out of the loop. Such an 'if' statement must be the first or the only statement in a 'while' or 'for' loop and the last or the only statement in a 'do-while' loop. Removing the 'if' statement and making its condition an explicit loop condition simplifies the loop.",
-                  "markdown": "Reports any `while`, `do-while`, and `for` loops that have the `true` constant as their only condition. At the same time, such loops can be still terminated by a containing `if` statement which can break out of the loop.\n\nSuch an `if` statement must be the first or the only statement\nin a `while` or `for`\nloop and the last or the only statement in a `do-while` loop.\n\nRemoving the `if` statement and making its condition an explicit\nloop condition simplifies the loop."
+                  "text": "Reports classes that are directly or indirectly dependent on too many other classes. Modifications to any dependency of such a class may require changing the class thus making it prone to instability. Only top-level classes are reported. Use the Maximum number of transitive dependencies field to specify the maximum allowed number of direct or indirect dependencies for a class. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.",
+                  "markdown": "Reports classes that are directly or indirectly dependent on too many other classes.\n\nModifications to any dependency of such a class may require changing the class thus making it prone to instability.\n\nOnly top-level classes are reported.\n\nUse the **Maximum number of transitive dependencies** field to specify the maximum allowed number of direct or indirect dependencies\nfor a class.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor."
                 },
                 "defaultConfiguration": {
                   "enabled": false,
@@ -16031,8 +7927,8 @@
                 "relationships": [
                   {
                     "target": {
-                      "id": "Java/Control flow issues",
-                      "index": 27,
+                      "id": "Java/Dependency issues",
+                      "index": 109,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -16077,6 +7973,40 @@
                   }
                 ]
               },
+              {
+                "id": "LoopWithImplicitTerminationCondition",
+                "shortDescription": {
+                  "text": "Loop with implicit termination condition"
+                },
+                "fullDescription": {
+                  "text": "Reports any 'while', 'do-while', and 'for' loops that have the 'true' constant as their only condition. At the same time, such loops can be still terminated by a containing 'if' statement which can break out of the loop. Such an 'if' statement must be the first or the only statement in a 'while' or 'for' loop and the last or the only statement in a 'do-while' loop. Removing the 'if' statement and making its condition an explicit loop condition simplifies the loop.",
+                  "markdown": "Reports any `while`, `do-while`, and `for` loops that have the `true` constant as their only condition. At the same time, such loops can be still terminated by a containing `if` statement which can break out of the loop.\n\nSuch an `if` statement must be the first or the only statement\nin a `while` or `for`\nloop and the last or the only statement in a `do-while` loop.\n\nRemoving the `if` statement and making its condition an explicit\nloop condition simplifies the loop."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Control flow issues",
+                      "index": 27,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "BadExceptionDeclared",
                 "shortDescription": {
@@ -16100,7 +8030,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -16168,7 +8098,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -16236,7 +8166,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -16270,7 +8200,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -16417,40 +8347,6 @@
                   }
                 ]
               },
-              {
-                "id": "UtilityClassWithPublicConstructor",
-                "shortDescription": {
-                  "text": "Utility class with 'public' constructor"
-                },
-                "fullDescription": {
-                  "text": "Reports utility classes with 'public' constructors. Utility classes have all fields and methods declared as 'static'. Creating a 'public' constructor in such classes is confusing and may cause accidental class instantiation.",
-                  "markdown": "Reports utility classes with `public` constructors.\n\nUtility classes have all fields and methods declared as `static`. Creating a `public`\nconstructor in such classes is confusing and may cause accidental class instantiation."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Class structure",
-                      "index": 17,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "TypeParameterExtendsFinalClass",
                 "shortDescription": {
@@ -16485,6 +8381,40 @@
                   }
                 ]
               },
+              {
+                "id": "UtilityClassWithPublicConstructor",
+                "shortDescription": {
+                  "text": "Utility class with 'public' constructor"
+                },
+                "fullDescription": {
+                  "text": "Reports utility classes with 'public' constructors. Utility classes have all fields and methods declared as 'static'. Creating a 'public' constructor in such classes is confusing and may cause accidental class instantiation.",
+                  "markdown": "Reports utility classes with `public` constructors.\n\nUtility classes have all fields and methods declared as `static`. Creating a `public`\nconstructor in such classes is confusing and may cause accidental class instantiation."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Class structure",
+                      "index": 18,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "TrivialIf",
                 "shortDescription": {
@@ -16712,7 +8642,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -16848,7 +8778,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -17369,40 +9299,6 @@
                   }
                 ]
               },
-              {
-                "id": "AbstractMethodCallInConstructor",
-                "shortDescription": {
-                  "text": "Abstract method called during object construction"
-                },
-                "fullDescription": {
-                  "text": "Reports calls to 'abstract' methods of the current class during object construction. A method is called during object construction if it is inside a: Constructor Non-static instance initializer Non-static field initializer 'clone()' method 'readObject()' method 'readObjectNoData()' method Such calls may result in subtle bugs, as object initialization may happen before the method call. Example: 'abstract class Parent {\n    abstract void abstractMethod();\n  }\n\n  class Child extends Parent {\n    Child() {\n      abstractMethod();\n    }\n  }' This inspection shares the functionality with the following inspections: Overridable method called during object construction Overridden method called during object construction Only one inspection should be enabled at once to prevent warning duplication.",
-                  "markdown": "Reports calls to `abstract` methods of the current class during object construction.\n\nA method is called during object construction if it is inside a:\n\n* Constructor\n* Non-static instance initializer\n* Non-static field initializer\n* `clone()` method\n* `readObject()` method\n* `readObjectNoData()` method\n\nSuch calls may result in subtle bugs, as object initialization may happen before the method call.\n\n**Example:**\n\n\n      abstract class Parent {\n        abstract void abstractMethod();\n      }\n\n      class Child extends Parent {\n        Child() {\n          abstractMethod();\n        }\n      }\n\nThis inspection shares the functionality with the following inspections:\n\n* Overridable method called during object construction\n* Overridden method called during object construction\n\nOnly one inspection should be enabled at once to prevent warning duplication."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Initialization",
-                      "index": 29,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "EqualsReplaceableByObjectsCall",
                 "shortDescription": {
@@ -17437,6 +9333,40 @@
                   }
                 ]
               },
+              {
+                "id": "AbstractMethodCallInConstructor",
+                "shortDescription": {
+                  "text": "Abstract method called during object construction"
+                },
+                "fullDescription": {
+                  "text": "Reports calls to 'abstract' methods of the current class during object construction. A method is called during object construction if it is inside a: Constructor Non-static instance initializer Non-static field initializer 'clone()' method 'readObject()' method 'readObjectNoData()' method Such calls may result in subtle bugs, as object initialization may happen before the method call. Example: 'abstract class Parent {\n    abstract void abstractMethod();\n  }\n\n  class Child extends Parent {\n    Child() {\n      abstractMethod();\n    }\n  }' This inspection shares the functionality with the following inspections: Overridable method called during object construction Overridden method called during object construction Only one inspection should be enabled at once to prevent warning duplication.",
+                  "markdown": "Reports calls to `abstract` methods of the current class during object construction.\n\nA method is called during object construction if it is inside a:\n\n* Constructor\n* Non-static instance initializer\n* Non-static field initializer\n* `clone()` method\n* `readObject()` method\n* `readObjectNoData()` method\n\nSuch calls may result in subtle bugs, as object initialization may happen before the method call.\n\n**Example:**\n\n\n      abstract class Parent {\n        abstract void abstractMethod();\n      }\n\n      class Child extends Parent {\n        Child() {\n          abstractMethod();\n        }\n      }\n\nThis inspection shares the functionality with the following inspections:\n\n* Overridable method called during object construction\n* Overridden method called during object construction\n\nOnly one inspection should be enabled at once to prevent warning duplication."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Initialization",
+                      "index": 29,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "TailRecursion",
                 "shortDescription": {
@@ -17460,7 +9390,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -17494,7 +9424,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -17562,7 +9492,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -17630,7 +9560,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -17800,7 +9730,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -17868,7 +9798,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -18174,7 +10104,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -18219,40 +10149,6 @@
                   }
                 ]
               },
-              {
-                "id": "ParameterHidingMemberVariable",
-                "shortDescription": {
-                  "text": "Parameter hides field"
-                },
-                "fullDescription": {
-                  "text": "Reports method parameters named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the parameter when using the identically named field is intended. A quick-fix is suggested to rename the parameter. Example: 'class Main {\n    private String value;\n\n    public Main(String value) {\n      value = value.toUpperCase();\n    }\n  }' You can configure the following options for this inspection: Ignore for property setters - ignore parameters of simple setters. Ignore superclass fields not visible from subclass - ignore 'private' fields in a superclass, which are not visible from the method. Ignore for constructors - ignore parameters of constructors. Ignore for abstract methods - ignore parameters of abstract methods. Ignore for static method parameters hiding instance fields - ignore parameters of 'static' methods hiding an instance field and to ignore parameters of instance methods in static inner classes hiding an instance field of an outer class. While not strictly hiding, such parameters can still be confusing.",
-                  "markdown": "Reports method parameters named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the parameter when using the identically named field is intended.\n\nA quick-fix is suggested to rename the parameter.\n\n**Example:**\n\n\n      class Main {\n        private String value;\n\n        public Main(String value) {\n          value = value.toUpperCase();\n        }\n      }\n      \n\nYou can configure the following options for this inspection:\n\n1. **Ignore for property setters** - ignore parameters of simple setters.\n2. **Ignore superclass fields not visible from subclass** - ignore `private` fields in a superclass, which are not visible from the method.\n3. **Ignore for constructors** - ignore parameters of constructors.\n4. **Ignore for abstract methods** - ignore parameters of abstract methods.\n5. **Ignore for static method parameters hiding instance fields** - ignore parameters of `static` methods hiding an instance field and to ignore parameters of instance methods in static inner classes hiding an instance field of an outer class. While not strictly hiding, such parameters can still be confusing."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Visibility",
-                      "index": 76,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "LambdaBodyCanBeCodeBlock",
                 "shortDescription": {
@@ -18287,6 +10183,40 @@
                   }
                 ]
               },
+              {
+                "id": "ParameterHidingMemberVariable",
+                "shortDescription": {
+                  "text": "Parameter hides field"
+                },
+                "fullDescription": {
+                  "text": "Reports method parameters named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the parameter when using the identically named field is intended. A quick-fix is suggested to rename the parameter. Example: 'class Main {\n    private String value;\n\n    public Main(String value) {\n      value = value.toUpperCase();\n    }\n  }' You can configure the following options for this inspection: Ignore for property setters - ignore parameters of simple setters. Ignore superclass fields not visible from subclass - ignore 'private' fields in a superclass, which are not visible from the method. Ignore for constructors - ignore parameters of constructors. Ignore for abstract methods - ignore parameters of abstract methods. Ignore for static method parameters hiding instance fields - ignore parameters of 'static' methods hiding an instance field and to ignore parameters of instance methods in static inner classes hiding an instance field of an outer class. While not strictly hiding, such parameters can still be confusing.",
+                  "markdown": "Reports method parameters named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the parameter when using the identically named field is intended.\n\nA quick-fix is suggested to rename the parameter.\n\n**Example:**\n\n\n      class Main {\n        private String value;\n\n        public Main(String value) {\n          value = value.toUpperCase();\n        }\n      }\n      \n\nYou can configure the following options for this inspection:\n\n1. **Ignore for property setters** - ignore parameters of simple setters.\n2. **Ignore superclass fields not visible from subclass** - ignore `private` fields in a superclass, which are not visible from the method.\n3. **Ignore for constructors** - ignore parameters of constructors.\n4. **Ignore for abstract methods** - ignore parameters of abstract methods.\n5. **Ignore for static method parameters hiding instance fields** - ignore parameters of `static` methods hiding an instance field and to ignore parameters of instance methods in static inner classes hiding an instance field of an outer class. While not strictly hiding, such parameters can still be confusing."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Visibility",
+                      "index": 76,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "CustomSecurityManager",
                 "shortDescription": {
@@ -18412,7 +10342,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -18548,7 +10478,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -18582,7 +10512,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -18650,7 +10580,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -19092,7 +11022,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -19137,40 +11067,6 @@
                   }
                 ]
               },
-              {
-                "id": "DefaultAnnotationParam",
-                "shortDescription": {
-                  "text": "Default annotation parameter value"
-                },
-                "fullDescription": {
-                  "text": "Reports annotation parameters that are assigned to their 'default' value. Example: '@interface Test {\n      Class<?> expected() default Throwable.class;\n  }\n\n  @Test(expected = Throwable.class)\n  void testSmth() {}' After the quick-fix is applied: '@Test()\n  void testSmth() {}'",
-                  "markdown": "Reports annotation parameters that are assigned to their `default` value.\n\nExample:\n\n\n      @interface Test {\n          Class<?> expected() default Throwable.class;\n      }\n\n      @Test(expected = Throwable.class)\n      void testSmth() {}\n\nAfter the quick-fix is applied:\n\n\n      @Test()\n      void testSmth() {}\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Declaration redundancy",
-                      "index": 12,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "WhileLoopSpinsOnField",
                 "shortDescription": {
@@ -19205,6 +11101,40 @@
                   }
                 ]
               },
+              {
+                "id": "DefaultAnnotationParam",
+                "shortDescription": {
+                  "text": "Default annotation parameter value"
+                },
+                "fullDescription": {
+                  "text": "Reports annotation parameters that are assigned to their 'default' value. Example: '@interface Test {\n      Class<?> expected() default Throwable.class;\n  }\n\n  @Test(expected = Throwable.class)\n  void testSmth() {}' After the quick-fix is applied: '@Test()\n  void testSmth() {}'",
+                  "markdown": "Reports annotation parameters that are assigned to their `default` value.\n\nExample:\n\n\n      @interface Test {\n          Class<?> expected() default Throwable.class;\n      }\n\n      @Test(expected = Throwable.class)\n      void testSmth() {}\n\nAfter the quick-fix is applied:\n\n\n      @Test()\n      void testSmth() {}\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Declaration redundancy",
+                      "index": 13,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "SynchronizeOnLock",
                 "shortDescription": {
@@ -19262,7 +11192,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -19296,7 +11226,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -19443,40 +11373,6 @@
                   }
                 ]
               },
-              {
-                "id": "RedundantOperationOnEmptyContainer",
-                "shortDescription": {
-                  "text": "Redundant operation on empty container"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant operations on empty collections, maps or arrays. Iterating, removing elements, sorting, and some other operations on empty collections have no effect and can be removed. Also, they may be a signal of a bug. Example: 'if (numbers.isEmpty()){\n    //error due to the missed negation\n    int max = numbers.stream().max(Comparator.naturalOrder()).get();\n    ...\n  }' New in 2019.1",
-                  "markdown": "Reports redundant operations on empty collections, maps or arrays.\n\n\nIterating, removing elements, sorting,\nand some other operations on empty collections have no effect and can be removed. Also, they may be a signal of a bug.\n\n**Example:**\n\n\n      if (numbers.isEmpty()){\n        //error due to the missed negation\n        int max = numbers.stream().max(Comparator.naturalOrder()).get();\n        ...\n      }\n\nNew in 2019.1"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Probable bugs",
-                      "index": 16,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "OptionalIsPresent",
                 "shortDescription": {
@@ -19511,6 +11407,40 @@
                   }
                 ]
               },
+              {
+                "id": "RedundantOperationOnEmptyContainer",
+                "shortDescription": {
+                  "text": "Redundant operation on empty container"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant operations on empty collections, maps or arrays. Iterating, removing elements, sorting, and some other operations on empty collections have no effect and can be removed. Also, they may be a signal of a bug. Example: 'if (numbers.isEmpty()){\n    //error due to the missed negation\n    int max = numbers.stream().max(Comparator.naturalOrder()).get();\n    ...\n  }' New in 2019.1",
+                  "markdown": "Reports redundant operations on empty collections, maps or arrays.\n\n\nIterating, removing elements, sorting,\nand some other operations on empty collections have no effect and can be removed. Also, they may be a signal of a bug.\n\n**Example:**\n\n\n      if (numbers.isEmpty()){\n        //error due to the missed negation\n        int max = numbers.stream().max(Comparator.naturalOrder()).get();\n        ...\n      }\n\nNew in 2019.1"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Probable bugs",
+                      "index": 16,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "AtomicFieldUpdaterNotStaticFinal",
                 "shortDescription": {
@@ -19885,40 +11815,6 @@
                   }
                 ]
               },
-              {
-                "id": "ImplicitNumericConversion",
-                "shortDescription": {
-                  "text": "Implicit numeric conversion"
-                },
-                "fullDescription": {
-                  "text": "Reports implicit conversion between numeric types. Implicit numeric conversion is not a problem in itself but, if unexpected, may cause difficulties when tracing bugs. Example: 'double m(int i) {\n    return i * 10;\n  }' After the quick-fix is applied: 'double m(int i) {\n    return (double) (i * 10);\n  }' Configure the inspection: Use the Ignore widening conversions option to ignore implicit conversion that cannot result in data loss (for example, 'int'->'long'). Use the Ignore conversions from and to 'char' option to ignore conversion from and to 'char'. The inspection will still report conversion from and to floating-point numbers. Use the Ignore conversion from constants and literals to make the inspection ignore conversion from literals and compile-time constants.",
-                  "markdown": "Reports implicit conversion between numeric types.\n\nImplicit numeric conversion is not a problem in itself but, if unexpected, may cause difficulties when tracing bugs.\n\n**Example:**\n\n\n      double m(int i) {\n        return i * 10;\n      }\n\nAfter the quick-fix is applied:\n\n\n      double m(int i) {\n        return (double) (i * 10);\n      }\n\nConfigure the inspection:\n\n* Use the **Ignore widening conversions** option to ignore implicit conversion that cannot result in data loss (for example, `int`-\\>`long`).\n* Use the **Ignore conversions from and to 'char'** option to ignore conversion from and to `char`. The inspection will still report conversion from and to floating-point numbers.\n* Use the **Ignore conversion from constants and literals** to make the inspection ignore conversion from literals and compile-time constants."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Numeric issues",
-                      "index": 26,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "WhileCanBeForeach",
                 "shortDescription": {
@@ -19953,6 +11849,40 @@
                   }
                 ]
               },
+              {
+                "id": "ImplicitNumericConversion",
+                "shortDescription": {
+                  "text": "Implicit numeric conversion"
+                },
+                "fullDescription": {
+                  "text": "Reports implicit conversion between numeric types. Implicit numeric conversion is not a problem in itself but, if unexpected, may cause difficulties when tracing bugs. Example: 'double m(int i) {\n    return i * 10;\n  }' After the quick-fix is applied: 'double m(int i) {\n    return (double) (i * 10);\n  }' Configure the inspection: Use the Ignore widening conversions option to ignore implicit conversion that cannot result in data loss (for example, 'int'->'long'). Use the Ignore conversions from and to 'char' option to ignore conversion from and to 'char'. The inspection will still report conversion from and to floating-point numbers. Use the Ignore conversion from constants and literals to make the inspection ignore conversion from literals and compile-time constants.",
+                  "markdown": "Reports implicit conversion between numeric types.\n\nImplicit numeric conversion is not a problem in itself but, if unexpected, may cause difficulties when tracing bugs.\n\n**Example:**\n\n\n      double m(int i) {\n        return i * 10;\n      }\n\nAfter the quick-fix is applied:\n\n\n      double m(int i) {\n        return (double) (i * 10);\n      }\n\nConfigure the inspection:\n\n* Use the **Ignore widening conversions** option to ignore implicit conversion that cannot result in data loss (for example, `int`-\\>`long`).\n* Use the **Ignore conversions from and to 'char'** option to ignore conversion from and to `char`. The inspection will still report conversion from and to floating-point numbers.\n* Use the **Ignore conversion from constants and literals** to make the inspection ignore conversion from literals and compile-time constants."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Numeric issues",
+                      "index": 26,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "BulkFileAttributesRead",
                 "shortDescription": {
@@ -19976,7 +11906,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -20214,7 +12144,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -20248,7 +12178,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -20395,40 +12325,6 @@
                   }
                 ]
               },
-              {
-                "id": "InterfaceMethodClashesWithObject",
-                "shortDescription": {
-                  "text": "Interface method clashes with method in 'Object'"
-                },
-                "fullDescription": {
-                  "text": "Reports interface methods that clash with the protected methods 'clone()' and 'finalize()' from the 'java.lang.Object' class. In an interface, it is possible to declare these methods with a return type that is incompatible with the 'java.lang.Object' methods. A class that implements such an interface will not be compilable. When the interface is functional, it remains possible to create a lambda from it, but this is not recommended. Example: '// Warning: this interface cannot be implemented\n  // by any class, only by a lambda or method reference\n  interface MyInterface {\n    double clone();\n  }'",
-                  "markdown": "Reports interface methods that clash with the **protected** methods `clone()` and `finalize()` from the `java.lang.Object` class.\n\nIn an interface, it is possible to declare these methods with a return type that is incompatible with the `java.lang.Object` methods.\nA class that implements such an interface will not be compilable.\nWhen the interface is functional, it remains possible to create a lambda from it, but this is not recommended.\n\nExample:\n\n\n      // Warning: this interface cannot be implemented\n      // by any class, only by a lambda or method reference\n      interface MyInterface {\n        double clone();\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Abstraction issues",
-                      "index": 62,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "SimplifiableAssertion",
                 "shortDescription": {
@@ -20463,6 +12359,40 @@
                   }
                 ]
               },
+              {
+                "id": "InterfaceMethodClashesWithObject",
+                "shortDescription": {
+                  "text": "Interface method clashes with method in 'Object'"
+                },
+                "fullDescription": {
+                  "text": "Reports interface methods that clash with the protected methods 'clone()' and 'finalize()' from the 'java.lang.Object' class. In an interface, it is possible to declare these methods with a return type that is incompatible with the 'java.lang.Object' methods. A class that implements such an interface will not be compilable. When the interface is functional, it remains possible to create a lambda from it, but this is not recommended. Example: '// Warning: this interface cannot be implemented\n  // by any class, only by a lambda or method reference\n  interface MyInterface {\n    double clone();\n  }'",
+                  "markdown": "Reports interface methods that clash with the **protected** methods `clone()` and `finalize()` from the `java.lang.Object` class.\n\nIn an interface, it is possible to declare these methods with a return type that is incompatible with the `java.lang.Object` methods.\nA class that implements such an interface will not be compilable.\nWhen the interface is functional, it remains possible to create a lambda from it, but this is not recommended.\n\nExample:\n\n\n      // Warning: this interface cannot be implemented\n      // by any class, only by a lambda or method reference\n      interface MyInterface {\n        double clone();\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Abstraction issues",
+                      "index": 62,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "StaticMethodOnlyUsedInOneClass",
                 "shortDescription": {
@@ -20690,7 +12620,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -20758,7 +12688,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -20860,7 +12790,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -21246,16 +13176,16 @@
                 ]
               },
               {
-                "id": "ClassOnlyUsedInOnePackage",
+                "id": "UnnecessaryToStringCall",
                 "shortDescription": {
-                  "text": "Class only used from one other package"
+                  "text": "Unnecessary call to 'toString()'"
                 },
                 "fullDescription": {
-                  "text": "Reports classes that don't depend on any other class in their package, depend on classes from another package, and are themselves a dependency only for classes from this other package. Consider moving such classes to the package on which they depend. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.",
-                  "markdown": "Reports classes that don't depend on any other class in their package, depend on classes from another package, and are themselves a dependency only for classes from this other package. Consider moving such classes to the package on which they depend.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor."
+                  "text": "Reports calls to 'toString()' that are used in the following cases: In string concatenations In the 'java.lang.StringBuilder#append()' or 'java.lang.StringBuffer#append()' methods In the methods of 'java.io.PrintWriter' or 'java.io.PrintStream' in the methods 'org.slf4j.Logger' In these cases, conversion to string will be handled by the underlying library methods, and the explicit call to 'toString()' is not needed. Example: 'System.out.println(this.toString())' After the quick-fix is applied: 'System.out.println(this)' Note that without the 'toString()' call, the code semantics might be different: if the expression is null, then the 'null' string will be used instead of throwing a 'NullPointerException'. Use the Report only when qualifier is known to be not-null option to avoid warnings for the values that could potentially be null.",
+                  "markdown": "Reports calls to `toString()` that are used in the following cases:\n\n* In string concatenations\n* In the `java.lang.StringBuilder#append()` or `java.lang.StringBuffer#append()` methods\n* In the methods of `java.io.PrintWriter` or `java.io.PrintStream`\n* in the methods `org.slf4j.Logger`\n\nIn these cases, conversion to string will be handled by the underlying library methods, and the explicit call to `toString()` is not needed.\n\nExample:\n\n\n      System.out.println(this.toString())\n\nAfter the quick-fix is applied:\n\n\n      System.out.println(this)\n\n\nNote that without the `toString()` call, the code semantics might be different: if the expression is null,\nthen the `null` string will be used instead of throwing a `NullPointerException`.\n\nUse the **Report only when qualifier is known to be not-null** option to avoid warnings for the values that could potentially be null."
                 },
                 "defaultConfiguration": {
-                  "enabled": false,
+                  "enabled": true,
                   "level": "warning",
                   "parameters": {
                     "ideaSeverity": "WARNING",
@@ -21267,8 +13197,8 @@
                 "relationships": [
                   {
                     "target": {
-                      "id": "Java/Packaging issues",
-                      "index": 36,
+                      "id": "Java/Code style issues",
+                      "index": 11,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -21314,16 +13244,16 @@
                 ]
               },
               {
-                "id": "UnnecessaryToStringCall",
+                "id": "ClassOnlyUsedInOnePackage",
                 "shortDescription": {
-                  "text": "Unnecessary call to 'toString()'"
+                  "text": "Class only used from one other package"
                 },
                 "fullDescription": {
-                  "text": "Reports calls to 'toString()' that are used in the following cases: In string concatenations In the 'java.lang.StringBuilder#append()' or 'java.lang.StringBuffer#append()' methods In the methods of 'java.io.PrintWriter' or 'java.io.PrintStream' in the methods 'org.slf4j.Logger' In these cases, conversion to string will be handled by the underlying library methods, and the explicit call to 'toString()' is not needed. Example: 'System.out.println(this.toString())' After the quick-fix is applied: 'System.out.println(this)' Note that without the 'toString()' call, the code semantics might be different: if the expression is null, then the 'null' string will be used instead of throwing a 'NullPointerException'. Use the Report only when qualifier is known to be not-null option to avoid warnings for the values that could potentially be null.",
-                  "markdown": "Reports calls to `toString()` that are used in the following cases:\n\n* In string concatenations\n* In the `java.lang.StringBuilder#append()` or `java.lang.StringBuffer#append()` methods\n* In the methods of `java.io.PrintWriter` or `java.io.PrintStream`\n* in the methods `org.slf4j.Logger`\n\nIn these cases, conversion to string will be handled by the underlying library methods, and the explicit call to `toString()` is not needed.\n\nExample:\n\n\n      System.out.println(this.toString())\n\nAfter the quick-fix is applied:\n\n\n      System.out.println(this)\n\n\nNote that without the `toString()` call, the code semantics might be different: if the expression is null,\nthen the `null` string will be used instead of throwing a `NullPointerException`.\n\nUse the **Report only when qualifier is known to be not-null** option to avoid warnings for the values that could potentially be null."
+                  "text": "Reports classes that don't depend on any other class in their package, depend on classes from another package, and are themselves a dependency only for classes from this other package. Consider moving such classes to the package on which they depend. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.",
+                  "markdown": "Reports classes that don't depend on any other class in their package, depend on classes from another package, and are themselves a dependency only for classes from this other package. Consider moving such classes to the package on which they depend.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor."
                 },
                 "defaultConfiguration": {
-                  "enabled": true,
+                  "enabled": false,
                   "level": "warning",
                   "parameters": {
                     "ideaSeverity": "WARNING",
@@ -21332,6 +13262,40 @@
                     ]
                   }
                 },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Packaging issues",
+                      "index": 36,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReturnSeparatedFromComputation",
+                "shortDescription": {
+                  "text": "'return' separated from the result computation"
+                },
+                "fullDescription": {
+                  "text": "Reports 'return' statements that return a local variable where the value of the variable is computed somewhere else within the same method. The quick-fix inlines the returned variable by moving the return statement to the location in which the value of the variable is computed. When the returned value can't be inlined into the 'return' statement, the quick-fix attempts to move the return statement as close to the computation of the returned value as possible. Example: 'int n = -1;\n  for (int i = 0; i < a.length; i++) {\n    if (a[i] == b) {\n      n = i;\n      break;\n    }\n  }\n  return n;' After the quick-fix is applied: 'int n = -1;\n  for (int i = 0; i < a.length; i++) {\n    if (a[i] == b) {\n      return i;\n    }\n  }\n  return n;'",
+                  "markdown": "Reports `return` statements that return a local variable where the value of the variable is computed somewhere else within the same method.\n\nThe quick-fix inlines the returned variable by moving the return statement to the location in which the value\nof the variable is computed.\nWhen the returned value can't be inlined into the `return` statement,\nthe quick-fix attempts to move the return statement as close to the computation of the returned value as possible.\n\nExample:\n\n\n      int n = -1;\n      for (int i = 0; i < a.length; i++) {\n        if (a[i] == b) {\n          n = i;\n          break;\n        }\n      }\n      return n;\n\nAfter the quick-fix is applied:\n\n\n      int n = -1;\n      for (int i = 0; i < a.length; i++) {\n        if (a[i] == b) {\n          return i;\n        }\n      }\n      return n;\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
                 "relationships": [
                   {
                     "target": {
@@ -21381,40 +13345,6 @@
                   }
                 ]
               },
-              {
-                "id": "ReturnSeparatedFromComputation",
-                "shortDescription": {
-                  "text": "'return' separated from the result computation"
-                },
-                "fullDescription": {
-                  "text": "Reports 'return' statements that return a local variable where the value of the variable is computed somewhere else within the same method. The quick-fix inlines the returned variable by moving the return statement to the location in which the value of the variable is computed. When the returned value can't be inlined into the 'return' statement, the quick-fix attempts to move the return statement as close to the computation of the returned value as possible. Example: 'int n = -1;\n  for (int i = 0; i < a.length; i++) {\n    if (a[i] == b) {\n      n = i;\n      break;\n    }\n  }\n  return n;' After the quick-fix is applied: 'int n = -1;\n  for (int i = 0; i < a.length; i++) {\n    if (a[i] == b) {\n      return i;\n    }\n  }\n  return n;'",
-                  "markdown": "Reports `return` statements that return a local variable where the value of the variable is computed somewhere else within the same method.\n\nThe quick-fix inlines the returned variable by moving the return statement to the location in which the value\nof the variable is computed.\nWhen the returned value can't be inlined into the `return` statement,\nthe quick-fix attempts to move the return statement as close to the computation of the returned value as possible.\n\nExample:\n\n\n      int n = -1;\n      for (int i = 0; i < a.length; i++) {\n        if (a[i] == b) {\n          n = i;\n          break;\n        }\n      }\n      return n;\n\nAfter the quick-fix is applied:\n\n\n      int n = -1;\n      for (int i = 0; i < a.length; i++) {\n        if (a[i] == b) {\n          return i;\n        }\n      }\n      return n;\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Code style issues",
-                      "index": 11,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "ArrayObjectsEquals",
                 "shortDescription": {
@@ -21472,7 +13402,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -21517,40 +13447,6 @@
                   }
                 ]
               },
-              {
-                "id": "SuspiciousIndentAfterControlStatement",
-                "shortDescription": {
-                  "text": "Suspicious indentation after control statement without braces"
-                },
-                "fullDescription": {
-                  "text": "Reports suspicious indentation of statements after a control statement without braces. Such indentation can make it look like the statement is inside the control statement, when in fact it will be executed unconditionally after the control statement. Example: 'class Bar {\n      void foo(int i) {\n          if (i == 0)\n              System.out.println(\"foo\");\n              System.out.println(\"bar\"); // warning\n          if (i == 1);\n              System.out.println(\"great\"); // warning\n          if (i == 42)\n              System.out.println(\"answer\");\n                  System.out.println(\"question\"); // warning\n      }\n  }'",
-                  "markdown": "Reports suspicious indentation of statements after a control statement without braces.\n\n\nSuch indentation can make it look like the statement is inside the control statement,\nwhen in fact it will be executed unconditionally after the control statement.\n\n**Example:**\n\n\n      class Bar {\n          void foo(int i) {\n              if (i == 0)\n                  System.out.println(\"foo\");\n                  System.out.println(\"bar\"); // warning\n              if (i == 1);\n                  System.out.println(\"great\"); // warning\n              if (i == 42)\n                  System.out.println(\"answer\");\n                      System.out.println(\"question\"); // warning\n          }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Probable bugs",
-                      "index": 16,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "NumericOverflow",
                 "shortDescription": {
@@ -21585,6 +13481,40 @@
                   }
                 ]
               },
+              {
+                "id": "SuspiciousIndentAfterControlStatement",
+                "shortDescription": {
+                  "text": "Suspicious indentation after control statement without braces"
+                },
+                "fullDescription": {
+                  "text": "Reports suspicious indentation of statements after a control statement without braces. Such indentation can make it look like the statement is inside the control statement, when in fact it will be executed unconditionally after the control statement. Example: 'class Bar {\n      void foo(int i) {\n          if (i == 0)\n              System.out.println(\"foo\");\n              System.out.println(\"bar\"); // warning\n          if (i == 1);\n              System.out.println(\"great\"); // warning\n          if (i == 42)\n              System.out.println(\"answer\");\n                  System.out.println(\"question\"); // warning\n      }\n  }'",
+                  "markdown": "Reports suspicious indentation of statements after a control statement without braces.\n\n\nSuch indentation can make it look like the statement is inside the control statement,\nwhen in fact it will be executed unconditionally after the control statement.\n\n**Example:**\n\n\n      class Bar {\n          void foo(int i) {\n              if (i == 0)\n                  System.out.println(\"foo\");\n                  System.out.println(\"bar\"); // warning\n              if (i == 1);\n                  System.out.println(\"great\"); // warning\n              if (i == 42)\n                  System.out.println(\"answer\");\n                      System.out.println(\"question\"); // warning\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Probable bugs",
+                      "index": 16,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "AssignmentToSuperclassField",
                 "shortDescription": {
@@ -21676,7 +13606,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -21948,7 +13878,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -22186,7 +14116,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -22254,7 +14184,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -22288,7 +14218,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -22322,7 +14252,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -22662,7 +14592,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -22696,7 +14626,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -22741,40 +14671,6 @@
                   }
                 ]
               },
-              {
-                "id": "StringEquality",
-                "shortDescription": {
-                  "text": "String comparison using '==', instead of 'equals()'"
-                },
-                "fullDescription": {
-                  "text": "Reports code that uses of == or != to compare strings. These operators determine referential equality instead of comparing content. In most cases, strings should be compared using 'equals()', which does a character-by-character comparison when the strings are different objects. Example: 'void foo(String s, String t) {\n    final boolean b = t == s;\n  }' If 't' is known to be non-null, then it's safe to apply the \"unsafe\" quick-fix and get the result similar to the following: 'void foo(String s, String t) {\n    final boolean b = t.equals(s);\n  }'",
-                  "markdown": "Reports code that uses of **==** or **!=** to compare strings.\n\n\nThese operators determine referential equality instead of comparing content.\nIn most cases, strings should be compared using `equals()`,\nwhich does a character-by-character comparison when the strings are different objects.\n\n**Example:**\n\n\n      void foo(String s, String t) {\n        final boolean b = t == s;\n      }\n\nIf `t` is known to be non-null, then it's safe to apply the \"unsafe\" quick-fix and get the result similar to the following:\n\n\n      void foo(String s, String t) {\n        final boolean b = t.equals(s);\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Probable bugs",
-                      "index": 16,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "SuspiciousLiteralUnderscore",
                 "shortDescription": {
@@ -22809,6 +14705,40 @@
                   }
                 ]
               },
+              {
+                "id": "StringEquality",
+                "shortDescription": {
+                  "text": "String comparison using '==', instead of 'equals()'"
+                },
+                "fullDescription": {
+                  "text": "Reports code that uses of == or != to compare strings. These operators determine referential equality instead of comparing content. In most cases, strings should be compared using 'equals()', which does a character-by-character comparison when the strings are different objects. Example: 'void foo(String s, String t) {\n    final boolean b = t == s;\n  }' If 't' is known to be non-null, then it's safe to apply the \"unsafe\" quick-fix and get the result similar to the following: 'void foo(String s, String t) {\n    final boolean b = t.equals(s);\n  }'",
+                  "markdown": "Reports code that uses of **==** or **!=** to compare strings.\n\n\nThese operators determine referential equality instead of comparing content.\nIn most cases, strings should be compared using `equals()`,\nwhich does a character-by-character comparison when the strings are different objects.\n\n**Example:**\n\n\n      void foo(String s, String t) {\n        final boolean b = t == s;\n      }\n\nIf `t` is known to be non-null, then it's safe to apply the \"unsafe\" quick-fix and get the result similar to the following:\n\n\n      void foo(String s, String t) {\n        final boolean b = t.equals(s);\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Probable bugs",
+                      "index": 16,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "StaticCallOnSubclass",
                 "shortDescription": {
@@ -22866,7 +14796,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -23104,7 +15034,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -23206,7 +15136,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -23319,40 +15249,6 @@
                   }
                 ]
               },
-              {
-                "id": "SystemGC",
-                "shortDescription": {
-                  "text": "Call to 'System.gc()' or 'Runtime.gc()'"
-                },
-                "fullDescription": {
-                  "text": "Reports 'System.gc()' or 'Runtime.gc()' calls. While occasionally useful in testing, explicitly triggering garbage collection via 'System.gc()' is almost never recommended in production code and can result in serious performance issues.",
-                  "markdown": "Reports `System.gc()` or `Runtime.gc()` calls. While occasionally useful in testing, explicitly triggering garbage collection via `System.gc()` is almost never recommended in production code and can result in serious performance issues."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Memory",
-                      "index": 127,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "ClassComplexity",
                 "shortDescription": {
@@ -23387,6 +15283,40 @@
                   }
                 ]
               },
+              {
+                "id": "SystemGC",
+                "shortDescription": {
+                  "text": "Call to 'System.gc()' or 'Runtime.gc()'"
+                },
+                "fullDescription": {
+                  "text": "Reports 'System.gc()' or 'Runtime.gc()' calls. While occasionally useful in testing, explicitly triggering garbage collection via 'System.gc()' is almost never recommended in production code and can result in serious performance issues.",
+                  "markdown": "Reports `System.gc()` or `Runtime.gc()` calls. While occasionally useful in testing, explicitly triggering garbage collection via `System.gc()` is almost never recommended in production code and can result in serious performance issues."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Memory",
+                      "index": 127,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "OverflowingLoopIndex",
                 "shortDescription": {
@@ -23444,41 +15374,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "Java9UndeclaredServiceUsage",
-                "shortDescription": {
-                  "text": "Usage of service not declared in 'module-info'"
-                },
-                "fullDescription": {
-                  "text": "Reports situations in which a service is loaded with 'java.util.ServiceLoader' but it isn't declared with the 'uses' clause in the 'module-info.java' file and suggests inserting it. New in 2018.1",
-                  "markdown": "Reports situations in which a service is loaded with `java.util.ServiceLoader` but it isn't declared with the `uses` clause in the `module-info.java` file and suggests inserting it.\n\nNew in 2018.1"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Visibility",
-                      "index": 76,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -23523,6 +15419,40 @@
                   }
                 ]
               },
+              {
+                "id": "Java9UndeclaredServiceUsage",
+                "shortDescription": {
+                  "text": "Usage of service not declared in 'module-info'"
+                },
+                "fullDescription": {
+                  "text": "Reports situations in which a service is loaded with 'java.util.ServiceLoader' but it isn't declared with the 'uses' clause in the 'module-info.java' file and suggests inserting it. New in 2018.1",
+                  "markdown": "Reports situations in which a service is loaded with `java.util.ServiceLoader` but it isn't declared with the `uses` clause in the `module-info.java` file and suggests inserting it.\n\nNew in 2018.1"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Visibility",
+                      "index": 76,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "CallToSimpleSetterInClass",
                 "shortDescription": {
@@ -23546,7 +15476,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -23648,7 +15578,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -23682,7 +15612,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -23750,7 +15680,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -23852,7 +15782,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -23988,7 +15918,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -24101,40 +16031,6 @@
                   }
                 ]
               },
-              {
-                "id": "ClassWithoutNoArgConstructor",
-                "shortDescription": {
-                  "text": "Class without no-arg constructor"
-                },
-                "fullDescription": {
-                  "text": "Reports classes without a constructor that takes no arguments. No-argument constructors are necessary in some contexts. For example, if a class needs to be created using reflection. Use the checkbox below to ignore classes without explicit constructors. The compiler provides a default no-argument constructor to such classes.",
-                  "markdown": "Reports classes without a constructor that takes no arguments. No-argument constructors are necessary in some contexts. For example, if a class needs to be created using reflection.\n\n\nUse the checkbox below to ignore classes without explicit constructors.\nThe compiler provides a default no-argument constructor to such classes."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/JavaBeans issues",
-                      "index": 106,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "ClassWithTooManyDependencies",
                 "shortDescription": {
@@ -24169,6 +16065,40 @@
                   }
                 ]
               },
+              {
+                "id": "ClassWithoutNoArgConstructor",
+                "shortDescription": {
+                  "text": "Class without no-arg constructor"
+                },
+                "fullDescription": {
+                  "text": "Reports classes without a constructor that takes no arguments. No-argument constructors are necessary in some contexts. For example, if a class needs to be created using reflection. Use the checkbox below to ignore classes without explicit constructors. The compiler provides a default no-argument constructor to such classes.",
+                  "markdown": "Reports classes without a constructor that takes no arguments. No-argument constructors are necessary in some contexts. For example, if a class needs to be created using reflection.\n\n\nUse the checkbox below to ignore classes without explicit constructors.\nThe compiler provides a default no-argument constructor to such classes."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/JavaBeans issues",
+                      "index": 106,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "CastConflictsWithInstanceof",
                 "shortDescription": {
@@ -24260,7 +16190,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -24475,40 +16405,6 @@
                   }
                 ]
               },
-              {
-                "id": "Java9RedundantRequiresStatement",
-                "shortDescription": {
-                  "text": "Redundant 'requires' directive in module-info"
-                },
-                "fullDescription": {
-                  "text": "Reports redundant 'requires' directives in Java Platform Module System 'module-info.java' files. A 'requires' directive is redundant when a module 'A' requires a module 'B', but the code in module 'A' doesn't import any packages or classes from 'B'. Furthermore, all modules have an implicitly declared dependence on the 'java.base' module, therefore a 'requires java.base;' directive is always redundant. The quick-fix deletes the redundant 'requires' directive. If the deleted dependency re-exported modules that are actually used, the fix adds a 'requires' directives for these modules. This inspection only reports if the language level of the project or module is 9 or higher. New in 2017.1",
-                  "markdown": "Reports redundant `requires` directives in Java Platform Module System `module-info.java` files. A `requires` directive is redundant when a module `A` requires a module `B`, but the code in module `A` doesn't import any packages or classes from `B`. Furthermore, all modules have an implicitly declared dependence on the `java.base` module, therefore a `requires java.base;` directive is always redundant.\n\n\nThe quick-fix deletes the redundant `requires` directive.\nIf the deleted dependency re-exported modules that are actually used, the fix adds a `requires` directives for these modules.\n\nThis inspection only reports if the language level of the project or module is 9 or higher.\n\nNew in 2017.1"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Declaration redundancy",
-                      "index": 12,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "UnnecessaryLocalVariable",
                 "shortDescription": {
@@ -24543,6 +16439,40 @@
                   }
                 ]
               },
+              {
+                "id": "Java9RedundantRequiresStatement",
+                "shortDescription": {
+                  "text": "Redundant 'requires' directive in module-info"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant 'requires' directives in Java Platform Module System 'module-info.java' files. A 'requires' directive is redundant when a module 'A' requires a module 'B', but the code in module 'A' doesn't import any packages or classes from 'B'. Furthermore, all modules have an implicitly declared dependence on the 'java.base' module, therefore a 'requires java.base;' directive is always redundant. The quick-fix deletes the redundant 'requires' directive. If the deleted dependency re-exported modules that are actually used, the fix adds a 'requires' directives for these modules. This inspection only reports if the language level of the project or module is 9 or higher. New in 2017.1",
+                  "markdown": "Reports redundant `requires` directives in Java Platform Module System `module-info.java` files. A `requires` directive is redundant when a module `A` requires a module `B`, but the code in module `A` doesn't import any packages or classes from `B`. Furthermore, all modules have an implicitly declared dependence on the `java.base` module, therefore a `requires java.base;` directive is always redundant.\n\n\nThe quick-fix deletes the redundant `requires` directive.\nIf the deleted dependency re-exported modules that are actually used, the fix adds a `requires` directives for these modules.\n\nThis inspection only reports if the language level of the project or module is 9 or higher.\n\nNew in 2017.1"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Declaration redundancy",
+                      "index": 13,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "BusyWait",
                 "shortDescription": {
@@ -24747,40 +16677,6 @@
                   }
                 ]
               },
-              {
-                "id": "InstanceofIncompatibleInterface",
-                "shortDescription": {
-                  "text": "'instanceof' with incompatible interface"
-                },
-                "fullDescription": {
-                  "text": "Reports 'instanceof' expressions where the compared type is an interface, and the compared expression has a class type that neither implements the compared interface, nor has any visible subclasses which implement the compared interface. Although that might be intended, normally such a construct is most likely an error, where the resulting 'instanceof' expression always evaluates to 'false'. Example: 'interface I1 {}\n\n  interface I2 {}\n\n  interface I3 extends I1 {}\n\n  static class Sub1 implements I1 {}\n\n  static class Sub2 extends Sub1 implements I2 {\n    void test(Sub1 sub1) {\n      if (sub1 instanceof I3) { // here 'I3' is incompatible interface\n      }\n    }\n  }'",
-                  "markdown": "Reports `instanceof` expressions where the compared type is an interface, and the compared expression has a class type that neither implements the compared interface, nor has any visible subclasses which implement the compared interface.\n\n\nAlthough that might be intended, normally such a construct is most likely an error, where\nthe resulting `instanceof` expression always evaluates to `false`.\n\n**Example:**\n\n\n      interface I1 {}\n\n      interface I2 {}\n\n      interface I3 extends I1 {}\n\n      static class Sub1 implements I1 {}\n\n      static class Sub2 extends Sub1 implements I2 {\n        void test(Sub1 sub1) {\n          if (sub1 instanceof I3) { // here 'I3' is incompatible interface\n          }\n        }\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Probable bugs",
-                      "index": 16,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "UnqualifiedMethodAccess",
                 "shortDescription": {
@@ -24815,6 +16711,40 @@
                   }
                 ]
               },
+              {
+                "id": "InstanceofIncompatibleInterface",
+                "shortDescription": {
+                  "text": "'instanceof' with incompatible interface"
+                },
+                "fullDescription": {
+                  "text": "Reports 'instanceof' expressions where the compared type is an interface, and the compared expression has a class type that neither implements the compared interface, nor has any visible subclasses which implement the compared interface. Although that might be intended, normally such a construct is most likely an error, where the resulting 'instanceof' expression always evaluates to 'false'. Example: 'interface I1 {}\n\n  interface I2 {}\n\n  interface I3 extends I1 {}\n\n  static class Sub1 implements I1 {}\n\n  static class Sub2 extends Sub1 implements I2 {\n    void test(Sub1 sub1) {\n      if (sub1 instanceof I3) { // here 'I3' is incompatible interface\n      }\n    }\n  }'",
+                  "markdown": "Reports `instanceof` expressions where the compared type is an interface, and the compared expression has a class type that neither implements the compared interface, nor has any visible subclasses which implement the compared interface.\n\n\nAlthough that might be intended, normally such a construct is most likely an error, where\nthe resulting `instanceof` expression always evaluates to `false`.\n\n**Example:**\n\n\n      interface I1 {}\n\n      interface I2 {}\n\n      interface I3 extends I1 {}\n\n      static class Sub1 implements I1 {}\n\n      static class Sub2 extends Sub1 implements I2 {\n        void test(Sub1 sub1) {\n          if (sub1 instanceof I3) { // here 'I3' is incompatible interface\n          }\n        }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Probable bugs",
+                      "index": 16,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "FunctionalExpressionCanBeFolded",
                 "shortDescription": {
@@ -24838,7 +16768,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -24951,40 +16881,6 @@
                   }
                 ]
               },
-              {
-                "id": "NonPublicClone",
-                "shortDescription": {
-                  "text": "'clone()' method not 'public'"
-                },
-                "fullDescription": {
-                  "text": "Reports 'clone()' methods that are 'protected' and not 'public'. When overriding the 'clone()' method from 'java.lang.Object', it is expected to make the method 'public', so that it is accessible from non-subclasses outside the package.",
-                  "markdown": "Reports `clone()` methods that are `protected` and not `public`.\n\nWhen overriding the `clone()` method from `java.lang.Object`, it is expected to make the method `public`,\nso that it is accessible from non-subclasses outside the package."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Cloning issues",
-                      "index": 87,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "IfCanBeSwitch",
                 "shortDescription": {
@@ -25019,6 +16915,40 @@
                   }
                 ]
               },
+              {
+                "id": "NonPublicClone",
+                "shortDescription": {
+                  "text": "'clone()' method not 'public'"
+                },
+                "fullDescription": {
+                  "text": "Reports 'clone()' methods that are 'protected' and not 'public'. When overriding the 'clone()' method from 'java.lang.Object', it is expected to make the method 'public', so that it is accessible from non-subclasses outside the package.",
+                  "markdown": "Reports `clone()` methods that are `protected` and not `public`.\n\nWhen overriding the `clone()` method from `java.lang.Object`, it is expected to make the method `public`,\nso that it is accessible from non-subclasses outside the package."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Cloning issues",
+                      "index": 87,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "InfiniteRecursion",
                 "shortDescription": {
@@ -25178,7 +17108,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -25620,7 +17550,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -25654,7 +17584,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -25824,41 +17754,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "MismatchedStringCase",
-                "shortDescription": {
-                  "text": "Mismatched case in 'String' operation"
-                },
-                "fullDescription": {
-                  "text": "Reports 'String' method calls that always return the same value ('-1' or 'false') because a lowercase character is searched in an uppercase-only string or vice versa. Reported methods include 'equals', 'startsWith', 'endsWith', 'contains', 'indexOf', and 'lastIndexOf'. Example:   if (columnName.toLowerCase().equals(\"ID\")) {...}\n New in 2019.3",
-                  "markdown": "Reports `String` method calls that always return the same value (`-1` or `false`) because a lowercase character is searched in an uppercase-only string or vice versa.\n\nReported methods include `equals`, `startsWith`, `endsWith`, `contains`,\n`indexOf`, and `lastIndexOf`.\n\n**Example:**\n\n```\n  if (columnName.toLowerCase().equals(\"ID\")) {...}\n```\n\nNew in 2019.3"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Probable bugs",
-                      "index": 16,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -25903,6 +17799,40 @@
                   }
                 ]
               },
+              {
+                "id": "MismatchedStringCase",
+                "shortDescription": {
+                  "text": "Mismatched case in 'String' operation"
+                },
+                "fullDescription": {
+                  "text": "Reports 'String' method calls that always return the same value ('-1' or 'false') because a lowercase character is searched in an uppercase-only string or vice versa. Reported methods include 'equals', 'startsWith', 'endsWith', 'contains', 'indexOf', and 'lastIndexOf'. Example:   if (columnName.toLowerCase().equals(\"ID\")) {...}\n New in 2019.3",
+                  "markdown": "Reports `String` method calls that always return the same value (`-1` or `false`) because a lowercase character is searched in an uppercase-only string or vice versa.\n\nReported methods include `equals`, `startsWith`, `endsWith`, `contains`,\n`indexOf`, and `lastIndexOf`.\n\n**Example:**\n\n```\n  if (columnName.toLowerCase().equals(\"ID\")) {...}\n```\n\nNew in 2019.3"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Probable bugs",
+                      "index": 16,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "AssignmentToNull",
                 "shortDescription": {
@@ -25938,13 +17868,13 @@
                 ]
               },
               {
-                "id": "WaitCalledOnCondition",
+                "id": "NonSynchronizedMethodOverridesSynchronizedMethod",
                 "shortDescription": {
-                  "text": "'wait()' called on 'java.util.concurrent.locks.Condition' object"
+                  "text": "Unsynchronized method overrides 'synchronized' method"
                 },
                 "fullDescription": {
-                  "text": "Reports calls to 'wait()' made on a 'java.util.concurrent.locks.Condition' object. This is probably a programming error, and some variant of the 'await()' method was intended instead. Example: 'void acquire(Condition released) throws InterruptedException {\n    while (acquired) {\n      released.wait();\n    }\n  }' Good code would look like this: 'void acquire(Condition released) throws InterruptedException {\n    while (acquired) {\n      released.await();\n    }\n  }'",
-                  "markdown": "Reports calls to `wait()` made on a `java.util.concurrent.locks.Condition` object. This is probably a programming error, and some variant of the `await()` method was intended instead.\n\n**Example:**\n\n\n      void acquire(Condition released) throws InterruptedException {\n        while (acquired) {\n          released.wait();\n        }\n      }\n\nGood code would look like this:\n\n\n      void acquire(Condition released) throws InterruptedException {\n        while (acquired) {\n          released.await();\n        }\n      }\n"
+                  "text": "Reports non-'synchronized' methods overriding 'synchronized' methods. The overridden method will not be automatically synchronized if the superclass method is declared as 'synchronized'. This may result in unexpected race conditions when using the subclass. Example: 'class Super {\n    synchronized void process() {}\n  }\n  class Sub extends Super {\n    // Unsynchronized method 'process()' overrides synchronized method\n    void process() {}\n  }'",
+                  "markdown": "Reports non-`synchronized` methods overriding `synchronized` methods.\n\n\nThe overridden method will not be automatically synchronized if the superclass method\nis declared as `synchronized`. This may result in unexpected race conditions when using the subclass.\n\n**Example:**\n\n\n      class Super {\n        synchronized void process() {}\n      }\n      class Sub extends Super {\n        // Unsynchronized method 'process()' overrides synchronized method\n        void process() {}\n      }  \n"
                 },
                 "defaultConfiguration": {
                   "enabled": false,
@@ -25972,13 +17902,13 @@
                 ]
               },
               {
-                "id": "NonSynchronizedMethodOverridesSynchronizedMethod",
+                "id": "WaitCalledOnCondition",
                 "shortDescription": {
-                  "text": "Unsynchronized method overrides 'synchronized' method"
+                  "text": "'wait()' called on 'java.util.concurrent.locks.Condition' object"
                 },
                 "fullDescription": {
-                  "text": "Reports non-'synchronized' methods overriding 'synchronized' methods. The overridden method will not be automatically synchronized if the superclass method is declared as 'synchronized'. This may result in unexpected race conditions when using the subclass. Example: 'class Super {\n    synchronized void process() {}\n  }\n  class Sub extends Super {\n    // Unsynchronized method 'process()' overrides synchronized method\n    void process() {}\n  }'",
-                  "markdown": "Reports non-`synchronized` methods overriding `synchronized` methods.\n\n\nThe overridden method will not be automatically synchronized if the superclass method\nis declared as `synchronized`. This may result in unexpected race conditions when using the subclass.\n\n**Example:**\n\n\n      class Super {\n        synchronized void process() {}\n      }\n      class Sub extends Super {\n        // Unsynchronized method 'process()' overrides synchronized method\n        void process() {}\n      }  \n"
+                  "text": "Reports calls to 'wait()' made on a 'java.util.concurrent.locks.Condition' object. This is probably a programming error, and some variant of the 'await()' method was intended instead. Example: 'void acquire(Condition released) throws InterruptedException {\n    while (acquired) {\n      released.wait();\n    }\n  }' Good code would look like this: 'void acquire(Condition released) throws InterruptedException {\n    while (acquired) {\n      released.await();\n    }\n  }'",
+                  "markdown": "Reports calls to `wait()` made on a `java.util.concurrent.locks.Condition` object. This is probably a programming error, and some variant of the `await()` method was intended instead.\n\n**Example:**\n\n\n      void acquire(Condition released) throws InterruptedException {\n        while (acquired) {\n          released.wait();\n        }\n      }\n\nGood code would look like this:\n\n\n      void acquire(Condition released) throws InterruptedException {\n        while (acquired) {\n          released.await();\n        }\n      }\n"
                 },
                 "defaultConfiguration": {
                   "enabled": false,
@@ -26028,7 +17958,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -26062,7 +17992,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -26164,7 +18094,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -26334,7 +18264,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -26368,7 +18298,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -26549,6 +18479,40 @@
                   }
                 ]
               },
+              {
+                "id": "ExternalizableWithoutPublicNoArgConstructor",
+                "shortDescription": {
+                  "text": "'Externalizable' class without 'public' no-arg constructor"
+                },
+                "fullDescription": {
+                  "text": "Reports 'Externalizable' classes without a public no-argument constructor. When an 'Externalizable' object is reconstructed, an instance is created using the public no-arg constructor before the 'readExternal' method called. If a public no-arg constructor is not available, a 'java.io.InvalidClassException' will be thrown at runtime.",
+                  "markdown": "Reports `Externalizable` classes without a public no-argument constructor.\n\nWhen an `Externalizable` object is reconstructed, an instance is created using the public\nno-arg constructor before the `readExternal` method called. If a public\nno-arg constructor is not available, a `java.io.InvalidClassException` will be\nthrown at runtime."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Serialization issues",
+                      "index": 17,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "StaticGuardedByInstance",
                 "shortDescription": {
@@ -26583,40 +18547,6 @@
                   }
                 ]
               },
-              {
-                "id": "ExternalizableWithoutPublicNoArgConstructor",
-                "shortDescription": {
-                  "text": "'Externalizable' class without 'public' no-arg constructor"
-                },
-                "fullDescription": {
-                  "text": "Reports 'Externalizable' classes without a public no-argument constructor. When an 'Externalizable' object is reconstructed, an instance is created using the public no-arg constructor before the 'readExternal' method called. If a public no-arg constructor is not available, a 'java.io.InvalidClassException' will be thrown at runtime.",
-                  "markdown": "Reports `Externalizable` classes without a public no-argument constructor.\n\nWhen an `Externalizable` object is reconstructed, an instance is created using the public\nno-arg constructor before the `readExternal` method called. If a public\nno-arg constructor is not available, a `java.io.InvalidClassException` will be\nthrown at runtime."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Serialization issues",
-                      "index": 18,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "ManualArrayCopy",
                 "shortDescription": {
@@ -26640,7 +18570,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -26719,40 +18649,6 @@
                   }
                 ]
               },
-              {
-                "id": "LengthOneStringInIndexOf",
-                "shortDescription": {
-                  "text": "Single character string argument in 'String.indexOf()' call"
-                },
-                "fullDescription": {
-                  "text": "Reports single character strings being used as an argument in 'String.indexOf()' and 'String.lastIndexOf()' calls. A quick-fix is suggested to replace such string literals with equivalent character literals, gaining some performance enhancement. Example: 'return s.indexOf(\"x\");' After the quick-fix is applied: 'return s.indexOf('x');'",
-                  "markdown": "Reports single character strings being used as an argument in `String.indexOf()` and `String.lastIndexOf()` calls.\n\nA quick-fix is suggested to replace such string literals with equivalent character literals, gaining some performance enhancement.\n\n**Example:**\n\n\n      return s.indexOf(\"x\");\n\nAfter the quick-fix is applied:\n\n\n      return s.indexOf('x');\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Performance",
-                      "index": 10,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "MisspelledEquals",
                 "shortDescription": {
@@ -26810,7 +18706,41 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "LengthOneStringInIndexOf",
+                "shortDescription": {
+                  "text": "Single character string argument in 'String.indexOf()' call"
+                },
+                "fullDescription": {
+                  "text": "Reports single character strings being used as an argument in 'String.indexOf()' and 'String.lastIndexOf()' calls. A quick-fix is suggested to replace such string literals with equivalent character literals, gaining some performance enhancement. Example: 'return s.indexOf(\"x\");' After the quick-fix is applied: 'return s.indexOf('x');'",
+                  "markdown": "Reports single character strings being used as an argument in `String.indexOf()` and `String.lastIndexOf()` calls.\n\nA quick-fix is suggested to replace such string literals with equivalent character literals, gaining some performance enhancement.\n\n**Example:**\n\n\n      return s.indexOf(\"x\");\n\nAfter the quick-fix is applied:\n\n\n      return s.indexOf('x');\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Performance",
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -26878,7 +18808,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -27014,7 +18944,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -27150,7 +19080,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -27286,7 +19216,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -28215,6 +20145,40 @@
                   }
                 ]
               },
+              {
+                "id": "DisjointPackage",
+                "shortDescription": {
+                  "text": "Package with disjoint dependency graph"
+                },
+                "fullDescription": {
+                  "text": "Reports packages whose classes can be separated into mutually independent subsets. Such disjoint packages indicate ad-hoc packaging or a lack of conceptual cohesion. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.",
+                  "markdown": "Reports packages whose classes can be separated into mutually independent subsets.\n\nSuch disjoint packages indicate ad-hoc packaging or a lack of conceptual cohesion.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Packaging issues",
+                      "index": 36,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "MethodOverloadsParentMethod",
                 "shortDescription": {
@@ -28284,13 +20248,13 @@
                 ]
               },
               {
-                "id": "DisjointPackage",
+                "id": "MethodMayBeSynchronized",
                 "shortDescription": {
-                  "text": "Package with disjoint dependency graph"
+                  "text": "Method with single 'synchronized' block can be replaced with 'synchronized' method"
                 },
                 "fullDescription": {
-                  "text": "Reports packages whose classes can be separated into mutually independent subsets. Such disjoint packages indicate ad-hoc packaging or a lack of conceptual cohesion. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.",
-                  "markdown": "Reports packages whose classes can be separated into mutually independent subsets.\n\nSuch disjoint packages indicate ad-hoc packaging or a lack of conceptual cohesion.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor."
+                  "text": "Reports methods whose body contains a single 'synchronized' statement. A lock expression for this 'synchronized' statement must be equal to 'this' for instance methods or '[ClassName].class' for static methods. To improve readability of such methods, you can remove the 'synchronized' wrapper and mark the method as 'synchronized'. Example: 'public int generateInt(int x) {\n    synchronized (this) {\n      return 1;\n    }\n  }' After the quick-fix is applied: 'public synchronized int generateInt(int x) {\n    return 1;\n  }'",
+                  "markdown": "Reports methods whose body contains a single `synchronized` statement. A lock expression for this `synchronized` statement must be equal to `this` for instance methods or `[ClassName].class` for static methods.\n\n\nTo improve readability of such methods,\nyou can remove the `synchronized` wrapper and mark the method as `synchronized`.\n\n**Example:**\n\n\n      public int generateInt(int x) {\n        synchronized (this) {\n          return 1;\n        }\n      }\n\nAfter the quick-fix is applied:\n\n\n      public synchronized int generateInt(int x) {\n        return 1;\n      }\n"
                 },
                 "defaultConfiguration": {
                   "enabled": false,
@@ -28305,8 +20269,8 @@
                 "relationships": [
                   {
                     "target": {
-                      "id": "Java/Packaging issues",
-                      "index": 36,
+                      "id": "Java/Threading issues",
+                      "index": 25,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -28351,40 +20315,6 @@
                   }
                 ]
               },
-              {
-                "id": "MethodMayBeSynchronized",
-                "shortDescription": {
-                  "text": "Method with single 'synchronized' block can be replaced with 'synchronized' method"
-                },
-                "fullDescription": {
-                  "text": "Reports methods whose body contains a single 'synchronized' statement. A lock expression for this 'synchronized' statement must be equal to 'this' for instance methods or '[ClassName].class' for static methods. To improve readability of such methods, you can remove the 'synchronized' wrapper and mark the method as 'synchronized'. Example: 'public int generateInt(int x) {\n    synchronized (this) {\n      return 1;\n    }\n  }' After the quick-fix is applied: 'public synchronized int generateInt(int x) {\n    return 1;\n  }'",
-                  "markdown": "Reports methods whose body contains a single `synchronized` statement. A lock expression for this `synchronized` statement must be equal to `this` for instance methods or `[ClassName].class` for static methods.\n\n\nTo improve readability of such methods,\nyou can remove the `synchronized` wrapper and mark the method as `synchronized`.\n\n**Example:**\n\n\n      public int generateInt(int x) {\n        synchronized (this) {\n          return 1;\n        }\n      }\n\nAfter the quick-fix is applied:\n\n\n      public synchronized int generateInt(int x) {\n        return 1;\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Threading issues",
-                      "index": 25,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "Convert2streamapi",
                 "shortDescription": {
@@ -28442,7 +20372,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -28544,7 +20474,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -28884,7 +20814,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -29088,7 +21018,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -29122,7 +21052,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -29224,7 +21154,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -29292,7 +21222,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -29768,7 +21698,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -29870,7 +21800,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -29938,7 +21868,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -30210,7 +22140,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -30312,7 +22242,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -30346,7 +22276,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -30380,7 +22310,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -30448,7 +22378,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -30516,7 +22446,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -30550,7 +22480,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -30584,7 +22514,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -30652,7 +22582,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -30867,6 +22797,40 @@
                   }
                 ]
               },
+              {
+                "id": "Since15",
+                "shortDescription": {
+                  "text": "Usages of API which isn't available at the configured language level"
+                },
+                "fullDescription": {
+                  "text": "Reports usages of the API that is unavailable at the configured language level. This inspection does 3 things: Highlight usage of generified classes when the language level is below Java 7. Highlight when default methods are not overridden and the language level is below Java 8. Highlight usage of API when the language level is lower than marked using the '@since' tag in the documentation. Use the Forbid API usages option to forbid usages of the API in respect to the project or custom language level.",
+                  "markdown": "Reports usages of the API that is unavailable at the configured language level. This inspection does 3 things:\n\n* Highlight usage of generified classes when the language level is below Java 7.\n* Highlight when default methods are not overridden and the language level is below Java 8.\n* Highlight usage of API when the language level is lower than marked using the `@since` tag in the documentation.\n\n\nUse the **Forbid API usages** option to forbid usages of the API in respect to the project or custom language level."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "error",
+                  "parameters": {
+                    "ideaSeverity": "ERROR",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "JVM languages",
+                      "index": 1,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "RedundantFieldInitialization",
                 "shortDescription": {
@@ -30901,40 +22865,6 @@
                   }
                 ]
               },
-              {
-                "id": "Since15",
-                "shortDescription": {
-                  "text": "Usages of API which isn't available at the configured language level"
-                },
-                "fullDescription": {
-                  "text": "Reports usages of the API that is unavailable at the configured language level. This inspection does 3 things: Highlight usage of generified classes when the language level is below Java 7. Highlight when default methods are not overridden and the language level is below Java 8. Highlight usage of API when the language level is lower than marked using the '@since' tag in the documentation. Use the Forbid API usages option to forbid usages of the API in respect to the project or custom language level.",
-                  "markdown": "Reports usages of the API that is unavailable at the configured language level. This inspection does 3 things:\n\n* Highlight usage of generified classes when the language level is below Java 7.\n* Highlight when default methods are not overridden and the language level is below Java 8.\n* Highlight usage of API when the language level is lower than marked using the `@since` tag in the documentation.\n\n\nUse the **Forbid API usages** option to forbid usages of the API in respect to the project or custom language level."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "error",
-                  "parameters": {
-                    "ideaSeverity": "ERROR",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "JVM languages",
-                      "index": 3,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "DefaultFileTemplate",
                 "shortDescription": {
@@ -30992,7 +22922,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -31128,7 +23058,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -31264,7 +23194,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -31377,6 +23307,40 @@
                   }
                 ]
               },
+              {
+                "id": "MustAlreadyBeRemovedApi",
+                "shortDescription": {
+                  "text": "API must already be removed"
+                },
+                "fullDescription": {
+                  "text": "Reports declarations marked with '@ApiStatus.ScheduledForRemoval' that should have been removed in the current version of the declaring library. It compares the specified scheduled removal version with the version that you can set below. Specify the version as a string separated with dots and optionally postfixed with 'alpha', 'beta', 'snapshot', or 'eap'. Examples of valid versions: '1.0', '2.3.1', '2018.1', '7.5-snapshot', '3.0-eap'. Version comparison is intuitive: '1.0 < 2.0', '1.0-eap < 1.0', '2.3-snapshot < 2.3' and so on. For detailed comparison logic, refer to the implementation of VersionComparatorUtil.",
+                  "markdown": "Reports declarations marked with `@ApiStatus.ScheduledForRemoval` that should have been removed in the current version of the declaring library.\n\nIt compares the specified scheduled removal version with the version that you can set below.\n\n\nSpecify the version as a string separated with dots and optionally postfixed with\n`alpha`, `beta`, `snapshot`, or `eap`.\n\nExamples of valid versions: `1.0`, `2.3.1`, `2018.1`, `7.5-snapshot`, `3.0-eap`.\n\n\nVersion comparison is intuitive: `1.0 < 2.0`, `1.0-eap < 1.0`, `2.3-snapshot < 2.3` and so on.\nFor detailed comparison logic, refer to the implementation of [VersionComparatorUtil](https://github.com/JetBrains/intellij-community/blob/master/platform/util-rt/src/com/intellij/util/text/VersionComparatorUtil.java)."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "error",
+                  "parameters": {
+                    "ideaSeverity": "ERROR",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "JVM languages",
+                      "index": 1,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "CachedNumberConstructorCall",
                 "shortDescription": {
@@ -31411,40 +23375,6 @@
                   }
                 ]
               },
-              {
-                "id": "MustAlreadyBeRemovedApi",
-                "shortDescription": {
-                  "text": "API must already be removed"
-                },
-                "fullDescription": {
-                  "text": "Reports declarations marked with '@ApiStatus.ScheduledForRemoval' that should have been removed in the current version of the declaring library. It compares the specified scheduled removal version with the version that you can set below. Specify the version as a string separated with dots and optionally postfixed with 'alpha', 'beta', 'snapshot', or 'eap'. Examples of valid versions: '1.0', '2.3.1', '2018.1', '7.5-snapshot', '3.0-eap'. Version comparison is intuitive: '1.0 < 2.0', '1.0-eap < 1.0', '2.3-snapshot < 2.3' and so on. For detailed comparison logic, refer to the implementation of VersionComparatorUtil.",
-                  "markdown": "Reports declarations marked with `@ApiStatus.ScheduledForRemoval` that should have been removed in the current version of the declaring library.\n\nIt compares the specified scheduled removal version with the version that you can set below.\n\n\nSpecify the version as a string separated with dots and optionally postfixed with\n`alpha`, `beta`, `snapshot`, or `eap`.\n\nExamples of valid versions: `1.0`, `2.3.1`, `2018.1`, `7.5-snapshot`, `3.0-eap`.\n\n\nVersion comparison is intuitive: `1.0 < 2.0`, `1.0-eap < 1.0`, `2.3-snapshot < 2.3` and so on.\nFor detailed comparison logic, refer to the implementation of [VersionComparatorUtil](https://github.com/JetBrains/intellij-community/blob/master/platform/util-rt/src/com/intellij/util/text/VersionComparatorUtil.java)."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "error",
-                  "parameters": {
-                    "ideaSeverity": "ERROR",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "JVM languages",
-                      "index": 3,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "FieldHidesSuperclassField",
                 "shortDescription": {
@@ -31808,7 +23738,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -31944,7 +23874,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -32046,7 +23976,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -32216,7 +24146,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -32386,7 +24316,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -32556,7 +24486,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -32692,7 +24622,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -32760,7 +24690,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -32862,7 +24792,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -32896,7 +24826,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -33066,7 +24996,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -33746,7 +25676,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -33848,7 +25778,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -33882,7 +25812,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -34018,7 +25948,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -34426,7 +26356,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -34732,7 +26662,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -34766,7 +26696,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -34936,7 +26866,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -35004,7 +26934,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -35174,7 +27104,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -35208,7 +27138,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -35480,7 +27410,41 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "NonSerializableWithSerialVersionUIDField",
+                "shortDescription": {
+                  "text": "Non-serializable class with 'serialVersionUID'"
+                },
+                "fullDescription": {
+                  "text": "Reports non-'Serializable' classes that define a 'serialVersionUID' field. A 'serialVersionUID' field in that context normally indicates an error because the field will be ignored and the class will not be serialized. Example: 'public class IWantToSerializeThis {\n    private static final long serialVersionUID = 2669293150219020249L;\n  }'",
+                  "markdown": "Reports non-`Serializable` classes that define a `serialVersionUID` field. A `serialVersionUID` field in that context normally indicates an error because the field will be ignored and the class will not be serialized.\n\n**Example:**\n\n\n      public class IWantToSerializeThis {\n        private static final long serialVersionUID = 2669293150219020249L;\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Serialization issues",
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -35525,40 +27489,6 @@
                   }
                 ]
               },
-              {
-                "id": "NonSerializableWithSerialVersionUIDField",
-                "shortDescription": {
-                  "text": "Non-serializable class with 'serialVersionUID'"
-                },
-                "fullDescription": {
-                  "text": "Reports non-'Serializable' classes that define a 'serialVersionUID' field. A 'serialVersionUID' field in that context normally indicates an error because the field will be ignored and the class will not be serialized. Example: 'public class IWantToSerializeThis {\n    private static final long serialVersionUID = 2669293150219020249L;\n  }'",
-                  "markdown": "Reports non-`Serializable` classes that define a `serialVersionUID` field. A `serialVersionUID` field in that context normally indicates an error because the field will be ignored and the class will not be serialized.\n\n**Example:**\n\n\n      public class IWantToSerializeThis {\n        private static final long serialVersionUID = 2669293150219020249L;\n      }\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Serialization issues",
-                      "index": 18,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "SwitchStatementsWithoutDefault",
                 "shortDescription": {
@@ -35650,7 +27580,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -36239,40 +28169,6 @@
                   }
                 ]
               },
-              {
-                "id": "UnnecessaryUnicodeEscape",
-                "shortDescription": {
-                  "text": "Unnecessary unicode escape sequence"
-                },
-                "fullDescription": {
-                  "text": "Reports unnecessary unicode escape sequences. For example, when the file encoding can handle the character without escaping it. Unicode control characters are not reported by this inspection (except for a line feed and a tab). Example: 'String s = \"\\u0062\";'",
-                  "markdown": "Reports unnecessary unicode escape sequences. For example, when the file encoding can handle the character without escaping it. Unicode control characters are not reported by this inspection (except for a line feed and a tab).\n\n**Example:**\n\n    String s = \"\\u0062\";\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Internationalization",
-                      "index": 6,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "PrimitiveArrayArgumentToVariableArgMethod",
                 "shortDescription": {
@@ -36307,6 +28203,40 @@
                   }
                 ]
               },
+              {
+                "id": "UnnecessaryUnicodeEscape",
+                "shortDescription": {
+                  "text": "Unnecessary unicode escape sequence"
+                },
+                "fullDescription": {
+                  "text": "Reports unnecessary unicode escape sequences. For example, when the file encoding can handle the character without escaping it. Unicode control characters are not reported by this inspection (except for a line feed and a tab). Example: 'String s = \"\\u0062\";'",
+                  "markdown": "Reports unnecessary unicode escape sequences. For example, when the file encoding can handle the character without escaping it. Unicode control characters are not reported by this inspection (except for a line feed and a tab).\n\n**Example:**\n\n    String s = \"\\u0062\";\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Internationalization",
+                      "index": 6,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "UseBulkOperation",
                 "shortDescription": {
@@ -36330,7 +28260,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -36704,7 +28634,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -36738,7 +28668,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -36840,7 +28770,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -36908,7 +28838,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -37078,7 +29008,41 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "StringBufferMustHaveInitialCapacity",
+                "shortDescription": {
+                  "text": "'StringBuilder' without initial capacity"
+                },
+                "fullDescription": {
+                  "text": "Reports attempts to instantiate a new 'StringBuffer' or 'StringBuilder' object without specifying its initial capacity. If no initial capacity is specified, a default capacity is used, which will rarely be optimal. Failing to specify the initial capacity for 'StringBuffer' may result in performance issues if space needs to be reallocated and memory copied when the initial capacity is exceeded. Example: '// Capacity is not specified\n  var sb = new StringBuilder();'",
+                  "markdown": "Reports attempts to instantiate a new `StringBuffer` or `StringBuilder` object without specifying its initial capacity.\n\n\nIf no initial capacity is specified, a default capacity is used, which will rarely be optimal.\nFailing to specify the initial capacity for `StringBuffer` may result\nin performance issues if space needs to be reallocated and memory copied\nwhen the initial capacity is exceeded.\n\nExample:\n\n\n      // Capacity is not specified\n      var sb = new StringBuilder();\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Performance",
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -37124,13 +29088,13 @@
                 ]
               },
               {
-                "id": "StringBufferMustHaveInitialCapacity",
+                "id": "ThreeNegationsPerMethod",
                 "shortDescription": {
-                  "text": "'StringBuilder' without initial capacity"
+                  "text": "Method with more than three negations"
                 },
                 "fullDescription": {
-                  "text": "Reports attempts to instantiate a new 'StringBuffer' or 'StringBuilder' object without specifying its initial capacity. If no initial capacity is specified, a default capacity is used, which will rarely be optimal. Failing to specify the initial capacity for 'StringBuffer' may result in performance issues if space needs to be reallocated and memory copied when the initial capacity is exceeded. Example: '// Capacity is not specified\n  var sb = new StringBuilder();'",
-                  "markdown": "Reports attempts to instantiate a new `StringBuffer` or `StringBuilder` object without specifying its initial capacity.\n\n\nIf no initial capacity is specified, a default capacity is used, which will rarely be optimal.\nFailing to specify the initial capacity for `StringBuffer` may result\nin performance issues if space needs to be reallocated and memory copied\nwhen the initial capacity is exceeded.\n\nExample:\n\n\n      // Capacity is not specified\n      var sb = new StringBuilder();\n"
+                  "text": "Reports methods with three or more negations. Such methods may be confusing. Example: 'void doSmth(int a, int b, boolean flag1, boolean flag2) {\n    if (!flag && !flag2) {\n      if (a != b) {\n        doOther();\n      }\n    }\n  }' Without negations, the method becomes easier to understand: 'void doSmth(int a, int b, boolean flag1, boolean flag2) {\n    if (flag1 || flag2 || a == b) return;\n    doOther();\n  }' Configure the inspection: Use the Ignore negations in 'equals()' methods option to disable the inspection within 'equals()' methods. Use the Ignore negations in 'assert' statements to disable the inspection within 'assert' statements.",
+                  "markdown": "Reports methods with three or more negations. Such methods may be confusing.\n\n**Example:**\n\n\n      void doSmth(int a, int b, boolean flag1, boolean flag2) {\n        if (!flag && !flag2) {\n          if (a != b) {\n            doOther();\n          }\n        }\n      }\n\nWithout negations, the method becomes easier to understand:\n\n\n      void doSmth(int a, int b, boolean flag1, boolean flag2) {\n        if (flag1 || flag2 || a == b) return;\n        doOther();\n      }\n\nConfigure the inspection:\n\n* Use the **Ignore negations in 'equals()' methods** option to disable the inspection within `equals()` methods.\n* Use the **Ignore negations in 'assert' statements** to disable the inspection within `assert` statements."
                 },
                 "defaultConfiguration": {
                   "enabled": false,
@@ -37145,8 +29109,8 @@
                 "relationships": [
                   {
                     "target": {
-                      "id": "Java/Performance",
-                      "index": 10,
+                      "id": "Java/Method metrics",
+                      "index": 101,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -37191,40 +29155,6 @@
                   }
                 ]
               },
-              {
-                "id": "ThreeNegationsPerMethod",
-                "shortDescription": {
-                  "text": "Method with more than three negations"
-                },
-                "fullDescription": {
-                  "text": "Reports methods with three or more negations. Such methods may be confusing. Example: 'void doSmth(int a, int b, boolean flag1, boolean flag2) {\n    if (!flag && !flag2) {\n      if (a != b) {\n        doOther();\n      }\n    }\n  }' Without negations, the method becomes easier to understand: 'void doSmth(int a, int b, boolean flag1, boolean flag2) {\n    if (flag1 || flag2 || a == b) return;\n    doOther();\n  }' Configure the inspection: Use the Ignore negations in 'equals()' methods option to disable the inspection within 'equals()' methods. Use the Ignore negations in 'assert' statements to disable the inspection within 'assert' statements.",
-                  "markdown": "Reports methods with three or more negations. Such methods may be confusing.\n\n**Example:**\n\n\n      void doSmth(int a, int b, boolean flag1, boolean flag2) {\n        if (!flag && !flag2) {\n          if (a != b) {\n            doOther();\n          }\n        }\n      }\n\nWithout negations, the method becomes easier to understand:\n\n\n      void doSmth(int a, int b, boolean flag1, boolean flag2) {\n        if (flag1 || flag2 || a == b) return;\n        doOther();\n      }\n\nConfigure the inspection:\n\n* Use the **Ignore negations in 'equals()' methods** option to disable the inspection within `equals()` methods.\n* Use the **Ignore negations in 'assert' statements** to disable the inspection within `assert` statements."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Method metrics",
-                      "index": 101,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "TestOnlyProblems",
                 "shortDescription": {
@@ -37248,7 +29178,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -37633,40 +29563,6 @@
                   }
                 ]
               },
-              {
-                "id": "ParametersPerConstructor",
-                "shortDescription": {
-                  "text": "Constructor with too many parameters"
-                },
-                "fullDescription": {
-                  "text": "Reports constructors whose number of parameters exceeds the specified maximum. Such objects are hard to instantiate, especially if some parameters are optional. Constructors with too many parameters may indicate that refactoring is necessary. Consider applying the builder pattern, for example. Example: 'public BankAccount(long accountNumber,\n                     String owner,\n                     double balance,\n                     double interestRate) {\n    // fields initialization\n  }' Configure the inspection: Use the Parameter limit field to specify the maximum allowed number of parameters in a constructor. Use the Ignore constructors with visibility list to specify whether the inspection should ignore constructors with specific visibility.",
-                  "markdown": "Reports constructors whose number of parameters exceeds the specified maximum. Such objects are hard to instantiate, especially if some parameters are optional. Constructors with too many parameters may indicate that refactoring is necessary. Consider applying the builder pattern, for example.\n\n**Example:**\n\n\n      public BankAccount(long accountNumber,\n                         String owner,\n                         double balance,\n                         double interestRate) {\n        // fields initialization\n      }\n\nConfigure the inspection:\n\n* Use the **Parameter limit** field to specify the maximum allowed number of parameters in a constructor.\n* Use the **Ignore constructors with visibility** list to specify whether the inspection should ignore constructors with specific visibility."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Method metrics",
-                      "index": 101,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "NonReproducibleMathCall",
                 "shortDescription": {
@@ -37701,6 +29597,40 @@
                   }
                 ]
               },
+              {
+                "id": "ParametersPerConstructor",
+                "shortDescription": {
+                  "text": "Constructor with too many parameters"
+                },
+                "fullDescription": {
+                  "text": "Reports constructors whose number of parameters exceeds the specified maximum. Such objects are hard to instantiate, especially if some parameters are optional. Constructors with too many parameters may indicate that refactoring is necessary. Consider applying the builder pattern, for example. Example: 'public BankAccount(long accountNumber,\n                     String owner,\n                     double balance,\n                     double interestRate) {\n    // fields initialization\n  }' Configure the inspection: Use the Parameter limit field to specify the maximum allowed number of parameters in a constructor. Use the Ignore constructors with visibility list to specify whether the inspection should ignore constructors with specific visibility.",
+                  "markdown": "Reports constructors whose number of parameters exceeds the specified maximum. Such objects are hard to instantiate, especially if some parameters are optional. Constructors with too many parameters may indicate that refactoring is necessary. Consider applying the builder pattern, for example.\n\n**Example:**\n\n\n      public BankAccount(long accountNumber,\n                         String owner,\n                         double balance,\n                         double interestRate) {\n        // fields initialization\n      }\n\nConfigure the inspection:\n\n* Use the **Parameter limit** field to specify the maximum allowed number of parameters in a constructor.\n* Use the **Ignore constructors with visibility** list to specify whether the inspection should ignore constructors with specific visibility."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Method metrics",
+                      "index": 101,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "NonExtendableApiUsage",
                 "shortDescription": {
@@ -37724,7 +29654,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -38166,7 +30096,7 @@
                   {
                     "target": {
                       "id": "Java/Performance",
-                      "index": 10,
+                      "index": 7,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -38200,7 +30130,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -38234,7 +30164,7 @@
                   {
                     "target": {
                       "id": "Java/Error handling",
-                      "index": 14,
+                      "index": 12,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -38347,40 +30277,6 @@
                   }
                 ]
               },
-              {
-                "id": "LambdaCanBeReplacedWithAnonymous",
-                "shortDescription": {
-                  "text": "Lambda can be replaced with anonymous class"
-                },
-                "fullDescription": {
-                  "text": "Reports lambda expressions that can be replaced with anonymous classes. Expanding lambda expressions to anonymous classes may be useful if you need to implement other methods inside an anonymous class or if you need to downgrade to one of the previous Java versions. Example: 's -> System.out.println(s)' After the quick-fix is applied: 'new Consumer<String>() {\n  @Override\n  public void accept(String s) {\n    System.out.println(s);\n  }\n}' This inspection is available in Java 8 and later.",
-                  "markdown": "Reports lambda expressions that can be replaced with anonymous classes.\n\n\nExpanding lambda expressions to anonymous classes may be useful if you need to implement other\nmethods inside an anonymous class or if you need to downgrade to one of the previous Java versions.\n\nExample:\n\n\n      s -> System.out.println(s)\n\nAfter the quick-fix is applied:\n\n    new Consumer<String>() {\n      @Override\n      public void accept(String s) {\n        System.out.println(s);\n      }\n    }\n\nThis inspection is available in Java 8 and later."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Code style issues",
-                      "index": 11,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "RedundantCompareCall",
                 "shortDescription": {
@@ -38416,13 +30312,13 @@
                 ]
               },
               {
-                "id": "TextBlockBackwardMigration",
+                "id": "LambdaCanBeReplacedWithAnonymous",
                 "shortDescription": {
-                  "text": "Text block can be replaced with regular string literal"
+                  "text": "Lambda can be replaced with anonymous class"
                 },
                 "fullDescription": {
-                  "text": "Reports text blocks that can be replaced with regular string literals. Occurrences of such text blocks may appear as results of migrating the code back to a Java version earlier than Java 15. Example: 'Object obj = engine.eval(\"\"\"\n                           function hello() {\n                             print('\"Hello, world\"');\n                           }\n\n                           hello();\n                           \"\"\");' After the quick fix is applied: 'Object obj = engine.eval(\"function hello() {\\n\" +\n                           \"  print('\\\"Hello, world\\\"');\\n\" +\n                           \"}\\n\" +\n                           \"\\n\" +\n                           \"hello();\\n\");' This inspection only reports if the language level of the project or module is 15 or higher. New in 2019.3",
-                  "markdown": "Reports text blocks that can be replaced with regular string literals.\n\nOccurrences of such text blocks may appear as results of migrating the code back to a Java version earlier than Java 15.\n\n**Example:**\n\n\n      Object obj = engine.eval(\"\"\"\n                               function hello() {\n                                 print('\"Hello, world\"');\n                               }\n\n                               hello();\n                               \"\"\");\n\nAfter the quick fix is applied:\n\n\n      Object obj = engine.eval(\"function hello() {\\n\" +\n                               \"  print('\\\"Hello, world\\\"');\\n\" +\n                               \"}\\n\" +\n                               \"\\n\" +\n                               \"hello();\\n\");\n\nThis inspection only reports if the language level of the project or module is 15 or higher.\n\nNew in 2019.3"
+                  "text": "Reports lambda expressions that can be replaced with anonymous classes. Expanding lambda expressions to anonymous classes may be useful if you need to implement other methods inside an anonymous class or if you need to downgrade to one of the previous Java versions. Example: 's -> System.out.println(s)' After the quick-fix is applied: 'new Consumer<String>() {\n  @Override\n  public void accept(String s) {\n    System.out.println(s);\n  }\n}' This inspection is available in Java 8 and later.",
+                  "markdown": "Reports lambda expressions that can be replaced with anonymous classes.\n\n\nExpanding lambda expressions to anonymous classes may be useful if you need to implement other\nmethods inside an anonymous class or if you need to downgrade to one of the previous Java versions.\n\nExample:\n\n\n      s -> System.out.println(s)\n\nAfter the quick-fix is applied:\n\n    new Consumer<String>() {\n      @Override\n      public void accept(String s) {\n        System.out.println(s);\n      }\n    }\n\nThis inspection is available in Java 8 and later."
                 },
                 "defaultConfiguration": {
                   "enabled": true,
@@ -38437,8 +30333,8 @@
                 "relationships": [
                   {
                     "target": {
-                      "id": "Java/Java language level migration aids/Java 15",
-                      "index": 34,
+                      "id": "Java/Code style issues",
+                      "index": 11,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -38472,7 +30368,41 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "TextBlockBackwardMigration",
+                "shortDescription": {
+                  "text": "Text block can be replaced with regular string literal"
+                },
+                "fullDescription": {
+                  "text": "Reports text blocks that can be replaced with regular string literals. Occurrences of such text blocks may appear as results of migrating the code back to a Java version earlier than Java 15. Example: 'Object obj = engine.eval(\"\"\"\n                           function hello() {\n                             print('\"Hello, world\"');\n                           }\n\n                           hello();\n                           \"\"\");' After the quick fix is applied: 'Object obj = engine.eval(\"function hello() {\\n\" +\n                           \"  print('\\\"Hello, world\\\"');\\n\" +\n                           \"}\\n\" +\n                           \"\\n\" +\n                           \"hello();\\n\");' This inspection only reports if the language level of the project or module is 15 or higher. New in 2019.3",
+                  "markdown": "Reports text blocks that can be replaced with regular string literals.\n\nOccurrences of such text blocks may appear as results of migrating the code back to a Java version earlier than Java 15.\n\n**Example:**\n\n\n      Object obj = engine.eval(\"\"\"\n                               function hello() {\n                                 print('\"Hello, world\"');\n                               }\n\n                               hello();\n                               \"\"\");\n\nAfter the quick fix is applied:\n\n\n      Object obj = engine.eval(\"function hello() {\\n\" +\n                               \"  print('\\\"Hello, world\\\"');\\n\" +\n                               \"}\\n\" +\n                               \"\\n\" +\n                               \"hello();\\n\");\n\nThis inspection only reports if the language level of the project or module is 15 or higher.\n\nNew in 2019.3"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Java language level migration aids/Java 15",
+                      "index": 34,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -38812,7 +30742,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -39152,7 +31082,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -39254,7 +31184,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -39424,7 +31354,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -39492,41 +31422,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "AssignmentOrReturnOfFieldWithMutableType",
-                "shortDescription": {
-                  "text": "Assignment or return of field with mutable type"
-                },
-                "fullDescription": {
-                  "text": "Reports return of, or assignment from a method parameter to an array or a mutable type like 'Collection', 'Date', 'Map', 'Calendar', etc. Because such types are mutable, this construct may result in unexpected modifications of an object's state from outside the owning class. Although this construct may be useful for performance reasons, it is inherently prone to bugs. The following mutable types are reported: 'java.util.Date' 'java.util.Calendar' 'java.util.Collection' 'java.util.Map' 'com.google.common.collect.Multimap' 'com.google.common.collect.Table' The quick-fix adds a call to the field's '.clone()' method. Example: 'class Log {\n    String[] messages;\n    ...\n\n    String[] getMessages() {\n      return messages; // warning: Return of String[] field 'messages'\n    }\n  }' After the quick-fix is applied: 'class Log {\n    String[] messages;\n    ...\n\n    String[] getMessages() {\n      return messages.clone();\n    }\n  }' Use the Ignore assignments in and returns from private methods option to ignore assignments and returns in 'private' methods.",
-                  "markdown": "Reports return of, or assignment from a method parameter to an array or a mutable type like `Collection`, `Date`, `Map`, `Calendar`, etc.\n\nBecause such types are mutable, this construct may\nresult in unexpected modifications of an object's state from outside the owning class. Although this construct may be useful for\nperformance reasons, it is inherently prone to bugs.\n\nThe following mutable types are reported:\n\n* `java.util.Date`\n* `java.util.Calendar`\n* `java.util.Collection`\n* `java.util.Map`\n* `com.google.common.collect.Multimap`\n* `com.google.common.collect.Table`\n\nThe quick-fix adds a call to the field's `.clone()` method.\n\n**Example:**\n\n\n      class Log {\n        String[] messages;\n        ...\n\n        String[] getMessages() {\n          return messages; // warning: Return of String[] field 'messages'\n        }\n      }\n\nAfter the quick-fix is applied:\n\n\n      class Log {\n        String[] messages;\n        ...\n\n        String[] getMessages() {\n          return messages.clone();\n        }\n      }\n\nUse the **Ignore assignments in and returns from private methods** option to ignore assignments and returns in `private` methods."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Encapsulation",
-                      "index": 97,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -39571,6 +31467,40 @@
                   }
                 ]
               },
+              {
+                "id": "AssignmentOrReturnOfFieldWithMutableType",
+                "shortDescription": {
+                  "text": "Assignment or return of field with mutable type"
+                },
+                "fullDescription": {
+                  "text": "Reports return of, or assignment from a method parameter to an array or a mutable type like 'Collection', 'Date', 'Map', 'Calendar', etc. Because such types are mutable, this construct may result in unexpected modifications of an object's state from outside the owning class. Although this construct may be useful for performance reasons, it is inherently prone to bugs. The following mutable types are reported: 'java.util.Date' 'java.util.Calendar' 'java.util.Collection' 'java.util.Map' 'com.google.common.collect.Multimap' 'com.google.common.collect.Table' The quick-fix adds a call to the field's '.clone()' method. Example: 'class Log {\n    String[] messages;\n    ...\n\n    String[] getMessages() {\n      return messages; // warning: Return of String[] field 'messages'\n    }\n  }' After the quick-fix is applied: 'class Log {\n    String[] messages;\n    ...\n\n    String[] getMessages() {\n      return messages.clone();\n    }\n  }' Use the Ignore assignments in and returns from private methods option to ignore assignments and returns in 'private' methods.",
+                  "markdown": "Reports return of, or assignment from a method parameter to an array or a mutable type like `Collection`, `Date`, `Map`, `Calendar`, etc.\n\nBecause such types are mutable, this construct may\nresult in unexpected modifications of an object's state from outside the owning class. Although this construct may be useful for\nperformance reasons, it is inherently prone to bugs.\n\nThe following mutable types are reported:\n\n* `java.util.Date`\n* `java.util.Calendar`\n* `java.util.Collection`\n* `java.util.Map`\n* `com.google.common.collect.Multimap`\n* `com.google.common.collect.Table`\n\nThe quick-fix adds a call to the field's `.clone()` method.\n\n**Example:**\n\n\n      class Log {\n        String[] messages;\n        ...\n\n        String[] getMessages() {\n          return messages; // warning: Return of String[] field 'messages'\n        }\n      }\n\nAfter the quick-fix is applied:\n\n\n      class Log {\n        String[] messages;\n        ...\n\n        String[] getMessages() {\n          return messages.clone();\n        }\n      }\n\nUse the **Ignore assignments in and returns from private methods** option to ignore assignments and returns in `private` methods."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Encapsulation",
+                      "index": 97,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "OptionalAssignedToNull",
                 "shortDescription": {
@@ -39640,16 +31570,16 @@
                 ]
               },
               {
-                "id": "EqualsAndHashcode",
+                "id": "IteratorHasNextCallsIteratorNext",
                 "shortDescription": {
-                  "text": "'equals()' and 'hashCode()' not paired"
+                  "text": "'Iterator.hasNext()' which calls 'next()'"
                 },
                 "fullDescription": {
-                  "text": "Reports classes that override the 'equals()' method but do not override the 'hashCode()' method or vice versa, which can potentially lead to problems when the class is added to a 'Collection' or a 'HashMap'. The quick-fix generates the default implementation for an absent method. Example: 'class StringHolder {\n  String s;\n\n  @Override public int hashCode() {\n    return s != null ? s.hashCode() : 0;\n  }\n}' After the quick-fix is applied: 'class StringHolder {\n  String s;\n\n  @Override public int hashCode() {\n    return s != null ? s.hashCode() : 0;\n  }\n\n  @Override\n  public boolean equals(Object o) {\n    if (this == o) return true;\n    if (!(o instanceof StringHolder)) return false;\n\n    StringHolder holder = (StringHolder)o;\n\n    if (s != null ? !s.equals(holder.s) : holder.s != null) return false;\n\n    return true;\n  }\n}'",
-                  "markdown": "Reports classes that override the `equals()` method but do not override the `hashCode()` method or vice versa, which can potentially lead to problems when the class is added to a `Collection` or a `HashMap`.\n\nThe quick-fix generates the default implementation for an absent method.\n\nExample:\n\n\n    class StringHolder {\n      String s;\n\n      @Override public int hashCode() {\n        return s != null ? s.hashCode() : 0;\n      }\n    }\n\nAfter the quick-fix is applied:\n\n\n    class StringHolder {\n      String s;\n\n      @Override public int hashCode() {\n        return s != null ? s.hashCode() : 0;\n      }\n\n      @Override\n      public boolean equals(Object o) {\n        if (this == o) return true;\n        if (!(o instanceof StringHolder)) return false;\n\n        StringHolder holder = (StringHolder)o;\n\n        if (s != null ? !s.equals(holder.s) : holder.s != null) return false;\n\n        return true;\n      }\n    }\n"
+                  "text": "Reports implementations of 'Iterator.hasNext()' or 'ListIterator.hasPrevious()' that call 'Iterator.next()' or 'ListIterator.previous()' on the iterator instance. Such calls are almost certainly an error, as methods like 'hasNext()' should not modify the iterators state, while 'next()' should. Example: 'class MyIterator implements Iterator<Integer> {\n    public boolean hasNext() {\n      return next() != null;\n    }\n  }'",
+                  "markdown": "Reports implementations of `Iterator.hasNext()` or `ListIterator.hasPrevious()` that call `Iterator.next()` or `ListIterator.previous()` on the iterator instance. Such calls are almost certainly an error, as methods like `hasNext()` should not modify the iterators state, while `next()` should.\n\n**Example:**\n\n\n      class MyIterator implements Iterator<Integer> {\n        public boolean hasNext() {\n          return next() != null;\n        }\n      }\n"
                 },
                 "defaultConfiguration": {
-                  "enabled": false,
+                  "enabled": true,
                   "level": "warning",
                   "parameters": {
                     "ideaSeverity": "WARNING",
@@ -39674,16 +31604,16 @@
                 ]
               },
               {
-                "id": "IteratorHasNextCallsIteratorNext",
+                "id": "EqualsAndHashcode",
                 "shortDescription": {
-                  "text": "'Iterator.hasNext()' which calls 'next()'"
+                  "text": "'equals()' and 'hashCode()' not paired"
                 },
                 "fullDescription": {
-                  "text": "Reports implementations of 'Iterator.hasNext()' or 'ListIterator.hasPrevious()' that call 'Iterator.next()' or 'ListIterator.previous()' on the iterator instance. Such calls are almost certainly an error, as methods like 'hasNext()' should not modify the iterators state, while 'next()' should. Example: 'class MyIterator implements Iterator<Integer> {\n    public boolean hasNext() {\n      return next() != null;\n    }\n  }'",
-                  "markdown": "Reports implementations of `Iterator.hasNext()` or `ListIterator.hasPrevious()` that call `Iterator.next()` or `ListIterator.previous()` on the iterator instance. Such calls are almost certainly an error, as methods like `hasNext()` should not modify the iterators state, while `next()` should.\n\n**Example:**\n\n\n      class MyIterator implements Iterator<Integer> {\n        public boolean hasNext() {\n          return next() != null;\n        }\n      }\n"
+                  "text": "Reports classes that override the 'equals()' method but do not override the 'hashCode()' method or vice versa, which can potentially lead to problems when the class is added to a 'Collection' or a 'HashMap'. The quick-fix generates the default implementation for an absent method. Example: 'class StringHolder {\n  String s;\n\n  @Override public int hashCode() {\n    return s != null ? s.hashCode() : 0;\n  }\n}' After the quick-fix is applied: 'class StringHolder {\n  String s;\n\n  @Override public int hashCode() {\n    return s != null ? s.hashCode() : 0;\n  }\n\n  @Override\n  public boolean equals(Object o) {\n    if (this == o) return true;\n    if (!(o instanceof StringHolder)) return false;\n\n    StringHolder holder = (StringHolder)o;\n\n    if (s != null ? !s.equals(holder.s) : holder.s != null) return false;\n\n    return true;\n  }\n}'",
+                  "markdown": "Reports classes that override the `equals()` method but do not override the `hashCode()` method or vice versa, which can potentially lead to problems when the class is added to a `Collection` or a `HashMap`.\n\nThe quick-fix generates the default implementation for an absent method.\n\nExample:\n\n\n    class StringHolder {\n      String s;\n\n      @Override public int hashCode() {\n        return s != null ? s.hashCode() : 0;\n      }\n    }\n\nAfter the quick-fix is applied:\n\n\n    class StringHolder {\n      String s;\n\n      @Override public int hashCode() {\n        return s != null ? s.hashCode() : 0;\n      }\n\n      @Override\n      public boolean equals(Object o) {\n        if (this == o) return true;\n        if (!(o instanceof StringHolder)) return false;\n\n        StringHolder holder = (StringHolder)o;\n\n        if (s != null ? !s.equals(holder.s) : holder.s != null) return false;\n\n        return true;\n      }\n    }\n"
                 },
                 "defaultConfiguration": {
-                  "enabled": true,
+                  "enabled": false,
                   "level": "warning",
                   "parameters": {
                     "ideaSeverity": "WARNING",
@@ -40081,40 +32011,6 @@
                   }
                 ]
               },
-              {
-                "id": "NegativelyNamedBooleanVariable",
-                "shortDescription": {
-                  "text": "Negatively named boolean variable"
-                },
-                "fullDescription": {
-                  "text": "Reports negatively named variables, for example: 'disabled', 'hidden', or 'isNotChanged'. Usually, inverting the 'boolean' value and removing the negation from the name makes the code easier to understand. Example: 'boolean disabled = false;'",
-                  "markdown": "Reports negatively named variables, for example: `disabled`, `hidden`, or `isNotChanged`.\n\nUsually, inverting the `boolean` value and removing the negation from the name makes the code easier to understand.\n\nExample:\n\n\n        boolean disabled = false;\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Data flow",
-                      "index": 44,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "SuspiciousIntegerDivAssignment",
                 "shortDescription": {
@@ -40149,6 +32045,40 @@
                   }
                 ]
               },
+              {
+                "id": "NegativelyNamedBooleanVariable",
+                "shortDescription": {
+                  "text": "Negatively named boolean variable"
+                },
+                "fullDescription": {
+                  "text": "Reports negatively named variables, for example: 'disabled', 'hidden', or 'isNotChanged'. Usually, inverting the 'boolean' value and removing the negation from the name makes the code easier to understand. Example: 'boolean disabled = false;'",
+                  "markdown": "Reports negatively named variables, for example: `disabled`, `hidden`, or `isNotChanged`.\n\nUsually, inverting the `boolean` value and removing the negation from the name makes the code easier to understand.\n\nExample:\n\n\n        boolean disabled = false;\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Data flow",
+                      "index": 44,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "SleepWhileHoldingLock",
                 "shortDescription": {
@@ -40240,7 +32170,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -40376,7 +32306,7 @@
                   {
                     "target": {
                       "id": "Java/Declaration redundancy",
-                      "index": 12,
+                      "index": 13,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -40546,41 +32476,7 @@
                   {
                     "target": {
                       "id": "Java/Serialization issues",
-                      "index": 18,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ModuleWithTooFewClasses",
-                "shortDescription": {
-                  "text": "Module with too few classes"
-                },
-                "fullDescription": {
-                  "text": "Reports modules that contain too few classes. Overly small modules may indicate a too fragmented design. Java, Kotlin and Groovy classes are counted. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor. Use the Minimum number of classes field to specify the minimum number of classes a module may have.",
-                  "markdown": "Reports modules that contain too few classes. Overly small modules may indicate a too fragmented design. Java, Kotlin and Groovy classes are counted.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Minimum number of classes** field to specify the minimum number of classes a module may have."
-                },
-                "defaultConfiguration": {
-                  "enabled": false,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Modularization issues",
-                      "index": 53,
+                      "index": 17,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -40659,6 +32555,40 @@
                   }
                 ]
               },
+              {
+                "id": "ModuleWithTooFewClasses",
+                "shortDescription": {
+                  "text": "Module with too few classes"
+                },
+                "fullDescription": {
+                  "text": "Reports modules that contain too few classes. Overly small modules may indicate a too fragmented design. Java, Kotlin and Groovy classes are counted. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor. Use the Minimum number of classes field to specify the minimum number of classes a module may have.",
+                  "markdown": "Reports modules that contain too few classes. Overly small modules may indicate a too fragmented design. Java, Kotlin and Groovy classes are counted.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Minimum number of classes** field to specify the minimum number of classes a module may have."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Modularization issues",
+                      "index": 53,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "OverloadedVarargsMethod",
                 "shortDescription": {
@@ -40750,7 +32680,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -40818,41 +32748,7 @@
                   {
                     "target": {
                       "id": "Java/Class structure",
-                      "index": 17,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
-              {
-                "id": "ReplaceNullCheck",
-                "shortDescription": {
-                  "text": "Null check can be replaced with method call"
-                },
-                "fullDescription": {
-                  "text": "Reports null checks that can be replaced with an 'Objects'/'Stream' static method. Example: 'if (message == null) {\n  application.messageStorage().save(new EmptyMessage());\n} else {\n  application.messageStorage().save(message);\n}' After the quick-fix is applied: 'application.messageStorage()\n    .save(Objects.requireNonNullElseGet(message, () -> new EmptyMessage()));' Use the Don't warn if length of replacement bigger than original option to ignore the cases when the replacement is longer than the original code. New in 2017.3",
-                  "markdown": "Reports null checks that can be replaced with an `Objects`/`Stream` static method.\n\n**Example:**\n\n\n    if (message == null) {\n      application.messageStorage().save(new EmptyMessage());\n    } else {\n      application.messageStorage().save(message);\n    }\n\nAfter the quick-fix is applied:\n\n\n      application.messageStorage()\n        .save(Objects.requireNonNullElseGet(message, () -> new EmptyMessage()));\n\n\nUse the **Don't warn if length of replacement bigger than original** option to ignore the cases when the replacement is longer than the\noriginal code.\n\nNew in 2017.3"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Java/Java language level migration aids/Java 9",
-                      "index": 64,
+                      "index": 18,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -40931,6 +32827,40 @@
                   }
                 ]
               },
+              {
+                "id": "ReplaceNullCheck",
+                "shortDescription": {
+                  "text": "Null check can be replaced with method call"
+                },
+                "fullDescription": {
+                  "text": "Reports null checks that can be replaced with an 'Objects'/'Stream' static method. Example: 'if (message == null) {\n  application.messageStorage().save(new EmptyMessage());\n} else {\n  application.messageStorage().save(message);\n}' After the quick-fix is applied: 'application.messageStorage()\n    .save(Objects.requireNonNullElseGet(message, () -> new EmptyMessage()));' Use the Don't warn if length of replacement bigger than original option to ignore the cases when the replacement is longer than the original code. New in 2017.3",
+                  "markdown": "Reports null checks that can be replaced with an `Objects`/`Stream` static method.\n\n**Example:**\n\n\n    if (message == null) {\n      application.messageStorage().save(new EmptyMessage());\n    } else {\n      application.messageStorage().save(message);\n    }\n\nAfter the quick-fix is applied:\n\n\n      application.messageStorage()\n        .save(Objects.requireNonNullElseGet(message, () -> new EmptyMessage()));\n\n\nUse the **Don't warn if length of replacement bigger than original** option to ignore the cases when the replacement is longer than the\noriginal code.\n\nNew in 2017.3"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Java/Java language level migration aids/Java 9",
+                      "index": 64,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "NegatedIfElse",
                 "shortDescription": {
@@ -41007,9 +32937,8079 @@
             ],
             "isComprehensive": false
           },
+          {
+            "name": "org.jetbrains.kotlin",
+            "version": "221-1.6.21-release-337-IJ5921.22",
+            "rules": [
+              {
+                "id": "RedundantRunCatching",
+                "shortDescription": {
+                  "text": "Redundant 'runCatching' call"
+                },
+                "fullDescription": {
+                  "text": "Reports 'runCatching' calls that are immediately followed by 'getOrThrow'. Such calls can be replaced with just 'run'. Example: 'fun foo() = runCatching { doSomething() }.getOrThrow()' After the quick-fix is applied: 'fun foo() = run { doSomething() }'",
+                  "markdown": "Reports `runCatching` calls that are immediately followed by `getOrThrow`. Such calls can be replaced with just `run`.\n\n**Example:**\n\n\n      fun foo() = runCatching { doSomething() }.getOrThrow()\n\nAfter the quick-fix is applied:\n\n\n      fun foo() = run { doSomething() }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SimpleRedundantLet",
+                "shortDescription": {
+                  "text": "Redundant receiver-based 'let' call"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant receiver-based 'let' calls. The quick-fix removes the redundant 'let' call. Example: 'fun test(s: String?): Int? = s?.let { it.length }' After the quick-fix is applied: 'fun test(s: String?): Int? = s?.length'",
+                  "markdown": "Reports redundant receiver-based `let` calls.\n\nThe quick-fix removes the redundant `let` call.\n\n**Example:**\n\n\n      fun test(s: String?): Int? = s?.let { it.length }\n\nAfter the quick-fix is applied:\n\n\n      fun test(s: String?): Int? = s?.length\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RemoveSingleExpressionStringTemplate",
+                "shortDescription": {
+                  "text": "Redundant string template"
+                },
+                "fullDescription": {
+                  "text": "Reports single-expression string templates that can be safely removed. Example: 'val x = \"Hello\"\n  val y = \"$x\"' After the quick-fix is applied: 'val x = \"Hello\"\n  val y = x // <== Updated'",
+                  "markdown": "Reports single-expression string templates that can be safely removed.\n\n**Example:**\n\n      val x = \"Hello\"\n      val y = \"$x\"\n\nAfter the quick-fix is applied:\n\n      val x = \"Hello\"\n      val y = x // <== Updated\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "NonExhaustiveWhenStatementMigration",
+                "shortDescription": {
+                  "text": "Non-exhaustive 'when' statements will be prohibited since 1.7"
+                },
+                "fullDescription": {
+                  "text": "Reports a non-exhaustive 'when' statements that will lead to compilation error since 1.7. Motivation types: Problematic/meaningless usage patterns need to be discouraged/blocked (e.g. counterintuitive behaviors) Code is error-prone Inconsistency in the design (things are done differently in different contexts) Impact types: Compilation. Some code that used to compile won't compile any more There were cases when such code worked with no exceptions Some such code could compile without any warnings More details: KT-47709: Make when statements with enum, sealed, and Boolean subjects exhaustive by default The quick-fix adds the missing 'else -> {}' branch. Example: 'sealed class Base {\n      class A : Base()\n      class B : Base()\n  }\n\n  fun test(base: Base) {\n      when (base) {\n          is Base.A -> \"\"\n      }\n  }' After the quick-fix is applied: 'sealed class Base {\n      class A : Base()\n      class B : Base()\n  }\n\n  fun test(base: Base) {\n      when (base) {\n          is Base.A -> \"\"\n          else -> {}\n      }\n  }' This inspection only reports if the Kotlin language level of the project or module is 1.6 or higher.",
+                  "markdown": "Reports a non-exhaustive `when` statements that will lead to compilation error since 1.7.\n\nMotivation types:\n\n* Problematic/meaningless usage patterns need to be discouraged/blocked (e.g. counterintuitive behaviors)\n  * Code is error-prone\n* Inconsistency in the design (things are done differently in different contexts)\n\nImpact types:\n\n* Compilation. Some code that used to compile won't compile any more\n  * There were cases when such code worked with no exceptions\n    * Some such code could compile without any warnings\n\n**More details:** [KT-47709: Make when statements with enum, sealed, and Boolean subjects exhaustive by default](https://youtrack.jetbrains.com/issue/KT-47709)\n\nThe quick-fix adds the missing `else -> {}` branch.\n\n**Example:**\n\n\n      sealed class Base {\n          class A : Base()\n          class B : Base()\n      }\n\n      fun test(base: Base) {\n          when (base) {\n              is Base.A -> \"\"\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      sealed class Base {\n          class A : Base()\n          class B : Base()\n      }\n\n      fun test(base: Base) {\n          when (base) {\n              is Base.A -> \"\"\n              else -> {}\n          }\n      }\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.6 or higher."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Migration",
+                      "index": 15,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "IncompleteDestructuring",
+                "shortDescription": {
+                  "text": "Incomplete destructuring declaration"
+                },
+                "fullDescription": {
+                  "text": "Reports incomplete destructuring declaration. Example: 'data class Person(val name: String, val age: Int)\n  val person = Person(\"\", 0)\n  val (name) = person' The quick fix completes destructuring declaration with new variables: 'data class Person(val name: String, val age: Int)\n  val person = Person(\"\", 0)\n  val (name, age) = person'",
+                  "markdown": "Reports incomplete destructuring declaration.\n\n**Example:**\n\n\n      data class Person(val name: String, val age: Int)\n      val person = Person(\"\", 0)\n      val (name) = person\n\nThe quick fix completes destructuring declaration with new variables:\n\n\n      data class Person(val name: String, val age: Int)\n      val person = Person(\"\", 0)\n      val (name, age) = person\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ScopeFunctionConversion",
+                "shortDescription": {
+                  "text": "Scope function can be converted to another one"
+                },
+                "fullDescription": {
+                  "text": "Reports scope functions ('let', 'run', 'apply', 'also') that can be converted between each other. Using corresponding functions makes your code simpler. The quick-fix replaces the scope function to another one. Example: 'val x = \"\".let {\n      it.length\n  }' After the quick-fix is applied: 'val x = \"\".run {\n      length\n  }'",
+                  "markdown": "Reports scope functions (`let`, `run`, `apply`, `also`) that can be converted between each other.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the scope function to another one.\n\n**Example:**\n\n\n      val x = \"\".let {\n          it.length\n      }\n\nAfter the quick-fix is applied:\n\n\n      val x = \"\".run {\n          length\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "TrailingComma",
+                "shortDescription": {
+                  "text": "Trailing comma recommendations"
+                },
+                "fullDescription": {
+                  "text": "Reports trailing commas that are not follow the recommended style guide.",
+                  "markdown": "Reports trailing commas that are not follow the recommended [style guide](https://kotlinlang.org/docs/coding-conventions.html#trailing-commas)."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "FoldInitializerAndIfToElvis",
+                "shortDescription": {
+                  "text": "If-Null return/break/... foldable to '?:'"
+                },
+                "fullDescription": {
+                  "text": "Reports an 'if' expression that checks variable being null or not right after initializing it that can be converted into an elvis operator in the initializer. Example: 'fun test(foo: Int?, bar: Int): Int {\n      var i = foo\n      if (i == null) {\n          return bar\n      }\n      return i\n  }' The quick-fix converts the 'if' expression with an initializer into an elvis expression: 'fun test(foo: Int?, bar: Int): Int {\n      var i = foo ?: return bar\n      return i\n  }'",
+                  "markdown": "Reports an `if` expression that checks variable being null or not right after initializing it that can be converted into an elvis operator in the initializer.\n\n**Example:**\n\n\n      fun test(foo: Int?, bar: Int): Int {\n          var i = foo\n          if (i == null) {\n              return bar\n          }\n          return i\n      }\n\nThe quick-fix converts the `if` expression with an initializer into an elvis expression:\n\n\n      fun test(foo: Int?, bar: Int): Int {\n          var i = foo ?: return bar\n          return i\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KotlinInvalidBundleOrProperty",
+                "shortDescription": {
+                  "text": "Invalid property key"
+                },
+                "fullDescription": {
+                  "text": "Reports unresolved references to '.properties' file keys and resource bundles in Kotlin files.",
+                  "markdown": "Reports unresolved references to `.properties` file keys and resource bundles in Kotlin files."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "error",
+                  "parameters": {
+                    "ideaSeverity": "ERROR",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin",
+                      "index": 2,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UselessCallOnCollection",
+                "shortDescription": {
+                  "text": "Useless call on collection type"
+                },
+                "fullDescription": {
+                  "text": "Reports 'filter…' calls from the standard library on already filtered collections. Several functions from the standard library such as 'filterNotNull()' or 'filterIsInstance' have sense only when they are called on receivers that have types distinct from the resulting one. Otherwise, such calls can be omitted as the result will be the same. Remove redundant call quick-fix can be used to amend the code automatically. Example: 'fun test(list: List<String>) {\n      val x = list.filterNotNull() // quick-fix simplifies to 'list'\n      val y = list.filterIsInstance<String>() // quick-fix simplifies to 'list'\n  }'",
+                  "markdown": "Reports `filter...` calls from the standard library on already filtered collections.\n\nSeveral functions from the standard library such as `filterNotNull()` or `filterIsInstance`\nhave sense only when they are called on receivers that have types distinct from the resulting one. Otherwise,\nsuch calls can be omitted as the result will be the same.\n\n**Remove redundant call** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n      fun test(list: List<String>) {\n          val x = list.filterNotNull() // quick-fix simplifies to 'list'\n          val y = list.filterIsInstance<String>() // quick-fix simplifies to 'list'\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantRequireNotNullCall",
+                "shortDescription": {
+                  "text": "Redundant 'requireNotNull' or 'checkNotNull' call"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant 'requireNotNull' or 'checkNotNull' call on non-nullable expressions. Example: 'fun foo(i: Int) {\n      requireNotNull(i) // This 'i' is always not null, so this 'requireNotNull' call is redundant.\n      ...\n  }' After the quick-fix is applied: 'fun foo(i: Int) {\n      ...\n  }'",
+                  "markdown": "Reports redundant `requireNotNull` or `checkNotNull` call on non-nullable expressions.\n\n**Example:**\n\n\n      fun foo(i: Int) {\n          requireNotNull(i) // This 'i' is always not null, so this 'requireNotNull' call is redundant.\n          ...\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(i: Int) {\n          ...\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ObjectPropertyName",
+                "shortDescription": {
+                  "text": "Object property naming convention"
+                },
+                "fullDescription": {
+                  "text": "Reports properties that do not follow the naming conventions. The following properties are reported: Top-level properties Properties in objects and companion objects You can specify the required pattern in the inspection options. Recommended naming conventions: it has to start with an uppercase letter, use camel case and no underscores. Example: '// top-level property\n  val USER_NAME_FIELD = \"UserName\"\n  // top-level property holding reference to singleton object\n  val PersonComparator: Comparator<Person> = /*...*/\n\n  class Person {\n    companion object {\n      // property in companion object\n      val NO_NAME = Person()\n    }\n  }'",
+                  "markdown": "Reports properties that do not follow the naming conventions.\n\nThe following properties are reported:\n\n* Top-level properties\n* Properties in objects and companion objects\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#naming-rules): it has to start with an uppercase letter, use camel case and no underscores.\n\n**Example:**\n\n\n      // top-level property\n      val USER_NAME_FIELD = \"UserName\"\n      // top-level property holding reference to singleton object\n      val PersonComparator: Comparator<Person> = /*...*/\n\n      class Person {\n        companion object {\n          // property in companion object\n          val NO_NAME = Person()\n        }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Naming conventions",
+                      "index": 48,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "PackageDirectoryMismatch",
+                "shortDescription": {
+                  "text": "Package name does not match containing directory"
+                },
+                "fullDescription": {
+                  "text": "Reports 'package' directives that do not match the location of the file.",
+                  "markdown": "Reports `package` directives that do not match the location of the file."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Java interop issues",
+                      "index": 55,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KotlinCovariantEquals",
+                "shortDescription": {
+                  "text": "Covariant 'equals()'"
+                },
+                "fullDescription": {
+                  "text": "Reports 'equals()' that takes an argument type other than 'Any?' if the class does not have another 'equals()' that takes 'Any?' as its argument type. Example: 'class Foo {\n      fun equals(other: Foo?): Boolean {\n          return true\n      }\n  }' To fix the problem create 'equals()' method that takes an argument of type 'Any?'.",
+                  "markdown": "Reports `equals()` that takes an argument type other than `Any?` if the class does not have another `equals()` that takes `Any?` as its argument type.\n\n**Example:**\n\n\n      class Foo {\n          fun equals(other: Foo?): Boolean {\n              return true\n          }\n      }\n\nTo fix the problem create `equals()` method that takes an argument of type `Any?`."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceSizeZeroCheckWithIsEmpty",
+                "shortDescription": {
+                  "text": "Size zero check can be replaced with 'isEmpty()'"
+                },
+                "fullDescription": {
+                  "text": "Reports 'size == 0' checks on 'Collections/Array/String' that should be replaced with 'isEmpty()'. Using 'isEmpty()' makes your code simpler. The quick-fix replaces the size check with 'isEmpty()'. Example: 'fun foo() {\n      val arrayOf = arrayOf(1, 2, 3)\n      arrayOf.size == 0\n  }' After the quick-fix is applied: 'fun foo() {\n      val arrayOf = arrayOf(1, 2, 3)\n      arrayOf.isEmpty()\n  }'",
+                  "markdown": "Reports `size == 0` checks on `Collections/Array/String` that should be replaced with `isEmpty()`.\n\nUsing `isEmpty()` makes your code simpler.\n\nThe quick-fix replaces the size check with `isEmpty()`.\n\n**Example:**\n\n\n      fun foo() {\n          val arrayOf = arrayOf(1, 2, 3)\n          arrayOf.size == 0\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo() {\n          val arrayOf = arrayOf(1, 2, 3)\n          arrayOf.isEmpty()\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantEnumConstructorInvocation",
+                "shortDescription": {
+                  "text": "Redundant enum constructor invocation"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant constructor invocation on an enum entry. Example: 'enum class Baz(i: Int = 0) {\n      A(1),\n      B(),\n      C(),\n  }' After the quick-fix is applied: 'enum class Baz(i: Int = 0) {\n      A(1),\n      B,\n      C,\n  }'",
+                  "markdown": "Reports redundant constructor invocation on an enum entry.\n\n**Example:**\n\n\n      enum class Baz(i: Int = 0) {\n          A(1),\n          B(),\n          C(),\n      }\n\nAfter the quick-fix is applied:\n\n\n      enum class Baz(i: Int = 0) {\n          A(1),\n          B,\n          C,\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "DirectUseOfResultType",
+                "shortDescription": {
+                  "text": "Function returning Result directly"
+                },
+                "fullDescription": {
+                  "text": "Reports functions that use 'Result' as a return type. 'Result' should never be used as a return type. Throw an exception, use a nullable type, or use a domain-specific result class to indicate failure. Example: 'fun foo() = Result.success(true)'",
+                  "markdown": "Reports functions that use `Result` as a return type.\n\n\n`Result` should never be used as a return type.\nThrow an exception, use a nullable type, or use a domain-specific result class to indicate failure.\n\n**Example:**\n\n\n      fun foo() = Result.success(true)\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "FakeJvmFieldConstant",
+                "shortDescription": {
+                  "text": "Kotlin non-const property used as Java constant"
+                },
+                "fullDescription": {
+                  "text": "Reports Kotlin properties that are not 'const' and used as Java annotation arguments. For example, a property with the '@JvmField' annotation has an initializer that can be evaluated at compile-time, and it has a primitive or 'String' type. Such properties have a 'ConstantValue' attribute in bytecode in Kotlin 1.1-1.2. This attribute allows javac to fold usages of the corresponding field and use that field in annotations. This can lead to incorrect behavior in the case of separate or incremental compilation in mixed Java/Kotlin code. This behavior is subject to change in Kotlin 1.3 (no 'ConstantValue' attribute any more). Example: Kotlin code in foo.kt file: 'annotation class Ann(val s: String)\n  @JvmField val importantString = \"important\"' Java code: 'public class JavaUser {\n      // This is dangerous\n      @Ann(s = FooKt.importantString)\n      public void foo() {}\n  }' To fix the problem replace the '@JvmField' annotation with the 'const' modifier on a relevant Kotlin property or inline it.",
+                  "markdown": "Reports Kotlin properties that are not `const` and used as Java annotation arguments.\n\n\nFor example, a property with the `@JvmField` annotation has an initializer that can be evaluated at compile-time,\nand it has a primitive or `String` type.\n\n\nSuch properties have a `ConstantValue` attribute in bytecode in Kotlin 1.1-1.2.\nThis attribute allows javac to fold usages of the corresponding field and use that field in annotations.\nThis can lead to incorrect behavior in the case of separate or incremental compilation in mixed Java/Kotlin code.\nThis behavior is subject to change in Kotlin 1.3 (no `ConstantValue` attribute any more).\n\n**Example:**\n\nKotlin code in foo.kt file:\n\n\n      annotation class Ann(val s: String)\n      @JvmField val importantString = \"important\"\n\nJava code:\n\n\n      public class JavaUser {\n          // This is dangerous\n          @Ann(s = FooKt.importantString)\n          public void foo() {}\n      }\n\nTo fix the problem replace the `@JvmField` annotation with the `const` modifier on a relevant Kotlin property or inline it."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Java interop issues",
+                      "index": 55,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "WhenWithOnlyElse",
+                "shortDescription": {
+                  "text": "'when' has only 'else' branch and can be simplified"
+                },
+                "fullDescription": {
+                  "text": "Reports 'when' expressions with only an 'else' branch that can be simplified. Simplify expression quick-fix can be used to amend the code automatically. Example: 'fun redundant() {\n      val x = when { // <== redundant, a quick-fix simplifies the when expression to \"val x = 1\"\n          else -> 1\n      }\n  }'",
+                  "markdown": "Reports `when` expressions with only an `else` branch that can be simplified.\n\n**Simplify expression** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n      fun redundant() {\n          val x = when { // <== redundant, a quick-fix simplifies the when expression to \"val x = 1\"\n              else -> 1\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KotlinTestJUnit",
+                "shortDescription": {
+                  "text": "kotlin-test-junit could be used"
+                },
+                "fullDescription": {
+                  "text": "Reports usage of 'kotlin-test' and 'junit' dependency without 'kotlin-test-junit'. It is recommended to use 'kotlin-test-junit' dependency to work with Kotlin and JUnit.",
+                  "markdown": "Reports usage of `kotlin-test` and `junit` dependency without `kotlin-test-junit`.\n\nIt is recommended to use `kotlin-test-junit` dependency to work with Kotlin and JUnit."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin",
+                      "index": 2,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SafeCastWithReturn",
+                "shortDescription": {
+                  "text": "Safe cast with 'return' should be replaced with 'if' type check"
+                },
+                "fullDescription": {
+                  "text": "Reports safe cast with 'return' that can be replaced with 'if' type check. Using corresponding functions makes your code simpler. The quick-fix replaces the safe cast with 'if' type check. Example: 'fun test(x: Any) {\n      x as? String ?: return\n  }' After the quick-fix is applied: 'fun test(x: Any) {\n      if (x !is String) return\n  }'",
+                  "markdown": "Reports safe cast with `return` that can be replaced with `if` type check.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the safe cast with `if` type check.\n\n**Example:**\n\n\n      fun test(x: Any) {\n          x as? String ?: return\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(x: Any) {\n          if (x !is String) return\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceAssertBooleanWithAssertEquality",
+                "shortDescription": {
+                  "text": "Assert boolean could be replaced with assert equality"
+                },
+                "fullDescription": {
+                  "text": "Reports calls to 'assertTrue()' and 'assertFalse()' that can be replaced with assert equality functions. 'assertEquals()', 'assertSame()', and their negating counterparts (-Not-) provide more informative messages on failure. Example: 'assertTrue(a == b)' After the quick-fix is applied: 'assertEquals(a, b)'",
+                  "markdown": "Reports calls to `assertTrue()` and `assertFalse()` that can be replaced with assert equality functions.\n\n\n`assertEquals()`, `assertSame()`, and their negating counterparts (-Not-) provide more informative messages on\nfailure.\n\n**Example:**\n\n      assertTrue(a == b)\n\nAfter the quick-fix is applied:\n\n      assertEquals(a, b)\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UnnecessaryOptInAnnotation",
+                "shortDescription": {
+                  "text": "Unnecessary '@OptIn' annotation"
+                },
+                "fullDescription": {
+                  "text": "Reports unnecessary opt-in annotations that can be safely removed. '@OptIn' annotation is required for the code using experimental APIs that can change any time in the future. This annotation becomes useless and possibly misleading if no such API is used (e.g., when the experimental API becomes stable and does not require opting in its usage anymore). Remove annotation quick-fix can be used to remove the unnecessary '@OptIn' annotation. Example: '@OptIn(ExperimentalApi::class)\n  fun foo(x: Bar) {\n      x.baz()\n  }' After the quick-fix is applied: 'fun foo(x: Bar) {\n      x.baz()\n  }'",
+                  "markdown": "Reports unnecessary opt-in annotations that can be safely removed.\n\n`@OptIn` annotation is required for the code using experimental APIs that can change\nany time in the future. This annotation becomes useless and possibly misleading if no such API is used\n(e.g., when the experimental API becomes stable and does not require opting in its usage anymore).\n\n\n**Remove annotation** quick-fix can be used to remove the unnecessary `@OptIn` annotation.\n\nExample:\n\n\n      @OptIn(ExperimentalApi::class)\n      fun foo(x: Bar) {\n          x.baz()\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(x: Bar) {\n          x.baz()\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceStringFormatWithLiteral",
+                "shortDescription": {
+                  "text": "'String.format' call can be replaced with string templates"
+                },
+                "fullDescription": {
+                  "text": "Reports 'String.format' calls that can be replaced with string templates. Using string templates makes your code simpler. The quick-fix replaces the call with a string template. Example: 'fun main() {\n      val id = \"abc\"\n      val date = \"123\"\n      val s = String.format(\"%s_%s_%s\", id, date, id)\n  }' After the quick-fix is applied: 'fun main() {\n      val id = \"abc\"\n      val date = \"123\"\n      val s = \"${id}_${date}_$id\"\n  }'",
+                  "markdown": "Reports `String.format` calls that can be replaced with string templates.\n\nUsing string templates makes your code simpler.\n\nThe quick-fix replaces the call with a string template.\n\n**Example:**\n\n\n      fun main() {\n          val id = \"abc\"\n          val date = \"123\"\n          val s = String.format(\"%s_%s_%s\", id, date, id)\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun main() {\n          val id = \"abc\"\n          val date = \"123\"\n          val s = \"${id}_${date}_$id\"\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceNotNullAssertionWithElvisReturn",
+                "shortDescription": {
+                  "text": "Not-null assertion can be replaced with 'return'"
+                },
+                "fullDescription": {
+                  "text": "Reports not-null assertion ('!!') calls that can be replaced with the elvis operator and return ('?: return'). A not-null assertion can lead to NPE (NullPointerException) that is not expected. Avoiding the use of '!!' is good practice. The quick-fix replaces the not-null assertion with 'return' or 'return null'. Example: 'fun test(number: Int?) {\n      val x = number!!\n  }' After the quick-fix is applied: 'fun test(number: Int?) {\n      val x = number ?: return\n  }'",
+                  "markdown": "Reports not-null assertion (`!!`) calls that can be replaced with the elvis operator and return (`?: return`).\n\nA not-null assertion can lead to NPE (NullPointerException) that is not expected. Avoiding the use of `!!` is good practice.\n\nThe quick-fix replaces the not-null assertion with `return` or `return null`.\n\n**Example:**\n\n\n      fun test(number: Int?) {\n          val x = number!!\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(number: Int?) {\n          val x = number ?: return\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceSubstringWithSubstringBefore",
+                "shortDescription": {
+                  "text": "'substring' call should be replaced with 'substringBefore'"
+                },
+                "fullDescription": {
+                  "text": "Reports calls like 's.substring(0, s.indexOf(x))' that can be replaced with 's.substringBefore(x)'. Using 'substringBefore()' makes your code simpler. The quick-fix replaces the 'substring' call with 'substringBefore'. Example: 'fun foo(s: String) {\n      s.substring(0, s.indexOf('x'))\n  }' After the quick-fix is applied: 'fun foo(s: String) {\n      s.substringBefore('x')\n  }'",
+                  "markdown": "Reports calls like `s.substring(0, s.indexOf(x))` that can be replaced with `s.substringBefore(x)`.\n\nUsing `substringBefore()` makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `substringBefore`.\n\n**Example:**\n\n\n      fun foo(s: String) {\n          s.substring(0, s.indexOf('x'))\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(s: String) {\n          s.substringBefore('x')\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceWithOperatorAssignment",
+                "shortDescription": {
+                  "text": "Assignment can be replaced with operator assignment"
+                },
+                "fullDescription": {
+                  "text": "Reports modifications of variables with a simple assignment (such as 'y = y + x') that can be replaced with an operator assignment. The quick-fix replaces the assignment with an assignment operator. Example: 'fun foo() {\n      val list = mutableListOf(1, 2, 3)\n      list = list + 4\n  }' After the quick-fix is applied: 'fun foo() {\n      val list = mutableListOf(1, 2, 3)\n      list += 4\n  }'",
+                  "markdown": "Reports modifications of variables with a simple assignment (such as `y = y + x`) that can be replaced with an operator assignment.\n\nThe quick-fix replaces the assignment with an assignment operator.\n\n**Example:**\n\n\n      fun foo() {\n          val list = mutableListOf(1, 2, 3)\n          list = list + 4\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo() {\n          val list = mutableListOf(1, 2, 3)\n          list += 4\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UnusedSymbol",
+                "shortDescription": {
+                  "text": "Unused symbol"
+                },
+                "fullDescription": {
+                  "text": "Reports symbols that are not used or not reachable from entry points.",
+                  "markdown": "Reports symbols that are not used or not reachable from entry points."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceCollectionCountWithSize",
+                "shortDescription": {
+                  "text": "Collection count can be converted to size"
+                },
+                "fullDescription": {
+                  "text": "Reports calls to 'Collection<T>.count()'. This function call can be replaced with '.size'. '.size' form ensures that the operation is O(1) and won't allocate extra objects, whereas 'count()' could be confused with 'Iterable<T>.count()', which is O(n) and allocating. Example: 'fun foo() {\n      var list = listOf(1,2,3)\n      list.count() // replaceable 'count()'\n  }' After the quick-fix is applied: 'fun foo() {\n      var list = listOf(1,2,3)\n      list.size\n  }'",
+                  "markdown": "Reports calls to `Collection<T>.count()`.\n\n\nThis function call can be replaced with `.size`.\n\n\n`.size` form ensures that the operation is O(1) and won't allocate extra objects, whereas\n`count()` could be confused with `Iterable<T>.count()`, which is O(n) and allocating.\n\n\n**Example:**\n\n      fun foo() {\n          var list = listOf(1,2,3)\n          list.count() // replaceable 'count()'\n      }\n\nAfter the quick-fix is applied:\n\n      fun foo() {\n          var list = listOf(1,2,3)\n          list.size\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceArrayEqualityOpWithArraysEquals",
+                "shortDescription": {
+                  "text": "Arrays comparison via '==' and '!='"
+                },
+                "fullDescription": {
+                  "text": "Reports usages of '==' or '!=' operator for arrays that should be replaced with 'contentEquals()'. The '==' and '!='operators compare array references instead of their content. Examples: 'fun test() {\n      val a = arrayOf(1, 2, 3)\n      val b = arrayOf(1, 2, 3)\n      println(a == b) // references comparison\n  }' After the quick-fix is applied: 'fun test() {\n      val a = arrayOf(1, 2, 3)\n      val b = arrayOf(1, 2, 3)\n      println(a.contentEquals(b))\n  }'",
+                  "markdown": "Reports usages of `==` or `!=` operator for arrays that should be replaced with `contentEquals()`.\n\n\nThe `==` and `!=`operators compare array references instead of their content.\n\n**Examples:**\n\n      fun test() {\n          val a = arrayOf(1, 2, 3)\n          val b = arrayOf(1, 2, 3)\n          println(a == b) // references comparison\n      }\n\nAfter the quick-fix is applied:\n\n      fun test() {\n          val a = arrayOf(1, 2, 3)\n          val b = arrayOf(1, 2, 3)\n          println(a.contentEquals(b))\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "DeprecatedGradleDependency",
+                "shortDescription": {
+                  "text": "Deprecated library is used in Gradle"
+                },
+                "fullDescription": {
+                  "text": "Reports deprecated dependencies in Gradle build scripts. Example: 'dependencies {\n      compile \"org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.0\"\n  }' After the quick-fix applied: 'dependencies {\n      compile \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.0\"\n  }'",
+                  "markdown": "Reports deprecated dependencies in Gradle build scripts.\n\n**Example:**\n\n\n      dependencies {\n          compile \"org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.0\"\n      }\n\nAfter the quick-fix applied:\n\n\n      dependencies {\n          compile \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.0\"\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin",
+                      "index": 2,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ConvertReferenceToLambda",
+                "shortDescription": {
+                  "text": "Can be replaced with lambda"
+                },
+                "fullDescription": {
+                  "text": "Reports a function reference expression that can be replaced with a function literal (lambda). Sometimes, passing a lambda looks more straightforward and more consistent with the rest of the code. Also, the fix might be handy if you need to replace a simple call with something more complex. Example: 'fun Int.isEven() = this % 2 == 0\n\n  fun example() {\n      val numbers = listOf(1, 2, 4, 7, 9, 10)\n      val evenNumbers = numbers.filter(Int::isEven)\n  }' After the quick-fix is applied: 'fun Int.isEven() = this % 2 == 0\n\n  fun example() {\n      val numbers = listOf(1, 2, 4, 7, 9, 10)\n      val evenNumbers = numbers.filter { it.isEven() }\n  }'",
+                  "markdown": "Reports a function reference expression that can be replaced with a function literal (lambda).\n\n\nSometimes, passing a lambda looks more straightforward and more consistent with the rest of the code.\nAlso, the fix might be handy if you need to replace a simple call with something more complex.\n\n**Example:**\n\n\n      fun Int.isEven() = this % 2 == 0\n\n      fun example() {\n          val numbers = listOf(1, 2, 4, 7, 9, 10)\n          val evenNumbers = numbers.filter(Int::isEven)\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun Int.isEven() = this % 2 == 0\n\n      fun example() {\n          val numbers = listOf(1, 2, 4, 7, 9, 10)\n          val evenNumbers = numbers.filter { it.isEven() }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UnlabeledReturnInsideLambda",
+                "shortDescription": {
+                  "text": "Unlabeled return inside lambda"
+                },
+                "fullDescription": {
+                  "text": "Reports unlabeled 'return' expressions inside inline lambda. Such expressions can be confusing because it might be unclear which scope belongs to 'return'. Change to return@… quick-fix can be used to amend the code automatically. Example: 'fun test(list: List<Int>) {\n      list.forEach {\n          // This return expression returns from the function test\n          // One can change it to return@forEach to change the scope\n          if (it == 10) return\n      }\n  }' After the quick-fix is applied: 'fun test(list: List<Int>) {\n      list.forEach {\n          if (it == 10) return@test\n      }\n  }'",
+                  "markdown": "Reports unlabeled `return` expressions inside inline lambda.\n\nSuch expressions can be confusing because it might be unclear which scope belongs to `return`.\n\n**Change to return@...** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n      fun test(list: List<Int>) {\n          list.forEach {\n              // This return expression returns from the function test\n              // One can change it to return@forEach to change the scope\n              if (it == 10) return\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(list: List<Int>) {\n          list.forEach {\n              if (it == 10) return@test\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "LateinitVarOverridesLateinitVar",
+                "shortDescription": {
+                  "text": "'lateinit var' property overrides 'lateinit var' property"
+                },
+                "fullDescription": {
+                  "text": "Reports 'lateinit var' properties that override other 'lateinit var' properties. A subclass instance will have two fields for a single property, and the one from the superclass will remain effectively unused. Example: 'open class BaseClass {\n      open lateinit var name: String\n    }\n\n    class RealClass : BaseClass() {\n      override lateinit var name: String\n    }'",
+                  "markdown": "Reports `lateinit var` properties that override other `lateinit var` properties.\n\nA subclass instance will have two fields for a single property, and the one from the superclass will remain effectively unused.\n\n**Example:**\n\n\n        open class BaseClass {\n          open lateinit var name: String\n        }\n\n        class RealClass : BaseClass() {\n          override lateinit var name: String\n        }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "DifferentKotlinGradleVersion",
+                "shortDescription": {
+                  "text": "Kotlin Gradle and IDE plugins versions are different"
+                },
+                "fullDescription": {
+                  "text": "Reports that different IDE and Gradle plugin versions are used. This can cause inconsistencies between IDE and Gradle builds in error reporting or code behavior. Example: 'dependencies {\n    classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:0.0.1\"\n  }' To fix the problem change the kotlin gradle plugin version to match the version of kotlin that is bundled into the IDE plugin.",
+                  "markdown": "Reports that different IDE and Gradle plugin versions are used.\n\nThis can cause inconsistencies between IDE and Gradle builds in error reporting or code behavior.\n\n**Example:**\n\n\n      dependencies {\n        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:0.0.1\"\n      }\n\nTo fix the problem change the kotlin gradle plugin version to match the version of kotlin that is bundled into the IDE plugin."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin",
+                      "index": 2,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "JoinDeclarationAndAssignment",
+                "shortDescription": {
+                  "text": "Join declaration and assignment"
+                },
+                "fullDescription": {
+                  "text": "Reports property declarations that can be joined with the following assignment. Example: 'val x: String\n  x = System.getProperty(\"\")' The quick fix joins the declaration with the assignment: 'val x = System.getProperty(\"\")'",
+                  "markdown": "Reports property declarations that can be joined with the following assignment.\n\n**Example:**\n\n\n      val x: String\n      x = System.getProperty(\"\")\n\nThe quick fix joins the declaration with the assignment:\n\n\n      val x = System.getProperty(\"\")\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KotlinEqualsBetweenInconvertibleTypes",
+                "shortDescription": {
+                  "text": "'equals()' between objects of inconvertible types"
+                },
+                "fullDescription": {
+                  "text": "Reports calls to 'equals()' where the receiver and the argument are of incompatible primitive, enum, or string types. While such a call might theoretically be useful, most likely it represents a bug. Example: '5.equals(\"\");'",
+                  "markdown": "Reports calls to `equals()` where the receiver and the argument are of incompatible primitive, enum, or string types.\n\nWhile such a call might theoretically be useful, most likely it represents a bug.\n\n**Example:**\n\n      5.equals(\"\");\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "HasPlatformType",
+                "shortDescription": {
+                  "text": "Function or property has platform type"
+                },
+                "fullDescription": {
+                  "text": "Reports functions and properties that have a platform type. To prevent unexpected errors, the type should be declared explicitly. Example: 'fun foo() = java.lang.String.valueOf(1)' The quick fix allows you to specify the return type: 'fun foo(): String = java.lang.String.valueOf(1)'",
+                  "markdown": "Reports functions and properties that have a platform type.\n\nTo prevent unexpected errors, the type should be declared explicitly.\n\n**Example:**\n\n\n      fun foo() = java.lang.String.valueOf(1)\n\nThe quick fix allows you to specify the return type:\n\n\n      fun foo(): String = java.lang.String.valueOf(1)\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Java interop issues",
+                      "index": 55,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "DataClassPrivateConstructor",
+                "shortDescription": {
+                  "text": "Private data class constructor is exposed via the 'copy' method"
+                },
+                "fullDescription": {
+                  "text": "Reports the 'private' primary constructor in data classes. 'data' classes have a 'copy()' factory method that can be used similarly to a constructor. A constructor should not be marked as 'private' to provide enough safety. Example: 'data class User private constructor(val name: String)' A quick-fix changes the constructor visibility modifier to 'public': 'data class User(val name: String)'",
+                  "markdown": "Reports the `private` primary constructor in data classes.\n\n\n`data` classes have a `copy()` factory method that can be used similarly to a constructor.\nA constructor should not be marked as `private` to provide enough safety.\n\n**Example:**\n\n\n      data class User private constructor(val name: String)\n\nA quick-fix changes the constructor visibility modifier to `public`:\n\n\n      data class User(val name: String)\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantInnerClassModifier",
+                "shortDescription": {
+                  "text": "Redundant 'inner' modifier"
+                },
+                "fullDescription": {
+                  "text": "Reports the 'inner' modifier on a class as redundant if it doesn't reference members of its outer class. Example: 'class Foo {\n      inner class InnerClass { // redundant `inner` modifier\n          fun hello() {\n              println(\"Hi!\")\n          }\n      }\n  }\n\n  class List {\n      val objects = Array<Any>(42) { Any() }\n\n      inner class Iterator { // Not redundant `inner` modifier\n          fun next(): Any {\n              return objects[0]\n          }\n      }\n  }' After the quick-fix is applied: 'class Foo {\n      class InnerClass { // redundant `inner` modifier\n          fun hello() {\n              println(\"Hi!\")\n          }\n      }\n  }\n\n  class List {\n      val objects = Array<Any>(42) { Any() }\n\n      inner class Iterator { // Not redundant `inner` modifier\n          fun next(): Any {\n              return objects[0]\n          }\n      }\n  }'",
+                  "markdown": "Reports the `inner` modifier on a class as redundant if it doesn't reference members of its outer class.\n\n**Example:**\n\n\n      class Foo {\n          inner class InnerClass { // redundant `inner` modifier\n              fun hello() {\n                  println(\"Hi!\")\n              }\n          }\n      }\n\n      class List {\n          val objects = Array<Any>(42) { Any() }\n\n          inner class Iterator { // Not redundant `inner` modifier\n              fun next(): Any {\n                  return objects[0]\n              }\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      class Foo {\n          class InnerClass { // redundant `inner` modifier\n              fun hello() {\n                  println(\"Hi!\")\n              }\n          }\n      }\n\n      class List {\n          val objects = Array<Any>(42) { Any() }\n\n          inner class Iterator { // Not redundant `inner` modifier\n              fun next(): Any {\n                  return objects[0]\n              }\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "JavaCollectionsStaticMethodOnImmutableList",
+                "shortDescription": {
+                  "text": "Call of Java mutator method on immutable Kotlin collection"
+                },
+                "fullDescription": {
+                  "text": "Reports Java mutator methods calls (like 'fill', 'reverse', 'shuffle', 'sort') on an immutable Kotlin collection. This can lead to 'UnsupportedOperationException' at runtime. Example: 'import java.util.Collections\n\n  fun test() {\n      val immutableList = listOf(1, 2)\n      Collections.reverse(immutableList)\n  }' To fix the problem make the list mutable.",
+                  "markdown": "Reports Java mutator methods calls (like `fill`, `reverse`, `shuffle`, `sort`) on an immutable Kotlin collection.\n\nThis can lead to `UnsupportedOperationException` at runtime.\n\n**Example:**\n\n\n      import java.util.Collections\n\n      fun test() {\n          val immutableList = listOf(1, 2)\n          Collections.reverse(immutableList)\n      }\n\nTo fix the problem make the list mutable."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Java interop issues",
+                      "index": 55,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "MavenCoroutinesDeprecation",
+                "shortDescription": {
+                  "text": "Incompatible kotlinx.coroutines dependency is used with Kotlin 1.3+ in Maven"
+                },
+                "fullDescription": {
+                  "text": "Reports kotlinx.coroutines library dependencies in Maven that should be updated in order to be compatible with Kotlin 1.3 and later.",
+                  "markdown": "Reports **kotlinx.coroutines** library dependencies in Maven that should be updated in order to be compatible with Kotlin 1.3 and later."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "error",
+                  "parameters": {
+                    "ideaSeverity": "ERROR",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Migration/Maven",
+                      "index": 118,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "NullableBooleanElvis",
+                "shortDescription": {
+                  "text": "Equality check can be used instead of elvis for nullable boolean check"
+                },
+                "fullDescription": {
+                  "text": "Reports cases when an equality check should be used instead of the elvis operator. Example: 'fun check(a: Boolean? == null) {\n    if (a ?: false) throw IllegalStateException()\n}' After the quick-fix is applied: 'fun check(a: Boolean? == null) {\n    if (a == true) throw IllegalStateException()\n}'",
+                  "markdown": "Reports cases when an equality check should be used instead of the elvis operator.\n\n**Example:**\n\n\n    fun check(a: Boolean? == null) {\n        if (a ?: false) throw IllegalStateException()\n    }\n\nAfter the quick-fix is applied:\n\n\n    fun check(a: Boolean? == null) {\n        if (a == true) throw IllegalStateException()\n    }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "DeprecatedMavenDependency",
+                "shortDescription": {
+                  "text": "Deprecated library is used in Maven"
+                },
+                "fullDescription": {
+                  "text": "Reports deprecated maven dependency. Example: '<dependencies>\n    <dependency>\n        <groupId>org.jetbrains.kotlin</groupId>\n        <artifactId>kotlin-stdlib-jre7</artifactId>\n        <version>${kotlin.version}</version>\n    </dependency>\n  </dependencies>' The quick fix changes the deprecated dependency to a maintained one: '<dependencies>\n    <dependency>\n        <groupId>org.jetbrains.kotlin</groupId>\n        <artifactId>kotlin-stdlib-jdk7</artifactId>\n        <version>${kotlin.version}</version>\n    </dependency>\n  </dependencies>'",
+                  "markdown": "Reports deprecated maven dependency.\n\n**Example:**\n\n\n      <dependencies>\n        <dependency>\n            <groupId>org.jetbrains.kotlin</groupId>\n            <artifactId>kotlin-stdlib-jre7</artifactId>\n            <version>${kotlin.version}</version>\n        </dependency>\n      </dependencies>\n\nThe quick fix changes the deprecated dependency to a maintained one:\n\n\n       <dependencies>\n        <dependency>\n            <groupId>org.jetbrains.kotlin</groupId>\n            <artifactId>kotlin-stdlib-jdk7</artifactId>\n            <version>${kotlin.version}</version>\n        </dependency>\n      </dependencies>\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin",
+                      "index": 2,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UnnecessaryVariable",
+                "shortDescription": {
+                  "text": "Unnecessary local variable"
+                },
+                "fullDescription": {
+                  "text": "Reports local variables that used only in the very next 'return' statement or exact copies of other variables. Such variables can be safely inlined to make the code more clear.",
+                  "markdown": "Reports local variables that used only in the very next `return` statement or exact copies of other variables.\n\nSuch variables can be safely inlined to make the code more clear."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantEmptyInitializerBlock",
+                "shortDescription": {
+                  "text": "Redundant empty initializer block"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant empty initializer blocks. Example: 'class Foo {\n      init {\n          // Empty init block\n      }\n  }' After the quick-fix is applied: 'class Foo {\n  }'",
+                  "markdown": "Reports redundant empty initializer blocks.\n\n**Example:**\n\n\n      class Foo {\n          init {\n              // Empty init block\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      class Foo {\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "GradleKotlinxCoroutinesDeprecation",
+                "shortDescription": {
+                  "text": "Incompatible kotlinx.coroutines dependency is used with Kotlin 1.3+ in Gradle"
+                },
+                "fullDescription": {
+                  "text": "Reports 'kotlinx.coroutines' library dependencies in Gradle that should be updated to be compatible with Kotlin 1.3+. Example: 'dependencies {\n      implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.0.1'\n  }' The quick fix changes the 'kotlinx.coroutines' library version to a compatible with Kotlin 1.3: 'dependencies {\n      implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.27.0-eap13'\n  }'",
+                  "markdown": "Reports `kotlinx.coroutines` library dependencies in Gradle that should be updated to be compatible with Kotlin 1.3+.\n\n**Example:**\n\n\n      dependencies {\n          implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.0.1'\n      }\n\nThe quick fix changes the `kotlinx.coroutines` library version to a compatible with Kotlin 1.3:\n\n\n      dependencies {\n          implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.27.0-eap13'\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "error",
+                  "parameters": {
+                    "ideaSeverity": "ERROR",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Migration/Gradle",
+                      "index": 126,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "WarningOnMainUnusedParameterMigration",
+                "shortDescription": {
+                  "text": "Unused 'args' on 'main' since 1.4"
+                },
+                "fullDescription": {
+                  "text": "Reports 'main' function with an unused single parameter. Since Kotlin 1.4, it is possible to use the 'main' function without parameter as the entry point to the Kotlin program. The compiler reports a warning for the 'main' function with an unused parameter.",
+                  "markdown": "Reports `main` function with an unused single parameter.\n\nSince Kotlin 1.4, it is possible to use the `main` function without parameter as the entry point to the Kotlin program.\nThe compiler reports a warning for the `main` function with an unused parameter."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Migration",
+                      "index": 15,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantWith",
+                "shortDescription": {
+                  "text": "Redundant 'with' call"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant 'with' function calls that don't access anything from the receiver. Examples: 'class MyClass {\n      fun f(): String = \"\"\n  }\n\n  fun testRedundant() {\n      with(c) { // <== 'with' is redundant since 'c' isn't used\n          println(\"1\")\n      }\n  }\n\n  fun testOk() {\n      val c = MyClass()\n      with(c) { // <== OK because 'f()' is effectively 'c.f()'\n          println(f())\n      }\n  }'",
+                  "markdown": "Reports redundant `with` function calls that don't access anything from the receiver.\n\n**Examples:**\n\n\n      class MyClass {\n          fun f(): String = \"\"\n      }\n\n      fun testRedundant() {\n          with(c) { // <== 'with' is redundant since 'c' isn't used\n              println(\"1\")\n          }\n      }\n\n      fun testOk() {\n          val c = MyClass()\n          with(c) { // <== OK because 'f()' is effectively 'c.f()'\n              println(f())\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantLabelMigration",
+                "shortDescription": {
+                  "text": "Redundant label"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant labels which cause compilation errors since Kotlin 1.4. Since Kotlin 1.0, one can mark any statement with a label: 'fun foo() {\n    L1@ val x = L2@bar()\n  }' However, these labels can be referenced only in a limited number of ways: break / continue from a loop non-local return from an inline lambda or inline anonymous function sssss Such labels are prohibited since Kotlin 1.4. This inspection only reports if the Kotlin language level of the project or module is 1.4 or higher.",
+                  "markdown": "Reports redundant labels which cause compilation errors since Kotlin 1.4.\n\nSince Kotlin 1.0, one can mark any statement with a label:\n\n\n      fun foo() {\n        L1@ val x = L2@bar()\n      }\n\nHowever, these labels can be referenced only in a limited number of ways:\n\n* break / continue from a loop\n* non-local return from an inline lambda or inline anonymous function\nsssss\n\nSuch labels are prohibited since Kotlin 1.4.\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Migration",
+                      "index": 15,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceNegatedIsEmptyWithIsNotEmpty",
+                "shortDescription": {
+                  "text": "Negated call can be simplified"
+                },
+                "fullDescription": {
+                  "text": "Reports negation 'isEmpty()' and 'isNotEmpty()' for collections and 'String', or 'isBlank()' and 'isNotBlank()' for 'String'. Using corresponding functions makes your code simpler. The quick-fix replaces the negation call with the corresponding call from the Standard Library. Example: 'fun main() {\n      val list = listOf(1,2,3)\n      if (!list.isEmpty()) {\n          // do smth\n      }\n  }' After the quick-fix is applied: 'fun main() {\n      val list = listOf(1,2,3)\n      if (list.isNotEmpty()) {\n          // do smth\n      }\n  }'",
+                  "markdown": "Reports negation `isEmpty()` and `isNotEmpty()` for collections and `String`, or `isBlank()` and `isNotBlank()` for `String`.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the negation call with the corresponding call from the Standard Library.\n\n**Example:**\n\n\n      fun main() {\n          val list = listOf(1,2,3)\n          if (!list.isEmpty()) {\n              // do smth\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun main() {\n          val list = listOf(1,2,3)\n          if (list.isNotEmpty()) {\n              // do smth\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "DelegationToVarProperty",
+                "shortDescription": {
+                  "text": "Delegating to 'var' property"
+                },
+                "fullDescription": {
+                  "text": "Reports interface delegation to a 'var' property. Only initial value of a property is used for delegation, any later assignments do not affect it. Example: 'class Example(var text: CharSequence): CharSequence by text' A quick-fix replaces a property with immutable one: 'class Example(val text: CharSequence): CharSequence by text' Alternative way, if you rely on mutability for some reason: 'class Example(text: CharSequence): CharSequence by text {\n      var text = text\n  }'",
+                  "markdown": "Reports interface delegation to a `var` property.\n\nOnly initial value of a property is used for delegation, any later assignments do not affect it.\n\n**Example:**\n\n\n      class Example(var text: CharSequence): CharSequence by text\n\nA quick-fix replaces a property with immutable one:\n\n\n      class Example(val text: CharSequence): CharSequence by text\n\nAlternative way, if you rely on mutability for some reason:\n\n\n      class Example(text: CharSequence): CharSequence by text {\n          var text = text\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ConstantConditionIf",
+                "shortDescription": {
+                  "text": "Condition of 'if' expression is constant"
+                },
+                "fullDescription": {
+                  "text": "Reports 'if' expressions that have 'true' or 'false' constant literal condition and can be simplified. While occasionally intended, this construction is confusing and often the result of a typo or previous refactoring. Example: 'fun example() {\n      if (true) {\n          throw IllegalStateException(\"Unexpected state\")\n      }\n  }' A quick-fix removes the 'if' condition: 'fun example() {\n      throw IllegalStateException(\"Unexpected state\")\n  }'",
+                  "markdown": "Reports `if` expressions that have `true` or `false` constant literal condition and can be simplified.\n\nWhile occasionally intended, this construction is confusing and often the result of a typo\nor previous refactoring.\n\n**Example:**\n\n\n      fun example() {\n          if (true) {\n              throw IllegalStateException(\"Unexpected state\")\n          }\n      }\n\nA quick-fix removes the `if` condition:\n\n\n      fun example() {\n          throw IllegalStateException(\"Unexpected state\")\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantLambdaArrow",
+                "shortDescription": {
+                  "text": "Redundant lambda arrow"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant lambda arrows in lambdas without parameters. Example: 'fun foo(f: () -> Unit) = f()\n\n  fun bar() {\n      foo { -> println(\"Hi!\") }\n  }' After the quick-fix is applied: 'fun foo(f: () -> Unit) = f()\n\n  fun bar() {\n      foo { println(\"Hi!\") }\n  }'",
+                  "markdown": "Reports redundant lambda arrows in lambdas without parameters.\n\n**Example:**\n\n\n      fun foo(f: () -> Unit) = f()\n\n      fun bar() {\n          foo { -\\> println(\"Hi!\") }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(f: () -> Unit) = f()\n\n      fun bar() {\n          foo { println(\"Hi!\") }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KotlinInternalInJava",
+                "shortDescription": {
+                  "text": "Usage of Kotlin internal declarations from Java"
+                },
+                "fullDescription": {
+                  "text": "Reports usages of Kotlin 'internal' declarations in Java code that is located in a different module. The 'internal' keyword is designed to restrict access to a class, function, or property from other modules. Due to JVM limitations, 'internal' classes, functions, and properties can still be accessed from outside Kotlin, which may later lead to compatibility problems.",
+                  "markdown": "Reports usages of Kotlin `internal` declarations in Java code that is located in a different module.\n\n\nThe `internal` keyword is designed to restrict access to a class, function, or property from other modules.\nDue to JVM limitations, `internal` classes, functions, and properties can still be\naccessed from outside Kotlin, which may later lead to compatibility problems."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "error",
+                  "parameters": {
+                    "ideaSeverity": "ERROR",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Java interop issues",
+                      "index": 55,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UseWithIndex",
+                "shortDescription": {
+                  "text": "Manually incremented index variable can be replaced with use of 'withIndex()'"
+                },
+                "fullDescription": {
+                  "text": "Reports 'for' loops with a manually incremented index variable. 'for' loops with a manually incremented index variable can be simplified with the 'withIndex()' function. Use withIndex() instead of manual index increment quick-fix can be used to amend the code automatically. Example: 'fun foo(list: List<String>): Int? {\n      var index = 0\n      for (s in list) { <== can be simplified\n          val x = s.length * index\n          index++\n          if (x > 0) return x\n      }\n      return null\n  }' After the quick-fix is applied: 'fun foo(list: List<String>): Int? {\n      for ((index, s) in list.withIndex()) {\n          val x = s.length * index\n          if (x > 0) return x\n      }\n      return null\n  }'",
+                  "markdown": "Reports `for` loops with a manually incremented index variable.\n\n`for` loops with a manually incremented index variable can be simplified with the `withIndex()` function.\n\n**Use withIndex() instead of manual index increment** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n      fun foo(list: List<String>): Int? {\n          var index = 0\n          for (s in list) { <== can be simplified\n              val x = s.length * index\n              index++\n              if (x > 0) return x\n          }\n          return null\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(list: List<String>): Int? {\n          for ((index, s) in list.withIndex()) {\n              val x = s.length * index\n              if (x > 0) return x\n          }\n          return null\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ImplicitThis",
+                "shortDescription": {
+                  "text": "Implicit 'this'"
+                },
+                "fullDescription": {
+                  "text": "Reports usages of implicit this. Example: 'class Foo {\n      fun s() = \"\"\n\n      fun test() {\n          s()\n      }\n  }' The quick fix specifies this explicitly: 'class Foo {\n      fun s() = \"\"\n\n      fun test() {\n          this.s()\n      }\n  }'",
+                  "markdown": "Reports usages of implicit **this** .\n\n**Example:**\n\n\n      class Foo {\n          fun s() = \"\"\n\n          fun test() {\n              s()\n          }\n      }\n\nThe quick fix specifies **this** explicitly:\n\n\n      class Foo {\n          fun s() = \"\"\n\n          fun test() {\n              this.s()\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KotlinCatchMayIgnoreException",
+                "shortDescription": {
+                  "text": "'catch' block may ignore exception"
+                },
+                "fullDescription": {
+                  "text": "Reports 'catch' blocks that are empty or may ignore an exception. While occasionally intended, empty 'catch' blocks may complicate debugging. Also, ignoring a 'catch' parameter might be wrong. The inspection won't report any 'catch' parameters named 'ignore', 'ignored', or '_'. You can use a quick-fix to change the exception name to '_'. Example: 'try {\n    throwingMethod()\n  } catch (ex: IOException) {\n\n  }' After the quick-fix is applied: 'try {\n    throwingMethod()\n  } catch (_: IOException) {\n\n  }' Use the Do not warn when 'catch' block contains a comment option to ignore 'catch' blocks with comments.",
+                  "markdown": "Reports `catch` blocks that are empty or may ignore an exception.\n\nWhile occasionally intended, empty `catch` blocks may complicate debugging.\nAlso, ignoring a `catch` parameter might be wrong.\n\n\nThe inspection won't report any `catch` parameters named `ignore`, `ignored`, or `_`.\n\n\nYou can use a quick-fix to change the exception name to `_`.\n\n**Example:**\n\n\n      try {\n        throwingMethod()\n      } catch (ex: IOException) {\n\n      }\n\nAfter the quick-fix is applied:\n\n\n      try {\n        throwingMethod()\n      } catch (_: IOException) {\n\n      }\n\nUse the **Do not warn when 'catch' block contains a comment** option to ignore `catch` blocks with comments."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "DifferentStdlibGradleVersion",
+                "shortDescription": {
+                  "text": "Kotlin library and Gradle plugin versions are different"
+                },
+                "fullDescription": {
+                  "text": "Reports different Kotlin stdlib and compiler versions. Example: 'dependencies {\n    classpath \"org.jetbrains.kotlin:kotlin-stdlib:0.0.1\"\n  }' To fix the problem change the kotlin stdlib version to match the kotlin compiler version.",
+                  "markdown": "Reports different Kotlin stdlib and compiler versions.\n\n**Example:**\n\n\n      dependencies {\n        classpath \"org.jetbrains.kotlin:kotlin-stdlib:0.0.1\"\n      }\n\nTo fix the problem change the kotlin stdlib version to match the kotlin compiler version."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin",
+                      "index": 2,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "CanBeVal",
+                "shortDescription": {
+                  "text": "Local 'var' is never modified and can be declared as 'val'"
+                },
+                "fullDescription": {
+                  "text": "Reports local variables declared with the 'var' keyword that are never modified. Kotlin encourages to declare practically immutable variables using the 'val' keyword, ensuring that their value will never change. Example: 'fun example() {\n      var primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n      var fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n      print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n  }' A quick-fix replaces the 'var' keyword with 'val': 'fun example() {\n      val primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n      val fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n      print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n  }'",
+                  "markdown": "Reports local variables declared with the `var` keyword that are never modified.\n\nKotlin encourages to declare practically immutable variables using the `val` keyword, ensuring that their value will never change.\n\n**Example:**\n\n\n      fun example() {\n          var primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n          var fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n          print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n      }\n\nA quick-fix replaces the `var` keyword with `val`:\n\n\n      fun example() {\n          val primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n          val fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n          print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceWithIgnoreCaseEquals",
+                "shortDescription": {
+                  "text": "Should be replaced with 'equals(..., ignoreCase = true)'"
+                },
+                "fullDescription": {
+                  "text": "Reports case-insensitive comparisons that can be replaced with 'equals(..., ignoreCase = true)'. By using 'equals()' you don't have to allocate extra strings with 'toLowerCase()' or 'toUpperCase()' to compare strings. The quick-fix replaces the case-insensitive comparison that uses 'toLowerCase()' or 'toUpperCase()' with 'equals(..., ignoreCase = true)'. Note: May change semantics for some locales. Example: 'fun main() {\n      val a = \"KoTliN\"\n      val b = \"KOTLIN\"\n      println(a.toLowerCase() == b.toLowerCase())\n  }' After the quick-fix is applied: 'fun main() {\n      val a = \"KoTliN\"\n      val b = \"KOTLIN\"\n      println(a.equals(b, ignoreCase = true))\n  }'",
+                  "markdown": "Reports case-insensitive comparisons that can be replaced with `equals(..., ignoreCase = true)`.\n\nBy using `equals()` you don't have to allocate extra strings with `toLowerCase()` or `toUpperCase()` to compare strings.\n\nThe quick-fix replaces the case-insensitive comparison that uses `toLowerCase()` or `toUpperCase()` with `equals(..., ignoreCase = true)`.\n\n**Note:** May change semantics for some locales.\n\n**Example:**\n\n\n      fun main() {\n          val a = \"KoTliN\"\n          val b = \"KOTLIN\"\n          println(a.toLowerCase() == b.toLowerCase())\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun main() {\n          val a = \"KoTliN\"\n          val b = \"KOTLIN\"\n          println(a.equals(b, ignoreCase = true))\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceSubstringWithSubstringAfter",
+                "shortDescription": {
+                  "text": "'substring' call should be replaced with 'substringAfter'"
+                },
+                "fullDescription": {
+                  "text": "Reports calls like 's.substring(s.indexOf(x))' that can be replaced with 's.substringAfter(x)'. Using 's.substringAfter(x)' makes your code simpler. The quick-fix replaces the 'substring' call with 'substringAfter'. Example: 'fun foo(s: String) {\n      s.substring(s.indexOf('x'))\n  }' After the quick-fix is applied: 'fun foo(s: String) {\n      s.substringAfter('x')\n  }'",
+                  "markdown": "Reports calls like `s.substring(s.indexOf(x))` that can be replaced with `s.substringAfter(x)`.\n\nUsing `s.substringAfter(x)` makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `substringAfter`.\n\n**Example:**\n\n\n      fun foo(s: String) {\n          s.substring(s.indexOf('x'))\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(s: String) {\n          s.substringAfter('x')\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantCompanionReference",
+                "shortDescription": {
+                  "text": "Redundant 'Companion' reference"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant 'Companion' reference. Example: 'class A {\n      companion object {\n          fun create() = A()\n      }\n  }\n  fun test() {\n      val s = A.Companion.create()\n  }' After the quick-fix is applied: 'class A {\n      companion object {\n          fun create() = A()\n      }\n  }\n  fun test() {\n      val s = A.create()\n  }'",
+                  "markdown": "Reports redundant `Companion` reference.\n\n**Example:**\n\n\n      class A {\n          companion object {\n              fun create() = A()\n          }\n      }\n      fun test() {\n          val s = A.Companion.create()\n      }\n\nAfter the quick-fix is applied:\n\n\n      class A {\n          companion object {\n              fun create() = A()\n          }\n      }\n      fun test() {\n          val s = A.create()\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KDocUnresolvedReference",
+                "shortDescription": {
+                  "text": "Unresolved reference in KDoc"
+                },
+                "fullDescription": {
+                  "text": "Reports unresolved references in KDoc comments. Example: '/**\n   * [unresolvedLink]\n   */\n  fun foo() {}' To fix the problem make the link valid.",
+                  "markdown": "Reports unresolved references in KDoc comments.\n\n**Example:**\n\n\n      /**\n       * [unresolvedLink]\n       */\n      fun foo() {}\n\nTo fix the problem make the link valid."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "NestedLambdaShadowedImplicitParameter",
+                "shortDescription": {
+                  "text": "Nested lambda has shadowed implicit parameter"
+                },
+                "fullDescription": {
+                  "text": "Reports nested lambdas with shadowed implicit parameters. Example: 'fun foo(listOfLists: List<List<String>>) {\n  listOfLists.forEach {\n    it.forEach {\n      println(it)\n    }\n  }\n}' After the quick-fix is applied: 'fun foo(listOfLists: List<List<String>>) {\n  listOfLists.forEach {\n    it.forEach { it1 ->\n      println(it1)\n    }\n  }\n}'",
+                  "markdown": "Reports nested lambdas with shadowed implicit parameters.\n\n**Example:**\n\n\n    fun foo(listOfLists: List<List<String>>) {\n      listOfLists.forEach {\n        it.forEach {\n          println(it)\n        }\n      }\n    }\n\nAfter the quick-fix is applied:\n\n\n    fun foo(listOfLists: List<List<String>>) {\n      listOfLists.forEach {\n        it.forEach { it1 ->\n          println(it1)\n        }\n      }\n    }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantSamConstructor",
+                "shortDescription": {
+                  "text": "Redundant SAM constructor"
+                },
+                "fullDescription": {
+                  "text": "Reports SAM (Single Abstract Method) constructor usages which can be replaced with lambdas. Example: 'fun main() {\n      foo(Runnable { println(\"Hi!\") })\n  }\n\n  fun foo(other: Runnable) {}' After the quick-fix is applied: 'fun main() {\n      foo( { println(\"Hi!\") })\n  }\n\n  fun foo(other: Runnable) {}'",
+                  "markdown": "Reports SAM (Single Abstract Method) constructor usages which can be replaced with lambdas.\n\n**Example:**\n\n\n      fun main() {\n          foo(Runnable { println(\"Hi!\") })\n      }\n\n      fun foo(other: Runnable) {}\n\nAfter the quick-fix is applied:\n\n\n      fun main() {\n          foo( { println(\"Hi!\") })\n      }\n\n      fun foo(other: Runnable) {}\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "InconsistentCommentForJavaParameter",
+                "shortDescription": {
+                  "text": "Inconsistent comment for Java parameter"
+                },
+                "fullDescription": {
+                  "text": "Reports inconsistent parameter name for java method specified in a comment block. Examples: '// Java\n  public class JavaService {\n      public void invoke(String command) {}\n  }' '// Kotlin\n  fun main() {\n      JavaService().invoke(/* name = */ \"fix\")\n  }' The quick fix corrects parameter name in a comment block: 'fun main() {\n      JavaService().invoke(/* command = */ \"fix\")\n  }'",
+                  "markdown": "Reports inconsistent parameter name for **java** method specified in a comment block.\n\n**Examples:**\n\n\n      // Java\n      public class JavaService {\n          public void invoke(String command) {}\n      }\n\n\n      // Kotlin\n      fun main() {\n          JavaService().invoke(/* name = */ \"fix\")\n      }\n\nThe quick fix corrects parameter name in a comment block:\n\n\n      fun main() {\n          JavaService().invoke(/* command = */ \"fix\")\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Naming conventions",
+                      "index": 48,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RemoveRedundantCallsOfConversionMethods",
+                "shortDescription": {
+                  "text": "Redundant call of conversion method"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant calls to conversion methods (for example, 'toString()' on a 'String' or 'toDouble()' on a 'Double'). Use the 'Remove redundant calls of the conversion method' quick-fix to clean up the code.",
+                  "markdown": "Reports redundant calls to conversion methods (for example, `toString()` on a `String` or `toDouble()` on a `Double`).\n\nUse the 'Remove redundant calls of the conversion method' quick-fix to clean up the code."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KotlinThrowableNotThrown",
+                "shortDescription": {
+                  "text": "Throwable not thrown"
+                },
+                "fullDescription": {
+                  "text": "Reports instantiations of 'Throwable' or its subclasses, when the created 'Throwable' is never actually thrown. The reported code indicates mistakes that are hard to catch in tests. Also, this inspection reports method calls that return instances of 'Throwable' or its subclasses, when the resulting 'Throwable' instance is not thrown. Example: 'fun check(condition: Boolean) {\n      if (!condition) /* throw is missing here */ IllegalArgumentException(\"condition is not met\");\n  }\n\n  fun createError() = RuntimeException()\n\n  fun foo() {\n      /* throw is missing here */ createError()\n  }'",
+                  "markdown": "Reports instantiations of `Throwable` or its subclasses, when the created `Throwable` is never actually thrown.\n\nThe reported code indicates mistakes that are hard to catch in tests.\n\n\nAlso, this inspection reports method calls that return instances of `Throwable` or its subclasses,\nwhen the resulting `Throwable` instance is not thrown.\n\n**Example:**\n\n\n      fun check(condition: Boolean) {\n          if (!condition) /* throw is missing here */ IllegalArgumentException(\"condition is not met\");\n      }\n\n      fun createError() = RuntimeException()\n\n      fun foo() {\n          /* throw is missing here */ createError()\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KotlinSealedInheritorsInJava",
+                "shortDescription": {
+                  "text": "Inheritance of Kotlin sealed interface/class from Java"
+                },
+                "fullDescription": {
+                  "text": "Reports attempts to inherit from Kotlin sealed interfaces or classes in Java code. Example: '// Kotlin file: MathExpression.kt\n\nsealed class MathExpression\n\ndata class Const(val number: Double) : MathExpression()\ndata class Sum(val e1: MathExpression, val e2: MathExpression) : MathExpression()' '// Java file: NotANumber.java\n\npublic class NotANumber extends MathExpression {\n}'",
+                  "markdown": "Reports attempts to inherit from Kotlin sealed interfaces or classes in Java code.\n\n**Example:**\n\n\n    // Kotlin file: MathExpression.kt\n\n    sealed class MathExpression\n\n    data class Const(val number: Double) : MathExpression()\n    data class Sum(val e1: MathExpression, val e2: MathExpression) : MathExpression()\n\n\n    // Java file: NotANumber.java\n\n    public class NotANumber extends MathExpression {\n    }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "error",
+                  "parameters": {
+                    "ideaSeverity": "ERROR",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Java interop issues",
+                      "index": 55,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SimplifyNegatedBinaryExpression",
+                "shortDescription": {
+                  "text": "Negated boolean expression can be simplified"
+                },
+                "fullDescription": {
+                  "text": "Reports negated binary expressions that can be simplified. The quick-fix simplifies the binary expression. Example: 'fun test(n: Int) {\n      !(0 == 1)\n  }' After the quick-fix is applied: 'fun test(n: Int) {\n      0 != 1\n  }'",
+                  "markdown": "Reports negated binary expressions that can be simplified.\n\nThe quick-fix simplifies the binary expression.\n\n**Example:**\n\n\n      fun test(n: Int) {\n          !(0 == 1)\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(n: Int) {\n          0 != 1\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "MemberVisibilityCanBePrivate",
+                "shortDescription": {
+                  "text": "Class member can have 'private' visibility"
+                },
+                "fullDescription": {
+                  "text": "Reports declarations that can be made 'private' to follow the encapsulation principle. Example: 'class Service(val url: String) {\n    fun connect(): URLConnection = URL(url).openConnection()\n}' After the quick-fix is applied (considering there are no usages of 'url' outside of 'Service' class): 'class Service(private val url: String) {\n    fun connect(): URLConnection = URL(url).openConnection()\n}'",
+                  "markdown": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n    class Service(val url: String) {\n        fun connect(): URLConnection = URL(url).openConnection()\n    }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n    class Service(private val url: String) {\n        fun connect(): URLConnection = URL(url).openConnection()\n    }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SelfAssignment",
+                "shortDescription": {
+                  "text": "Redundant assignment"
+                },
+                "fullDescription": {
+                  "text": "Reports assignments of a variable to itself. The quick-fix removes the redundant assignment. Example: 'fun test() {\n      var bar = 1\n      bar = bar\n  }' After the quick-fix is applied: 'fun test() {\n      var bar = 1\n  }'",
+                  "markdown": "Reports assignments of a variable to itself.\n\nThe quick-fix removes the redundant assignment.\n\n**Example:**\n\n\n      fun test() {\n          var bar = 1\n          bar = bar\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test() {\n          var bar = 1\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RecursiveEqualsCall",
+                "shortDescription": {
+                  "text": "Recursive equals call"
+                },
+                "fullDescription": {
+                  "text": "Reports recursive 'equals'('==') calls. In Kotlin, '==' compares object values by calling 'equals' method under the hood. '===', on the other hand, compares objects by reference. '===' is commonly used in 'equals' method implementation. But '===' may be mistakenly mixed up with '==' leading to infinite recursion. Example: 'class X {\n      override fun equals(other: Any?): Boolean {\n          if (this == other) return true\n          return false\n      }\n  }' After the quick-fix is applied: 'class X {\n      override fun equals(other: Any?): Boolean {\n          if (this === other) return true\n          return false\n      }\n  }'",
+                  "markdown": "Reports recursive `equals`(`==`) calls.\n\n\nIn Kotlin, `==` compares object values by calling `equals` method under the hood.\n`===`, on the other hand, compares objects by reference.\n\n\n`===` is commonly used in `equals` method implementation.\nBut `===` may be mistakenly mixed up with `==` leading to infinite recursion.\n\n**Example:**\n\n\n      class X {\n          override fun equals(other: Any?): Boolean {\n              if (this == other) return true\n              return false\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      class X {\n          override fun equals(other: Any?): Boolean {\n              if (this === other) return true\n              return false\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ExplicitThis",
+                "shortDescription": {
+                  "text": "Redundant explicit 'this'"
+                },
+                "fullDescription": {
+                  "text": "Reports an explicit 'this' when it can be omitted. Example: 'class C {\n      private val i = 1\n      fun f() = this.i\n  }' The quick-fix removes the redundant 'this': 'class C {\n      private val i = 1\n      fun f() = i\n  }'",
+                  "markdown": "Reports an explicit `this` when it can be omitted.\n\n**Example:**\n\n\n      class C {\n          private val i = 1\n          fun f() = this.i\n      }\n\nThe quick-fix removes the redundant `this`:\n\n\n      class C {\n          private val i = 1\n          fun f() = i\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "NullChecksToSafeCall",
+                "shortDescription": {
+                  "text": "Null-checks can be replaced with safe-calls"
+                },
+                "fullDescription": {
+                  "text": "Reports chained null-checks that can be replaced with safe-calls. Example: 'fun test(my: My?) {\n      if (my != null && my.foo() != null) {}\n  }' After the quick-fix is applied: 'fun test(my: My?) {\n      if (my?.foo() != null) {}\n  }'",
+                  "markdown": "Reports chained null-checks that can be replaced with safe-calls.\n\n**Example:**\n\n\n      fun test(my: My?) {\n          if (my != null && my.foo() != null) {}\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(my: My?) {\n          if (my?.foo() != null) {}\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UnusedMainParameter",
+                "shortDescription": {
+                  "text": "Main parameter is not necessary"
+                },
+                "fullDescription": {
+                  "text": "Reports 'main' function with an unused single parameter.",
+                  "markdown": "Reports `main` function with an unused single parameter."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "FunctionWithLambdaExpressionBody",
+                "shortDescription": {
+                  "text": "Function with '= { ... }' and inferred return type"
+                },
+                "fullDescription": {
+                  "text": "Reports functions with '= { ... }' and inferred return type. Example: 'fun sum(a: Int, b: Int) = { a + b } // The return type of this function is '() -> Int'.' The quick fix removes braces: 'fun sum(a: Int, b: Int) = a + b'",
+                  "markdown": "Reports functions with `= { ... }` and inferred return type.\n\n**Example:**\n\n\n      fun sum(a: Int, b: Int) = { a + b } // The return type of this function is '() -> Int'.\n\nThe quick fix removes braces:\n\n\n      fun sum(a: Int, b: Int) = a + b\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ArrayInDataClass",
+                "shortDescription": {
+                  "text": "Array property in data class"
+                },
+                "fullDescription": {
+                  "text": "Reports properties with an 'Array' type in a 'data' class without overridden 'equals()' or 'hashCode()'. Array parameters are compared by reference equality, which is likely an unexpected behavior. It is strongly recommended to override 'equals()' and 'hashCode()' in such cases. Example: 'data class Text(val lines: Array<String>)' A quick-fix generates missing 'equals()' and 'hashCode()' implementations: 'data class Text(val lines: Array<String>) {\n      override fun equals(other: Any?): Boolean {\n          if (this === other) return true\n          if (javaClass != other?.javaClass) return false\n\n          other as Text\n\n          if (!lines.contentEquals(other.lines)) return false\n\n          return true\n      }\n\n      override fun hashCode(): Int {\n          return lines.contentHashCode()\n      }\n  }'",
+                  "markdown": "Reports properties with an `Array` type in a `data` class without overridden `equals()` or `hashCode()`.\n\n\nArray parameters are compared by reference equality, which is likely an unexpected behavior.\nIt is strongly recommended to override `equals()` and `hashCode()` in such cases.\n\n**Example:**\n\n\n      data class Text(val lines: Array<String>)\n\nA quick-fix generates missing `equals()` and `hashCode()` implementations:\n\n\n      data class Text(val lines: Array<String>) {\n          override fun equals(other: Any?): Boolean {\n              if (this === other) return true\n              if (javaClass != other?.javaClass) return false\n\n              other as Text\n\n              if (!lines.contentEquals(other.lines)) return false\n\n              return true\n          }\n\n          override fun hashCode(): Int {\n              return lines.contentHashCode()\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ConvertTwoComparisonsToRangeCheck",
+                "shortDescription": {
+                  "text": "Two comparisons should be converted to a range check"
+                },
+                "fullDescription": {
+                  "text": "Reports two consecutive comparisons that can be converted to a range check. Checking against a range makes code simpler by removing test subject duplication. Example: 'fun checkMonth(month: Int): Boolean {\n      return month >= 1 && month <= 12\n  }' A quick-fix replaces the comparison-based check with a range one: 'fun checkMonth(month: Int): Boolean {\n      return month in 1..12\n  }'",
+                  "markdown": "Reports two consecutive comparisons that can be converted to a range check.\n\nChecking against a range makes code simpler by removing test subject duplication.\n\n**Example:**\n\n\n      fun checkMonth(month: Int): Boolean {\n          return month >= 1 && month <= 12\n      }\n\nA quick-fix replaces the comparison-based check with a range one:\n\n\n      fun checkMonth(month: Int): Boolean {\n          return month in 1..12\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "LocalVariableName",
+                "shortDescription": {
+                  "text": "Local variable naming convention"
+                },
+                "fullDescription": {
+                  "text": "Reports local variables that do not follow the naming conventions. You can specify the required pattern in the inspection options. Recommended naming conventions: it has to start with a lowercase letter, use camel case and no underscores. Example: 'fun fibonacciNumber(index: Int): Long = when(index) {\n      0 -> 0\n      else -> {\n          // does not follow naming conventions: contains underscore symbol (`_`)\n          var number_one: Long = 0\n          // does not follow naming conventions: starts with an uppercase letter\n          var NUMBER_TWO: Long = 1\n          // follow naming conventions: starts with a lowercase letter, use camel case and no underscores.\n          var numberThree: Long = number_one + NUMBER_TWO\n\n          for(currentIndex in 2..index) {\n              numberThree = number_one + NUMBER_TWO\n              number_one = NUMBER_TWO\n              NUMBER_TWO = numberThree\n          }\n          numberThree\n      }\n  }'",
+                  "markdown": "Reports local variables that do not follow the naming conventions.\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#function-names): it has to start with a lowercase letter, use camel case and no underscores.\n\n**Example:**\n\n\n      fun fibonacciNumber(index: Int): Long = when(index) {\n          0 -> 0\n          else -> {\n              // does not follow naming conventions: contains underscore symbol (`_`)\n              var number_one: Long = 0\n              // does not follow naming conventions: starts with an uppercase letter\n              var NUMBER_TWO: Long = 1\n              // follow naming conventions: starts with a lowercase letter, use camel case and no underscores.\n              var numberThree: Long = number_one + NUMBER_TWO\n\n              for(currentIndex in 2..index) {\n                  numberThree = number_one + NUMBER_TWO\n                  number_one = NUMBER_TWO\n                  NUMBER_TWO = numberThree\n              }\n              numberThree\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Naming conventions",
+                      "index": 48,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RemoveRedundantQualifierName",
+                "shortDescription": {
+                  "text": "Redundant qualifier name"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant qualifiers (or their parts) on class names, functions, and properties. A fully qualified name is an unambiguous identifier that specifies which object, function, or property a call refers to. In the contexts where the name can be shortened, the inspection informs on the opportunity and the associated 'Remove redundant qualifier name' quick-fix allows amending the code. Examples: 'package my.simple.name\n  import kotlin.Int.Companion.MAX_VALUE\n\n  class Foo\n\n  fun main() {\n      val a = my.simple.name.Foo()    // 'Foo' resides in the declared 'my.simple.name' package, qualifier is redundant\n      val b = kotlin.Int.MAX_VALUE    // Can be replaced with 'MAX_VALUE' since it's imported\n      val c = kotlin.Double.MAX_VALUE // Can be replaced with 'Double.MAX_VALUE' since built-in types are imported automatically\n  }' After the quick-fix is applied: 'package my.simple.name\n  import kotlin.Int.Companion.MAX_VALUE\n\n  class Foo\n\n  fun main() {\n      val a = Foo()\n      val b = MAX_VALUE\n      val c = Double.MAX_VALUE\n  }'",
+                  "markdown": "Reports redundant qualifiers (or their parts) on class names, functions, and properties.\n\n\nA fully qualified name is an unambiguous identifier that specifies which object, function, or property a call refers to.\nIn the contexts where the name can be shortened, the inspection informs on the opportunity and the associated\n'Remove redundant qualifier name' quick-fix allows amending the code.\n\n**Examples:**\n\n\n      package my.simple.name\n      import kotlin.Int.Companion.MAX_VALUE\n\n      class Foo\n\n      fun main() {\n          val a = my.simple.name.Foo()    // 'Foo' resides in the declared 'my.simple.name' package, qualifier is redundant\n          val b = kotlin.Int.MAX_VALUE    // Can be replaced with 'MAX_VALUE' since it's imported\n          val c = kotlin.Double.MAX_VALUE // Can be replaced with 'Double.MAX_VALUE' since built-in types are imported automatically\n      }\n\nAfter the quick-fix is applied:\n\n\n      package my.simple.name\n      import kotlin.Int.Companion.MAX_VALUE\n\n      class Foo\n\n      fun main() {\n          val a = Foo()\n          val b = MAX_VALUE\n          val c = Double.MAX_VALUE\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RemoveCurlyBracesFromTemplate",
+                "shortDescription": {
+                  "text": "Redundant curly braces in string template"
+                },
+                "fullDescription": {
+                  "text": "Reports usages of curly braces in string templates around simple identifiers. Use the 'Remove curly braces' quick-fix to remove the redundant braces. Examples: 'fun redundant() {\n     val x = 4\n     val y = \"${x}\" // <== redundant\n  }\n\n  fun correctUsage() {\n      val x = \"x\"\n      val y = \"${x.length}\" // <== Ok\n  }' After the quick-fix is applied: 'fun redundant() {\n     val x = 4\n     val y = \"$x\"\n  }\n\n  fun correctUsage() {\n      val x = \"x\" <== Updated\n      val y = \"${x.length}\"\n  }'",
+                  "markdown": "Reports usages of curly braces in string templates around simple identifiers.\n\nUse the 'Remove curly braces' quick-fix to remove the redundant braces.\n\n**Examples:**\n\n\n      fun redundant() {\n         val x = 4\n         val y = \"${x}\" // <== redundant\n      }\n\n      fun correctUsage() {\n          val x = \"x\"\n          val y = \"${x.length}\" // <== Ok\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun redundant() {\n         val x = 4\n         val y = \"$x\"\n      }\n\n      fun correctUsage() {\n          val x = \"x\" <== Updated\n          val y = \"${x.length}\"\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceSubstringWithIndexingOperation",
+                "shortDescription": {
+                  "text": "'substring' call should be replaced with indexing operator"
+                },
+                "fullDescription": {
+                  "text": "Reports calls like '\"abc\".substring(0, 1)' that can be replaced with '\"abc\"[0]'. Obtaining the element by index makes your code simpler. The quick-fix replaces the 'substring' call with the indexing operator. Example: 'fun foo() {\n      \"abc\".substring(0, 1)\n  }' After the quick-fix is applied: 'fun foo() {\n      \"abc\"[0]\n  }'",
+                  "markdown": "Reports calls like `\"abc\".substring(0, 1)` that can be replaced with `\"abc\"[0]`.\n\nObtaining the element by index makes your code simpler.\n\nThe quick-fix replaces the `substring` call with the indexing operator.\n\n**Example:**\n\n\n      fun foo() {\n          \"abc\".substring(0, 1)\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo() {\n          \"abc\"[0]\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "MoveLambdaOutsideParentheses",
+                "shortDescription": {
+                  "text": "Lambda argument inside parentheses"
+                },
+                "fullDescription": {
+                  "text": "Reports lambda expressions in parentheses which can be moved outside. Example: 'fun square(a: Int, b: (Int) -> Int) {\n  b(a * a)\n}\n\nfun foo() {\n  square(2, { it })\n}' After the quick-fix is applied: 'fun foo() {\n  square(2){ it }\n}'",
+                  "markdown": "Reports lambda expressions in parentheses which can be moved outside.\n\n**Example:**\n\n\n    fun square(a: Int, b: (Int) -> Int) {\n      b(a * a)\n    }\n\n    fun foo() {\n      square(2, { it })\n    }\n\nAfter the quick-fix is applied:\n\n\n    fun foo() {\n      square(2){ it }\n    }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "OverridingDeprecatedMember",
+                "shortDescription": {
+                  "text": "Overriding deprecated member"
+                },
+                "fullDescription": {
+                  "text": "Reports declarations that inherit from deprecated members. Example: 'open class BaseService {\n  @Deprecated(\"obsolete\", replaceWith = ReplaceWith(\"connection\"))\n  open fun connect() {}\n\n  open fun connection() {}\n} \n\nclass SomeService: BaseService() {\n  override fun connect() {\n    super.connect()\n  }\n}'",
+                  "markdown": "Reports declarations that inherit from deprecated members.\n\n**Example:**\n\n\n    open class BaseService {\n      @Deprecated(\"obsolete\", replaceWith = ReplaceWith(\"connection\"))\n      open fun connect() {}\n\n      open fun connection() {}\n    } \n\n    class SomeService: BaseService() {\n      override fun connect() {\n        super.connect()\n      }\n    }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Other problems",
+                      "index": 145,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ProhibitTypeParametersForLocalVariablesMigration",
+                "shortDescription": {
+                  "text": "Local variable with type parameters"
+                },
+                "fullDescription": {
+                  "text": "Reports local variables with type parameters. A type parameter for a local variable doesn't make sense because it can't be specialized. Example: 'fun main() {\n      val <T> x = \"\"\n  }' After the quick-fix is applied: 'fun main() {\n      val x = \"\"\n  }' This inspection only reports if the Kotlin language level of the project or module is 1.4 or higher.",
+                  "markdown": "Reports local variables with type parameters.\n\nA type parameter for a local variable doesn't make sense because it can't be specialized.\n\n**Example:**\n\n\n      fun main() {\n          val <T> x = \"\"\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun main() {\n          val x = \"\"\n      }\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "error",
+                  "parameters": {
+                    "ideaSeverity": "ERROR",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Migration",
+                      "index": 15,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "TestFunctionName",
+                "shortDescription": {
+                  "text": "Test function naming convention"
+                },
+                "fullDescription": {
+                  "text": "Reports test function names that do not follow the recommended naming conventions.",
+                  "markdown": "Reports test function names that do not follow the [recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#names-for-test-methods)."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Naming conventions",
+                      "index": 48,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RecursivePropertyAccessor",
+                "shortDescription": {
+                  "text": "Recursive property accessor"
+                },
+                "fullDescription": {
+                  "text": "Reports recursive property accessor calls which can end up with a 'StackOverflowError'. Such calls are usually confused with backing field access. Example: 'var counter: Int = 0\n      set(value) {\n          counter = if (value < 0) 0 else value\n      }' After the quick-fix is applied: 'var counter: Int = 0\n      set(value) {\n          field = if (value < 0) 0 else value\n      }'",
+                  "markdown": "Reports recursive property accessor calls which can end up with a `StackOverflowError`.\nSuch calls are usually confused with backing field access.\n\n**Example:**\n\n\n      var counter: Int = 0\n          set(value) {\n              counter = if (value < 0) 0 else value\n          }\n\nAfter the quick-fix is applied:\n\n\n      var counter: Int = 0\n          set(value) {\n              field = if (value < 0) 0 else value\n          }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantUnitExpression",
+                "shortDescription": {
+                  "text": "Redundant 'Unit'"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant 'Unit' expressions. 'Unit' in Kotlin can be used as the return type of functions that do not return anything meaningful. The 'Unit' type has only one possible value, which is the 'Unit' object. Examples: 'fun redundantA(): Unit {\n      return Unit // redundant, 'Unit' is returned by default and matches the expected return type\n  }\n\n  fun requiredA(condition: Boolean): Any {\n      if (condition) return \"hello\"\n      return Unit // explicit 'Unit' is required since the expected type is 'Any'\n  }\n\n  fun redundantB(condition: Boolean): Any = if (condition) {\n      fun ancillary(): Int = 1\n      println(\"${ancillary()}\")\n      Unit // redundant since the last expression is already of type 'Unit'\n  } else {\n      println(\"else\")\n  }\n\n  fun requiredB(condition: Boolean): Any = if (condition) {\n      1024\n      Unit // required, otherwise '1024' (Int) would be the return value\n  } else {\n      println(\"else\")\n  }'",
+                  "markdown": "Reports redundant `Unit` expressions.\n\n\n`Unit` in Kotlin can be used as the return type of functions that do not return anything meaningful.\nThe `Unit` type has only one possible value, which is the `Unit` object.\n\n**Examples:**\n\n\n      fun redundantA(): Unit {\n          return Unit // redundant, 'Unit' is returned by default and matches the expected return type\n      }\n\n      fun requiredA(condition: Boolean): Any {\n          if (condition) return \"hello\"\n          return Unit // explicit 'Unit' is required since the expected type is 'Any'\n      }\n\n      fun redundantB(condition: Boolean): Any = if (condition) {\n          fun ancillary(): Int = 1\n          println(\"${ancillary()}\")\n          Unit // redundant since the last expression is already of type 'Unit'\n      } else {\n          println(\"else\")\n      }\n\n      fun requiredB(condition: Boolean): Any = if (condition) {\n          1024\n          Unit // required, otherwise '1024' (Int) would be the return value\n      } else {\n          println(\"else\")\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "PlatformExtensionReceiverOfInline",
+                "shortDescription": {
+                  "text": "'inline fun' with nullable receiver until Kotlin 1.2"
+                },
+                "fullDescription": {
+                  "text": "Reports potentially unsafe calls of inline functions with flexible nullable (platform type with unknown nullability) extension receivers. Before Kotlin 1.2, calls of 'inline fun' with flexible nullable extension receiver (a platform type with an unknown nullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode (see KT-12899). It's recommended to add an explicit '!!' you want an exception to be thrown, or consider changing the function's receiver type to nullable if it should work without exceptions. Example: 'inline fun String.removePrefix(prefix: String): String {\n      return this.substring(prefix.length)\n  }\n\n  fun main() {\n      // `System.getProperty` returns not denotable `String!` type\n      val property = System.getProperty(\"user.dir\")\n      println(property.removePrefix(\"/home\"))\n  }' After the quick-fix is applied: 'inline fun String.removePrefix(prefix: String): String {\n      return this.substring(prefix.length)\n  }\n\n  fun main() {\n      // `System.getProperty` returns not denotable `String!` type\n      val property = System.getProperty(\"user.dir\")\n      println(property!!.removePrefix(\"/home\"))\n  }' This inspection only reports if the Kotlin language level of the project or module is lower than 1.2.",
+                  "markdown": "Reports potentially unsafe calls of inline functions with flexible nullable (platform type with unknown nullability) extension receivers.\n\n\nBefore Kotlin 1.2, calls of `inline fun` with flexible nullable extension receiver (a platform type with an unknown\nnullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode\n(see [KT-12899](https://youtrack.jetbrains.com/issue/KT-12899)).\n\n\nIt's recommended to add an explicit `!!` you want an exception to be thrown,\nor consider changing the function's receiver type to nullable if it should work without exceptions.\n\n**Example:**\n\n\n      inline fun String.removePrefix(prefix: String): String {\n          return this.substring(prefix.length)\n      }\n\n      fun main() {\n          // `System.getProperty` returns not denotable `String!` type\n          val property = System.getProperty(\"user.dir\")\n          println(property.removePrefix(\"/home\"))\n      }\n\nAfter the quick-fix is applied:\n\n\n      inline fun String.removePrefix(prefix: String): String {\n          return this.substring(prefix.length)\n      }\n\n      fun main() {\n          // `System.getProperty` returns not denotable `String!` type\n          val property = System.getProperty(\"user.dir\")\n          println(property!!.removePrefix(\"/home\"))\n      }\n\nThis inspection only reports if the Kotlin language level of the project or module is lower than 1.2."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Java interop issues",
+                      "index": 55,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SuspiciousEqualsCombination",
+                "shortDescription": {
+                  "text": "Suspicious combination of == and ==="
+                },
+                "fullDescription": {
+                  "text": "Reports '==' and '===' comparisons that are both used on the same variable within a single expression. Due to similarities '==' and '===' could be mixed without notice, and it takes a close look to check that '==' used instead of '===' Example: 'if (type === FIELD || type == METHOD || type == ANNOTATION_METHOD || // Note that \"==\" is used incorrectly\n      type === LAMBDA_EXPRESSION) return'",
+                  "markdown": "Reports `==` and `===` comparisons that are both used on the same variable within a single expression.\n\nDue to similarities `==` and `===` could be mixed without notice, and\nit takes a close look to check that `==` used instead of `===`\n\nExample:\n\n\n      if (type === FIELD || type == METHOD || type == ANNOTATION_METHOD || // Note that \"==\" is used incorrectly\n          type === LAMBDA_EXPRESSION) return\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UnusedDataClassCopyResult",
+                "shortDescription": {
+                  "text": "Unused result of data class copy"
+                },
+                "fullDescription": {
+                  "text": "Reports calls to data class 'copy' function without using its result.",
+                  "markdown": "Reports calls to data class `copy` function without using its result."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantElseInIf",
+                "shortDescription": {
+                  "text": "Redundant 'else' in 'if'"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant 'else' in 'if' with 'return' Example: 'fun foo(arg: Boolean): Int {\n      if (arg) return 0\n      else { // This else is redundant, code in braces could be just shifted left\n          someCode()\n      }\n  }' After the quick-fix is applied: 'fun foo(arg: Boolean): Int {\n      if (arg) return 0\n      someCode()\n  }'",
+                  "markdown": "Reports redundant `else` in `if` with `return`\n\n**Example:**\n\n\n      fun foo(arg: Boolean): Int {\n          if (arg) return 0\n          else { // This else is redundant, code in braces could be just shifted left\n              someCode()\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(arg: Boolean): Int {\n          if (arg) return 0\n          someCode()\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplacePutWithAssignment",
+                "shortDescription": {
+                  "text": "'map.put()' can be converted to assignment"
+                },
+                "fullDescription": {
+                  "text": "Reports 'map.put' function calls that can be replaced with indexing operator ('[]'). Using syntactic sugar makes your code simpler. The quick-fix replaces 'put' call with the assignment. Example: 'fun foo(map: MutableMap<Int, String>) {\n      map.put(42, \"foo\")\n  }' After the quick-fix is applied: 'fun foo(map: MutableMap<Int, String>) {\n      map[42] = \"foo\"\n  }'",
+                  "markdown": "Reports `map.put` function calls that can be replaced with indexing operator (`[]`).\n\nUsing syntactic sugar makes your code simpler.\n\nThe quick-fix replaces `put` call with the assignment.\n\n**Example:**\n\n\n      fun foo(map: MutableMap<Int, String>) {\n          map.put(42, \"foo\")\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(map: MutableMap<Int, String>) {\n          map[42] = \"foo\"\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KotlinDoubleNegation",
+                "shortDescription": {
+                  "text": "Redundant double negation"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant double negations. Example: 'val truth = !!true'",
+                  "markdown": "Reports redundant double negations.\n\n**Example:**\n\n      val truth = !!true\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "FunctionName",
+                "shortDescription": {
+                  "text": "Function naming convention"
+                },
+                "fullDescription": {
+                  "text": "Reports function names that do not follow the recommended naming conventions. Example: 'fun Foo() {}' To fix the problem change the name of the function to match the recommended naming conventions.",
+                  "markdown": "Reports function names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n      fun Foo() {}\n\nTo fix the problem change the name of the function to match the recommended naming conventions."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Naming conventions",
+                      "index": 48,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "DifferentKotlinMavenVersion",
+                "shortDescription": {
+                  "text": "Maven and IDE plugins versions are different"
+                },
+                "fullDescription": {
+                  "text": "Reports the Maven plugin version of the Kotlin compiler that is different from the one that is used in the IDE plugin. This inconsistency may lead to different error reporting behavior in the IDE and the compiler",
+                  "markdown": "Reports the Maven plugin version of the Kotlin compiler that is different from the one that is used in the IDE plugin.\n\nThis inconsistency may lead to different error reporting behavior in the IDE and the compiler"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin",
+                      "index": 2,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantUnitReturnType",
+                "shortDescription": {
+                  "text": "Redundant 'Unit' return type"
+                },
+                "fullDescription": {
+                  "text": "Reports a redundant 'Unit' return type which can be omitted.",
+                  "markdown": "Reports a redundant `Unit` return type which can be omitted."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceRangeToWithUntil",
+                "shortDescription": {
+                  "text": "'rangeTo' or the '..' call should be replaced with 'until'"
+                },
+                "fullDescription": {
+                  "text": "Reports calls to 'rangeTo' or the '..' operator instead of calls to 'until'. Using corresponding functions makes your code simpler. The quick-fix replaces 'rangeTo' or the '..' call with 'until'. Example: 'fun foo(a: Int) {\n      for (i in 0..a - 1) {\n\n      }\n  }' After the quick-fix is applied: 'fun foo(a: Int) {\n      for (i in 0 until a) {\n\n      }\n  }'",
+                  "markdown": "Reports calls to `rangeTo` or the `..` operator instead of calls to `until`.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces `rangeTo` or the `..` call with `until`.\n\n**Example:**\n\n\n      fun foo(a: Int) {\n          for (i in 0..a - 1) {\n\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(a: Int) {\n          for (i in 0 until a) {\n\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UnusedEquals",
+                "shortDescription": {
+                  "text": "Unused equals expression"
+                },
+                "fullDescription": {
+                  "text": "Reports unused 'equals'('==') expressions.",
+                  "markdown": "Reports unused `equals`(`==`) expressions."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UnclearPrecedenceOfBinaryExpression",
+                "shortDescription": {
+                  "text": "Multiple operators with different precedence"
+                },
+                "fullDescription": {
+                  "text": "Reports binary expressions that consist of different operators without parentheses. Such expressions can be less readable due to different precedence rules of operators. Example:   fun foo(b: Boolean?, i: Int?) {\n      val x = b ?: i == null // evaluated as `(b ?: i) == null`\n      val y = i ?: 0 + 1 // evaluated as `i ?: (0 + 1)`\n  }",
+                  "markdown": "Reports binary expressions that consist of different operators without parentheses.\n\nSuch expressions can be less readable due to different [precedence rules](https://kotlinlang.org/docs/reference/grammar.html#expressions) of operators.\n\nExample:\n\n```\n  fun foo(b: Boolean?, i: Int?) {\n      val x = b ?: i == null // evaluated as `(b ?: i) == null`\n      val y = i ?: 0 + 1 // evaluated as `i ?: (0 + 1)`\n  }\n```"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UnusedLambdaExpressionBody",
+                "shortDescription": {
+                  "text": "Unused return value of a function with lambda expression body"
+                },
+                "fullDescription": {
+                  "text": "Reports calls with an unused return value when the called function returns a lambda from an expression body. If there is '=' between function header and body block, code from the function will not be evaluated which can lead to incorrect behavior. Remove = token from function declaration can be used to amend the code automatically. Example: 'fun printHello() = { println(\"Hello\") }\n\n  fun main() {\n      printHello() // This function doesn't print anything\n  }' After the quick-fix is applied: 'fun printHello() { println(\"Hello\") }\n\n  fun main() {\n      printHello()\n  }'",
+                  "markdown": "Reports calls with an unused return value when the called function returns a lambda from an expression body.\n\n\nIf there is `=` between function header and body block,\ncode from the function will not be evaluated which can lead to incorrect behavior.\n\n**Remove = token from function declaration** can be used to amend the code automatically.\n\nExample:\n\n\n      fun printHello() = { println(\"Hello\") }\n\n      fun main() {\n          printHello() // This function doesn't print anything\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun printHello() { println(\"Hello\") }\n\n      fun main() {\n          printHello()\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ConvertLambdaToReference",
+                "shortDescription": {
+                  "text": "Can be replaced with function reference"
+                },
+                "fullDescription": {
+                  "text": "Reports function literal expressions that can be replaced with function references. Replacing lambdas with function references often makes code look more concise and understandable. Example: 'fun Int.isEven() = this % 2 == 0\n\n  fun example() {\n      val numbers = listOf(1, 2, 4, 7, 9, 10)\n      val evenNumbers = numbers.filter { it.isEven() }\n  }' After the quick-fix is applied: 'fun Int.isEven() = this % 2 == 0\n\n  fun example() {\n      val numbers = listOf(1, 2, 4, 7, 9, 10)\n      val evenNumbers = numbers.filter(Int::isEven)\n  }'",
+                  "markdown": "Reports function literal expressions that can be replaced with function references.\n\nReplacing lambdas with function references often makes code look more concise and understandable.\n\n**Example:**\n\n\n      fun Int.isEven() = this % 2 == 0\n\n      fun example() {\n          val numbers = listOf(1, 2, 4, 7, 9, 10)\n          val evenNumbers = numbers.filter { it.isEven() }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun Int.isEven() = this % 2 == 0\n\n      fun example() {\n          val numbers = listOf(1, 2, 4, 7, 9, 10)\n          val evenNumbers = numbers.filter(Int::isEven)\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantSetter",
+                "shortDescription": {
+                  "text": "Redundant property setter"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant property setters. Setter is considered to be redundant in one of the following cases: Setter has no body. Accessor visibility isn't changed, declaration isn't 'external' and has no annotations. 'var myPropWithRedundantSetter: Int = 0\n      set // redundant\n\n  var myPropA: Int = 0\n      private set // OK - property visibility is changed to private\n\n  var myPropB: Int = 0\n      external set // OK - implemented not in Kotlin (external)\n\n  var myPropC: Int = 0\n      @Inject set // OK - accessor is annotated' Setter body is a block with a single statement assigning the parameter to the backing field. 'var prop: Int = 0\n      set(value) { // redundant\n          field = value\n      }'",
+                  "markdown": "Reports redundant property setters.\n\n\nSetter is considered to be redundant in one of the following cases:\n\n1. Setter has no body. Accessor visibility isn't changed, declaration isn't `external` and has no annotations.\n\n\n         var myPropWithRedundantSetter: Int = 0\n             set // redundant\n\n         var myPropA: Int = 0\n             private set // OK - property visibility is changed to private\n\n         var myPropB: Int = 0\n             external set // OK - implemented not in Kotlin (external)\n\n         var myPropC: Int = 0\n             @Inject set // OK - accessor is annotated\n               \n2. Setter body is a block with a single statement assigning the parameter to the backing field.\n\n\n         var prop: Int = 0\n             set(value) { // redundant\n                 field = value\n             }\n              \n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "CanSealedSubClassBeObject",
+                "shortDescription": {
+                  "text": "Sealed sub-class without state and overridden equals"
+                },
+                "fullDescription": {
+                  "text": "Reports direct inheritors of 'sealed' classes that have no state and overridden 'equals()' method. It's highly recommended to override 'equals()' to provide comparison stability, or convert the 'class' to an 'object' to reach the same effect. Example: 'sealed class Receiver {\n      class Everyone : Receiver()\n      class User(val id: Int) : Receiver()\n  }' A quick-fix converts a 'class' into an 'object': 'sealed class Receiver {\n      object Everyone : Receiver()\n      class User(val id: Int) : Receiver()\n  }'",
+                  "markdown": "Reports direct inheritors of `sealed` classes that have no state and overridden `equals()` method.\n\nIt's highly recommended to override `equals()` to provide comparison stability, or convert the `class` to an `object` to reach the same effect.\n\n**Example:**\n\n\n      sealed class Receiver {\n          class Everyone : Receiver()\n          class User(val id: Int) : Receiver()\n      }\n\nA quick-fix converts a `class` into an `object`:\n\n\n      sealed class Receiver {\n          object Everyone : Receiver()\n          class User(val id: Int) : Receiver()\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "PropertyName",
+                "shortDescription": {
+                  "text": "Property naming convention"
+                },
+                "fullDescription": {
+                  "text": "Reports property names that do not follow the recommended naming conventions. Consistent naming allows for easier code reading and understanding. According to the Kotlin official style guide, property names should start with a lowercase letter and use camel case. It is possible to introduce other naming rules by changing the \"Pattern\" regular expression. Example: 'val My_Cool_Property = \"\"' A quick-fix renames the class according to the Kotlin naming conventions: 'val myCoolProperty = \"\"'",
+                  "markdown": "Reports property names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#naming-rules),\nproperty names should start with a lowercase letter and use camel case.\n\nIt is possible to introduce other naming rules by changing the \"Pattern\" regular expression.\n\n**Example:**\n\n\n      val My_Cool_Property = \"\"\n\nA quick-fix renames the class according to the Kotlin naming conventions:\n\n\n      val myCoolProperty = \"\"\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Naming conventions",
+                      "index": 48,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KotlinMavenPluginPhase",
+                "shortDescription": {
+                  "text": "Kotlin Maven Plugin misconfigured"
+                },
+                "fullDescription": {
+                  "text": "Reports kotlin-maven-plugin configuration issues",
+                  "markdown": "Reports kotlin-maven-plugin configuration issues"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin",
+                      "index": 2,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ConvertToStringTemplate",
+                "shortDescription": {
+                  "text": "String concatenation that can be converted to string template"
+                },
+                "fullDescription": {
+                  "text": "Reports string concatenation that can be converted to a string template. Using string templates is recommended as it makes code easier to read. Example: 'fun example() {\n      val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n      for ((country, capital) in capitals) {\n          print(capital + \" is a capital of \" + country)\n      }\n  }' After the quick-fix is applied: 'fun example() {\n      val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n      for ((country, capital) in capitals) {\n          print(\"$capital is a capital of $country\")\n      }\n  }'",
+                  "markdown": "Reports string concatenation that can be converted to a string template.\n\nUsing string templates is recommended as it makes code easier to read.\n\n**Example:**\n\n\n      fun example() {\n          val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n          for ((country, capital) in capitals) {\n              print(capital + \" is a capital of \" + country)\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun example() {\n          val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n          for ((country, capital) in capitals) {\n              print(\"$capital is a capital of $country\")\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SimplifiableCall",
+                "shortDescription": {
+                  "text": "Library function call could be simplified"
+                },
+                "fullDescription": {
+                  "text": "Reports library function calls which could be replaced by simplified one. Using corresponding functions makes your code simpler. The quick-fix replaces the function calls with another one. Example: 'fun test(list: List<Any>) {\n      list.filter { it is String }\n  }' After the quick-fix is applied: 'fun test(list: List<Any>) {\n      list.filterIsInstance<String>()\n  }'",
+                  "markdown": "Reports library function calls which could be replaced by simplified one.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the function calls with another one.\n\n**Example:**\n\n\n      fun test(list: List<Any>) {\n          list.filter { it is String }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(list: List<Any>) {\n          list.filterIsInstance<String>()\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ObjectLiteralToLambda",
+                "shortDescription": {
+                  "text": "Object literal can be converted to lambda"
+                },
+                "fullDescription": {
+                  "text": "Reports anonymous object literals implementing a Java interface with a single abstract method that can be converted into a call with a lambda expression. Example: 'class SomeService {\n  val threadPool = Executors.newCachedThreadPool()\n    \n  fun foo() {\n    threadPool.submit(object : Runnable {\n      override fun run() {\n        println(\"hello\")\n      }\n    })\n  }\n}' After the quick-fix is applied: 'fun foo() {\n    threadPool.submit { println(\"hello\") }\n  }'",
+                  "markdown": "Reports anonymous object literals implementing a Java interface with a single abstract method that can be converted into a call with a lambda expression.\n\n**Example:**\n\n\n    class SomeService {\n      val threadPool = Executors.newCachedThreadPool()\n        \n      fun foo() {\n        threadPool.submit(object : Runnable {\n          override fun run() {\n            println(\"hello\")\n          }\n        })\n      }\n    }\n\nAfter the quick-fix is applied:\n\n\n      fun foo() {\n        threadPool.submit { println(\"hello\") }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantLambdaOrAnonymousFunction",
+                "shortDescription": {
+                  "text": "Redundant creation of lambda or anonymous function"
+                },
+                "fullDescription": {
+                  "text": "Reports lambdas or anonymous functions that are created and used immediately. 'fun test() {\n      ({ println() })() // redundant\n      (fun() { println() })() // redundant\n  }'",
+                  "markdown": "Reports lambdas or anonymous functions that are created and used immediately.\n\n\n      fun test() {\n          ({ println() })() // redundant\n          (fun() { println() })() // redundant\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "BooleanLiteralArgument",
+                "shortDescription": {
+                  "text": "Boolean literal argument without parameter name"
+                },
+                "fullDescription": {
+                  "text": "Reports call arguments with 'Boolean' type without explicit parameter names specified. When multiple boolean literals are passed sequentially, it's easy to forget parameter ordering that could lead to mistakes. Explicit parameter names allow for easier code reading and understanding. Example: 'fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n  fun usage() {\n      check(true, false, true) // What does this mean?\n  }' A quick-fix adds missing parameter names: 'fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n  fun usage() {\n      check(checkName = true, checkAddress = false, checkPhone = true)\n  }'",
+                  "markdown": "Reports call arguments with `Boolean` type without explicit parameter names specified.\n\n\nWhen multiple boolean literals are passed sequentially, it's easy to forget parameter ordering that could lead to mistakes.\nExplicit parameter names allow for easier code reading and understanding.\n\n**Example:**\n\n\n      fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n      fun usage() {\n          check(true, false, true) // What does this mean?\n      }\n\nA quick-fix adds missing parameter names:\n\n\n      fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n      fun usage() {\n          check(checkName = true, checkAddress = false, checkPhone = true)\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ConvertArgumentToSet",
+                "shortDescription": {
+                  "text": "Argument could be converted to 'Set' to improve performance"
+                },
+                "fullDescription": {
+                  "text": "Detects the function calls that could work faster with an argument converted to 'Set'. Operations like 'minus' or 'intersect' are more effective when their argument is a set. An explicit conversion of an 'Iterable<T>' or an 'Array<T>' into a 'Set<T>' can often make code more effective. The quick-fix adds an explicit conversion to the function call. Example: 'fun <T> f(a: Iterable<T>, b: Iterable<T>): Int =\n      a.intersect(b).size' After the quick-fix is applied: 'fun <T> f(a: Iterable<T>, b: Iterable<T>): Int =\n      a.intersect(b.toSet()).size'",
+                  "markdown": "Detects the function calls that could work faster with an argument converted to `Set`.\n\n\nOperations like 'minus' or 'intersect' are more effective when their argument is a set.\nAn explicit conversion of an `Iterable<T>` or an `Array<T>`\ninto a `Set<T>` can often make code more effective.\n\n\nThe quick-fix adds an explicit conversion to the function call.\n\n**Example:**\n\n\n      fun <T> f(a: Iterable<T>, b: Iterable<T>): Int =\n          a.intersect(b).size\n\nAfter the quick-fix is applied:\n\n\n      fun <T> f(a: Iterable<T>, b: Iterable<T>): Int =\n          a.intersect(b.toSet()).size\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Other problems",
+                      "index": 145,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceGuardClauseWithFunctionCall",
+                "shortDescription": {
+                  "text": "Guard clause can be replaced with Kotlin's function call"
+                },
+                "fullDescription": {
+                  "text": "Reports guard clauses that can be replaced with a function call. Example: 'fun test(foo: Int?) {\n      if (foo == null) throw IllegalArgumentException(\"foo\") // replaceable clause\n  }' After the quick-fix is applied: 'fun test(foo: Int?) {\n      checkNotNull(foo)\n  }'",
+                  "markdown": "Reports guard clauses that can be replaced with a function call.\n\n**Example:**\n\n      fun test(foo: Int?) {\n          if (foo == null) throw IllegalArgumentException(\"foo\") // replaceable clause\n      }\n\nAfter the quick-fix is applied:\n\n      fun test(foo: Int?) {\n          checkNotNull(foo)\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceToStringWithStringTemplate",
+                "shortDescription": {
+                  "text": "Call of 'toString' could be replaced with string template"
+                },
+                "fullDescription": {
+                  "text": "Reports 'toString' function calls that can be replaced with a string template. Using string templates makes your code simpler. The quick-fix replaces 'toString' with a string template. Example: 'fun test(): String {\n      val x = 1\n      return x.toString()\n  }' After the quick-fix is applied: 'fun test(): String {\n      val x = 1\n      return \"$x\"\n  }'",
+                  "markdown": "Reports `toString` function calls that can be replaced with a string template.\n\nUsing string templates makes your code simpler.\n\nThe quick-fix replaces `toString` with a string template.\n\n**Example:**\n\n\n      fun test(): String {\n          val x = 1\n          return x.toString()\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(): String {\n          val x = 1\n          return \"$x\"\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ProtectedInFinal",
+                "shortDescription": {
+                  "text": "'protected' visibility is effectively 'private' in a final class"
+                },
+                "fullDescription": {
+                  "text": "Reports 'protected' visibility used inside of a 'final' class. In such cases 'protected' members are accessible only in the class itself, so they are effectively 'private'. Example: 'class FinalClass {\n      protected fun foo() {}\n  }' After the quick-fix is applied: 'class FinalClass {\n      private fun foo() {}\n  }'",
+                  "markdown": "Reports `protected` visibility used inside of a `final` class. In such cases `protected` members are accessible only in the class itself, so they are effectively `private`.\n\n**Example:**\n\n\n      class FinalClass {\n          protected fun foo() {}\n      }\n\nAfter the quick-fix is applied:\n\n\n      class FinalClass {\n          private fun foo() {}\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceRangeStartEndInclusiveWithFirstLast",
+                "shortDescription": {
+                  "text": "Boxed properties should be replaced with unboxed"
+                },
+                "fullDescription": {
+                  "text": "Reports boxed 'Range.start' and 'Range.endInclusive' properties. These properties can be replaced with unboxed 'first' and 'last' properties to avoid redundant calls. The quick-fix replaces 'start' and 'endInclusive' properties with the corresponding 'first' and 'last'. Example: 'fun foo(range: CharRange) {\n      val lastElement = range.endInclusive\n  }' After the quick-fix is applied: 'fun foo(range: CharRange) {\n      val lastElement = range.last\n  }'",
+                  "markdown": "Reports **boxed** `Range.start` and `Range.endInclusive` properties.\n\nThese properties can be replaced with **unboxed** `first` and `last` properties to avoid redundant calls.\n\nThe quick-fix replaces `start` and `endInclusive` properties with the corresponding `first` and `last`.\n\n**Example:**\n\n\n      fun foo(range: CharRange) {\n          val lastElement = range.endInclusive\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(range: CharRange) {\n          val lastElement = range.last\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceSizeCheckWithIsNotEmpty",
+                "shortDescription": {
+                  "text": "Size check can be replaced with 'isNotEmpty()'"
+                },
+                "fullDescription": {
+                  "text": "Reports size checks of 'Collections/Array/String' that should be replaced with 'isNotEmpty()'. Using 'isNotEmpty()' makes your code simpler. The quick-fix replaces the size check with 'isNotEmpty()'. Example: 'fun foo() {\n      val arrayOf = arrayOf(1, 2, 3)\n      arrayOf.size > 0\n  }' After the quick-fix is applied: 'fun foo() {\n      val arrayOf = arrayOf(1, 2, 3)\n      arrayOf.isNotEmpty()\n  }'",
+                  "markdown": "Reports size checks of `Collections/Array/String` that should be replaced with `isNotEmpty()`.\n\nUsing `isNotEmpty()` makes your code simpler.\n\nThe quick-fix replaces the size check with `isNotEmpty()`.\n\n**Example:**\n\n\n      fun foo() {\n          val arrayOf = arrayOf(1, 2, 3)\n          arrayOf.size > 0\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo() {\n          val arrayOf = arrayOf(1, 2, 3)\n          arrayOf.isNotEmpty()\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantSemicolon",
+                "shortDescription": {
+                  "text": "Redundant semicolon"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant semicolons (';') that can be safely removed. Kotlin does not require a semicolon at the end of each statement or expression. A quick-fix is suggested to remove redundant semicolons. Example: 'val myMap = mapOf(\"one\" to 1, \"two\" to 2);\n  myMap.forEach { (key, value) ->  print(\"$key -> $value\")};' After the quick-fix is applied: 'val myMap = mapOf(\"one\" to 1, \"two\" to 2)\n  myMap.forEach { (key, value) ->  print(\"$key -> $value\")}' There are two cases though where a semicolon is required: Several statements placed on a single line need to be separated with semicolons: 'map.forEach { val (key, value) = it; println(\"$key -> $value\") }' 'enum' classes that also declare properties or functions, require a semicolon after the list of enum constants: 'enum class Mode {\n      SILENT, VERBOSE;\n\n      fun isSilent(): Boolean = this == SILENT\n  }'",
+                  "markdown": "Reports redundant semicolons (`;`) that can be safely removed.\n\n\nKotlin does not require a semicolon at the end of each statement or expression.\nA quick-fix is suggested to remove redundant semicolons.\n\n**Example:**\n\n\n      val myMap = mapOf(\"one\" to 1, \"two\" to 2);\n      myMap.forEach { (key, value) ->  print(\"$key -> $value\")};\n\nAfter the quick-fix is applied:\n\n\n      val myMap = mapOf(\"one\" to 1, \"two\" to 2)\n      myMap.forEach { (key, value) ->  print(\"$key -> $value\")}\n\nThere are two cases though where a semicolon is required:\n\n1. Several statements placed on a single line need to be separated with semicolons:\n\n\n         map.forEach { val (key, value) = it; println(\"$key -> $value\") }\n\n2. `enum` classes that also declare properties or functions, require a semicolon after the list of enum constants:\n\n\n         enum class Mode {\n             SILENT, VERBOSE;\n\n             fun isSilent(): Boolean = this == SILENT\n         }\n               \n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "IntroduceWhenSubject",
+                "shortDescription": {
+                  "text": "'when' that can be simplified by introducing an argument"
+                },
+                "fullDescription": {
+                  "text": "Reports a 'when' expression that can be simplified by introducing a subject argument. Example: 'fun test(obj: Any): String {\n      return when {\n          obj is String -> \"string\"\n          obj is Int -> \"int\"\n          else -> \"unknown\"\n      }\n  }' The quick fix introduces a subject argument: 'fun test(obj: Any): String {\n      return when (obj) {\n          is String -> \"string\"\n          is Int -> \"int\"\n          else -> \"unknown\"\n      }\n  }'",
+                  "markdown": "Reports a `when` expression that can be simplified by introducing a subject argument.\n\n**Example:**\n\n\n      fun test(obj: Any): String {\n          return when {\n              obj is String -> \"string\"\n              obj is Int -> \"int\"\n              else -> \"unknown\"\n          }\n      }\n\nThe quick fix introduces a subject argument:\n\n\n      fun test(obj: Any): String {\n          return when (obj) {\n              is String -> \"string\"\n              is Int -> \"int\"\n              else -> \"unknown\"\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "DeprecatedCallableAddReplaceWith",
+                "shortDescription": {
+                  "text": "@Deprecated annotation without 'replaceWith' argument"
+                },
+                "fullDescription": {
+                  "text": "Reports deprecated functions and properties that do not have the 'kotlin.ReplaceWith' argument in its 'kotlin.deprecated' annotation and suggests to add one based on their body. Kotlin provides the 'ReplaceWith' argument to replace deprecated declarations automatically. It is recommended to use the argument to fix deprecation issues in code. Example: '@Deprecated(\"Use refined() instead.\")\n  fun deprecated() = refined()\n\n  fun refined() = 42' A quick-fix adds the 'ReplaceWith()' argument: '@Deprecated(\"Use refined() instead.\", ReplaceWith(\"refined()\"))\n  fun deprecated() = refined()\n\n  fun refined() = 42'",
+                  "markdown": "Reports deprecated functions and properties that do not have the `kotlin.ReplaceWith` argument in its `kotlin.deprecated` annotation and suggests to add one based on their body.\n\n\nKotlin provides the `ReplaceWith` argument to replace deprecated declarations automatically.\nIt is recommended to use the argument to fix deprecation issues in code.\n\n**Example:**\n\n\n      @Deprecated(\"Use refined() instead.\")\n      fun deprecated() = refined()\n\n      fun refined() = 42\n\nA quick-fix adds the `ReplaceWith()` argument:\n\n\n      @Deprecated(\"Use refined() instead.\", ReplaceWith(\"refined()\"))\n      fun deprecated() = refined()\n\n      fun refined() = 42\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Other problems",
+                      "index": 145,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ComplexRedundantLet",
+                "shortDescription": {
+                  "text": "Redundant argument-based 'let' call"
+                },
+                "fullDescription": {
+                  "text": "Reports a redundant argument-based 'let' call. 'let' is redundant when the lambda parameter is only used as a qualifier in a call expression. If you need to give a name to the qualifying expression, declare a local variable. Example: 'fun splitNumbers() {\n      \"1,2,3\".let { it.split(',') }\n  }' A quick-fix removes the extra 'let()' call: 'fun example() {\n      \"1,2,3\".split(',')\n  }' Alternative: 'fun splitNumbers() {\n      val numbers = \"1,2,3\"\n      numbers.split(',')\n  }'",
+                  "markdown": "Reports a redundant argument-based `let` call.\n\n`let` is redundant when the lambda parameter is only used as a qualifier in a call expression.\n\nIf you need to give a name to the qualifying expression, declare a local variable.\n\n**Example:**\n\n\n      fun splitNumbers() {\n          \"1,2,3\".let { it.split(',') }\n      }\n\nA quick-fix removes the extra `let()` call:\n\n\n      fun example() {\n          \"1,2,3\".split(',')\n      }\n\nAlternative:\n\n\n      fun splitNumbers() {\n          val numbers = \"1,2,3\"\n          numbers.split(',')\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RemoveRedundantSpreadOperator",
+                "shortDescription": {
+                  "text": "Redundant spread operator"
+                },
+                "fullDescription": {
+                  "text": "Reports the use of a redundant spread operator for a family of 'arrayOf' function calls. Use the 'Remove redundant spread operator' quick-fix to clean up the code. Examples: 'fun foo(vararg s: String) { }\n\n  fun bar(ss: Array<String>) {\n      foo(*arrayOf(\"abc\"))       // for the both calls of 'foo', array creation\n      foo(*arrayOf(*ss, \"zzz\"))  // and its subsequent \"spreading\" is redundant\n  }' After the quick-fix is applied: 'fun foo(vararg s: String) { }\n\n  fun bar(ss: Array<String>) {\n      foo(\"abc\")\n      foo(*ss, \"zzz\")\n  }'",
+                  "markdown": "Reports the use of a redundant spread operator for a family of `arrayOf` function calls.\n\nUse the 'Remove redundant spread operator' quick-fix to clean up the code.\n\n**Examples:**\n\n\n      fun foo(vararg s: String) { }\n\n      fun bar(ss: Array<String>) {\n          foo(*arrayOf(\"abc\"))       // for the both calls of 'foo', array creation\n          foo(*arrayOf(*ss, \"zzz\"))  // and its subsequent \"spreading\" is redundant\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(vararg s: String) { }\n\n      fun bar(ss: Array<String>) {\n          foo(\"abc\")\n          foo(*ss, \"zzz\")\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration",
+                "shortDescription": {
+                  "text": "'@JvmOverloads' annotation cannot be used on constructors of annotation classes since 1.4"
+                },
+                "fullDescription": {
+                  "text": "Reports '@JvmOverloads' on constructors of annotation classes because it's meaningless. There is no footprint of '@JvmOverloads' in the generated bytecode and Kotlin metadata, so '@JvmOverloads' doesn't affect the generated bytecode and the code behavior. '@JvmOverloads' on constructors of annotation classes causes a compilation error since Kotlin 1.4. Example: 'annotation class A @JvmOverloads constructor(val x: Int = 1)' After the quick-fix is applied: 'annotation class A constructor(val x: Int = 1)'",
+                  "markdown": "Reports `@JvmOverloads` on constructors of annotation classes because it's meaningless.\n\n\nThere is no footprint of `@JvmOverloads` in the generated bytecode and Kotlin metadata,\nso `@JvmOverloads` doesn't affect the generated bytecode and the code behavior.\n\n`@JvmOverloads` on constructors of annotation classes causes a compilation error since Kotlin 1.4.\n\n**Example:**\n\n\n      annotation class A @JvmOverloads constructor(val x: Int = 1)\n\nAfter the quick-fix is applied:\n\n\n      annotation class A constructor(val x: Int = 1)\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "error",
+                  "parameters": {
+                    "ideaSeverity": "ERROR",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Migration",
+                      "index": 15,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RemoveSetterParameterType",
+                "shortDescription": {
+                  "text": "Redundant setter parameter type"
+                },
+                "fullDescription": {
+                  "text": "Reports explicitly specified parameter types in property setters. Setter parameter type always matches the property type, so it's not required to be explicit. The 'Remove explicit type specification' quick-fix allows amending the code accordingly. Examples: 'fun process(x: Int) {}\n\n  var x: Int = 0\n      set(value: Int) = process(value) // <== 'Int' specification can be safely omitted' After the quick-fix is applied: 'fun process(x: Int) {}\n\n  var x: Int = 0\n      set(value) = process(value)'",
+                  "markdown": "Reports explicitly specified parameter types in property setters.\n\n\nSetter parameter type always matches the property type, so it's not required to be explicit.\nThe 'Remove explicit type specification' quick-fix allows amending the code accordingly.\n\n**Examples:**\n\n\n      fun process(x: Int) {}\n\n      var x: Int = 0\n          set(value: Int) = process(value) // <== 'Int' specification can be safely omitted\n\nAfter the quick-fix is applied:\n\n\n      fun process(x: Int) {}\n\n      var x: Int = 0\n          set(value) = process(value)\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "IfThenToElvis",
+                "shortDescription": {
+                  "text": "If-Then foldable to '?:'"
+                },
+                "fullDescription": {
+                  "text": "Reports 'if-then' expressions that can be folded into elvis ('?:') expressions. Example: 'fun maybeFoo(): String? = \"foo\"\n\n  var foo = maybeFoo()\n  val bar = if (foo == null) \"hello\" else foo' The quick fix converts the 'if-then' expression into an elvis ('?:') expression: 'fun maybeFoo(): String? = \"foo\"\n\n  var foo = maybeFoo()\n  val bar = foo ?: \"hello\"'",
+                  "markdown": "Reports `if-then` expressions that can be folded into elvis (`?:`) expressions.\n\n**Example:**\n\n\n      fun maybeFoo(): String? = \"foo\"\n\n      var foo = maybeFoo()\n      val bar = if (foo == null) \"hello\" else foo\n\nThe quick fix converts the `if-then` expression into an elvis (`?:`) expression:\n\n\n      fun maybeFoo(): String? = \"foo\"\n\n      var foo = maybeFoo()\n      val bar = foo ?: \"hello\"\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "WrapUnaryOperator",
+                "shortDescription": {
+                  "text": "Ambiguous unary operator use with number constant"
+                },
+                "fullDescription": {
+                  "text": "Reports an unary operator followed by a dot qualifier such as '-1.inc()'. Code like '-1.inc()' can be misleading because '-' has a lower precedence than '.inc()'. As a result, '-1.inc()' evaluates to '-2' and not '0' as it might be expected. Wrap unary operator and value with () quick-fix can be used to amend the code automatically.",
+                  "markdown": "Reports an unary operator followed by a dot qualifier such as `-1.inc()`.\n\nCode like `-1.inc()` can be misleading because `-` has a lower precedence than `.inc()`.\nAs a result, `-1.inc()` evaluates to `-2` and not `0` as it might be expected.\n\n**Wrap unary operator and value with ()** quick-fix can be used to amend the code automatically."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ConflictingExtensionProperty",
+                "shortDescription": {
+                  "text": "Extension property conflicting with synthetic one"
+                },
+                "fullDescription": {
+                  "text": "Reports extension properties that conflict with synthetic ones that have been automatically produced from Java 'get' or 'set' methods. Such properties should be either removed or renamed to avoid breaking code by future changes in the compiler. A quick-fix deletes an extention property. Example: 'val File.name: String\n      get() = getName()' A quick-fix adds the '@Deprecated' annotation: '@Deprecated(\"Is replaced with automatic synthetic extension\", ReplaceWith(\"name\"), level = DeprecationLevel.HIDDEN)\n  val File.name: String\n      get() = getName()'",
+                  "markdown": "Reports extension properties that conflict with synthetic ones that have been automatically produced from Java `get` or `set` methods.\n\nSuch properties should be either removed or renamed to avoid breaking code by future changes in the compiler.\n\nA quick-fix deletes an extention property.\n\n**Example:**\n\n\n      val File.name: String\n          get() = getName()\n\nA quick-fix adds the `@Deprecated` annotation:\n\n\n      @Deprecated(\"Is replaced with automatic synthetic extension\", ReplaceWith(\"name\"), level = DeprecationLevel.HIDDEN)\n      val File.name: String\n          get() = getName()\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceJavaStaticMethodWithKotlinAnalog",
+                "shortDescription": {
+                  "text": "Java methods should be replaced with Kotlin analog"
+                },
+                "fullDescription": {
+                  "text": "Reports a Java method call that can be replaced with a Kotlin function, for example, 'System.out.println()'. Replacing the code gets rid of the dependency to Java and makes the idiomatic Kotlin code. The quick-fix replaces the Java method calls on the same Kotlin call. Example: 'import java.util.Arrays\n\n  fun main() {\n      val a = Arrays.asList(1, 3, null)\n  }' After the quick-fix is applied: 'fun main() {\n      val a = listOf(1, 3, null)\n  }'",
+                  "markdown": "Reports a Java method call that can be replaced with a Kotlin function, for example, `System.out.println()`.\n\nReplacing the code gets rid of the dependency to Java and makes the idiomatic Kotlin code.\n\nThe quick-fix replaces the Java method calls on the same Kotlin call.\n\n**Example:**\n\n\n      import java.util.Arrays\n\n      fun main() {\n          val a = Arrays.asList(1, 3, null)\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun main() {\n          val a = listOf(1, 3, null)\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RemoveEmptyParenthesesFromLambdaCall",
+                "shortDescription": {
+                  "text": "Remove unnecessary parentheses from function call with lambda"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant empty parentheses of function calls where the only parameter is a lambda that's outside the parentheses. Use the 'Remove unnecessary parentheses from function call with lambda' quick-fix to clean up the code. Examples: 'fun foo() {\n      listOf(1).forEach() {  }\n  }' After the quick-fix is applied: 'fun foo() {\n      listOf(1).forEach {  }\n  }'",
+                  "markdown": "Reports redundant empty parentheses of function calls where the only parameter is a lambda that's outside the parentheses.\n\nUse the 'Remove unnecessary parentheses from function call with lambda' quick-fix to clean up the code.\n\n**Examples:**\n\n\n      fun foo() {\n          listOf(1).forEach() {  }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo() {\n          listOf(1).forEach {  }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RemoveExplicitSuperQualifier",
+                "shortDescription": {
+                  "text": "Unnecessary supertype qualification"
+                },
+                "fullDescription": {
+                  "text": "Reports 'super' member calls with redundant supertype qualification. Code in a derived class can call its superclass functions and property accessors implementations using the 'super' keyword. To specify the supertype from which the inherited implementation is taken, 'super' can be qualified by the supertype name in angle brackets, e.g. 'super<Base>'. Sometimes this qualification is redundant and can be omitted. Use the 'Remove explicit supertype qualification' quick-fix to clean up the code. Examples: 'open class B {\n      open fun foo(){}\n  }\n\n  class A : B() {\n      override fun foo() {\n         super<B>.foo() // <== redundant because 'B' is the only supertype\n      }\n  }\n\n  interface I {\n      fun foo() {}\n  }\n\n  class C : B(), I {\n      override fun foo() {\n          super<B>.foo() // <== here <B> qualifier is needed to distinguish 'B.foo()' from 'I.foo()'\n      }\n  }' After the quick-fix is applied: 'open class B {\n      open fun foo(){}\n  }\n\n  class A : B() {\n      override fun foo() {\n         super.foo() // <== Updated\n      }\n  }\n\n  interface I {\n      fun foo() {}\n  }\n\n  class C : B(), I {\n      override fun foo() {\n          super<B>.foo()\n      }\n  }'",
+                  "markdown": "Reports `super` member calls with redundant supertype qualification.\n\n\nCode in a derived class can call its superclass functions and property accessors implementations using the `super` keyword.\nTo specify the supertype from which the inherited implementation is taken, `super` can be qualified by the supertype name in\nangle brackets, e.g. `super<Base>`. Sometimes this qualification is redundant and can be omitted.\nUse the 'Remove explicit supertype qualification' quick-fix to clean up the code.\n\n**Examples:**\n\n\n      open class B {\n          open fun foo(){}\n      }\n\n      class A : B() {\n          override fun foo() {\n             super<B>.foo() // <== redundant because 'B' is the only supertype\n          }\n      }\n\n      interface I {\n          fun foo() {}\n      }\n\n      class C : B(), I {\n          override fun foo() {\n              super<B>.foo() // <== here <B> qualifier is needed to distinguish 'B.foo()' from 'I.foo()'\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      open class B {\n          open fun foo(){}\n      }\n\n      class A : B() {\n          override fun foo() {\n             super.foo() // <== Updated\n          }\n      }\n\n      interface I {\n          fun foo() {}\n      }\n\n      class C : B(), I {\n          override fun foo() {\n              super<B>.foo()\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantExplicitType",
+                "shortDescription": {
+                  "text": "Obvious explicit type"
+                },
+                "fullDescription": {
+                  "text": "Reports local variables' explicitly given types which are obvious and thus redundant, like 'val f: Foo = Foo()'. Example: 'class Point(val x: Int, val y: Int)\n\n  fun foo() {\n      val t: Boolean = true\n      val p: Point = Point(1, 2)\n      val i: Int = 42\n  }' After the quick-fix is applied: 'class Point(val x: Int, val y: Int)\n\n  fun foo() {\n      val t = true\n      val p = Point(1, 2)\n      val i = 42\n  }'",
+                  "markdown": "Reports local variables' explicitly given types which are obvious and thus redundant, like `val f: Foo = Foo()`.\n\n**Example:**\n\n\n      class Point(val x: Int, val y: Int)\n\n      fun foo() {\n          val t: Boolean = true\n          val p: Point = Point(1, 2)\n          val i: Int = 42\n      }\n\nAfter the quick-fix is applied:\n\n\n      class Point(val x: Int, val y: Int)\n\n      fun foo() {\n          val t = true\n          val p = Point(1, 2)\n          val i = 42\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SuspiciousVarProperty",
+                "shortDescription": {
+                  "text": "Suspicious 'var' property: its setter does not influence its getter result"
+                },
+                "fullDescription": {
+                  "text": "Reports 'var' properties with default setter and getter that do not reference backing field. Such properties do not affect calling its setter; therefore, it will be clearer to change such property to 'val' and delete the initializer. Change to val and delete initializer quick-fix can be used to amend the code automatically. Example: '// This property always returns '1' and it doesn't important that the property is a 'var'\n  var foo: Int = 0\n      get() = 1'",
+                  "markdown": "Reports `var` properties with default setter and getter that do not reference backing field.\n\n\nSuch properties do not affect calling its setter; therefore, it will be clearer to change such property to `val` and delete the initializer.\n\n**Change to val and delete initializer** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n      // This property always returns '1' and it doesn't important that the property is a 'var'\n      var foo: Int = 0\n          get() = 1\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "JavaCollectionsStaticMethod",
+                "shortDescription": {
+                  "text": "Java Collections static method call can be replaced with Kotlin stdlib"
+                },
+                "fullDescription": {
+                  "text": "Reports a Java 'Collections' static method call that can be replaced with Kotlin stdlib. Example: 'import java.util.Collections\n\n  fun test() {\n      val mutableList = mutableListOf(1, 2)\n      Collections.fill(mutableList, 3)\n  }' The quick fix replaces Java 'Collections' static method call with the corresponding Kotlin stdlib method call: 'import java.util.Collections\n\n  fun test() {\n      val mutableList = mutableListOf(1, 2)\n      mutableList.fill(3)\n  }'",
+                  "markdown": "Reports a Java `Collections` static method call that can be replaced with Kotlin stdlib.\n\n**Example:**\n\n\n      import java.util.Collections\n\n      fun test() {\n          val mutableList = mutableListOf(1, 2)\n          Collections.fill(mutableList, 3)\n      }\n\nThe quick fix replaces Java `Collections` static method call with the corresponding Kotlin stdlib method call:\n\n\n      import java.util.Collections\n\n      fun test() {\n          val mutableList = mutableListOf(1, 2)\n          mutableList.fill(3)\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantAsync",
+                "shortDescription": {
+                  "text": "Redundant 'async' call"
+                },
+                "fullDescription": {
+                  "text": "Reports 'async' calls that are immediately followed by 'await'. Such calls can be replaced with blocking calls. Example: 'suspend fun test(ctx: CoroutineContext, scope: CoroutineScope) {\n      scope.async(ctx) { doSomeJob() }.await()\n  }' After the quick-fix is applied: 'suspend fun test(ctx: CoroutineContext, scope: CoroutineScope) {\n      withContext(scope.coroutineContext + ctx) { doSomeJob() }\n  }'",
+                  "markdown": "Reports `async` calls that are immediately followed by `await`.\nSuch calls can be replaced with blocking calls.\n\n**Example:**\n\n\n      suspend fun test(ctx: CoroutineContext, scope: CoroutineScope) {\n          scope.async(ctx) { doSomeJob() }.await()\n      }\n\nAfter the quick-fix is applied:\n\n\n      suspend fun test(ctx: CoroutineContext, scope: CoroutineScope) {\n          withContext(scope.coroutineContext + ctx) { doSomeJob() }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "MoveVariableDeclarationIntoWhen",
+                "shortDescription": {
+                  "text": "Variable declaration could be moved inside 'when'"
+                },
+                "fullDescription": {
+                  "text": "Reports variable declarations that can be moved inside a 'when' expression. Example: 'fun someCalc(x: Int) = x * 42\n\nfun foo(x: Int): Int {\n  val a = someCalc(x)\n  return when (a) {\n    1 -> a\n    2 -> 2 * a\n    else -> 24\n  }\n}' After the quick-fix is applied: 'fun foo(x: Int): Int {\n  return when (val a = someCalc(x)) {\n    1 -> a\n    2 -> 2 * a\n    else -> 24\n  }\n}'",
+                  "markdown": "Reports variable declarations that can be moved inside a `when` expression.\n\n**Example:**\n\n\n    fun someCalc(x: Int) = x * 42\n\n    fun foo(x: Int): Int {\n      val a = someCalc(x)\n      return when (a) {\n        1 -> a\n        2 -> 2 * a\n        else -> 24\n      }\n    }\n\nAfter the quick-fix is applied:\n\n\n    fun foo(x: Int): Int {\n      return when (val a = someCalc(x)) {\n        1 -> a\n        2 -> 2 * a\n        else -> 24\n      }\n    }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "DeferredIsResult",
+                "shortDescription": {
+                  "text": "Function returning Deferred directly"
+                },
+                "fullDescription": {
+                  "text": "Reports functions with the 'kotlinx.coroutines.Deferred' return type. Functions that use 'Deferred' as return type should have a name with the 'Async' suffix. Otherwise, it's recommended to mark a function as 'suspend' and unwrap 'Deferred' inside it. Example: 'fun calcEverything(): Deferred<Int> {\n      return CompletableDeferred(42)\n  }' After the quick-fix that adds the 'Async' suffix applied: 'fun calcEverythingAsync(): Deferred<Int> {\n      return CompletableDeferred(42)\n  }' After the quick-fix that converts the function into a 'suspend' one applied: 'suspend fun calcEverything(): Int {\n      return CompletableDeferred(42).await()\n  }'",
+                  "markdown": "Reports functions with the `kotlinx.coroutines.Deferred` return type.\n\n\nFunctions that use `Deferred` as return type should have a name with the `Async` suffix.\nOtherwise, it's recommended to mark a function as `suspend` and unwrap `Deferred` inside it.\n\n**Example:**\n\n\n      fun calcEverything(): Deferred<Int> {\n          return CompletableDeferred(42)\n      }\n\nAfter the quick-fix that adds the `Async` suffix applied:\n\n\n      fun calcEverythingAsync(): Deferred<Int> {\n          return CompletableDeferred(42)\n      }\n\nAfter the quick-fix that converts the function into a `suspend` one applied:\n\n\n      suspend fun calcEverything(): Int {\n          return CompletableDeferred(42).await()\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RemoveEmptyParenthesesFromAnnotationEntry",
+                "shortDescription": {
+                  "text": "Remove unnecessary parentheses"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant empty parentheses in annotation entries. Use the 'Remove unnecessary parentheses' quick-fix to clean up the code. Examples: 'annotation class MyAnnotationA\n  annotation class MyAnnotationB(val x: Int)\n  annotation class MyAnnotationC(val x: Int = 10) // default value is present\n\n  @MyAnnotationA() // <== parentheses are redundant\n  fun testA() {\n  }\n\n  @MyAnnotationB() // <== missing argument, parentheses are required\n  fun testB() {\n  }\n\n  @MyAnnotationC() // <== parentheses are redundant\n  fun testC() {\n  }'",
+                  "markdown": "Reports redundant empty parentheses in annotation entries.\n\nUse the 'Remove unnecessary parentheses' quick-fix to clean up the code.\n\n**Examples:**\n\n\n      annotation class MyAnnotationA\n      annotation class MyAnnotationB(val x: Int)\n      annotation class MyAnnotationC(val x: Int = 10) // default value is present\n\n      @MyAnnotationA() // <== parentheses are redundant\n      fun testA() {\n      }\n\n      @MyAnnotationB() // <== missing argument, parentheses are required\n      fun testB() {\n      }\n\n      @MyAnnotationC() // <== parentheses are redundant\n      fun testC() {\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SimplifiableCallChain",
+                "shortDescription": {
+                  "text": "Call chain on collection type can be simplified"
+                },
+                "fullDescription": {
+                  "text": "Reports two-call chains replaceable by a single call. It can help you to avoid redundant code execution. The quick-fix replaces the call chain with a single call. Example: 'fun main() {\n      listOf(1, 2, 3).filter { it > 1 }.count()\n  }' After the quick-fix is applied: 'fun main() {\n      listOf(1, 2, 3).count { it > 1 }\n  }'",
+                  "markdown": "Reports two-call chains replaceable by a single call.\n\nIt can help you to avoid redundant code execution.\n\nThe quick-fix replaces the call chain with a single call.\n\n**Example:**\n\n\n      fun main() {\n          listOf(1, 2, 3).filter { it > 1 }.count()\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun main() {\n          listOf(1, 2, 3).count { it > 1 }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceCallWithBinaryOperator",
+                "shortDescription": {
+                  "text": "Can be replaced with binary operator"
+                },
+                "fullDescription": {
+                  "text": "Reports function calls that can be replaced with binary operators, in particular comparison-related ones. Example: 'fun test(): Boolean {\n      return 2.compareTo(1) > 0 // replaceable 'compareTo()'\n  }' After the quick-fix is applied: 'fun test(): Boolean {\n      return 2 > 1\n  }'",
+                  "markdown": "Reports function calls that can be replaced with binary operators, in particular comparison-related ones.\n\n**Example:**\n\n      fun test(): Boolean {\n          return 2.compareTo(1) > 0 // replaceable 'compareTo()'\n      }\n\nAfter the quick-fix is applied:\n\n      fun test(): Boolean {\n          return 2 > 1\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UnusedUnaryOperator",
+                "shortDescription": {
+                  "text": "Unused unary operator"
+                },
+                "fullDescription": {
+                  "text": "Reports unary operators for number types on unused expressions. Unary operators break previous expression if they are used without braces. As a result, mathematical expressions spanning multi lines can be misleading. Example: 'fun main() {\n      val result = 1 + 2 * 3\n                  + 3              // <== note that '+ 3' doesn't belong to the 'result' variable, it is unused\n      println(\"Result = $result\")  // The result is '7' and not '10' as it might be expected\n  }'",
+                  "markdown": "Reports unary operators for number types on unused expressions.\n\nUnary operators break previous expression if they are used without braces.\nAs a result, mathematical expressions spanning multi lines can be misleading.\n\nExample:\n\n\n      fun main() {\n          val result = 1 + 2 * 3\n                      + 3              // <== note that '+ 3' doesn't belong to the 'result' variable, it is unused\n          println(\"Result = $result\")  // The result is '7' and not '10' as it might be expected\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ClassName",
+                "shortDescription": {
+                  "text": "Class naming convention"
+                },
+                "fullDescription": {
+                  "text": "Reports class names that do not follow the recommended naming conventions. Consistent naming allows for easier code reading and understanding. According to the Kotlin official style guide, class names should start with an uppercase letter and use camel case. It is possible to introduce other naming rules by changing the \"Pattern\" regular expression. Example: 'class user(val name: String)' A quick-fix renames the class according to the Kotlin naming conventions: 'class User(val name: String)'",
+                  "markdown": "Reports class names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#naming-rules),\nclass names should start with an uppercase letter and use camel case.\n\nIt is possible to introduce other naming rules by changing the \"Pattern\" regular expression.\n\n**Example:**\n\n\n      class user(val name: String)\n\nA quick-fix renames the class according to the Kotlin naming conventions:\n\n\n      class User(val name: String)\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Naming conventions",
+                      "index": 48,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RemoveEmptyPrimaryConstructor",
+                "shortDescription": {
+                  "text": "Redundant empty primary constructor"
+                },
+                "fullDescription": {
+                  "text": "Reports empty primary constructors when they are implicitly available anyway. A primary constructor is redundant and can be safely omitted when it does not have any annotations or visibility modifiers. Use the 'Remove empty primary constructor' quick-fix to clean up the code. Examples: 'class MyClassA constructor() //  redundant, can be replaced with 'class MyClassA'\n\n  annotation class MyAnnotation\n  class MyClassB @MyAnnotation constructor() //  required because of annotation\n\n  class MyClassC private constructor() // required because of visibility modifier'",
+                  "markdown": "Reports empty primary constructors when they are implicitly available anyway.\n\n\nA primary constructor is redundant and can be safely omitted when it does not have any annotations or visibility modifiers.\nUse the 'Remove empty primary constructor' quick-fix to clean up the code.\n\n**Examples:**\n\n\n      class MyClassA constructor() //  redundant, can be replaced with 'class MyClassA'\n\n      annotation class MyAnnotation\n      class MyClassB @MyAnnotation constructor() //  required because of annotation\n\n      class MyClassC private constructor() // required because of visibility modifier\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RemoveEmptySecondaryConstructorBody",
+                "shortDescription": {
+                  "text": "Redundant constructor body"
+                },
+                "fullDescription": {
+                  "text": "Reports empty bodies of secondary constructors.",
+                  "markdown": "Reports empty bodies of secondary constructors."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "FloatingPointLiteralPrecision",
+                "shortDescription": {
+                  "text": "Floating-point literal exceeds the available precision"
+                },
+                "fullDescription": {
+                  "text": "Reports floating-point literals that cannot be represented with the required precision using IEEE 754 'Float' and 'Double' types. For example, '1.9999999999999999999' has too many significant digits, so its representation as a 'Double' will be rounded to '2.0'. Specifying excess digits may be misleading as it hides the fact that computations use rounded values instead. The quick-fix replaces the literal with a rounded value that matches the actual representation of the constant. Example: 'val x: Float = 3.14159265359f' After the quick-fix is applied: 'val x: Float = 3.1415927f'",
+                  "markdown": "Reports floating-point literals that cannot be represented with the required precision using [IEEE 754](https://en.wikipedia.org/wiki/IEEE_754) `Float` and `Double` types.\n\n\nFor example, `1.9999999999999999999` has too many significant digits,\nso its representation as a `Double` will be rounded to `2.0`.\nSpecifying excess digits may be misleading as it hides the fact that computations\nuse rounded values instead.\n\n\nThe quick-fix replaces the literal with a rounded value that matches the actual representation\nof the constant.\n\n**Example:**\n\n\n      val x: Float = 3.14159265359f\n\nAfter the quick-fix is applied:\n\n\n      val x: Float = 3.1415927f\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Other problems",
+                      "index": 145,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ConvertPairConstructorToToFunction",
+                "shortDescription": {
+                  "text": "Convert Pair constructor to 'to' function"
+                },
+                "fullDescription": {
+                  "text": "Reports a 'Pair' constructor invocation that can be replaced with a 'to()' infix function call. Explicit constructor invocations may add verbosity, especially if they are used multiple times. Replacing constructor calls with 'to()' makes code easier to read and maintain. Example: 'val countries = mapOf(\n      Pair(\"France\", \"Paris\"),\n      Pair(\"Spain\", \"Madrid\"),\n      Pair(\"Germany\", \"Berlin\")\n  )' After the quick-fix is applied: 'val countries = mapOf(\n      \"France\" to \"Paris\",\n      \"Spain\" to \"Madrid\",\n      \"Germany\" to \"Berlin\"\n  )'",
+                  "markdown": "Reports a `Pair` constructor invocation that can be replaced with a `to()` infix function call.\n\n\nExplicit constructor invocations may add verbosity, especially if they are used multiple times.\nReplacing constructor calls with `to()` makes code easier to read and maintain.\n\n**Example:**\n\n\n      val countries = mapOf(\n          Pair(\"France\", \"Paris\"),\n          Pair(\"Spain\", \"Madrid\"),\n          Pair(\"Germany\", \"Berlin\")\n      )\n\nAfter the quick-fix is applied:\n\n\n      val countries = mapOf(\n          \"France\" to \"Paris\",\n          \"Spain\" to \"Madrid\",\n          \"Germany\" to \"Berlin\"\n      )\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantGetter",
+                "shortDescription": {
+                  "text": "Redundant property getter"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant property getters. Example: 'class Test {\n      val a = 1\n          get\n      val b = 1\n          get() = field\n  }' After the quick-fix is applied: 'class Test {\n      val a = 1\n      val b = 1\n  }'",
+                  "markdown": "Reports redundant property getters.\n\n**Example:**\n\n\n      class Test {\n          val a = 1\n              get\n          val b = 1\n              get() = field\n      }\n\nAfter the quick-fix is applied:\n\n\n      class Test {\n          val a = 1\n          val b = 1\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantIf",
+                "shortDescription": {
+                  "text": "Redundant 'if' statement"
+                },
+                "fullDescription": {
+                  "text": "Reports 'if' statements which can be simplified to a single statement. Example: 'fun test() {\n      if (foo()) {\n         return true\n      } else {\n         return false\n      }\n  }' After the quick-fix is applied: 'fun test() {\n      return foo()\n  }'",
+                  "markdown": "Reports `if` statements which can be simplified to a single statement.\n\n**Example:**\n\n\n      fun test() {\n          if (foo()) {\n             return true\n          } else {\n             return false\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test() {\n          return foo()\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KDocMissingDocumentation",
+                "shortDescription": {
+                  "text": "Missing KDoc comments for public declarations"
+                },
+                "fullDescription": {
+                  "text": "Reports public declarations that do not have KDoc comments. Example: 'class A' The quick fix generates the comment block above the declaration: '/**\n   *\n   */\n  class A'",
+                  "markdown": "Reports public declarations that do not have KDoc comments.\n\n**Example:**\n\n\n      class A\n\nThe quick fix generates the comment block above the declaration:\n\n\n      /**\n       *\n       */\n      class A\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Other problems",
+                      "index": 145,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RemoveExplicitTypeArguments",
+                "shortDescription": {
+                  "text": "Unnecessary type argument"
+                },
+                "fullDescription": {
+                  "text": "Reports function calls with type arguments that can be automatically inferred. Such type arguments are redundant and can be safely omitted. Use the 'Remove explicit type arguments' quick-fix to clean up the code. Examples: '// 'String' type can be inferred here\n  fun foo(): MutableList<String> = mutableListOf<String>()\n\n  // Here 'String' cannot be inferred, type argument is required.\n  fun bar() = mutableListOf<String>()' After the quick-fix is applied: 'fun foo(): MutableList<String> = mutableListOf() <== Updated\n\n  fun bar() = mutableListOf<String>()'",
+                  "markdown": "Reports function calls with type arguments that can be automatically inferred. Such type arguments are redundant and can be safely omitted.\n\nUse the 'Remove explicit type arguments' quick-fix to clean up the code.\n\n**Examples:**\n\n\n      // 'String' type can be inferred here\n      fun foo(): MutableList<String> = mutableListOf<String>()\n\n      // Here 'String' cannot be inferred, type argument is required.\n      fun bar() = mutableListOf<String>()\n\nAfter the quick-fix is applied:\n\n\n      fun foo(): MutableList<String> = mutableListOf() <== Updated\n\n      fun bar() = mutableListOf<String>()\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantVisibilityModifier",
+                "shortDescription": {
+                  "text": "Redundant visibility modifier"
+                },
+                "fullDescription": {
+                  "text": "Reports visibility modifiers that match the default visibility of an element ('public' for most elements, 'protected' for members that override a protected member).",
+                  "markdown": "Reports visibility modifiers that match the default visibility of an element (`public` for most elements, `protected` for members that override a protected member)."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UsePropertyAccessSyntax",
+                "shortDescription": {
+                  "text": "Accessor call that can be replaced with property access syntax"
+                },
+                "fullDescription": {
+                  "text": "Reports Java 'get' and 'set' method calls that can be replaced with the Kotlin synthetic properties. Use property access syntax quick-fix can be used to amen the code automatically. Example: '// Java:\n  public class JavaClassWithGetter {\n      private final String expr = \"result\";\n\n      // ...\n\n      public String getExpr() {\n          return expr;\n      }\n  }' '// Kotlin:\n  fun test(j: JavaClassWithGetter) {\n      // ...\n      j.getExpr() // <== A quick-fix simplifies the expression to 'j.expr'\n  }'",
+                  "markdown": "Reports Java `get` and `set` method calls that can be replaced with the Kotlin synthetic properties.\n\n**Use property access syntax** quick-fix can be used to amen the code automatically.\n\nExample:\n\n\n      // Java:\n      public class JavaClassWithGetter {\n          private final String expr = \"result\";\n\n          // ...\n\n          public String getExpr() {\n              return expr;\n          }\n      }\n\n\n      // Kotlin:\n      fun test(j: JavaClassWithGetter) {\n          // ...\n          j.getExpr() // <== A quick-fix simplifies the expression to 'j.expr'\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UseExpressionBody",
+                "shortDescription": {
+                  "text": "Expression body syntax is preferable here"
+                },
+                "fullDescription": {
+                  "text": "Reports 'return' expressions (one-liners or 'when') that can be replaced with expression body syntax. Expression body syntax is recommended by the style guide. Convert to expression body quick-fix can be used to amend the code automatically. Example: 'fun sign(x: Int): Int {\n      return when { // <== can be simplified\n          x < 0 -> -1\n          x > 0 -> 1\n          else -> 0\n      }\n  }' After the quick-fix is applied: 'fun sign(x: Int): Int = when {\n      x < 0 -> -1\n      x > 0 -> 1\n      else -> 0\n  }'",
+                  "markdown": "Reports `return` expressions (one-liners or `when`) that can be replaced with expression body syntax.\n\nExpression body syntax is recommended by the [style guide](https://kotlinlang.org/docs/coding-conventions.html#functions).\n\n**Convert to expression body** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n      fun sign(x: Int): Int {\n          return when { // <== can be simplified\n              x < 0 -> -1\n              x > 0 -> 1\n              else -> 0\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun sign(x: Int): Int = when {\n          x < 0 -> -1\n          x > 0 -> 1\n          else -> 0\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "MapGetWithNotNullAssertionOperator",
+                "shortDescription": {
+                  "text": "'map.get()' with not-null assertion operator (!!)"
+                },
+                "fullDescription": {
+                  "text": "Reports 'map.get()!!' that can be replaced with 'map.getValue()', 'map.getOrElse()', and so on. Example: 'fun test(map: Map<Int, String>): String = map.get(0)!!' After the quick-fix is applied: 'fun test(map: Map<Int, String>): String = map.getValue(0)'",
+                  "markdown": "Reports `map.get()!!` that can be replaced with `map.getValue()`, `map.getOrElse()`, and so on.\n\n**Example:**\n\n\n    fun test(map: Map<Int, String>): String = map.get(0)!!\n\nAfter the quick-fix is applied:\n\n\n    fun test(map: Map<Int, String>): String = map.getValue(0)\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SortModifiers",
+                "shortDescription": {
+                  "text": "Non-canonical modifier order"
+                },
+                "fullDescription": {
+                  "text": "Reports modifiers that do not follow the order recommended by the style guide. Sort modifiers quick-fix can be used to amend the code automatically. Examples: 'private inline fun correctOrder(f: () -> Unit) {} // <== Ok\n\n  infix private fun Int.wrongOrder(expr: Int) {} // <== wrong order, quick-fix amends the modifiers to \"private infix\"'",
+                  "markdown": "Reports modifiers that do not follow the order recommended by the [style guide](https://kotlinlang.org/docs/coding-conventions.html#modifiers-order).\n\n**Sort modifiers** quick-fix can be used to amend the code automatically.\n\nExamples:\n\n\n      private inline fun correctOrder(f: () -> Unit) {} // <== Ok\n\n      infix private fun Int.wrongOrder(expr: Int) {} // <== wrong order, quick-fix amends the modifiers to \"private infix\"\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "EnumEntryName",
+                "shortDescription": {
+                  "text": "Enum entry naming convention"
+                },
+                "fullDescription": {
+                  "text": "Reports enum entry names that do not follow the recommended naming conventions. Example: 'enum class Foo {\n    _Foo,\n    foo\n  }' To fix the problem rename enum entries to match the recommended naming conventions.",
+                  "markdown": "Reports enum entry names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n      enum class Foo {\n        _Foo,\n        foo\n      }\n\nTo fix the problem rename enum entries to match the recommended naming conventions."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Naming conventions",
+                      "index": 48,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceSubstringWithDropLast",
+                "shortDescription": {
+                  "text": "'substring' call should be replaced with 'dropLast' call"
+                },
+                "fullDescription": {
+                  "text": "Reports calls like 's.substring(0, s.length - x)' that can be replaced with 's.dropLast(x)'. Using corresponding functions makes your code simpler. The quick-fix replaces the 'substring' call with 'dropLast'. Example: 'fun foo(s: String) {\n      s.substring(0, s.length - 5)\n  }' After the quick-fix is applied: 'fun foo(s: String) {\n      s.dropLast(5)\n  }'",
+                  "markdown": "Reports calls like `s.substring(0, s.length - x)` that can be replaced with `s.dropLast(x)`.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `dropLast`.\n\n**Example:**\n\n\n      fun foo(s: String) {\n          s.substring(0, s.length - 5)\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(s: String) {\n          s.dropLast(5)\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SetterBackingFieldAssignment",
+                "shortDescription": {
+                  "text": "Existing backing field without assignment"
+                },
+                "fullDescription": {
+                  "text": "Reports property setters that don't update the backing field. The quick-fix adds an assignment to the backing field. Example: 'class Test {\n      var foo: Int = 1\n          set(value) {\n          }\n  }' After the quick-fix is applied: 'class Test {\n      var foo: Int = 1\n          set(value) {\n              field = value\n          }\n  }'",
+                  "markdown": "Reports property setters that don't update the backing field.\n\nThe quick-fix adds an assignment to the backing field.\n\n**Example:**\n\n\n      class Test {\n          var foo: Int = 1\n              set(value) {\n              }\n      }\n\nAfter the quick-fix is applied:\n\n\n      class Test {\n          var foo: Int = 1\n              set(value) {\n                  field = value\n              }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "CopyWithoutNamedArguments",
+                "shortDescription": {
+                  "text": "'copy' method of data class is called without named arguments"
+                },
+                "fullDescription": {
+                  "text": "Reports calls to a data class' 'copy()' method without named arguments. As all arguments of the 'copy()' function are optional, it might be hard to understand what properties are modified. Providing parameter names explicitly makes code easy to understand without navigating to the 'data class' declaration. Example: 'data class User(val name: String, val age: Int)\n\n  fun copyUser(user: User): User {\n      return user.copy(\"John\")\n  }' A quick-fix provides parameter names to all 'copy()' arguments: 'data class User(val name: String, val age: Int)\n\n  fun copyUser(user: User): User {\n      return user.copy(name = \"John\")\n  }'",
+                  "markdown": "Reports calls to a data class' `copy()` method without named arguments.\n\n\nAs all arguments of the `copy()` function are optional, it might be hard to understand what properties are modified.\nProviding parameter names explicitly makes code easy to understand without navigating to the `data class` declaration.\n\n**Example:**\n\n\n      data class User(val name: String, val age: Int)\n\n      fun copyUser(user: User): User {\n          return user.copy(\"John\")\n      }\n\nA quick-fix provides parameter names to all `copy()` arguments:\n\n\n      data class User(val name: String, val age: Int)\n\n      fun copyUser(user: User): User {\n          return user.copy(name = \"John\")\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KotlinDeprecation",
+                "shortDescription": {
+                  "text": "Usage of redundant or deprecated syntax or deprecated symbols"
+                },
+                "fullDescription": {
+                  "text": "Reports obsolete language features and unnecessarily verbose code constructs during the code cleanup operation (Code | Code Cleanup). A quick-fix automatically replaces usages of obsolete language features or unnecessarily verbose code constructs with compact and up-to-date syntax. It also replaces deprecated symbols with their proposed substitutions.",
+                  "markdown": "Reports obsolete language features and unnecessarily verbose code constructs during the code cleanup operation (**Code \\| Code Cleanup** ).\n\n\nA quick-fix automatically replaces usages of obsolete language features or unnecessarily verbose code constructs with compact and up-to-date syntax.\n\n\nIt also replaces deprecated symbols with their proposed substitutions."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Migration",
+                      "index": 15,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceSubstringWithTake",
+                "shortDescription": {
+                  "text": "'substring' call should be replaced with 'take' call"
+                },
+                "fullDescription": {
+                  "text": "Reports calls like 's.substring(0, x)' that can be replaced with 's.take(x)'. Using 'take()' makes your code simpler. The quick-fix replaces the 'substring' call with 'take()'. Example: 'fun foo(s: String) {\n      s.substring(0, 10)\n  }' After the quick-fix is applied: 'fun foo(s: String) {\n      s.take(10)\n  }'",
+                  "markdown": "Reports calls like `s.substring(0, x)` that can be replaced with `s.take(x)`.\n\nUsing `take()` makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `take()`.\n\n**Example:**\n\n\n      fun foo(s: String) {\n          s.substring(0, 10)\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(s: String) {\n          s.take(10)\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ConvertCallChainIntoSequence",
+                "shortDescription": {
+                  "text": "Call chain on collection could be converted into 'Sequence' to improve performance"
+                },
+                "fullDescription": {
+                  "text": "Reports call chain on a 'Collection' that should be converted into Sequence. Each 'Collection' transforming function (such as 'map()' or 'filter()') creates a new 'Collection' (typically 'List' or 'Set') under the hood. In case of multiple consequent calls, and a huge number of items in 'Collection', memory traffic might be significant. In such a case, using 'Sequence' is preferred. Example: 'class Entity(val key: String, val value: String)\n\n  fun getValues(lines: List<String>) = lines\n      .filter { it.isNotEmpty() }\n      .map { it.split(',', limit = 2) }\n      .filter { it.size == 2 }\n      .map { Entity(it[0], it[1]) }' A quick-fix wraps call chain into 'asSequence()' and 'toList()': 'class Entity(val key: String, val value: String)\n\n  fun getValues(lines: List<String>) = lines\n      .asSequence()\n      .filter { it.isNotEmpty() }\n      .map { it.split(',', limit = 2) }\n      .filter { it.size == 2 }\n      .map { Entity(it[0], it[1]) }\n      .toList()'",
+                  "markdown": "Reports call chain on a `Collection` that should be converted into **Sequence** .\n\nEach `Collection` transforming function (such as `map()` or `filter()`) creates a new\n`Collection` (typically `List` or `Set`) under the hood.\nIn case of multiple consequent calls, and a huge number of items in `Collection`, memory traffic might be significant.\nIn such a case, using `Sequence` is preferred.\n\n**Example:**\n\n\n      class Entity(val key: String, val value: String)\n\n      fun getValues(lines: List<String>) = lines\n          .filter { it.isNotEmpty() }\n          .map { it.split(',', limit = 2) }\n          .filter { it.size == 2 }\n          .map { Entity(it[0], it[1]) }\n\nA quick-fix wraps call chain into `asSequence()` and `toList()`:\n\n\n      class Entity(val key: String, val value: String)\n\n      fun getValues(lines: List<String>) = lines\n          .asSequence()\n          .filter { it.isNotEmpty() }\n          .map { it.split(',', limit = 2) }\n          .filter { it.size == 2 }\n          .map { Entity(it[0], it[1]) }\n          .toList()\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "AddOperatorModifier",
+                "shortDescription": {
+                  "text": "Function should have 'operator' modifier"
+                },
+                "fullDescription": {
+                  "text": "Reports a function that matches one of the operator conventions but lacks the 'operator' keyword. By adding the 'operator' modifier, you might allow function consumers to write idiomatic Kotlin code. Example: 'class Complex(val real: Double, val imaginary: Double) {\n      fun plus(other: Complex) =\n          Complex(real + other.real, imaginary + other.imaginary)\n  }\n\n  fun usage(a: Complex, b: Complex) {\n      a.plus(b)\n  }' A quick-fix adds the 'operator' modifier keyword: 'class Complex(val real: Double, val imaginary: Double) {\n      operator fun plus(other: Complex) =\n          Complex(real + other.real, imaginary + other.imaginary)\n  }\n\n  fun usage(a: Complex, b: Complex) {\n      a + b\n  }'",
+                  "markdown": "Reports a function that matches one of the operator conventions but lacks the `operator` keyword.\n\nBy adding the `operator` modifier, you might allow function consumers to write idiomatic Kotlin code.\n\n**Example:**\n\n\n      class Complex(val real: Double, val imaginary: Double) {\n          fun plus(other: Complex) =\n              Complex(real + other.real, imaginary + other.imaginary)\n      }\n\n      fun usage(a: Complex, b: Complex) {\n          a.plus(b)\n      }\n\nA quick-fix adds the `operator` modifier keyword:\n\n\n      class Complex(val real: Double, val imaginary: Double) {\n          operator fun plus(other: Complex) =\n              Complex(real + other.real, imaginary + other.imaginary)\n      }\n\n      fun usage(a: Complex, b: Complex) {\n          a + b\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "MayBeConstant",
+                "shortDescription": {
+                  "text": "Might be 'const'"
+                },
+                "fullDescription": {
+                  "text": "Reports top-level 'val' properties in objects that might be declared as 'const' for better performance and Java interoperability. Example: 'object A {\n      val foo = 1\n  }' After the quick-fix is applied: 'object A {\n      const val foo = 1\n  }'",
+                  "markdown": "Reports top-level `val` properties in objects that might be declared as `const` for better performance and Java interoperability.\n\n**Example:**\n\n\n      object A {\n          val foo = 1\n      }\n\nAfter the quick-fix is applied:\n\n\n      object A {\n          const val foo = 1\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceIsEmptyWithIfEmpty",
+                "shortDescription": {
+                  "text": "'if' condition can be replaced with lambda call"
+                },
+                "fullDescription": {
+                  "text": "Reports 'isEmpty', 'isBlank', 'isNotEmpty', or 'isNotBlank' calls in an 'if' statement to assign a default value. The quick-fix replaces the 'if' condition with 'ifEmpty' or 'ifBlank' calls. Example: 'fun test(list: List<Int>): List<Int> {\n      return if (list.isEmpty()) {\n          println()\n          foo()\n      } else {\n          list\n      }\n  }' After the quick-fix is applied: 'fun test(list: List<Int>): List<Int> {\n      return list.ifEmpty {\n          println()\n          foo()\n      }\n  }' This inspection only reports if the Kotlin language version of the project or module is 1.3 or higher.",
+                  "markdown": "Reports `isEmpty`, `isBlank`, `isNotEmpty`, or `isNotBlank` calls in an `if` statement to assign a default value.\n\nThe quick-fix replaces the `if` condition with `ifEmpty` or `ifBlank` calls.\n\n**Example:**\n\n\n      fun test(list: List<Int>): List<Int> {\n          return if (list.isEmpty()) {\n              println()\n              foo()\n          } else {\n              list\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(list: List<Int>): List<Int> {\n          return list.ifEmpty {\n              println()\n              foo()\n          }\n      }\n\nThis inspection only reports if the Kotlin language version of the project or module is 1.3 or higher."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceWithImportAlias",
+                "shortDescription": {
+                  "text": "Fully qualified name can be replaced with existing import alias"
+                },
+                "fullDescription": {
+                  "text": "Reports fully qualified names that can be replaced with an existing import alias. Example: 'import foo.Foo as Bar\nfun main() {\n    foo.Foo()\n}' After the quick-fix is applied: 'import foo.Foo as Bar\nfun main() {\n    Bar()\n}'",
+                  "markdown": "Reports fully qualified names that can be replaced with an existing import alias.\n\n**Example:**\n\n\n    import foo.Foo as Bar\n    fun main() {\n        foo.Foo()\n    }\n\nAfter the quick-fix is applied:\n\n\n    import foo.Foo as Bar\n    fun main() {\n        Bar()\n    }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SimplifyBooleanWithConstants",
+                "shortDescription": {
+                  "text": "Boolean expression can be simplified"
+                },
+                "fullDescription": {
+                  "text": "Reports boolean expression parts that can be reduced to constants. The quick-fix simplifies the condition. Example: 'fun use(arg: Boolean) {\n      if (false == arg) {\n\n      }\n  }' After the quick-fix is applied: 'fun use(arg: Boolean) {\n      if (!arg) {\n\n      }\n  }'",
+                  "markdown": "Reports boolean expression parts that can be reduced to constants.\n\nThe quick-fix simplifies the condition.\n\n**Example:**\n\n\n      fun use(arg: Boolean) {\n          if (false == arg) {\n\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun use(arg: Boolean) {\n          if (!arg) {\n\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantModalityModifier",
+                "shortDescription": {
+                  "text": "Redundant modality modifier"
+                },
+                "fullDescription": {
+                  "text": "Reports the modality modifiers that match the default modality of an element ('final' for most elements, 'open' for members with an 'override'). Example: 'final class Foo\n\n  open class Bar : Comparable<Bar> {\n      open override fun compareTo(other: Bar): Int = 0\n  }' After the quick-fix is applied: 'class Foo\n\n  open class Bar : Comparable<Bar> {\n      open override fun compareTo(other: Bar): Int = 0\n  }'",
+                  "markdown": "Reports the modality modifiers that match the default modality of an element (`final` for most elements, `open` for members with an `override`).\n\n**Example:**\n\n\n      final class Foo\n\n      open class Bar : Comparable<Bar> {\n          open override fun compareTo(other: Bar): Int = 0\n      }\n\nAfter the quick-fix is applied:\n\n\n      class Foo\n\n      open class Bar : Comparable<Bar> {\n          open override fun compareTo(other: Bar): Int = 0\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SimplifyAssertNotNull",
+                "shortDescription": {
+                  "text": "'assert' call can be replaced with '!!' or '?:'"
+                },
+                "fullDescription": {
+                  "text": "Reports 'assert' calls that check a not null value of the declared variable. Using '!!' or '?:' makes your code simpler. The quick-fix replaces 'assert' with '!!' or '?:' operator in the variable initializer. Example: 'fun foo(p: Array<String?>) {\n      val v = p[0]\n      assert(v != null, { \"Should be not null\" })\n  }' After the quick-fix is applied: 'fun foo(p: Array<String?>) {\n      val v = p[0] ?: error(\"Should be not null\")\n  }'",
+                  "markdown": "Reports `assert` calls that check a not null value of the declared variable.\n\nUsing `!!` or `?:` makes your code simpler.\n\nThe quick-fix replaces `assert` with `!!` or `?:` operator in the variable initializer.\n\n**Example:**\n\n\n      fun foo(p: Array<String?>) {\n          val v = p[0]\n          assert(v != null, { \"Should be not null\" })\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(p: Array<String?>) {\n          val v = p[0] ?: error(\"Should be not null\")\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ConvertNaNEquality",
+                "shortDescription": {
+                  "text": "Convert equality check with 'NaN' to 'isNaN' call"
+                },
+                "fullDescription": {
+                  "text": "Reports an equality check with 'Float.NaN' or 'Double.NaN' that should be replaced with an 'isNaN()' check. According to IEEE 754, equality check against NaN always returns 'false', even for 'NaN == NaN'. Therefore, such a check is likely to be a mistake. A quick-fix replaces comparison with 'isNaN()' check that uses a different comparison technique and handles 'NaN' values correctly. Example: 'fun check(value: Double): Boolean {\n      return Double.NaN == value\n  }' After the fix is applied: 'fun check(value: Double): Boolean {\n      return value.isNaN()\n  }'",
+                  "markdown": "Reports an equality check with `Float.NaN` or `Double.NaN` that should be replaced with an `isNaN()` check.\n\n\nAccording to IEEE 754, equality check against NaN always returns `false`, even for `NaN == NaN`.\nTherefore, such a check is likely to be a mistake.\n\nA quick-fix replaces comparison with `isNaN()` check that uses a different comparison technique and handles `NaN` values correctly.\n\n**Example:**\n\n\n      fun check(value: Double): Boolean {\n          return Double.NaN == value\n      }\n\nAfter the fix is applied:\n\n\n      fun check(value: Double): Boolean {\n          return value.isNaN()\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KotlinPlaceholderCountMatchesArgumentCount",
+                "shortDescription": {
+                  "text": "Number of placeholders does not match number of arguments in logging call"
+                },
+                "fullDescription": {
+                  "text": "Reports SLF4J or Log4j 2 logging calls, such as 'logger.info(\"{}: {}\", key)' where the number of '{}' placeholders in the logger message doesn't match the number of other arguments to the logging call.",
+                  "markdown": "Reports SLF4J or Log4j 2 logging calls, such as `logger.info(\"{}: {}\", key)` where the number of `{}` placeholders in the logger message doesn't match the number of other arguments to the logging call."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Logging",
+                      "index": 155,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceManualRangeWithIndicesCalls",
+                "shortDescription": {
+                  "text": "Range can be converted to indices or iteration"
+                },
+                "fullDescription": {
+                  "text": "Reports 'until' and 'rangeTo' operators that can be replaced with 'Collection.indices' or iteration over collection inside 'for' loop. Using syntactic sugar makes your code simpler. The quick-fix replaces the manual range with the corresponding construction. Example: 'fun main(args: Array<String>) {\n      for (index in 0..args.size - 1) {\n          println(args[index])\n      }\n  }' After the quick-fix is applied: 'fun main(args: Array<String>) {\n      for (element in args) {\n          println(element)\n      }\n  }'",
+                  "markdown": "Reports `until` and `rangeTo` operators that can be replaced with `Collection.indices` or iteration over collection inside `for` loop.\n\nUsing syntactic sugar makes your code simpler.\n\nThe quick-fix replaces the manual range with the corresponding construction.\n\n**Example:**\n\n\n      fun main(args: Array<String>) {\n          for (index in 0..args.size - 1) {\n              println(args[index])\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun main(args: Array<String>) {\n          for (element in args) {\n              println(element)\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KotlinLoggerInitializedWithForeignClass",
+                "shortDescription": {
+                  "text": "Logger initialized with foreign class"
+                },
+                "fullDescription": {
+                  "text": "Reports 'Logger' instances initialized with a class literal other than the class the 'Logger' resides in. This can happen when copy-pasting from another class. It may result in logging events under an unexpected category and incorrect filtering. Use the inspection options to specify the logger factory classes and methods recognized by this inspection. Example: 'class AnotherService\nclass MyService {\n    private val logger = LoggerFactory.getLogger(AnotherService::class.java)\n}' After the quick-fix is applied: 'class MyService {\n    private val logger = LoggerFactory.getLogger(MyService::class.java)\n}'",
+                  "markdown": "Reports `Logger` instances initialized with a class literal other than the class the `Logger` resides in.\n\n\nThis can happen when copy-pasting from another class.\nIt may result in logging events under an unexpected category and incorrect filtering.\n\n\nUse the inspection options to specify the logger factory classes and methods recognized by this inspection.\n\n**Example:**\n\n\n    class AnotherService\n    class MyService {\n        private val logger = LoggerFactory.getLogger(AnotherService::class.java)\n    }\n\nAfter the quick-fix is applied:\n\n\n    class MyService {\n        private val logger = LoggerFactory.getLogger(MyService::class.java)\n    }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Logging",
+                      "index": 155,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RemoveToStringInStringTemplate",
+                "shortDescription": {
+                  "text": "Redundant call to 'toString()' in string template"
+                },
+                "fullDescription": {
+                  "text": "Reports calls to 'toString()' in string templates that can be safely removed. Example: 'fun foo(a: Int, b: Int) = a + b\n\n  fun test(): String {\n      return \"Foo: ${foo(0, 4).toString()}\" // 'toString()' is redundant\n  }' After the quick-fix is applied: 'fun foo(a: Int, b: Int) = a + b\n\n  fun test(): String {\n      return \"Foo: ${foo(0, 4)}\"\n  }'",
+                  "markdown": "Reports calls to `toString()` in string templates that can be safely removed.\n\n**Example:**\n\n      fun foo(a: Int, b: Int) = a + b\n\n      fun test(): String {\n          return \"Foo: ${foo(0, 4).toString()}\" // 'toString()' is redundant\n      }\n\nAfter the quick-fix is applied:\n\n      fun foo(a: Int, b: Int) = a + b\n\n      fun test(): String {\n          return \"Foo: ${foo(0, 4)}\"\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantAsSequence",
+                "shortDescription": {
+                  "text": "Redundant 'asSequence' call"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant 'asSequence()' call that can never have a positive performance effect. 'asSequence()' speeds up collection processing that includes multiple operations because it performs operations lazily and doesn't create intermediate collections. However, if a terminal operation (such as 'toList()') is used right after 'asSequence()', this doesn't give you any positive performance effect. Example: 'fun test(list: List<String>) {\n      list.asSequence().last()\n  }' After the quick-fix is applied: 'fun test(list: List<String>) {\n      list.last()\n  }'",
+                  "markdown": "Reports redundant `asSequence()` call that can never have a positive performance effect.\n\n\n`asSequence()` speeds up collection processing that includes multiple operations because it performs operations lazily\nand doesn't create intermediate collections.\n\n\nHowever, if a terminal operation (such as `toList()`) is used right after `asSequence()`, this doesn't give\nyou any positive performance effect.\n\n**Example:**\n\n\n      fun test(list: List<String>) {\n          list.asSequence().last()\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(list: List<String>) {\n          list.last()\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KotlinUnusedImport",
+                "shortDescription": {
+                  "text": "Unused import directive"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant 'import' statements. Default and unused imports can be safely removed. Example: 'import kotlin.*\n  import kotlin.collections.*\n  import kotlin.comparisons.*\n  import kotlin.io.*\n  import kotlin.ranges.*\n  import kotlin.sequences.*\n  import kotlin.text.*\n\n  // jvm specific\n  import java.lang.*\n  import kotlin.jvm.*\n\n  // js specific\n  import kotlin.js.*\n\n  import java.io.* // this import is unused and could be removed\n  import java.util.*\n\n  fun foo(list: ArrayList<String>) {\n      list.add(\"\")\n  }'",
+                  "markdown": "Reports redundant `import` statements.\n\nDefault and unused imports can be safely removed.\n\n**Example:**\n\n\n      import kotlin.*\n      import kotlin.collections.*\n      import kotlin.comparisons.*\n      import kotlin.io.*\n      import kotlin.ranges.*\n      import kotlin.sequences.*\n      import kotlin.text.*\n\n      // jvm specific\n      import java.lang.*\n      import kotlin.jvm.*\n\n      // js specific\n      import kotlin.js.*\n\n      import java.io.* // this import is unused and could be removed\n      import java.util.*\n\n      fun foo(list: ArrayList<String>) {\n          list.add(\"\")\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "CanBePrimaryConstructorProperty",
+                "shortDescription": {
+                  "text": "Property is explicitly assigned to constructor parameter"
+                },
+                "fullDescription": {
+                  "text": "Reports properties that are explicitly assigned to primary constructor parameters. Properties can be declared directly in the primary constructor, reducing the amount of code and increasing code readability. Example: 'class User(name: String) {\n      val name = name\n  }' A quick-fix joins the parameter and property declaration into a primary constructor parameter: 'class User(val name: String) {\n  }'",
+                  "markdown": "Reports properties that are explicitly assigned to primary constructor parameters.\n\nProperties can be declared directly in the primary constructor, reducing the amount of code and increasing code readability.\n\n**Example:**\n\n\n      class User(name: String) {\n          val name = name\n      }\n\nA quick-fix joins the parameter and property declaration into a primary constructor parameter:\n\n\n      class User(val name: String) {\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "JavaMapForEach",
+                "shortDescription": {
+                  "text": "Java Map.forEach method call should be replaced with Kotlin's forEach"
+                },
+                "fullDescription": {
+                  "text": "Reports a Java Map.'forEach' method call that can be replaced with Kotlin's forEach. Example: 'fun test(map: HashMap<Int, String>) {\n      map.forEach { (key, value) ->\n          foo(key, value)\n      }\n  }\n\n  fun foo(i: Int, s: String) {}' The quick fix removes parentheses: 'fun test(map: HashMap<Int, String>) {\n      map.forEach { key, value ->\n          foo(key, value)\n      }\n  }\n\n  fun foo(i: Int, s: String) {}'",
+                  "markdown": "Reports a Java Map.`forEach` method call that can be replaced with Kotlin's **forEach** .\n\n**Example:**\n\n\n      fun test(map: HashMap<Int, String>) {\n          map.forEach { (key, value) ->\n              foo(key, value)\n          }\n      }\n\n      fun foo(i: Int, s: String) {}\n\nThe quick fix removes parentheses:\n\n\n      fun test(map: HashMap<Int, String>) {\n          map.forEach { key, value ->\n              foo(key, value)\n          }\n      }\n\n      fun foo(i: Int, s: String) {}\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantObjectTypeCheck",
+                "shortDescription": {
+                  "text": "Non-idiomatic 'is' type check for an object"
+                },
+                "fullDescription": {
+                  "text": "Reports non-idiomatic 'is' type checks for an object. It's recommended to replace such checks with reference comparison. Example: 'object Foo\n\n  fun foo(arg: Any) = when {\n      arg is Foo -> ...\n      arg !is Foo -> ...\n  }' After the quick-fix is applied: 'object Foo\n\n  fun foo(arg: Any) = when {\n      arg === Foo -> ...\n      arg !== Foo -> ...\n  }'",
+                  "markdown": "Reports non-idiomatic `is` type checks for an object.\n\nIt's recommended to replace such checks with reference comparison.\n\n**Example:**\n\n\n      object Foo\n\n      fun foo(arg: Any) = when {\n          arg is Foo -> ...\n          arg !is Foo -> ...\n      }\n\nAfter the quick-fix is applied:\n\n\n      object Foo\n\n      fun foo(arg: Any) = when {\n          arg === Foo -> ...\n          arg !== Foo -> ...\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SuspendFunctionOnCoroutineScope",
+                "shortDescription": {
+                  "text": "Ambiguous coroutineContext due to CoroutineScope receiver of suspend function"
+                },
+                "fullDescription": {
+                  "text": "Reports calls and accesses of 'CoroutineScope' extensions or members inside suspend functions with 'CoroutineScope' receiver. When a function is 'suspend' and has 'CoroutineScope' receiver, it has ambiguous access to 'CoroutineContext' via 'kotlin.coroutines.coroutineContext' and via 'CoroutineScope.coroutineContext', and two these contexts are different in general. To improve this situation, one can wrap suspicious call inside 'coroutineScope { ... }' or get rid of 'CoroutineScope' function receiver.",
+                  "markdown": "Reports calls and accesses of `CoroutineScope` extensions or members inside suspend functions with `CoroutineScope` receiver.\n\nWhen a function is `suspend` and has `CoroutineScope` receiver,\nit has ambiguous access to `CoroutineContext` via `kotlin.coroutines.coroutineContext` and via `CoroutineScope.coroutineContext`,\nand two these contexts are different in general.\n\n\nTo improve this situation, one can wrap suspicious call inside `coroutineScope { ... }` or\nget rid of `CoroutineScope` function receiver."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "DifferentMavenStdlibVersion",
+                "shortDescription": {
+                  "text": "Library and maven plugin versions are different"
+                },
+                "fullDescription": {
+                  "text": "Reports different Kotlin stdlib and compiler versions. Using different versions of the Kotlin compiler and the standard library can lead to unpredictable runtime problems and should be avoided.",
+                  "markdown": "Reports different Kotlin stdlib and compiler versions.\n\nUsing different versions of the Kotlin compiler and the standard library can lead to unpredictable\nruntime problems and should be avoided."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin",
+                      "index": 2,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ImplicitNullableNothingType",
+                "shortDescription": {
+                  "text": "Implicit 'Nothing?' type"
+                },
+                "fullDescription": {
+                  "text": "Reports variables and functions with the implicit Nothing? type. Example: 'fun foo() = null' The quick fix specifies the return type explicitly: 'fun foo(): Nothing? = null'",
+                  "markdown": "Reports variables and functions with the implicit **Nothing?** type.\n\n**Example:**\n\n\n      fun foo() = null\n\nThe quick fix specifies the return type explicitly:\n\n\n      fun foo(): Nothing? = null\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceAssociateFunction",
+                "shortDescription": {
+                  "text": "'associate' can be replaced with 'associateBy' or 'associateWith'"
+                },
+                "fullDescription": {
+                  "text": "Reports calls to 'associate()' and 'associateTo()' that can be replaced with 'associateBy()' or 'associateWith()'. Both functions accept a transformer function applied to elements of a given sequence or collection (as a receiver). The pairs are then used to build the resulting 'Map'. Given the transformer refers to 'it', the 'associate[To]()' call can be replaced with more performant 'associateBy()' or 'associateWith()'. Examples: 'fun getKey(i: Int) = 1L\n  fun getValue(i: Int) = 1L\n\n  fun test() {\n      arrayOf(1).associate { getKey(it) to it }  // replaceable 'associate()'\n      listOf(1).associate { it to getValue(it) } // replaceable 'associate()'\n  }' After the quick-fix is applied: 'fun getKey(i: Int) = 1L\n  fun getValue(i: Int) = 1L\n\n  fun test() {\n      arrayOf(1).associateBy { getKey(it) }\n      listOf(1).associateWith { getValue(it) }\n  }'",
+                  "markdown": "Reports calls to `associate()` and `associateTo()` that can be replaced with `associateBy()` or `associateWith()`.\n\n\nBoth functions accept a transformer function applied to elements of a given sequence or collection (as a receiver).\nThe pairs are then used to build the resulting `Map`.\n\n\nGiven the transformer refers to `it`, the `associate[To]()` call can be replaced with more performant `associateBy()`\nor `associateWith()`.\n\n**Examples:**\n\n      fun getKey(i: Int) = 1L\n      fun getValue(i: Int) = 1L\n\n      fun test() {\n          arrayOf(1).associate { getKey(it) to it }  // replaceable 'associate()'\n          listOf(1).associate { it to getValue(it) } // replaceable 'associate()'\n      }\n\nAfter the quick-fix is applied:\n\n      fun getKey(i: Int) = 1L\n      fun getValue(i: Int) = 1L\n\n      fun test() {\n          arrayOf(1).associateBy { getKey(it) }\n          listOf(1).associateWith { getValue(it) }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ObsoleteExperimentalCoroutines",
+                "shortDescription": {
+                  "text": "Experimental coroutines usages are deprecated since 1.3"
+                },
+                "fullDescription": {
+                  "text": "Reports code that uses experimental coroutines. Such usages are incompatible with Kotlin 1.3+ and should be updated.",
+                  "markdown": "Reports code that uses experimental coroutines.\n\nSuch usages are incompatible with Kotlin 1.3+ and should be updated."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "error",
+                  "parameters": {
+                    "ideaSeverity": "ERROR",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Migration",
+                      "index": 15,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "LiftReturnOrAssignment",
+                "shortDescription": {
+                  "text": "Return or assignment can be lifted out"
+                },
+                "fullDescription": {
+                  "text": "Reports 'if', 'when', and 'try' statements that can be converted to expressions by lifting the 'return' statement or an assignment out. Example: 'fun foo(arg: Int): String {\n      when (arg) {\n          0 -> return \"Zero\"\n          1 -> return \"One\"\n          else -> return \"Multiple\"\n      }\n  }' After the quick-fix is applied: 'fun foo(arg: Int): String {\n      return when (arg) {\n          0 -> \"Zero\"\n          1 -> \"One\"\n          else -> \"Multiple\"\n      }\n  }'",
+                  "markdown": "Reports `if`, `when`, and `try` statements that can be converted to expressions by lifting the `return` statement or an assignment out.\n\n**Example:**\n\n\n      fun foo(arg: Int): String {\n          when (arg) {\n              0 -> return \"Zero\"\n              1 -> return \"One\"\n              else -> return \"Multiple\"\n          }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(arg: Int): String {\n          return when (arg) {\n              0 -> \"Zero\"\n              1 -> \"One\"\n              else -> \"Multiple\"\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SimplifyWhenWithBooleanConstantCondition",
+                "shortDescription": {
+                  "text": "Simplifiable 'when'"
+                },
+                "fullDescription": {
+                  "text": "Reports 'when' expressions with the constant 'true' or 'false' branches. Simplify \"when\" quick-fix can be used to amend the code automatically. Examples: 'fun redundant() {\n      when { // <== redundant, quick-fix simplifies the when expression to \"println(\"true\")\"\n          true -> println(\"true\")\n          else -> println(\"false\")\n      }\n  }'",
+                  "markdown": "Reports `when` expressions with the constant `true` or `false` branches.\n\n**Simplify \"when\"** quick-fix can be used to amend the code automatically.\n\nExamples:\n\n\n      fun redundant() {\n          when { // <== redundant, quick-fix simplifies the when expression to \"println(\"true\")\"\n              true -> println(\"true\")\n              else -> println(\"false\")\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KotlinConstantConditions",
+                "shortDescription": {
+                  "text": "Constant conditions"
+                },
+                "fullDescription": {
+                  "text": "Reports non-trivial conditions and values that are statically known to be always true, false, null or zero. While sometimes intended, often this is a sign of logical error in the program. Additionally, reports never reachable 'when' branches and some expressions that are statically known to fail always. Examples: 'fun process(x: Int?) {\n  val isNull = x == null\n  if (!isNull) {\n    if (x != null) {} // condition is always true\n    require(x!! < 0 && x > 10) // condition is always false\n  } else {\n    println(x!!) // !! operator will always fail\n  }\n}\nfun process(v: Any) {\n  when(v) {\n    is CharSequence -> println(v as Int) // cast will always fail\n    is String -> println(v) // branch is unreachable\n  }\n}' New in 2021.3",
+                  "markdown": "Reports non-trivial conditions and values that are statically known to be always true, false, null or zero. While sometimes intended, often this is a sign of logical error in the program. Additionally, reports never reachable `when` branches and some expressions that are statically known to fail always.\n\nExamples:\n\n\n    fun process(x: Int?) {\n      val isNull = x == null\n      if (!isNull) {\n        if (x != null) {} // condition is always true\n        require(x!! < 0 && x > 10) // condition is always false\n      } else {\n        println(x!!) // !! operator will always fail\n      }\n    }\n    fun process(v: Any) {\n      when(v) {\n        is CharSequence -> println(v as Int) // cast will always fail\n        is String -> println(v) // branch is unreachable\n      }\n    }\n\nNew in 2021.3"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ForEachParameterNotUsed",
+                "shortDescription": {
+                  "text": "Iterated elements are not used in forEach"
+                },
+                "fullDescription": {
+                  "text": "Reports 'forEach' loops that do not use iterable values. Example: 'listOf(1, 2, 3).forEach { }' The quick fix introduces anonymous parameter in the 'forEach' section: 'listOf(1, 2, 3).forEach { _ -> }'",
+                  "markdown": "Reports `forEach` loops that do not use iterable values.\n\n**Example:**\n\n\n      listOf(1, 2, 3).forEach { }\n\nThe quick fix introduces anonymous parameter in the `forEach` section:\n\n\n      listOf(1, 2, 3).forEach { _ -> }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "LeakingThis",
+                "shortDescription": {
+                  "text": "Leaking 'this' in constructor"
+                },
+                "fullDescription": {
+                  "text": "Reports unsafe operations with 'this' during object construction including: Accessing a non-final property during class initialization: from a constructor or property initialization Calling a non-final function during class initialization Using 'this' as a function argument in a constructor of a non-final class If other classes inherit from the given class, they may not be fully initialized at the moment when an unsafe operation is carried out. Example: 'abstract class Base {\n      val code = calculate()\n      abstract fun calculate(): Int\n  }\n\n  class Derived(private val x: Int) : Base() {\n      override fun calculate() = x\n  }\n\n  fun testIt() {\n      println(Derived(42).code) // Expected: 42, actual: 0\n  }'",
+                  "markdown": "Reports unsafe operations with `this` during object construction including:\n\n* Accessing a non-final property during class initialization: from a constructor or property initialization\n* Calling a non-final function during class initialization\n* Using `this` as a function argument in a constructor of a non-final class\n\n\nIf other classes inherit from the given class,\nthey may not be fully initialized at the moment when an unsafe operation is carried out.\n\n**Example:**\n\n\n      abstract class Base {\n          val code = calculate()\n          abstract fun calculate(): Int\n      }\n\n      class Derived(private val x: Int) : Base() {\n          override fun calculate() = x\n      }\n\n      fun testIt() {\n          println(Derived(42).code) // Expected: 42, actual: 0\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "AddVarianceModifier",
+                "shortDescription": {
+                  "text": "Type parameter can have 'in' or 'out' variance"
+                },
+                "fullDescription": {
+                  "text": "Reports type parameters that can have 'in' or 'out' variance. Using 'in' and 'out' variance provides more precise type inference in Kotlin and clearer code semantics. Example: 'class Box<T>(val obj: T)\n\n  fun consumeString(box: Box<String>) {}\n  fun consumeCharSequence(box: Box<CharSequence>) {}\n\n  fun usage(box: Box<String>) {\n      consumeString(box)\n      consumeCharSequence(box) // Compilation error\n  }' A quick-fix adds the matching variance modifier: 'class Box<out T>(val obj: T)\n\n  fun consumeString(box: Box<String>) {}\n  fun consumeCharSequence(box: Box<CharSequence>) {}\n\n  fun usage(box: Box<String>) ++{\n      consumeString(box)\n      consumeCharSequence(box) // OK\n  }'",
+                  "markdown": "Reports type parameters that can have `in` or `out` variance.\n\nUsing `in` and `out` variance provides more precise type inference in Kotlin and clearer code semantics.\n\n**Example:**\n\n\n      class Box<T>(val obj: T)\n\n      fun consumeString(box: Box<String>) {}\n      fun consumeCharSequence(box: Box<CharSequence>) {}\n\n      fun usage(box: Box<String>) {\n          consumeString(box)\n          consumeCharSequence(box) // Compilation error\n      }\n\nA quick-fix adds the matching variance modifier:\n\n\n      class Box<out T>(val obj: T)\n\n      fun consumeString(box: Box<String>) {}\n      fun consumeCharSequence(box: Box<CharSequence>) {}\n\n      fun usage(box: Box<String>) ++{\n          consumeString(box)\n          consumeCharSequence(box) // OK\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RemoveForLoopIndices",
+                "shortDescription": {
+                  "text": "Unused loop index"
+                },
+                "fullDescription": {
+                  "text": "Reports 'for' loops iterating over a collection using the 'withIndex()' function and not using the index variable. Use the \"Remove indices in 'for' loop\" quick-fix to clean up the code. Examples: 'fun foo(bar: List<String>) {\n     for ((index : Int, value: String) in bar.withIndex()) { // <== 'index' is unused\n         println(value)\n     }\n  }' After the quick-fix is applied: 'fun foo(bar: List<String>) {\n      for (value: String in bar) { // <== '.withIndex()' and 'index' are removed\n          println(value)\n      }\n  }'",
+                  "markdown": "Reports `for` loops iterating over a collection using the `withIndex()` function and not using the index variable.\n\nUse the \"Remove indices in 'for' loop\" quick-fix to clean up the code.\n\n**Examples:**\n\n\n      fun foo(bar: List<String>) {\n         for ((index : Int, value: String) in bar.withIndex()) { // <== 'index' is unused\n             println(value)\n         }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(bar: List<String>) {\n          for (value: String in bar) { // <== '.withIndex()' and 'index' are removed\n              println(value)\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantSuspendModifier",
+                "shortDescription": {
+                  "text": "Redundant 'suspend' modifier"
+                },
+                "fullDescription": {
+                  "text": "Reports 'suspend' modifier as redundant if no other suspending functions are called inside.",
+                  "markdown": "Reports `suspend` modifier as redundant if no other suspending functions are called inside."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SuspiciousAsDynamic",
+                "shortDescription": {
+                  "text": "Suspicious 'asDynamic' member invocation"
+                },
+                "fullDescription": {
+                  "text": "Reports usages of 'asDynamic' function on a receiver of dynamic type. 'asDynamic' function has no effect for expressions of dynamic type. 'asDynamic' function on a receiver of dynamic type can lead to runtime problems because 'asDynamic' will be executed in JavaScript environment, and such function may not be present at runtime. The intended way is to use this function on usual Kotlin type. Remove \"asDynamic\" invocation quick-fix can be used to amend the code automatically. Example: 'fun wrongUsage(d: Dynamic) {\n     d.asDynamic().foo() // <== redundant, quick-fix simplifies the call expression to \"d.foo()\"\n  }'",
+                  "markdown": "Reports usages of `asDynamic` function on a receiver of dynamic type.\n\n`asDynamic` function has no effect for expressions of dynamic type.\n\n`asDynamic` function on a receiver of dynamic type can lead to runtime problems because `asDynamic`\nwill be executed in JavaScript environment, and such function may not be present at runtime.\nThe intended way is to use this function on usual Kotlin type.\n\n**Remove \"asDynamic\" invocation** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n      fun wrongUsage(d: Dynamic) {\n         d.asDynamic().foo() // <== redundant, quick-fix simplifies the call expression to \"d.foo()\"\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "FromClosedRangeMigration",
+                "shortDescription": {
+                  "text": "MIN_VALUE step in fromClosedRange() since 1.3"
+                },
+                "fullDescription": {
+                  "text": "Reports 'IntProgression.fromClosedRange()' and 'LongProgression.fromClosedRange()' with 'MIN_VALUE' step. It is prohibited to call 'IntProgression.fromClosedRange()' and 'LongProgression.fromClosedRange()' with 'MIN_VALUE' step. All such calls should be checked during migration to Kotlin 1.3+. Example: 'IntProgression.fromClosedRange(12, 143, Int.MIN_VALUE)' To fix the problem change the step of the progression.",
+                  "markdown": "Reports `IntProgression.fromClosedRange()` and `LongProgression.fromClosedRange()` with `MIN_VALUE` step.\n\n\nIt is prohibited to call `IntProgression.fromClosedRange()` and `LongProgression.fromClosedRange()` with\n`MIN_VALUE` step. All such calls should be checked during migration to Kotlin 1.3+.\n\n**Example:**\n\n\n      IntProgression.fromClosedRange(12, 143, Int.MIN_VALUE)\n\nTo fix the problem change the step of the progression."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Migration",
+                      "index": 15,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RemoveRedundantBackticks",
+                "shortDescription": {
+                  "text": "Redundant backticks"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant backticks in references. Some of the Kotlin keywords are valid identifiers in Java, for example: 'in', 'object', 'is'. If a Java library uses a Kotlin keyword for a method, you can still call the method escaping it with the backtick character ('`'), for example, 'foo.`is`(bar)'. Sometimes this escaping is redundant and can be safely omitted. The inspection discovers and reports such cases and is paired with the 'Remove redundant backticks' quick-fix, which allows you to amend the highlighted code. Examples: 'fun `is`(x: String) {}\n  fun foo() {\n      `is`(\"bar\") // 'is' is a keyword, backticks are required\n  }\n\n  fun `test that smth works as designed`() {} // OK, complex identifier for readability improvement\n\n  val `a` = 1  // no need for backticks'",
+                  "markdown": "Reports redundant backticks in references.\n\n\nSome of the Kotlin keywords are valid identifiers in Java, for example: `in`, `object`, `is`.\nIf a Java library uses a Kotlin keyword for a method, you can still call the method escaping it\nwith the backtick character (`````), for example, ``foo.`is`(bar)``.\nSometimes this escaping is redundant and can be safely omitted. The inspection discovers and reports such cases and is\npaired with the 'Remove redundant backticks' quick-fix, which allows you to amend the highlighted code.\n\n**Examples:**\n\n\n      fun `is`(x: String) {}\n      fun foo() {\n          `is`(\"bar\") // 'is' is a keyword, backticks are required\n      }\n\n      fun `test that smth works as designed`() {} // OK, complex identifier for readability improvement\n\n      val `a` = 1  // no need for backticks\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SimplifyNestedEachInScopeFunction",
+                "shortDescription": {
+                  "text": "Scope function with nested forEach can be simplified"
+                },
+                "fullDescription": {
+                  "text": "Reports 'forEach' functions in the scope functions such as 'also' or 'apply' that can be simplified. Convert forEach call to onEach quick-fix can be used to amend the code automatically. Examples: 'fun test(list: List<Int>) {\n      val x = list.also { it.forEach { it + 4 } }.toString()\n      val y = list.apply { forEach { println(it) } }\n  }' After the quick-fix is applied: 'fun test(list: List<Int>) {\n      val x = list.onEach { it + 4 }.toString()\n      val y = list.onEach { println(it) }\n  }'",
+                  "markdown": "Reports `forEach` functions in the scope functions such as `also` or `apply` that can be simplified.\n\n**Convert forEach call to onEach** quick-fix can be used to amend the code automatically.\n\nExamples:\n\n\n      fun test(list: List<Int>) {\n          val x = list.also { it.forEach { it + 4 } }.toString()\n          val y = list.apply { forEach { println(it) } }\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test(list: List<Int>) {\n          val x = list.onEach { it + 4 }.toString()\n          val y = list.onEach { println(it) }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UnsafeCastFromDynamic",
+                "shortDescription": {
+                  "text": "Implicit (unsafe) cast from dynamic type"
+                },
+                "fullDescription": {
+                  "text": "Reports expressions with a dynamic type in the specified inspection scope that are implicitly cast to another type.",
+                  "markdown": "Reports expressions with a dynamic type in the specified inspection scope that are implicitly cast to another type."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "PublicApiImplicitType",
+                "shortDescription": {
+                  "text": "Public API declaration with implicit return type"
+                },
+                "fullDescription": {
+                  "text": "Reports 'public' and 'protected' functions and properties that have an implicit return type. For API stability reasons, it's recommended to specify such types explicitly. Example: 'fun publicFunctionWhichAbusesTypeInference() =\n      otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()' After the quick-fix is applied: 'fun publicFunctionWhichAbusesTypeInference(): Api =\n      otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()'",
+                  "markdown": "Reports `public` and `protected` functions and properties that have an implicit return type.\nFor API stability reasons, it's recommended to specify such types explicitly.\n\n**Example:**\n\n\n      fun publicFunctionWhichAbusesTypeInference() =\n          otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()\n\nAfter the quick-fix is applied:\n\n\n      fun publicFunctionWhichAbusesTypeInference(): Api =\n          otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Other problems",
+                      "index": 145,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceMapIndexedWithListGenerator",
+                "shortDescription": {
+                  "text": "Replace 'mapIndexed' with List generator"
+                },
+                "fullDescription": {
+                  "text": "Reports a 'mapIndexed' call that can be replaced by 'List' generator. Example: 'val a = listOf(1, 2, 3).mapIndexed { i, _ ->\n      i + 42\n  }' After the quick-fix is applied: 'val a = List(listOf(1, 2, 3).size) { i ->\n          i + 42\n  }'",
+                  "markdown": "Reports a `mapIndexed` call that can be replaced by `List` generator.\n\n**Example:**\n\n\n      val a = listOf(1, 2, 3).mapIndexed { i, _ ->\n          i + 42\n      }\n\nAfter the quick-fix is applied:\n\n\n      val a = List(listOf(1, 2, 3).size) { i ->\n              i + 42\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ControlFlowWithEmptyBody",
+                "shortDescription": {
+                  "text": "Control flow with empty body"
+                },
+                "fullDescription": {
+                  "text": "Reports 'if', 'while', 'do' or 'for' statements with empty bodies. While occasionally intended, this construction is confusing and often the result of a typo. A quick-fix removes a statement. Example: 'if (a > b) {}'",
+                  "markdown": "Reports `if`, `while`, `do` or `for` statements with empty bodies.\n\nWhile occasionally intended, this construction is confusing and often the result of a typo.\n\nA quick-fix removes a statement.\n\n**Example:**\n\n\n      if (a > b) {}\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "LoopToCallChain",
+                "shortDescription": {
+                  "text": "Loop can be replaced with stdlib operations"
+                },
+                "fullDescription": {
+                  "text": "Reports 'for' loops that can be replaced with a sequence of stdlib operations (like 'map', 'filter', and so on). Example: 'fun foo(list: List<String>): List<Int> {\n  val result = ArrayList<Int>()\n  for (s in list) {\n     if (s.length > 0)\n       result.add(s.hashCode())\n     }\n  return result\n}' After the quick-fix is applied: 'fun foo(list: List<String>): List<Int> {\n  val result = list\n    .filter { it.length > 0 }\n    .map { it.hashCode() }\n  return result\n}'",
+                  "markdown": "Reports `for` loops that can be replaced with a sequence of stdlib operations (like `map`, `filter`, and so on).\n\n**Example:**\n\n\n    fun foo(list: List<String>): List<Int> {\n      val result = ArrayList<Int>()\n      for (s in list) {\n         if (s.length > 0)\n           result.add(s.hashCode())\n         }\n      return result\n    }\n\nAfter the quick-fix is applied:\n\n\n    fun foo(list: List<String>): List<Int> {\n      val result = list\n        .filter { it.length > 0 }\n        .map { it.hashCode() }\n      return result\n    }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RemoveEmptyClassBody",
+                "shortDescription": {
+                  "text": "Replace empty class body"
+                },
+                "fullDescription": {
+                  "text": "Reports declarations of classes and objects with an empty body. Use the 'Remove redundant empty class body' quick-fix to clean up the code. Examples: 'class EmptyA() {} // <== empty body\n\n  class EmptyB {\n      companion object {} // <== empty body\n  }\n\n  fun emptyC() {\n     object {} // <== anonymous object, it's ok (not reported)\n  }' After the quick fix is applied: 'class EmptyA()\n\n  class EmptyB {\n      companion object\n  }\n\n  fun emptyC() {\n     object {}\n  }'",
+                  "markdown": "Reports declarations of classes and objects with an empty body.\n\nUse the 'Remove redundant empty class body' quick-fix to clean up the code.\n\n**Examples:**\n\n\n      class EmptyA() {} // <== empty body\n\n      class EmptyB {\n          companion object {} // <== empty body\n      }\n\n      fun emptyC() {\n         object {} // <== anonymous object, it's ok (not reported)\n      }\n\nAfter the quick fix is applied:\n\n\n      class EmptyA()\n\n      class EmptyB {\n          companion object\n      }\n\n      fun emptyC() {\n         object {}\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "CanBeParameter",
+                "shortDescription": {
+                  "text": "Constructor parameter is never used as a property"
+                },
+                "fullDescription": {
+                  "text": "Reports primary constructor parameters that can have 'val' or 'var' removed. Class properties declared in the constructor increase memory consumption. If the parameter value is only used in the constructor, you can omit them. Note that the referenced object might be garbage-collected earlier. Example: 'class Task(val name: String) {\n      init {\n          print(\"Task created: $name\")\n      }\n  }' A quick-fix removes the extra 'val' or 'var' keyword: 'class Task(name: String) {\n      init {\n          print(\"Task created: $name\")\n      }\n  }'",
+                  "markdown": "Reports primary constructor parameters that can have `val` or `var` removed.\n\n\nClass properties declared in the constructor increase memory consumption.\nIf the parameter value is only used in the constructor, you can omit them.\n\nNote that the referenced object might be garbage-collected earlier.\n\n**Example:**\n\n\n      class Task(val name: String) {\n          init {\n              print(\"Task created: $name\")\n          }\n      }\n\nA quick-fix removes the extra `val` or `var` keyword:\n\n\n      class Task(name: String) {\n          init {\n              print(\"Task created: $name\")\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantReturnLabel",
+                "shortDescription": {
+                  "text": "Redundant 'return' label"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant return labels outside of lambda expressions. Example: 'fun test() {\n      return@test\n  }' After the quick-fix is applied: 'fun test() {\n      return\n  }'",
+                  "markdown": "Reports redundant return labels outside of lambda expressions.\n\n**Example:**\n\n\n      fun test() {\n          return@test\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test() {\n          return\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "PackageName",
+                "shortDescription": {
+                  "text": "Package naming convention"
+                },
+                "fullDescription": {
+                  "text": "Reports package names that do not follow the naming conventions. You can specify the required pattern in the inspection options. Recommended naming conventions: names of packages are always lowercase and should not contain underscores. Example: 'org.example.project' Using multi-word names is generally discouraged, but if you do need to use multiple words, you can either just concatenate them together or use camel case Example: 'org.example.myProject'",
+                  "markdown": "Reports package names that do not follow the naming conventions.\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#naming-rules): names of packages are always lowercase and should not contain underscores.\n\n**Example:**\n`org.example.project`\n\nUsing multi-word names is generally discouraged, but if you do need to use multiple words, you can either just concatenate them together or use camel case\n\n**Example:**\n`org.example.myProject`"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Naming conventions",
+                      "index": 48,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ProhibitUseSiteTargetAnnotationsOnSuperTypesMigration",
+                "shortDescription": {
+                  "text": "Meaningless annotations targets on superclass"
+                },
+                "fullDescription": {
+                  "text": "Reports meaningless annotation targets on superclasses since Kotlin 1.4. Annotation targets such as '@get:' are meaningless on superclasses and are prohibited. Example: 'interface Foo\n\n  annotation class Ann\n\n  class E : @field:Ann @get:Ann @set:Ann @setparam:Ann Foo' After the quick-fix is applied: 'interface Foo\n\n  annotation class Ann\n\n  class E : Foo' This inspection only reports if the Kotlin language level of the project or module is 1.4 or higher.",
+                  "markdown": "Reports meaningless annotation targets on superclasses since Kotlin 1.4.\n\nAnnotation targets such as `@get:` are meaningless on superclasses and are prohibited.\n\n**Example:**\n\n\n      interface Foo\n\n      annotation class Ann\n\n      class E : @field:Ann @get:Ann @set:Ann @setparam:Ann Foo\n\nAfter the quick-fix is applied:\n\n\n      interface Foo\n\n      annotation class Ann\n\n      class E : Foo\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "error",
+                  "parameters": {
+                    "ideaSeverity": "ERROR",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Migration",
+                      "index": 15,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceWithEnumMap",
+                "shortDescription": {
+                  "text": "'HashMap' can be replaced with 'EnumMap'"
+                },
+                "fullDescription": {
+                  "text": "Reports 'hashMapOf' function or 'HashMap' constructor calls that can be replaced with an 'EnumMap' constructor call. Using 'EnumMap' constructor makes your code simpler. The quick-fix replaces the function call with the 'EnumMap' constructor call. Example: 'enum class E {\n      A, B\n  }\n\n  fun getMap(): Map<E, String> = hashMapOf()' After the quick-fix is applied: 'enum class E {\n      A, B\n  }\n\n  fun getMap(): Map<E, String> = EnumMap(E::class.java)'",
+                  "markdown": "Reports `hashMapOf` function or `HashMap` constructor calls that can be replaced with an `EnumMap` constructor call.\n\nUsing `EnumMap` constructor makes your code simpler.\n\nThe quick-fix replaces the function call with the `EnumMap` constructor call.\n\n**Example:**\n\n\n      enum class E {\n          A, B\n      }\n\n      fun getMap(): Map<E, String> = hashMapOf()\n\nAfter the quick-fix is applied:\n\n\n      enum class E {\n          A, B\n      }\n\n      fun getMap(): Map<E, String> = EnumMap(E::class.java)\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Other problems",
+                      "index": 145,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SuspiciousCollectionReassignment",
+                "shortDescription": {
+                  "text": "Augmented assignment creates a new collection under the hood"
+                },
+                "fullDescription": {
+                  "text": "Reports augmented assignment ('+=') expressions on read-only 'Collection'. Augment assignment ('+=') expression on read-only 'Collection' doesn't modify the target collection, it creates a new one under the hood which can be misleading and lead to performance issues. Change type to mutable quick-fix can be used to amend the code automatically. Example: 'fun test() {\n      var list = listOf(0)\n      list += 42 // new list is created, variable 'list' still contains only '0'\n  }' After the quick-fix is applied: 'fun test() {\n      val list = mutableListOf(0)\n      list += 42\n  }'",
+                  "markdown": "Reports augmented assignment (`+=`) expressions on read-only `Collection`.\n\nAugment assignment (`+=`) expression on read-only `Collection` doesn't modify the target collection,\nit creates a new one under the hood which can be misleading and lead to performance issues.\n\n**Change type to mutable** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n      fun test() {\n          var list = listOf(0)\n          list += 42 // new list is created, variable 'list' still contains only '0'\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun test() {\n          val list = mutableListOf(0)\n          list += 42\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantNotNullExtensionReceiverOfInline",
+                "shortDescription": {
+                  "text": "'inline fun' extension receiver can be explicitly nullable until Kotlin 1.2"
+                },
+                "fullDescription": {
+                  "text": "Reports inline functions with non-nullable extension receivers which don't use the fact that extension receiver is not nullable. Before Kotlin 1.2, calls of 'inline fun' with flexible nullable extension receiver (a platform type with an unknown nullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode (see KT-12899). Thus functions which do not use the fact that extension receiver is not nullable are dangerous in Kotlin until 1.2 and it's recommended to make such functions to have nullable receiver. Example: 'inline fun String.greet() {\n      println(\"Hello, $this!\")\n  }\n\n  fun main() {\n      // `System.getProperty` returns not denotable `String!` type\n      val user = System.getProperty(\"user.name\")\n      user.greet()\n  }' After the quick-fix is applied: 'inline fun String.greet() {\n      println(\"Hello, $this!\")\n  }\n\n  fun main() {\n      // `System.getProperty` returns not denotable `String!` type\n      val user = System.getProperty(\"user.name\")\n      user.greet()\n  }' This inspection only reports if the Kotlin language level of the project or module is lower than 1.2.",
+                  "markdown": "Reports inline functions with non-nullable extension receivers which don't use the fact that extension receiver is not nullable.\n\n\nBefore Kotlin 1.2, calls of `inline fun` with flexible nullable extension receiver (a platform type with an unknown\nnullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode\n(see [KT-12899](https://youtrack.jetbrains.com/issue/KT-12899)).\n\n\nThus functions which do not use the fact that extension receiver is not nullable are dangerous in Kotlin until 1.2 and it's\nrecommended to make such functions to have nullable receiver.\n\n**Example:**\n\n\n      inline fun String.greet() {\n          println(\"Hello, $this!\")\n      }\n\n      fun main() {\n          // `System.getProperty` returns not denotable `String!` type\n          val user = System.getProperty(\"user.name\")\n          user.greet()\n      }\n\nAfter the quick-fix is applied:\n\n\n      inline fun String.greet() {\n          println(\"Hello, $this!\")\n      }\n\n      fun main() {\n          // `System.getProperty` returns not denotable `String!` type\n          val user = System.getProperty(\"user.name\")\n          user.greet()\n      }\n\nThis inspection only reports if the Kotlin language level of the project or module is lower than 1.2."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Java interop issues",
+                      "index": 55,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantElvisReturnNull",
+                "shortDescription": {
+                  "text": "Redundant '?: return null'"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant '?: return null' Example: 'fun foo(): Int? {\n      ...\n  }\n\n  fun test() : Int? {\n      return foo() ?: return null\n  }' After the quick-fix is applied: 'fun foo(): Int? {\n      ...\n  }\n\n  fun test() : Int? {\n      return foo()\n  }'",
+                  "markdown": "Reports redundant `?: return null`\n\n**Example:**\n\n\n      fun foo(): Int? {\n          ...\n      }\n\n      fun test() : Int? {\n          return foo() ?: return null\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(): Int? {\n          ...\n      }\n\n      fun test() : Int? {\n          return foo()\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "PrivatePropertyName",
+                "shortDescription": {
+                  "text": "Private property naming convention"
+                },
+                "fullDescription": {
+                  "text": "Reports private property names that do not follow the recommended naming conventions. Consistent naming allows for easier code reading and understanding. According to the Kotlin official style guide, private property names should start with a lowercase letter and use camel case. Optionally, underscore prefix is allowed but only for private properties. It is possible to introduce other naming rules by changing the \"Pattern\" regular expression. Example: 'val _My_Cool_Property = \"\"' A quick-fix renames the class according to the Kotlin naming conventions: 'val _myCoolProperty = \"\"'",
+                  "markdown": "Reports private property names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#naming-rules),\nprivate property names should start with a lowercase letter and use camel case.\nOptionally, underscore prefix is allowed but only for **private** properties.\n\nIt is possible to introduce other naming rules by changing the \"Pattern\" regular expression.\n\n**Example:**\n\n\n      val _My_Cool_Property = \"\"\n\nA quick-fix renames the class according to the Kotlin naming conventions:\n\n\n      val _myCoolProperty = \"\"\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Naming conventions",
+                      "index": 48,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ObsoleteKotlinJsPackages",
+                "shortDescription": {
+                  "text": "'kotlin.browser' and 'kotlin.dom' packages are deprecated since 1.4"
+                },
+                "fullDescription": {
+                  "text": "Reports usages of 'kotlin.dom' and 'kotlin.browser' packages. These packages were moved to 'kotlinx.dom' and 'kotlinx.browser' respectively in Kotlin 1.4+.",
+                  "markdown": "Reports usages of `kotlin.dom` and `kotlin.browser` packages.\n\nThese packages were moved to `kotlinx.dom` and `kotlinx.browser`\nrespectively in Kotlin 1.4+."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "error",
+                  "parameters": {
+                    "ideaSeverity": "ERROR",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Migration",
+                      "index": 15,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "CascadeIf",
+                "shortDescription": {
+                  "text": "Cascade if can be replaced with when"
+                },
+                "fullDescription": {
+                  "text": "Reports 'if' statements with three or more branches that can be replaced with the 'when' expression. Example: 'fun checkIdentifier(id: String) {\n      fun Char.isIdentifierStart() = this in 'A'..'z'\n      fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n      if (id.isEmpty()) {\n          print(\"Identifier is empty\")\n      } else if (!id.first().isIdentifierStart()) {\n          print(\"Identifier should start with a letter\")\n      } else if (!id.subSequence(1, id.length).all(Char::isIdentifierPart)) {\n          print(\"Identifier should contain only letters and numbers\")\n      }\n  }' A quick-fix converts the 'if' expression to 'when': 'fun checkIdentifier(id: String) {\n      fun Char.isIdentifierStart() = this in 'A'..'z'\n      fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n      when {\n          id.isEmpty() -> {\n              print(\"Identifier is empty\")\n          }\n          !id.first().isIdentifierStart() -> {\n              print(\"Identifier should start with a letter\")\n          }\n          !id.subSequence(1, id.length).all(Char::isIdentifierPart) -> {\n              print(\"Identifier should contain only letters and numbers\")\n          }\n      }\n  }'",
+                  "markdown": "Reports `if` statements with three or more branches that can be replaced with the `when` expression.\n\n**Example:**\n\n\n      fun checkIdentifier(id: String) {\n          fun Char.isIdentifierStart() = this in 'A'..'z'\n          fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n          if (id.isEmpty()) {\n              print(\"Identifier is empty\")\n          } else if (!id.first().isIdentifierStart()) {\n              print(\"Identifier should start with a letter\")\n          } else if (!id.subSequence(1, id.length).all(Char::isIdentifierPart)) {\n              print(\"Identifier should contain only letters and numbers\")\n          }\n      }\n\nA quick-fix converts the `if` expression to `when`:\n\n\n      fun checkIdentifier(id: String) {\n          fun Char.isIdentifierStart() = this in 'A'..'z'\n          fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n          when {\n              id.isEmpty() -> {\n                  print(\"Identifier is empty\")\n              }\n              !id.first().isIdentifierStart() -> {\n                  print(\"Identifier should start with a letter\")\n              }\n              !id.subSequence(1, id.length).all(Char::isIdentifierPart) -> {\n                  print(\"Identifier should contain only letters and numbers\")\n              }\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "EmptyRange",
+                "shortDescription": {
+                  "text": "Range with start greater than endInclusive is empty"
+                },
+                "fullDescription": {
+                  "text": "Reports ranges that are empty because the 'start' value is greater than the 'endInclusive' value. Example: 'val range = 2..1' The quick-fix changes the '..' operator to 'downTo': 'val range = 2 downTo 1'",
+                  "markdown": "Reports ranges that are empty because the `start` value is greater than the `endInclusive` value.\n\n**Example:**\n\n\n      val range = 2..1\n\nThe quick-fix changes the `..` operator to `downTo`:\n\n\n      val range = 2 downTo 1\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "OptionalExpectation",
+                "shortDescription": {
+                  "text": "Optionally expected annotation has no actual annotation"
+                },
+                "fullDescription": {
+                  "text": "Reports optionally expected annotations without actual annotation in some platform modules. Example: '// common code\n@OptionalExpectation\nexpect annotation class JvmName(val name: String)\n\n@JvmName(name = \"JvmFoo\")\nfun foo() { }\n\n// jvm code\nactual annotation class JvmName(val name: String)' The inspection also reports cases when 'actual annotation class JvmName' is omitted for non-JVM platforms (for example, Native).",
+                  "markdown": "Reports optionally expected annotations without actual annotation in some platform modules.\n\n**Example:**\n\n    // common code\n    @OptionalExpectation\n    expect annotation class JvmName(val name: String)\n\n    @JvmName(name = \"JvmFoo\")\n    fun foo() { }\n\n    // jvm code\n    actual annotation class JvmName(val name: String)\n\nThe inspection also reports cases when `actual annotation class JvmName` is omitted for non-JVM platforms (for example, Native)."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "DestructuringWrongName",
+                "shortDescription": {
+                  "text": "Variable in destructuring declaration uses name of a wrong data class property"
+                },
+                "fullDescription": {
+                  "text": "Reports entries of destructuring declarations that match the name of a different property of the destructured data class. Example: 'data class Foo(val a: String, val b: Int, val c: String)\n\n  fun bar(f: Foo) {\n      val (a, c) = f\n  }' The quick-fix changes variable's name to match the name of the corresponding class field: 'data class Foo(val a: String, val b: Int, val c: String)\n\n  fun bar(f: Foo) {\n      val (a, b) = f\n  }'",
+                  "markdown": "Reports entries of destructuring declarations that match the name of a different property of the destructured data class.\n\n**Example:**\n\n\n      data class Foo(val a: String, val b: Int, val c: String)\n\n      fun bar(f: Foo) {\n          val (a, c) = f\n      }\n\nThe quick-fix changes variable's name to match the name of the corresponding class field:\n\n\n      data class Foo(val a: String, val b: Int, val c: String)\n\n      fun bar(f: Foo) {\n          val (a, b) = f\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "IfThenToSafeAccess",
+                "shortDescription": {
+                  "text": "If-Then foldable to '?.'"
+                },
+                "fullDescription": {
+                  "text": "Reports 'if-then' expressions that can be folded into safe-access ('?.') expressions. Example: 'fun bar(x: String) = \"\"\n\n  fun foo(a: String?) {\n     if (a != null) bar(a) else null\n  }' The quick fix converts the 'if-then' expression into a safe-access ('?.') expression: 'fun bar(x: String) = \"\"\n\n  fun foo(a: String?) {\n     a?.let { bar(it) }\n  }'",
+                  "markdown": "Reports `if-then` expressions that can be folded into safe-access (`?.`) expressions.\n\n**Example:**\n\n\n      fun bar(x: String) = \"\"\n\n      fun foo(a: String?) {\n         if (a != null) bar(a) else null\n      }\n\nThe quick fix converts the `if-then` expression into a safe-access (`?.`) expression:\n\n\n      fun bar(x: String) = \"\"\n\n      fun foo(a: String?) {\n         a?.let { bar(it) }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RestrictReturnStatementTargetMigration",
+                "shortDescription": {
+                  "text": "Target label does not denote a function since 1.4"
+                },
+                "fullDescription": {
+                  "text": "Reports labels that don't points to a functions. It's forbidden to declare a target label that does not denote a function. The quick-fix removes the label. Example: 'fun testValLabelInReturn() {\n      L@ val fn = { return@L }\n      fn()\n  }' After the quick-fix is applied: 'fun testValLabelInReturn() {\n      L@ val fn = { return }\n      fn()\n  }' This inspection only reports if the language level of the project or module is 1.4 or higher.",
+                  "markdown": "Reports labels that don't points to a functions.\n\nIt's forbidden to declare a target label that does not denote a function.\n\nThe quick-fix removes the label.\n\n**Example:**\n\n\n      fun testValLabelInReturn() {\n          L@ val fn = { return@L }\n          fn()\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun testValLabelInReturn() {\n          L@ val fn = { return }\n          fn()\n      }\n\nThis inspection only reports if the language level of the project or module is 1.4 or higher."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "error",
+                  "parameters": {
+                    "ideaSeverity": "ERROR",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Migration",
+                      "index": 15,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "MigrateDiagnosticSuppression",
+                "shortDescription": {
+                  "text": "Diagnostic name should be replaced"
+                },
+                "fullDescription": {
+                  "text": "Reports suppressions with old diagnostic names, for example '@Suppress(\"HEADER_WITHOUT_IMPLEMENTATION\")'. Some of diagnostics from Kotlin 1.2 and earlier are now obsolete, making such suppressions redundant. Example: '@Suppress(\"HEADER_DECLARATION_WITH_BODY\")\nexpect fun connection() {\n  // ...\n}' After the quick-fix is applied: '@Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\nexpect fun connection() {\n  // ...\n}'",
+                  "markdown": "Reports suppressions with old diagnostic names, for example `@Suppress(\"HEADER_WITHOUT_IMPLEMENTATION\")`.\n\n\nSome of diagnostics from Kotlin 1.2 and earlier are now obsolete, making such suppressions redundant.\n\n**Example:**\n\n\n    @Suppress(\"HEADER_DECLARATION_WITH_BODY\")\n    expect fun connection() {\n      // ...\n    }\n\nAfter the quick-fix is applied:\n\n\n    @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n    expect fun connection() {\n      // ...\n    }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Other problems",
+                      "index": 145,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "DeferredResultUnused",
+                "shortDescription": {
+                  "text": "'@Deferred' result is unused"
+                },
+                "fullDescription": {
+                  "text": "Reports function calls with the 'Deferred' result type if the return value is not used. If the 'Deferred' return value is not used, the call site would not wait to complete this function. Example: 'fun calcEverythingAsync() = CompletableDeferred(42)\n\n  fun usage() {\n      calcEverythingAsync()\n  }' A quick-fix provides a variable with the 'Deferred' initializer: 'fun calcEverythingAsync() = CompletableDeferred(42)\n\n  fun usage() {\n      val answer = calcEverythingAsync()\n  }'",
+                  "markdown": "Reports function calls with the `Deferred` result type if the return value is not used.\n\nIf the `Deferred` return value is not used, the call site would not wait to complete this function.\n\n**Example:**\n\n\n      fun calcEverythingAsync() = CompletableDeferred(42)\n\n      fun usage() {\n          calcEverythingAsync()\n      }\n\nA quick-fix provides a variable with the `Deferred` initializer:\n\n\n      fun calcEverythingAsync() = CompletableDeferred(42)\n\n      fun usage() {\n          val answer = calcEverythingAsync()\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SelfReferenceConstructorParameter",
+                "shortDescription": {
+                  "text": "Constructor can never be complete"
+                },
+                "fullDescription": {
+                  "text": "Reports constructors with a non-null self-reference parameter. Such constructors never instantiate a class. The quick-fix converts the parameter type to nullable. Example: 'class SelfRef(val ref: SelfRef)' After the quick-fix is applied: 'class SelfRef(val ref: SelfRef?)'",
+                  "markdown": "Reports constructors with a non-null self-reference parameter.\n\nSuch constructors never instantiate a class.\n\nThe quick-fix converts the parameter type to nullable.\n\n**Example:**\n\n\n      class SelfRef(val ref: SelfRef)\n\nAfter the quick-fix is applied:\n\n\n      class SelfRef(val ref: SelfRef?)\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "MainFunctionReturnUnit",
+                "shortDescription": {
+                  "text": "Entry point function should return Unit"
+                },
+                "fullDescription": {
+                  "text": "Reports entry point functions with an incorrect return type (should be 'Unit'). Example: 'fun main() = \"Hello world!\"'",
+                  "markdown": "Reports entry point functions with an incorrect return type (should be `Unit`).\n\n**Example:**\n`fun main() = \"Hello world!\"`"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "SuspiciousCallableReferenceInLambda",
+                "shortDescription": {
+                  "text": "Suspicious callable reference used as lambda result"
+                },
+                "fullDescription": {
+                  "text": "Reports lambda expressions with one callable reference. It is a common error to replace a lambda with a callable reference without changing curly braces to parentheses. Example: 'listOf(1,2,3).map { it::toString }' After the quick-fix is applied: 'listOf(1,2,3).map(Int::toString)'",
+                  "markdown": "Reports lambda expressions with one callable reference.\n\nIt is a common error to replace a lambda with a callable reference without changing curly braces to parentheses.\n\n**Example:**\n\n      listOf(1,2,3).map { it::toString }\n\nAfter the quick-fix is applied:\n\n      listOf(1,2,3).map(Int::toString)\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ConvertSecondaryConstructorToPrimary",
+                "shortDescription": {
+                  "text": "Convert to primary constructor"
+                },
+                "fullDescription": {
+                  "text": "Reports a secondary constructor that can be replaced with a more concise primary constructor. Example: 'class User {\n      val name: String\n\n      constructor(name: String) {\n          this.name = name\n      }\n  }' A quick-fix converts code automatically: 'class User(val name: String) {\n  }'",
+                  "markdown": "Reports a secondary constructor that can be replaced with a more concise primary constructor.\n\n**Example:**\n\n\n      class User {\n          val name: String\n\n          constructor(name: String) {\n              this.name = name\n          }\n      }\n\nA quick-fix converts code automatically:\n\n\n      class User(val name: String) {\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceGetOrSet",
+                "shortDescription": {
+                  "text": "Explicit 'get' or 'set' call"
+                },
+                "fullDescription": {
+                  "text": "Reports explicit calls to 'get' or 'set' functions which can be replaced by an indexing operator '[]'. Kotlin allows custom implementations for the predefined set of operators on types. To overload an operator, you can mark the corresponding function with the 'operator' modifier: 'operator fun get(index: Int) {}\n  operator fun set(index: Int, value: Int) {}' The functions above correspond to the indexing operator. Example: 'class Test {\n      operator fun get(i: Int): Int = 0\n  }\n\n  fun test() {\n      Test().get(0) // replaceable 'get()'\n  }' After the quick-fix is applied: 'class Test {\n      operator fun get(i: Int): Int = 0\n  }\n\n  fun test() {\n      Test()[0]\n  }'",
+                  "markdown": "Reports explicit calls to `get` or `set` functions which can be replaced by an indexing operator `[]`.\n\n\nKotlin allows custom implementations for the predefined set of operators on types.\nTo overload an operator, you can mark the corresponding function with the `operator` modifier:\n\n\n      operator fun get(index: Int) {}\n      operator fun set(index: Int, value: Int) {}\n        \nThe functions above correspond to the indexing operator.\n\n**Example:**\n\n      class Test {\n          operator fun get(i: Int): Int = 0\n      }\n\n      fun test() {\n          Test().get(0) // replaceable 'get()'\n      }\n\nAfter the quick-fix is applied:\n\n      class Test {\n          operator fun get(i: Int): Int = 0\n      }\n\n      fun test() {\n          Test()[0]\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ProhibitRepeatedUseSiteTargetAnnotationsMigration",
+                "shortDescription": {
+                  "text": "Repeated annotation which is not marked as '@Repeatable'"
+                },
+                "fullDescription": {
+                  "text": "Reports the repeated use of a non-'@Repeatable' annotation on property accessors. As a result of using non-'@Repeatable' annotation multiple times, both annotation usages will appear in the bytecode leading to an ambiguity in reflection calls. Since Kotlin 1.4 it's mandatory to either mark annotation as '@Repeatable' or not repeat the annotation, otherwise it will lead to compilation error. Example: 'annotation class Foo(val x: Int)\n\n  @get:Foo(10)\n  val a: String\n      @Foo(20) get() = \"foo\" // annotation repeated twice but not marked as @Repeatable' This inspection only reports if the Kotlin language level of the project or module is 1.4 or higher.",
+                  "markdown": "Reports the repeated use of a non-`@Repeatable` annotation on property accessors.\n\n\nAs a result of using non-`@Repeatable` annotation multiple times, both annotation usages\nwill appear in the bytecode leading to an ambiguity in reflection calls.\n\n\nSince Kotlin 1.4 it's mandatory to either mark annotation as `@Repeatable` or not\nrepeat the annotation, otherwise it will lead to compilation error.\n\n**Example:**\n\n\n      annotation class Foo(val x: Int)\n\n      @get:Foo(10)\n      val a: String\n          @Foo(20) get() = \"foo\" // annotation repeated twice but not marked as @Repeatable\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher."
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "error",
+                  "parameters": {
+                    "ideaSeverity": "ERROR",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Migration",
+                      "index": 15,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "Destructure",
+                "shortDescription": {
+                  "text": "Use destructuring declaration"
+                },
+                "fullDescription": {
+                  "text": "Reports declarations that can be destructured. Example: 'data class My(val first: String, val second: Int, val third: Boolean)\n\n  fun foo(list: List<My>) {\n      list.forEach { my ->\n          println(my.second)\n          println(my.third)\n      }\n  }' The quick-fix destructures the declaration and introduces new variables with names from the corresponding class: 'data class My(val first: String, val second: Int, val third: Boolean)\n\n  fun foo(list: List<My>) {\n      list.forEach { (_, second, third) ->\n          println(second)\n          println(third)\n      }\n  }'",
+                  "markdown": "Reports declarations that can be destructured.\n\n**Example:**\n\n\n      data class My(val first: String, val second: Int, val third: Boolean)\n\n      fun foo(list: List<My>) {\n          list.forEach { my ->\n              println(my.second)\n              println(my.third)\n          }\n      }\n\nThe quick-fix destructures the declaration and introduces new variables with names from the corresponding class:\n\n\n      data class My(val first: String, val second: Int, val third: Boolean)\n\n      fun foo(list: List<My>) {\n          list.forEach { (_, second, third) ->\n              println(second)\n              println(third)\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": false,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFO",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UnusedReceiverParameter",
+                "shortDescription": {
+                  "text": "Unused receiver parameter"
+                },
+                "fullDescription": {
+                  "text": "Reports receiver parameter of extension functions and properties that is not used. Remove redundant receiver parameter can be used to amend the code automatically.",
+                  "markdown": "Reports receiver parameter of extension functions and properties that is not used.\n\n**Remove redundant receiver parameter** can be used to amend the code automatically."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ConvertTryFinallyToUseCall",
+                "shortDescription": {
+                  "text": "Convert try / finally to use() call"
+                },
+                "fullDescription": {
+                  "text": "Reports a 'try-finally' block with 'resource.close()' in 'finally' which can be converted to a 'resource.use()' call. 'use()' is easier to read and less error-prone as there is no need in explicit 'close()' call. Example: 'fun example() {\n      val reader = File(\"file.txt\").bufferedReader()\n      try {\n          reader.lineSequence().forEach(::print)\n      } finally {\n          reader.close()\n      }\n  }' After the quick-fix applied: 'fun example() {\n      File(\"file.txt\").bufferedReader().use { reader ->\n          reader.lineSequence().forEach(::print)\n      }\n  }'",
+                  "markdown": "Reports a `try-finally` block with `resource.close()` in `finally` which can be converted to a `resource.use()` call.\n\n`use()` is easier to read and less error-prone as there is no need in explicit `close()` call.\n\n**Example:**\n\n\n      fun example() {\n          val reader = File(\"file.txt\").bufferedReader()\n          try {\n              reader.lineSequence().forEach(::print)\n          } finally {\n              reader.close()\n          }\n      }\n\nAfter the quick-fix applied:\n\n\n      fun example() {\n          File(\"file.txt\").bufferedReader().use { reader ->\n              reader.lineSequence().forEach(::print)\n          }\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "KotlinRedundantOverride",
+                "shortDescription": {
+                  "text": "Redundant overriding method"
+                },
+                "fullDescription": {
+                  "text": "Reports redundant overriding declarations. An override can be omitted if it does not modify the inherited signature semantics, for example, by changing visibility. Example: 'open class Foo {\n      open fun singleExpression() {\n      }\n  }\n\n  class Bar : Foo() {\n      override fun singleExpression() = super.singleExpression()\n  }' After the quick-fix is applied: 'class Bar : Foo() {\n  }'",
+                  "markdown": "Reports redundant overriding declarations.\n\n\nAn override can be omitted if it does not modify the inherited signature semantics, for example, by changing visibility.\n\n**Example:**\n\n\n      open class Foo {\n          open fun singleExpression() {\n          }\n      }\n\n      class Bar : Foo() {\n          override fun singleExpression() = super.singleExpression()\n      }\n\nAfter the quick-fix is applied:\n\n\n      class Bar : Foo() {\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceArrayOfWithLiteral",
+                "shortDescription": {
+                  "text": "'arrayOf' call can be replaced with array literal [...]"
+                },
+                "fullDescription": {
+                  "text": "Reports 'arrayOf' calls that can be replaced with array literals '[...]'. Examples: 'annotation class MyAnnotation(val strings: Array<String>)\n\n  @MyAnnotation(arrayOf(\"alpha\", \"beta\", \"omega\")) // replaceable 'arrayOf()'\n  class MyClass' After the quick-fix is applied: 'annotation class MyAnnotation(val strings: Array<String>)\n\n  @MyAnnotation([\"alpha\", \"beta\", \"omega\"])\n  class MyClass'",
+                  "markdown": "Reports `arrayOf` calls that can be replaced with array literals `[...]`.\n\n**Examples:**\n\n      annotation class MyAnnotation(val strings: Array<String>)\n\n      @MyAnnotation(arrayOf(\"alpha\", \"beta\", \"omega\")) // replaceable 'arrayOf()'\n      class MyClass\n\nAfter the quick-fix is applied:\n\n      annotation class MyAnnotation(val strings: Array<String>)\n\n      @MyAnnotation([\"alpha\", \"beta\", \"omega\"])\n      class MyClass\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ReplaceToWithInfixForm",
+                "shortDescription": {
+                  "text": "'to' call should be replaced with infix form"
+                },
+                "fullDescription": {
+                  "text": "Reports 'to' function calls that can be replaced with the infix form. Using the infix form makes your code simpler. The quick-fix replaces 'to' with the infix form. Example: 'fun foo(a: Int, b: Int) {\n      val pair = a.to(b)\n  }' After the quick-fix is applied: 'fun foo(a: Int, b: Int) {\n      val pair = a to b\n  }'",
+                  "markdown": "Reports `to` function calls that can be replaced with the infix form.\n\nUsing the infix form makes your code simpler.\n\nThe quick-fix replaces `to` with the infix form.\n\n**Example:**\n\n\n      fun foo(a: Int, b: Int) {\n          val pair = a.to(b)\n      }\n\nAfter the quick-fix is applied:\n\n\n      fun foo(a: Int, b: Int) {\n          val pair = a to b\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Style issues",
+                      "index": 3,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "ConstPropertyName",
+                "shortDescription": {
+                  "text": "Const property naming convention"
+                },
+                "fullDescription": {
+                  "text": "Reports 'const' property names that do not follow the recommended naming conventions. Consistent naming allows for easier code reading and understanding. According to the Kotlin official style guide, 'const' properties should use uppercase underscore-separated names. Example: 'const val Planck: Double = 6.62607015E-34' A quick-fix renames the property: 'const val PLANCK: Double = 6.62607015E-34'",
+                  "markdown": "Reports `const` property names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#property-names),\n`const` properties should use uppercase underscore-separated names.\n\n**Example:**\n\n\n      const val Planck: Double = 6.62607015E-34\n\nA quick-fix renames the property:\n\n\n      const val PLANCK: Double = 6.62607015E-34\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "WEAK WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Naming conventions",
+                      "index": 48,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "RedundantNullableReturnType",
+                "shortDescription": {
+                  "text": "Redundant nullable return type"
+                },
+                "fullDescription": {
+                  "text": "Reports functions and variables with nullable return type which never return or become 'null'. Example: 'fun greeting(user: String): String? = \"Hello, $user!\"' After the quick-fix is applied: 'fun greeting(user: String): String = \"Hello, $user!\"'",
+                  "markdown": "Reports functions and variables with nullable return type which never return or become `null`.\n\n**Example:**\n\n\n      fun greeting(user: String): String? = \"Hello, $user!\"\n\nAfter the quick-fix is applied:\n\n\n      fun greeting(user: String): String = \"Hello, $user!\"\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Redundant constructs",
+                      "index": 4,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "UselessCallOnNotNull",
+                "shortDescription": {
+                  "text": "Useless call on not-null type"
+                },
+                "fullDescription": {
+                  "text": "Reports calls on not-null receiver that make sense only for nullable receiver. Several functions from the standard library such as 'orEmpty()' or 'isNullOrEmpty' have sense only when they are called on receivers of nullable types. Otherwise, they can be omitted or simplified as the result will be the same. Remove redundant call and Change call to … quick-fixes can be used to amend the code automatically. Examples: 'fun test(s: String) {\n      val x = s.orEmpty() // quick-fix simplifies to 's'\n      val y = s.isNullOrEmpty() // quick-fix simplifies to 's.isEmpty()'\n  }'",
+                  "markdown": "Reports calls on not-null receiver that make sense only for nullable receiver.\n\nSeveral functions from the standard library such as `orEmpty()` or `isNullOrEmpty`\nhave sense only when they are called on receivers of nullable types. Otherwise, they can be omitted or simplified as the result will be the same.\n\n**Remove redundant call** and **Change call to ...** quick-fixes can be used to amend the code automatically.\n\nExamples:\n\n\n      fun test(s: String) {\n          val x = s.orEmpty() // quick-fix simplifies to 's'\n          val y = s.isNullOrEmpty() // quick-fix simplifies to 's.isEmpty()'\n      }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
+              {
+                "id": "EqualsOrHashCode",
+                "shortDescription": {
+                  "text": "'equals()' and 'hashCode()' not paired"
+                },
+                "fullDescription": {
+                  "text": "Reports classes that override 'equals()' but do not override 'hashCode()', or vice versa. It also reports object declarations that override either 'equals()' or 'hashCode()'. This can lead to undesired behavior when a class is added to a 'Collection' Example: 'class C1 {\n      override fun equals(other: Any?) = true\n  }\n\n  class C2 {\n      override fun hashCode() = 0\n  }\n\n  object O1 {\n      override fun equals(other: Any?) = true\n  }\n\n  object O2 {\n      override fun hashCode() = 0\n  }' The quick-fix overrides 'equals()' or 'hashCode()' for classes and deletes these methods for objects: 'class C1 {\n       override fun equals(other: Any?) = true\n       override fun hashCode(): Int {\n           return javaClass.hashCode()\n       }\n   }\n\n   class C2 {\n       override fun hashCode() = 0\n       override fun equals(other: Any?): Boolean {\n           if (this === other) return true\n           if (javaClass != other?.javaClass) return false\n           return true\n       }\n   }\n\n   object O1 {\n   }\n\n   object O2 {\n   }'",
+                  "markdown": "Reports classes that override `equals()` but do not override `hashCode()`, or vice versa. It also reports object declarations that override either `equals()` or `hashCode()`.\n\nThis can lead to undesired behavior when a class is added to a `Collection`\n\n**Example:**\n\n\n      class C1 {\n          override fun equals(other: Any?) = true\n      }\n\n      class C2 {\n          override fun hashCode() = 0\n      }\n\n      object O1 {\n          override fun equals(other: Any?) = true\n      }\n\n      object O2 {\n          override fun hashCode() = 0\n      }\n\nThe quick-fix overrides `equals()` or `hashCode()` for classes and deletes these methods for objects:\n\n\n       class C1 {\n           override fun equals(other: Any?) = true\n           override fun hashCode(): Int {\n               return javaClass.hashCode()\n           }\n       }\n\n       class C2 {\n           override fun hashCode() = 0\n           override fun equals(other: Any?): Boolean {\n               if (this === other) return true\n               if (javaClass != other?.javaClass) return false\n               return true\n           }\n       }\n\n       object O1 {\n       }\n\n       object O2 {\n       }\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Kotlin/Probable bugs",
+                      "index": 24,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              }
+            ],
+            "language": "en-US",
+            "contents": [
+              "localizedData",
+              "nonLocalizedData"
+            ],
+            "isComprehensive": false
+          },
           {
             "name": "com.intellij.spring",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "SpringBeanConstructorArgInspection",
@@ -41034,7 +41034,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41068,7 +41068,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41102,7 +41102,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41170,7 +41170,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41204,7 +41204,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41238,7 +41238,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41272,7 +41272,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41306,7 +41306,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41340,7 +41340,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41374,7 +41374,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41408,7 +41408,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core",
-                      "index": 8,
+                      "index": 9,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41442,7 +41442,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core",
-                      "index": 8,
+                      "index": 9,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41510,7 +41510,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41544,7 +41544,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41578,7 +41578,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41612,7 +41612,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41646,7 +41646,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41680,7 +41680,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41714,7 +41714,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41782,7 +41782,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41816,7 +41816,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41850,7 +41850,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41918,7 +41918,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -41986,7 +41986,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42020,7 +42020,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42054,7 +42054,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42088,7 +42088,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42122,7 +42122,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42156,7 +42156,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42190,7 +42190,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42224,7 +42224,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42258,7 +42258,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42326,7 +42326,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42360,7 +42360,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42394,7 +42394,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42428,7 +42428,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42462,7 +42462,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42496,7 +42496,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42598,7 +42598,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42632,7 +42632,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42666,7 +42666,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42700,7 +42700,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core",
-                      "index": 8,
+                      "index": 9,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42734,7 +42734,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42768,7 +42768,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42802,7 +42802,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42836,7 +42836,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42870,7 +42870,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42904,7 +42904,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42938,7 +42938,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -42972,7 +42972,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -43006,7 +43006,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -43040,7 +43040,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/Code",
-                      "index": 13,
+                      "index": 14,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -43074,7 +43074,7 @@
                   {
                     "target": {
                       "id": "Spring/Spring Core/XML",
-                      "index": 9,
+                      "index": 10,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -43095,7 +43095,7 @@
           },
           {
             "name": "org.intellij.groovy",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "GroovyListSetCanBeKeyedAccess",
@@ -44219,40 +44219,6 @@
                   }
                 ]
               },
-              {
-                "id": "GroovyLabeledStatement",
-                "shortDescription": {
-                  "text": "Labeled statement inspection"
-                },
-                "fullDescription": {
-                  "text": "Reports labels already used in parent workflow. Example: 'def list = [\"foo\"]\ncycle:\nfor (element in list) {\n  cycle: // confusing label repeat\n  element.chars().forEach {\n  }\n}'",
-                  "markdown": "Reports labels already used in parent workflow.\n\n**Example:**\n\n\n    def list = [\"foo\"]\n    cycle:\n    for (element in list) {\n      cycle: // confusing label repeat\n      element.chars().forEach {\n      }\n    }\n\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Groovy/Probable bugs",
-                      "index": 43,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "GroovyEmptyStatementBody",
                 "shortDescription": {
@@ -44287,6 +44253,40 @@
                   }
                 ]
               },
+              {
+                "id": "GroovyLabeledStatement",
+                "shortDescription": {
+                  "text": "Labeled statement inspection"
+                },
+                "fullDescription": {
+                  "text": "Reports labels already used in parent workflow. Example: 'def list = [\"foo\"]\ncycle:\nfor (element in list) {\n  cycle: // confusing label repeat\n  element.chars().forEach {\n  }\n}'",
+                  "markdown": "Reports labels already used in parent workflow.\n\n**Example:**\n\n\n    def list = [\"foo\"]\n    cycle:\n    for (element in list) {\n      cycle: // confusing label repeat\n      element.chars().forEach {\n      }\n    }\n\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Groovy/Probable bugs",
+                      "index": 43,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "GroovyAssignmentToForLoopParameter",
                 "shortDescription": {
@@ -45885,40 +45885,6 @@
                   }
                 ]
               },
-              {
-                "id": "ChangeToMethod",
-                "shortDescription": {
-                  "text": "Operator invocation can be replaced with method call"
-                },
-                "fullDescription": {
-                  "text": "Reports operator invocations that can be replaced with method calls. Example: 'a + b' After the quick-fix is applied: 'a.plus(b)'",
-                  "markdown": "Reports operator invocations that can be replaced with method calls.\n\n**Example:**\n\n\n      a + b\n\nAfter the quick-fix is applied:\n\n\n      a.plus(b)\n"
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "note",
-                  "parameters": {
-                    "ideaSeverity": "INFORMATION",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Groovy/Style",
-                      "index": 70,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "UnnecessaryQualifiedReference",
                 "shortDescription": {
@@ -45953,6 +45919,40 @@
                   }
                 ]
               },
+              {
+                "id": "ChangeToMethod",
+                "shortDescription": {
+                  "text": "Operator invocation can be replaced with method call"
+                },
+                "fullDescription": {
+                  "text": "Reports operator invocations that can be replaced with method calls. Example: 'a + b' After the quick-fix is applied: 'a.plus(b)'",
+                  "markdown": "Reports operator invocations that can be replaced with method calls.\n\n**Example:**\n\n\n      a + b\n\nAfter the quick-fix is applied:\n\n\n      a.plus(b)\n"
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "note",
+                  "parameters": {
+                    "ideaSeverity": "INFORMATION",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Groovy/Style",
+                      "index": 70,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "GroovyBreak",
                 "shortDescription": {
@@ -47663,7 +47663,7 @@
           },
           {
             "name": "org.jetbrains.idea.maven",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "MavenDuplicatePluginInspection",
@@ -47879,7 +47879,7 @@
           },
           {
             "name": "com.intellij.database",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "MysqlLoadDataPathInspection",
@@ -50033,7 +50033,7 @@
           },
           {
             "name": "com.intellij.javaee.jpa",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "JpaObjectClassSignatureInspection",
@@ -50555,7 +50555,7 @@
           },
           {
             "name": "com.intellij",
-            "version": "221.5728.85",
+            "version": "221.5921.22.149",
             "rules": [
               {
                 "id": "HtmlUnknownBooleanAttribute",
@@ -52675,7 +52675,7 @@
           },
           {
             "name": "com.intellij.java-i18n",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "UnusedMessageFormatParameter",
@@ -52959,7 +52959,7 @@
           },
           {
             "name": "com.intellij.freemarker",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "FtlFileReferencesInspection",
@@ -53209,7 +53209,7 @@
           },
           {
             "name": "org.editorconfig.editorconfigjetbrains",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "EditorConfigNumerousWildcards",
@@ -54173,7 +54173,7 @@
           },
           {
             "name": "com.intellij.cdi",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "CdiUnknownProducersForDisposerMethodInspection",
@@ -54763,7 +54763,7 @@
           },
           {
             "name": "com.intellij.velocity",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "VtlInterpolationsInspection",
@@ -54945,7 +54945,7 @@
           },
           {
             "name": "com.intellij.css",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "CssInvalidFunction",
@@ -55807,7 +55807,7 @@
           },
           {
             "name": "com.intellij.hibernate",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "CriteriaApiResolveInspection",
@@ -55989,7 +55989,7 @@
           },
           {
             "name": "com.intellij.spring.integration",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "UnresolvedMessageChannel",
@@ -56137,7 +56137,7 @@
           },
           {
             "name": "DevKit",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "PluginXmlCapitalization",
@@ -57193,40 +57193,6 @@
                   }
                 ]
               },
-              {
-                "id": "InspectionDescriptionNotFoundInspection",
-                "shortDescription": {
-                  "text": "Inspection description checker"
-                },
-                "fullDescription": {
-                  "text": "Reports inspections that are missing an HTML description file, i.e. a file containing a text like this. The Create description file quick-fix creates a template HTML description file.",
-                  "markdown": "Reports inspections that are missing an HTML description file, i.e. a file containing a text like this.\n\n\nThe **Create description file** quick-fix creates a template HTML description file."
-                },
-                "defaultConfiguration": {
-                  "enabled": true,
-                  "level": "warning",
-                  "parameters": {
-                    "ideaSeverity": "WARNING",
-                    "tags": [
-                      "ideaSeverity"
-                    ]
-                  }
-                },
-                "relationships": [
-                  {
-                    "target": {
-                      "id": "Plugin DevKit/Description file",
-                      "index": 105,
-                      "toolComponent": {
-                        "name": "QDJVM"
-                      }
-                    },
-                    "kinds": [
-                      "superset"
-                    ]
-                  }
-                ]
-              },
               {
                 "id": "PluginXmlValidity",
                 "shortDescription": {
@@ -57261,6 +57227,40 @@
                   }
                 ]
               },
+              {
+                "id": "InspectionDescriptionNotFoundInspection",
+                "shortDescription": {
+                  "text": "Inspection description checker"
+                },
+                "fullDescription": {
+                  "text": "Reports inspections that are missing an HTML description file, i.e. a file containing a text like this. The Create description file quick-fix creates a template HTML description file.",
+                  "markdown": "Reports inspections that are missing an HTML description file, i.e. a file containing a text like this.\n\n\nThe **Create description file** quick-fix creates a template HTML description file."
+                },
+                "defaultConfiguration": {
+                  "enabled": true,
+                  "level": "warning",
+                  "parameters": {
+                    "ideaSeverity": "WARNING",
+                    "tags": [
+                      "ideaSeverity"
+                    ]
+                  }
+                },
+                "relationships": [
+                  {
+                    "target": {
+                      "id": "Plugin DevKit/Description file",
+                      "index": 105,
+                      "toolComponent": {
+                        "name": "QDJVM"
+                      }
+                    },
+                    "kinds": [
+                      "superset"
+                    ]
+                  }
+                ]
+              },
               {
                 "id": "LeakableMapKey",
                 "shortDescription": {
@@ -57407,7 +57407,7 @@
           },
           {
             "name": "com.intellij.properties",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "UseEllipsisInPropertyInspection",
@@ -57623,7 +57623,7 @@
           },
           {
             "name": "XPathView",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "XsltUnusedDeclaration",
@@ -57941,7 +57941,7 @@
           },
           {
             "name": "JUnit",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "Junit5MalformedParameterized",
@@ -58089,7 +58089,7 @@
           },
           {
             "name": "com.intellij.javaee",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "JavaeeApplicationDomInspection",
@@ -58169,7 +58169,7 @@
           },
           {
             "name": "TestNG-J",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "ConvertJavadoc",
@@ -58521,7 +58521,7 @@
           },
           {
             "name": "com.intellij.jsp",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "ELDeferredExpressionsInspection",
@@ -58975,7 +58975,7 @@
           },
           {
             "name": "Lombook Plugin",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "RedundantModifiersUtilityClassLombok",
@@ -59225,7 +59225,7 @@
           },
           {
             "name": "com.intellij.javaee.web",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "MimeType",
@@ -59373,7 +59373,7 @@
           },
           {
             "name": "com.intellij.uiDesigner",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "InvalidPropertyKeyForm",
@@ -59725,7 +59725,7 @@
           },
           {
             "name": "org.intellij.plugins.staticAnalysis",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "JavaAnnotator",
@@ -59839,7 +59839,7 @@
           },
           {
             "name": "AntSupport",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "AntMissingPropertiesFileInspection",
@@ -59953,7 +59953,7 @@
           },
           {
             "name": "com.jetbrains.jax.ws",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "ValidExternallyBoundObject",
@@ -60203,7 +60203,7 @@
           },
           {
             "name": "HtmlTools",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "HtmlDeprecatedTag",
@@ -60589,7 +60589,7 @@
           },
           {
             "name": "com.intellij.aop",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "DeclareParentsInspection",
@@ -60771,7 +60771,7 @@
           },
           {
             "name": "com.intellij.beanValidation",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "BvConfigDomInspection",
@@ -60885,7 +60885,7 @@
           },
           {
             "name": "com.intellij.spring.websocket",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "SpringWebSocketConfigurationInspection",
@@ -60931,7 +60931,7 @@
           },
           {
             "name": "com.intellij.spring.security",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "SpringSecurityModelInspection",
@@ -61125,7 +61125,7 @@
           },
           {
             "name": "com.intellij.spring.data",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "SpringDataMethodInconsistencyInspection",
@@ -61239,7 +61239,7 @@
           },
           {
             "name": "W3Validators",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "W3CssValidation",
@@ -61285,7 +61285,7 @@
           },
           {
             "name": "org.jetbrains.plugins.gradle",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "MultipleRepositoryUrls",
@@ -61399,7 +61399,7 @@
           },
           {
             "name": "com.intellij.spring.boot",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "SpringBootApplicationSetup",
@@ -61581,7 +61581,7 @@
           },
           {
             "name": "com.intellij.microservices.jvm",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "UastIncorrectMimeTypeInspection",
@@ -61606,7 +61606,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -61640,7 +61640,7 @@
                   {
                     "target": {
                       "id": "JVM languages",
-                      "index": 3,
+                      "index": 1,
                       "toolComponent": {
                         "name": "QDJVM"
                       }
@@ -61661,7 +61661,7 @@
           },
           {
             "name": "com.intellij.spring.ws",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "SpringWebServiceAnnotationsInconsistencyInspection",
@@ -61775,7 +61775,7 @@
           },
           {
             "name": "com.intellij.plugins.dependencyAnalysis",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "CheckDependencyLicenses",
@@ -61889,7 +61889,7 @@
           },
           {
             "name": "com.intellij.javaee.el",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "ELValidationInspection",
@@ -61935,7 +61935,7 @@
           },
           {
             "name": "com.intellij.spring.mvc",
-            "version": "221.5728",
+            "version": "221.5921.22",
             "rules": [
               {
                 "id": "SpringMVCViewInspection",
@@ -62055,7 +62055,7 @@
           "toolExecutionNotifications": [
             {
               "message": {
-                "text": "Reporting from [] 'sanity' inspections was suspended due to high problems count."
+                "text": "Reporting from [\"Kotlin annotator\"] 'sanity' inspections was suspended due to high problems count."
               },
               "level": "error"
             }
@@ -62067,7 +62067,7 @@
       "versionControlProvenance": [
         {
           "repositoryUri": "ssh://git@github.com/JetBrains/ideavim.git",
-          "revisionId": "c00703d1d0f79e66bab00662b9dee920a9648ba8",
+          "revisionId": "8ff8f2b6851f62521e9dbbfbfc3b4e61661dce81",
           "branch": "master",
           "properties": {
             "vcsType": "Git",
@@ -62078,59 +62078,6 @@
         }
       ],
       "results": [
-        {
-          "ruleId": "MarkedForRemoval",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'removeEditorFactoryListener(com.intellij.openapi.editor.event.@org.jetbrains.annotations.NotNull EditorFactoryListener)' is deprecated and marked for removal",
-            "markdown": "'removeEditorFactoryListener(com.intellij.openapi.editor.event.@org.jetbrains.annotations.NotNull EditorFactoryListener)' is deprecated and marked for removal"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/EventFacade.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 107,
-                  "startColumn": 33,
-                  "charOffset": 3961,
-                  "charLength": 27,
-                  "snippet": {
-                    "text": "removeEditorFactoryListener"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 105,
-                  "startColumn": 1,
-                  "charOffset": 3781,
-                  "charLength": 223,
-                  "snippet": {
-                    "text": "  public void removeEditorFactoryListener(@NotNull EditorFactoryListener listener) {\n    // Listener is removed not only if application is disposed\n    EditorFactory.getInstance().removeEditorFactoryListener(listener);\n  }\n"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "11917b4cb01f5e793adc88089d894c9f4629da940a3e3b512d216380875611ab"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
         {
           "ruleId": "ObjectLiteralToLambda",
           "kind": "fail",
@@ -62177,6 +62124,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "d04bf4a734b1d812133bc5b40e74a250700dd4e66f6761ab8d6c4e266ebcd920"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -62200,22 +62148,22 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 271,
+                  "startLine": 268,
                   "startColumn": 63,
-                  "charOffset": 9858,
-                  "charLength": 605,
+                  "charOffset": 9714,
+                  "charLength": 611,
                   "snippet": {
-                    "text": "(Caret caret) -> {\n          final TextRange range = textObjectHandler.getRange(vimEditor, new IjVimCaret(caret), context, count, 0, null);\n          if (range != null) {\n            try (VimListenerSuppressor.Locked ignored = SelectionVimListenerSuppressor.INSTANCE.lock()) {\n              if (commandState.getMode() == CommandState.Mode.VISUAL) {\n                vimSetSelection(caret, range.getStartOffset(), range.getEndOffset() - 1, true);\n              } else {\n                InlayHelperKt.moveToInlayAwareOffset(caret, range.getStartOffset());\n              }\n            }\n          }\n\n        }"
+                    "text": "(Caret caret) -> {\n          final TextRange range = textObjectHandler.getRange(vimEditor, new IjVimCaret(caret), context, count, 0, null);\n          if (range != null) {\n            try (VimListenerSuppressor.Locked ignored = SelectionVimListenerSuppressor.INSTANCE.lock()) {\n              if (vimStateMachine.getMode() == VimStateMachine.Mode.VISUAL) {\n                vimSetSelection(caret, range.getStartOffset(), range.getEndOffset() - 1, true);\n              } else {\n                InlayHelperKt.moveToInlayAwareOffset(caret, range.getStartOffset());\n              }\n            }\n          }\n\n        }"
                   },
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 271,
+                  "startLine": 268,
                   "startColumn": 1,
-                  "charOffset": 9796,
-                  "charLength": 669,
+                  "charOffset": 9652,
+                  "charLength": 675,
                   "snippet": {
-                    "text": "        vimEditor.getEditor().getCaretModel().runForEachCaret((Caret caret) -> {\n          final TextRange range = textObjectHandler.getRange(vimEditor, new IjVimCaret(caret), context, count, 0, null);\n          if (range != null) {\n            try (VimListenerSuppressor.Locked ignored = SelectionVimListenerSuppressor.INSTANCE.lock()) {\n              if (commandState.getMode() == CommandState.Mode.VISUAL) {\n                vimSetSelection(caret, range.getStartOffset(), range.getEndOffset() - 1, true);\n              } else {\n                InlayHelperKt.moveToInlayAwareOffset(caret, range.getStartOffset());\n              }\n            }\n          }\n\n        });"
+                    "text": "        vimEditor.getEditor().getCaretModel().runForEachCaret((Caret caret) -> {\n          final TextRange range = textObjectHandler.getRange(vimEditor, new IjVimCaret(caret), context, count, 0, null);\n          if (range != null) {\n            try (VimListenerSuppressor.Locked ignored = SelectionVimListenerSuppressor.INSTANCE.lock()) {\n              if (vimStateMachine.getMode() == VimStateMachine.Mode.VISUAL) {\n                vimSetSelection(caret, range.getStartOffset(), range.getEndOffset() - 1, true);\n              } else {\n                InlayHelperKt.moveToInlayAwareOffset(caret, range.getStartOffset());\n              }\n            }\n          }\n\n        });"
                   }
                 }
               },
@@ -62228,8 +62176,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "23bd64c81117aaec2740ab6d945a0a65fa7961762c3d7cbc454e63b4045349ac"
+            "equalIndicator/v1": "37aeea7cb6c4337853a9e5ccdc81fceb1e4316824877f03117778f610c6ace99"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -62283,6 +62232,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "9dd4327503847c35e8c1172450f8f3684c524f9608a6def864e3d1f219087c5c"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -62308,7 +62258,7 @@
                 "region": {
                   "startLine": 73,
                   "startColumn": 7,
-                  "charOffset": 2962,
+                  "charOffset": 2961,
                   "charLength": 42,
                   "snippet": {
                     "text": "object : OptionChangeListener<VimDataType>"
@@ -62318,7 +62268,7 @@
                 "contextRegion": {
                   "startLine": 71,
                   "startColumn": 1,
-                  "charOffset": 2898,
+                  "charOffset": 2897,
                   "charLength": 258,
                   "snippet": {
                     "text": "    VimPlugin.getOptionService().addListener(\n      name,\n      object : OptionChangeListener<VimDataType> {\n        override fun processGlobalValueChange(oldValue: VimDataType?) {\n          if (VimPlugin.getOptionService().isSet(OptionScope.GLOBAL, name)) {"
@@ -62334,8 +62284,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "1c261ce32c45f3e5596d2d2ad1d966148839906ce902593c32c2e21615b90eec"
+            "equalIndicator/v1": "fc560b1b3a66fee7219d93b0f36cd7a59506265eec4d0b99dcf4089d91fffdf4"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -62359,9 +62310,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 58,
+                  "startLine": 55,
                   "startColumn": 13,
-                  "charOffset": 2377,
+                  "charOffset": 2257,
                   "charLength": 5,
                   "snippet": {
                     "text": "count"
@@ -62369,9 +62320,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 56,
+                  "startLine": 53,
                   "startColumn": 1,
-                  "charOffset": 2282,
+                  "charOffset": 2162,
                   "charLength": 238,
                   "snippet": {
                     "text": "   * @param editor   The editor to yank from\n   * @param context  The data context\n   * @param count    The number of times to yank\n   * @param rawCount The actual count entered by the user\n   * @param argument The motion command argument"
@@ -62387,8 +62338,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "b1229e6ed07b2e6fff37810ca6f3f3ca8a16204be2c5c8e1bf26462b352aebc1"
+            "equalIndicator/v1": "50ab8b51f3678cdeb09e2d879a9ceaee03ae984d2f5a20567292d50ca30d53db"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -62412,9 +62364,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 59,
+                  "startLine": 56,
                   "startColumn": 13,
-                  "charOffset": 2426,
+                  "charOffset": 2306,
                   "charLength": 8,
                   "snippet": {
                     "text": "rawCount"
@@ -62422,9 +62374,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 57,
+                  "startLine": 54,
                   "startColumn": 1,
-                  "charOffset": 2327,
+                  "charOffset": 2207,
                   "charLength": 250,
                   "snippet": {
                     "text": "   * @param context  The data context\n   * @param count    The number of times to yank\n   * @param rawCount The actual count entered by the user\n   * @param argument The motion command argument\n   * @return true if able to yank the text, false if not"
@@ -62440,8 +62392,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "be8d8723bb7dd80fa74d4ac92b9a73bb72a1c53cf91d23187fb08d3b9b0d2cd0"
+            "equalIndicator/v1": "27339ceb4aef3836381e63100b7362a89afb76ac7b15683198b967ea59f977f4"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -62465,22 +62418,22 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 283,
+                  "startLine": 280,
                   "startColumn": 7,
-                  "charOffset": 11440,
-                  "charLength": 937,
+                  "charOffset": 11293,
+                  "charLength": 1107,
                   "snippet": {
-                    "text": "if (!commandState.isOperatorPending()) {\n        ((IjVimEditor)editor).getEditor().getCaretModel().runForEachCaret((Caret caret) -> {\n          final TextRange range = textObjectHandler.getRange(vimEditor, new IjVimCaret(caret), context, count, 0, null);\n          if (range != null) {\n            try (VimListenerSuppressor.Locked ignored = SelectionVimListenerSuppressor.INSTANCE.lock()) {\n              if (commandState.getMode() == CommandState.Mode.VISUAL) {\n                vimSetSelection(caret, range.getStartOffset(), range.getEndOffset() - 1, true);\n              } else {\n                InlayHelperKt.moveToInlayAwareOffset(caret, range.getStartOffset());\n              }\n            }\n          }\n\n        });\n      } else {\n        commandState.getCommandBuilder().completeCommandPart(new Argument(new Command(count,\n          textObjectHandler, Command.Type.MOTION,\n          EnumSet.noneOf(CommandFlags.class))));\n      }"
+                    "text": "if (!vimStateMachine.isOperatorPending()) {\n        ((IjVimEditor)editor).getEditor().getCaretModel().runForEachCaret((Caret caret) -> {\n          final TextRange range = textObjectHandler.getRange(vimEditor, new IjVimCaret(caret), context, count, 0, null);\n          if (range != null) {\n            try (VimListenerSuppressor.Locked ignored = SelectionVimListenerSuppressor.INSTANCE.lock()) {\n              if (vimStateMachine.getMode() == VimStateMachine.Mode.VISUAL) {\n                vimSetSelection(caret, range.getStartOffset(), range.getEndOffset() - 1, true);\n              } else {\n                InlayHelperKt.moveToInlayAwareOffset(caret, range.getStartOffset());\n              }\n            }\n          }\n\n        });\n      } else {\n        vimStateMachine.getCommandBuilder().completeCommandPart(new Argument(new Command(count,\n                                                                                         textObjectHandler, Command.Type.MOTION,\n                                                                                         EnumSet.noneOf(CommandFlags.class))));\n      }"
                   },
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 283,
+                  "startLine": 280,
                   "startColumn": 1,
-                  "charOffset": 11434,
-                  "charLength": 943,
+                  "charOffset": 11287,
+                  "charLength": 1113,
                   "snippet": {
-                    "text": "      if (!commandState.isOperatorPending()) {\n        ((IjVimEditor)editor).getEditor().getCaretModel().runForEachCaret((Caret caret) -> {\n          final TextRange range = textObjectHandler.getRange(vimEditor, new IjVimCaret(caret), context, count, 0, null);\n          if (range != null) {\n            try (VimListenerSuppressor.Locked ignored = SelectionVimListenerSuppressor.INSTANCE.lock()) {\n              if (commandState.getMode() == CommandState.Mode.VISUAL) {\n                vimSetSelection(caret, range.getStartOffset(), range.getEndOffset() - 1, true);\n              } else {\n                InlayHelperKt.moveToInlayAwareOffset(caret, range.getStartOffset());\n              }\n            }\n          }\n\n        });\n      } else {\n        commandState.getCommandBuilder().completeCommandPart(new Argument(new Command(count,\n          textObjectHandler, Command.Type.MOTION,\n          EnumSet.noneOf(CommandFlags.class))));\n      }"
+                    "text": "      if (!vimStateMachine.isOperatorPending()) {\n        ((IjVimEditor)editor).getEditor().getCaretModel().runForEachCaret((Caret caret) -> {\n          final TextRange range = textObjectHandler.getRange(vimEditor, new IjVimCaret(caret), context, count, 0, null);\n          if (range != null) {\n            try (VimListenerSuppressor.Locked ignored = SelectionVimListenerSuppressor.INSTANCE.lock()) {\n              if (vimStateMachine.getMode() == VimStateMachine.Mode.VISUAL) {\n                vimSetSelection(caret, range.getStartOffset(), range.getEndOffset() - 1, true);\n              } else {\n                InlayHelperKt.moveToInlayAwareOffset(caret, range.getStartOffset());\n              }\n            }\n          }\n\n        });\n      } else {\n        vimStateMachine.getCommandBuilder().completeCommandPart(new Argument(new Command(count,\n                                                                                         textObjectHandler, Command.Type.MOTION,\n                                                                                         EnumSet.noneOf(CommandFlags.class))));\n      }"
                   }
                 }
               },
@@ -62493,8 +62446,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "46c58dbeda09660adb06d6c2697ad64f73737f53bc4c013f0873b5a6bf5a07de"
+            "equalIndicator/v1": "3300dbbc28a783f40300494d42e278d068e63330816ce0cb492e8211bf562017"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -62518,9 +62472,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 69,
+                  "startLine": 72,
                   "startColumn": 13,
-                  "charOffset": 3014,
+                  "charOffset": 3172,
                   "charLength": 8,
                   "snippet": {
                     "text": "ijAction"
@@ -62528,9 +62482,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 67,
+                  "startLine": 70,
                   "startColumn": 1,
-                  "charOffset": 2974,
+                  "charOffset": 3132,
                   "charLength": 122,
                   "snippet": {
                     "text": "   * Execute an action\n   *\n   * @param ijAction  The action to execute\n   * @param context The context to run it in\n   */"
@@ -62546,8 +62500,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "b435ecb0306db66b9baba5ec8a98431f5e095c7b67ca0c41c9e780eec6eb6363"
+            "equalIndicator/v1": "79bfe392c9730d629e5692c93841f8d8beed64e21bc678bbf3ad491f6dc4138d"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -62573,7 +62528,7 @@
                 "region": {
                   "startLine": 226,
                   "startColumn": 61,
-                  "charOffset": 9618,
+                  "charOffset": 9634,
                   "charLength": 24,
                   "snippet": {
                     "text": "DuplicableOperatorAction"
@@ -62583,7 +62538,7 @@
                 "contextRegion": {
                   "startLine": 224,
                   "startColumn": 1,
-                  "charOffset": 9551,
+                  "charOffset": 9567,
                   "charLength": 126,
                   "snippet": {
                     "text": "\n  /**\n   * See the description for [com.maddyhome.idea.vim.action.DuplicableOperatorAction]\n   */\n  private fun mapOpCommand("
@@ -62599,273 +62554,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "5d87927eadb28fd044c64f7c2f8c25d6ba86df9211aa39e71ec8bdd6121c33e8"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KDocUnresolvedReference",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Cannot resolve symbol 'vimSelectionStart'",
-            "markdown": "Cannot resolve symbol 'vimSelectionStart'"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimVisualMotionGroupBase.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 129,
-                  "startColumn": 17,
-                  "charOffset": 5434,
-                  "charLength": 17,
-                  "snippet": {
-                    "text": "vimSelectionStart"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 127,
-                  "startColumn": 1,
-                  "charOffset": 5380,
-                  "charLength": 135,
-                  "snippet": {
-                    "text": "   * it:\n   * - Updates command state\n   * - Updates [vimSelectionStart] property\n   * - Updates caret colors\n   * - Updates care shape"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "f37c4ec0749fda78b4b3dea457da07d3a70d61438f30803e3aada5a7279bb3bb"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KDocUnresolvedReference",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Cannot resolve symbol 'vimSelectionStart'",
-            "markdown": "Cannot resolve symbol 'vimSelectionStart'"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimVisualMotionGroup.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 43,
-                  "startColumn": 17,
-                  "charOffset": 1591,
-                  "charLength": 17,
-                  "snippet": {
-                    "text": "vimSelectionStart"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 41,
-                  "startColumn": 1,
-                  "charOffset": 1537,
-                  "charLength": 135,
-                  "snippet": {
-                    "text": "   * it:\n   * - Updates command state\n   * - Updates [vimSelectionStart] property\n   * - Updates caret colors\n   * - Updates care shape"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "a5a2ed2d53d6531b7a3ab8c864e202f7ad2e47ead2de5066f3c54087bf2dea83"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KDocUnresolvedReference",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Cannot resolve symbol 'delete'",
-            "markdown": "Cannot resolve symbol 'delete'"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimEditor.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 56,
-                  "startColumn": 5,
-                  "charOffset": 2452,
-                  "charLength": 6,
-                  "snippet": {
-                    "text": "delete"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 54,
-                  "startColumn": 1,
-                  "charOffset": 2399,
-                  "charLength": 349,
-                  "snippet": {
-                    "text": " *\n * [Offset] is a position between characters.\n * [delete] method, that works on offset-offset, deltes the character *between* two offsets. That means that:\n * - It's possible and simply applicable when the start offset is larger than end offset\n * - Inclusive/Exclusive words are not applicable to such operation. So we don't define the operation"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "b55a0dab681071590ec1a09e83fff1798895f6591a862b344be66817c0ee6344"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KDocUnresolvedReference",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Cannot resolve symbol 'KeyHandler'",
-            "markdown": "Cannot resolve symbol 'KeyHandler'"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/key/KeyStack.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 8,
-                  "startColumn": 54,
-                  "charOffset": 238,
-                  "charLength": 10,
-                  "snippet": {
-                    "text": "KeyHandler"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 6,
-                  "startColumn": 1,
-                  "charOffset": 109,
-                  "charLength": 350,
-                  "snippet": {
-                    "text": "/**\n * This thing is used for keeping keys from ToKeys mappings and macros.\n * Previously, the mapping was directly sent to the [KeyHandler]. However, in this case it was impossible to\n *   pass the key to modal entry (for getChar function).\n * Original vim uses a typeahead buffer for that, but it's not implemented for IdeaVim and this mappingStack"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "fcd6dcad3564aa7d5fd47c2ef5268ed0891911af219815c570418b561a45edda"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KDocUnresolvedReference",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Cannot resolve symbol 'count'",
-            "markdown": "Cannot resolve symbol 'count'"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/yank/VimYankGroup.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 34,
-                  "startColumn": 13,
-                  "charOffset": 1303,
-                  "charLength": 5,
-                  "snippet": {
-                    "text": "count"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 32,
-                  "startColumn": 1,
-                  "charOffset": 1208,
-                  "charLength": 238,
-                  "snippet": {
-                    "text": "   * @param editor   The editor to yank from\n   * @param context  The data context\n   * @param count    The number of times to yank\n   * @param rawCount The actual count entered by the user\n   * @param argument The motion command argument"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "7acb4164386538fc87c2e797d1f729d681932a8d639e5ca93f984b713e39d8b6"
+            "equalIndicator/v1": "b225495f9a723f59b242e080b33b6a58096de0ad7ead7e3ac7f0dae111edc724"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -62889,22 +62580,22 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 363,
+                  "startLine": 361,
                   "startColumn": 7,
-                  "charOffset": 14042,
-                  "charLength": 507,
+                  "charOffset": 13889,
+                  "charLength": 534,
                   "snippet": {
-                    "text": "if (!VimPlugin.isEnabled()) return;\n      if (!VimPlugin.getOptionService().isSet(OptionScope.GLOBAL.INSTANCE, IjVimOptionService.ideamarksName, IjVimOptionService.ideamarksName)) return;\n\n      if (!(bookmark instanceof LineBookmark)) return;\n      BookmarksManager bookmarksManager = BookmarksManager.getInstance(myProject);\n      if (bookmarksManager == null) return;\n      BookmarkType type = bookmarksManager.getType(bookmark);\n      if (type == null) return;\n\n      char mnemonic = type.getMnemonic();"
+                    "text": "if (!VimPlugin.isEnabled()) return;\n      if (!VimPlugin.getOptionService()\n        .isSet(OptionScope.GLOBAL.INSTANCE, IjVimOptionService.ideamarksName, IjVimOptionService.ideamarksName)) {\n        return;\n      }\n\n      if (!(bookmark instanceof LineBookmark)) return;\n      BookmarksManager bookmarksManager = BookmarksManager.getInstance(myProject);\n      if (bookmarksManager == null) return;\n      BookmarkType type = bookmarksManager.getType(bookmark);\n      if (type == null) return;\n\n      char mnemonic = type.getMnemonic();"
                   },
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 363,
+                  "startLine": 361,
                   "startColumn": 1,
-                  "charOffset": 14036,
-                  "charLength": 513,
+                  "charOffset": 13883,
+                  "charLength": 540,
                   "snippet": {
-                    "text": "      if (!VimPlugin.isEnabled()) return;\n      if (!VimPlugin.getOptionService().isSet(OptionScope.GLOBAL.INSTANCE, IjVimOptionService.ideamarksName, IjVimOptionService.ideamarksName)) return;\n\n      if (!(bookmark instanceof LineBookmark)) return;\n      BookmarksManager bookmarksManager = BookmarksManager.getInstance(myProject);\n      if (bookmarksManager == null) return;\n      BookmarkType type = bookmarksManager.getType(bookmark);\n      if (type == null) return;\n\n      char mnemonic = type.getMnemonic();"
+                    "text": "      if (!VimPlugin.isEnabled()) return;\n      if (!VimPlugin.getOptionService()\n        .isSet(OptionScope.GLOBAL.INSTANCE, IjVimOptionService.ideamarksName, IjVimOptionService.ideamarksName)) {\n        return;\n      }\n\n      if (!(bookmark instanceof LineBookmark)) return;\n      BookmarksManager bookmarksManager = BookmarksManager.getInstance(myProject);\n      if (bookmarksManager == null) return;\n      BookmarkType type = bookmarksManager.getType(bookmark);\n      if (type == null) return;\n\n      char mnemonic = type.getMnemonic();"
                   }
                 }
               },
@@ -62922,22 +62613,22 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 380,
+                  "startLine": 381,
                   "startColumn": 7,
-                  "charOffset": 14807,
-                  "charLength": 500,
+                  "charOffset": 14681,
+                  "charLength": 527,
                   "snippet": {
-                    "text": "if (!VimPlugin.isEnabled()) return;\n      if (!VimPlugin.getOptionService().isSet(OptionScope.GLOBAL.INSTANCE, IjVimOptionService.ideamarksName, IjVimOptionService.ideamarksName)) return;\n\n      if (!(bookmark instanceof LineBookmark)) return;\n      BookmarksManager bookmarksManager = BookmarksManager.getInstance(myProject);\n      if (bookmarksManager == null) return;\n      BookmarkType type = bookmarksManager.getType(bookmark);\n      if (type == null) return;\n      char ch = type.getMnemonic();"
+                    "text": "if (!VimPlugin.isEnabled()) return;\n      if (!VimPlugin.getOptionService()\n        .isSet(OptionScope.GLOBAL.INSTANCE, IjVimOptionService.ideamarksName, IjVimOptionService.ideamarksName)) {\n        return;\n      }\n\n      if (!(bookmark instanceof LineBookmark)) return;\n      BookmarksManager bookmarksManager = BookmarksManager.getInstance(myProject);\n      if (bookmarksManager == null) return;\n      BookmarkType type = bookmarksManager.getType(bookmark);\n      if (type == null) return;\n      char ch = type.getMnemonic();"
                   },
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 380,
+                  "startLine": 381,
                   "startColumn": 1,
-                  "charOffset": 14801,
-                  "charLength": 506,
+                  "charOffset": 14675,
+                  "charLength": 533,
                   "snippet": {
-                    "text": "      if (!VimPlugin.isEnabled()) return;\n      if (!VimPlugin.getOptionService().isSet(OptionScope.GLOBAL.INSTANCE, IjVimOptionService.ideamarksName, IjVimOptionService.ideamarksName)) return;\n\n      if (!(bookmark instanceof LineBookmark)) return;\n      BookmarksManager bookmarksManager = BookmarksManager.getInstance(myProject);\n      if (bookmarksManager == null) return;\n      BookmarkType type = bookmarksManager.getType(bookmark);\n      if (type == null) return;\n      char ch = type.getMnemonic();"
+                    "text": "      if (!VimPlugin.isEnabled()) return;\n      if (!VimPlugin.getOptionService()\n        .isSet(OptionScope.GLOBAL.INSTANCE, IjVimOptionService.ideamarksName, IjVimOptionService.ideamarksName)) {\n        return;\n      }\n\n      if (!(bookmark instanceof LineBookmark)) return;\n      BookmarksManager bookmarksManager = BookmarksManager.getInstance(myProject);\n      if (bookmarksManager == null) return;\n      BookmarkType type = bookmarksManager.getType(bookmark);\n      if (type == null) return;\n      char ch = type.getMnemonic();"
                   }
                 }
               },
@@ -62950,8 +62641,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "1852463a24a2406147a17797e9564741094f457ebe710df04aaf078ccf1ba808"
+            "equalIndicator/v1": "00fb390a141c3c5528e457f26739555c74dd4e36a76be1a3a59c5f5db4fb081c"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -62964,33 +62656,33 @@
           "kind": "fail",
           "level": "warning",
           "message": {
-            "text": "Cannot resolve symbol 'rawCount'",
-            "markdown": "Cannot resolve symbol 'rawCount'"
+            "text": "Cannot resolve symbol 'count'",
+            "markdown": "Cannot resolve symbol 'count'"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/yank/VimYankGroup.kt",
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimChangeGroupBase.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 35,
+                  "startLine": 945,
                   "startColumn": 13,
-                  "charOffset": 1352,
-                  "charLength": 8,
+                  "charOffset": 34462,
+                  "charLength": 5,
                   "snippet": {
-                    "text": "rawCount"
+                    "text": "count"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 33,
+                  "startLine": 943,
                   "startColumn": 1,
-                  "charOffset": 1253,
-                  "charLength": 250,
+                  "charOffset": 34369,
+                  "charLength": 207,
                   "snippet": {
-                    "text": "   * @param context  The data context\n   * @param count    The number of times to yank\n   * @param rawCount The actual count entered by the user\n   * @param argument The motion command argument\n   * @return true if able to yank the text, false if not"
+                    "text": "   * @param editor The editor to change\n   * @param caret  The caret to be moved\n   * @param count  The number of characters to change\n   * @return true if able to delete count characters, false if not\n   */"
                   }
                 }
               },
@@ -63003,8 +62695,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "a2d1c8187f5fbc10877f931fbd694dacb5975d57c7b2c1ab6b0ae0221e32e78c"
+            "equalIndicator/v1": "74cee5b8d3ff5b206520c3ab35f0c5540b467badf63d1b23784086c3d9cdd618"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -63017,33 +62710,33 @@
           "kind": "fail",
           "level": "warning",
           "message": {
-            "text": "Cannot resolve symbol 'IdeActionHandler'",
-            "markdown": "Cannot resolve symbol 'IdeActionHandler'"
+            "text": "Cannot resolve symbol 'vimSelectionStart'",
+            "markdown": "Cannot resolve symbol 'vimSelectionStart'"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/handler/EditorActionHandlerBase.kt",
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimVisualMotionGroupBase.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 48,
-                  "startColumn": 8,
-                  "charOffset": 2111,
-                  "charLength": 16,
+                  "startLine": 131,
+                  "startColumn": 17,
+                  "charOffset": 5487,
+                  "charLength": 17,
                   "snippet": {
-                    "text": "IdeActionHandler"
+                    "text": "vimSelectionStart"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 46,
+                  "startLine": 129,
                   "startColumn": 1,
-                  "charOffset": 1968,
-                  "charLength": 340,
+                  "charOffset": 5433,
+                  "charLength": 135,
                   "snippet": {
-                    "text": " *  - [ChangeEditorActionHandler]: ..... Change commands. .... E.g.: s, r, gU\n *  - [VisualOperatorActionHandler]: ... Visual commands.\n *  - [IdeActionHandler]: .............. Commands handled by existing IDE actions.\n *\n *  SpecialKeyHandlers are not presented here because these handlers are created to a limited set of commands and they"
+                    "text": "   * it:\n   * - Updates command state\n   * - Updates [vimSelectionStart] property\n   * - Updates caret colors\n   * - Updates care shape"
                   }
                 }
               },
@@ -63056,8 +62749,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "3efe3324067e37d558d19a560a52fe73fbcf34037b16c9f0ad9a8795b84599ed"
+            "equalIndicator/v1": "4937f5a0d35aef846979ba2a02b80bd9e8d46410e7d9e2e67ef18e8a59081438"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -63144,6 +62838,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "b1dfd43cb0d491c85b1a1108655f18619ce9bdd6c7a6f2b04b83e1051b42689b"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -63152,90 +62847,37 @@
           }
         },
         {
-          "ruleId": "CommentedOutCode",
+          "ruleId": "KDocUnresolvedReference",
           "kind": "fail",
-          "level": "note",
+          "level": "warning",
           "message": {
-            "text": "Commented out code (4 lines)",
-            "markdown": "Commented out code (4 lines)"
+            "text": "Cannot resolve symbol 'vimSelectionStart'",
+            "markdown": "Cannot resolve symbol 'vimSelectionStart'"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/helper/TestInputModel.java",
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimVisualMotionGroup.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 55,
-                  "startColumn": 5,
-                  "charOffset": 1715,
-                  "charLength": 2,
+                  "startLine": 43,
+                  "startColumn": 17,
+                  "charOffset": 1594,
+                  "charLength": 17,
                   "snippet": {
-                    "text": "/*"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 53,
-                  "startColumn": 1,
-                  "charOffset": 1664,
-                  "charLength": 165,
-                  "snippet": {
-                    "text": "\n    // Return key from the unfinished mapping\n    /*\n    MappingStack mappingStack = KeyHandler.getInstance().getMappingStack();\n    if (mappingStack.hasStroke()) {"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "657259d85684f03674976a9df882f95911c687d7f66dfcb3d245346eba65f908"
-          },
-          "properties": {
-            "ideaSeverity": "WEAK WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "FunctionName",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Function name 'search_regcomp' should not contain underscores",
-            "markdown": "Function name `search_regcomp` should not contain underscores"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimSearchGroup.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 36,
-                  "startColumn": 7,
-                  "charOffset": 1304,
-                  "charLength": 14,
-                  "snippet": {
-                    "text": "search_regcomp"
+                    "text": "vimSelectionStart"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 34,
+                  "startLine": 41,
                   "startColumn": 1,
-                  "charOffset": 1262,
-                  "charLength": 219,
+                  "charOffset": 1540,
+                  "charLength": 135,
                   "snippet": {
-                    "text": "  ): Boolean\n  // TODO rewrite this\n  fun search_regcomp(pat: CharPointer?, which_pat: Int, patSave: Int): Pair<Boolean, Triple<Any, String, Any>>\n  fun findDecimalNumber(line: String): Int?\n  fun clearSearchHighlight()"
+                    "text": "   * it:\n   * - Updates command state\n   * - Updates [vimSelectionStart] property\n   * - Updates caret colors\n   * - Updates care shape"
                   }
                 }
               },
@@ -63248,10 +62890,119 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "ae13dfe86ac57f8dfed5bede0dbfd327e2d3d53ead8b0f64c6c994bc36e97b27"
+            "equalIndicator/v1": "624cf172d64e3a8d0282dde930fd55efcbce436ed92a5f25fb0dbaff82f1ca67"
           },
+          "baselineState": "unchanged",
           "properties": {
-            "ideaSeverity": "WEAK WARNING",
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "KDocUnresolvedReference",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Cannot resolve symbol 'delete'",
+            "markdown": "Cannot resolve symbol 'delete'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimEditor.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 56,
+                  "startColumn": 5,
+                  "charOffset": 2455,
+                  "charLength": 6,
+                  "snippet": {
+                    "text": "delete"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 54,
+                  "startColumn": 1,
+                  "charOffset": 2402,
+                  "charLength": 349,
+                  "snippet": {
+                    "text": " *\n * [Offset] is a position between characters.\n * [delete] method, that works on offset-offset, deltes the character *between* two offsets. That means that:\n * - It's possible and simply applicable when the start offset is larger than end offset\n * - Inclusive/Exclusive words are not applicable to such operation. So we don't define the operation"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "d9ba292bdc2c6d80810f92b65ed5ada1adaa71137955da4282b0fb8e02d5a285"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "KDocUnresolvedReference",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Cannot resolve symbol 'KeyHandler'",
+            "markdown": "Cannot resolve symbol 'KeyHandler'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/key/KeyStack.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 8,
+                  "startColumn": 54,
+                  "charOffset": 238,
+                  "charLength": 10,
+                  "snippet": {
+                    "text": "KeyHandler"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 6,
+                  "startColumn": 1,
+                  "charOffset": 109,
+                  "charLength": 350,
+                  "snippet": {
+                    "text": "/**\n * This thing is used for keeping keys from ToKeys mappings and macros.\n * Previously, the mapping was directly sent to the [KeyHandler]. However, in this case it was impossible to\n *   pass the key to modal entry (for getChar function).\n * Original vim uses a typeahead buffer for that, but it's not implemented for IdeaVim and this mappingStack"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "fcd6dcad3564aa7d5fd47c2ef5268ed0891911af219815c570418b561a45edda"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
             "tags": [
               "ideaSeverity"
             ]
@@ -63336,6 +63087,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "da43d80d286b90ac0cd2712b29b2e0556f68eb41fcb69d0aa7d43dcac7e097a5"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -63344,37 +63096,37 @@
           }
         },
         {
-          "ruleId": "FunctionName",
+          "ruleId": "KDocUnresolvedReference",
           "kind": "fail",
-          "level": "note",
+          "level": "warning",
           "message": {
-            "text": "Function name 'is_Magic' should not contain underscores",
-            "markdown": "Function name `is_Magic` should not contain underscores"
+            "text": "Cannot resolve symbol 'count'",
+            "markdown": "Cannot resolve symbol 'count'"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/regexp/Magic.kt",
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/yank/VimYankGroup.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 99,
-                  "startColumn": 9,
-                  "charOffset": 3382,
-                  "charLength": 8,
+                  "startLine": 34,
+                  "startColumn": 13,
+                  "charOffset": 1303,
+                  "charLength": 5,
                   "snippet": {
-                    "text": "is_Magic"
+                    "text": "count"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 97,
+                  "startLine": 32,
                   "startColumn": 1,
-                  "charOffset": 3367,
-                  "charLength": 69,
+                  "charOffset": 1208,
+                  "charLength": 238,
                   "snippet": {
-                    "text": "    }\n\n    fun is_Magic(x: Int): Boolean {\n        return x < 0\n    }"
+                    "text": "   * @param editor   The editor to yank from\n   * @param context  The data context\n   * @param count    The number of times to yank\n   * @param rawCount The actual count entered by the user\n   * @param argument The motion command argument"
                   }
                 }
               },
@@ -63387,47 +63139,48 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "ffe33295f58e6c505aa4af2cc48e45319c96a55193f26050336fea21dcda64de"
+            "equalIndicator/v1": "7acb4164386538fc87c2e797d1f729d681932a8d639e5ca93f984b713e39d8b6"
           },
+          "baselineState": "unchanged",
           "properties": {
-            "ideaSeverity": "WEAK WARNING",
+            "ideaSeverity": "WARNING",
             "tags": [
               "ideaSeverity"
             ]
           }
         },
         {
-          "ruleId": "FunctionName",
+          "ruleId": "KDocUnresolvedReference",
           "kind": "fail",
-          "level": "note",
+          "level": "warning",
           "message": {
-            "text": "Function name 'un_Magic' should not contain underscores",
-            "markdown": "Function name `un_Magic` should not contain underscores"
+            "text": "Cannot resolve symbol 'rawCount'",
+            "markdown": "Cannot resolve symbol 'rawCount'"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/regexp/Magic.kt",
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/yank/VimYankGroup.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 95,
-                  "startColumn": 9,
-                  "charOffset": 3320,
+                  "startLine": 35,
+                  "startColumn": 13,
+                  "charOffset": 1352,
                   "charLength": 8,
                   "snippet": {
-                    "text": "un_Magic"
+                    "text": "rawCount"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 93,
+                  "startLine": 33,
                   "startColumn": 1,
-                  "charOffset": 3305,
-                  "charLength": 67,
+                  "charOffset": 1253,
+                  "charLength": 250,
                   "snippet": {
-                    "text": "    }\n\n    fun un_Magic(x: Int): Int {\n        return x + 256\n    }"
+                    "text": "   * @param context  The data context\n   * @param count    The number of times to yank\n   * @param rawCount The actual count entered by the user\n   * @param argument The motion command argument\n   * @return true if able to yank the text, false if not"
                   }
                 }
               },
@@ -63440,8 +63193,711 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "4dd29cc3bb232741a30d2025f4a05749867ffe247a26c7a6f41069dbeeae499f"
+            "equalIndicator/v1": "a2d1c8187f5fbc10877f931fbd694dacb5975d57c7b2c1ab6b0ae0221e32e78c"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "KDocUnresolvedReference",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Cannot resolve symbol 'IdeActionHandler'",
+            "markdown": "Cannot resolve symbol 'IdeActionHandler'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/handler/EditorActionHandlerBase.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 48,
+                  "startColumn": 8,
+                  "charOffset": 2114,
+                  "charLength": 16,
+                  "snippet": {
+                    "text": "IdeActionHandler"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 46,
+                  "startColumn": 1,
+                  "charOffset": 1971,
+                  "charLength": 340,
+                  "snippet": {
+                    "text": " *  - [ChangeEditorActionHandler]: ..... Change commands. .... E.g.: s, r, gU\n *  - [VisualOperatorActionHandler]: ... Visual commands.\n *  - [IdeActionHandler]: .............. Commands handled by existing IDE actions.\n *\n *  SpecialKeyHandlers are not presented here because these handlers are created to a limited set of commands and they"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "f1e264cc6753a446345d8f75ed64132853ff6bddc3f733c5a4bfbc1bd6be377f"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "KDocUnresolvedReference",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Cannot resolve symbol 'ToggleOption'",
+            "markdown": "Cannot resolve symbol 'ToggleOption'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/services/OptionService.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 197,
+                  "startColumn": 89,
+                  "charOffset": 9104,
+                  "charLength": 12,
+                  "snippet": {
+                    "text": "ToggleOption"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 195,
+                  "startColumn": 1,
+                  "charOffset": 8882,
+                  "charLength": 359,
+                  "snippet": {
+                    "text": "   * @param token used in exception messages\n   * @throws ExException(\"E518: Unknown option: $token\") in case the option is not found\n   * @throws ExException(\"E474: Invalid argument: $token\") in case the option is not a [ToggleOption]\n   */\n  fun toggleOption(scope: com.maddyhome.idea.vim.options.OptionScope, optionName: String, token: String = optionName)"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "4416e70bed9ebad736469d082095097b2ca08a76c672af82a89e871dfa0335bd"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "KDocUnresolvedReference",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Cannot resolve symbol 'ToggleOption'",
+            "markdown": "Cannot resolve symbol 'ToggleOption'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/services/OptionService.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 91,
+                  "startColumn": 99,
+                  "charOffset": 3887,
+                  "charLength": 12,
+                  "snippet": {
+                    "text": "ToggleOption"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 89,
+                  "startColumn": 1,
+                  "charOffset": 3655,
+                  "charLength": 537,
+                  "snippet": {
+                    "text": "   * @param token used in exception messages\n   * @throws ExException(\"E518: Unknown option: $token\") in case the option is not found\n   * @throws ExException(\"E474: Invalid argument: $token\") in case the method was called for the [ToggleOption]\n   * @throws ExException(\"E474: Invalid argument: $token\") in case the method was called for the [StringOption] and the argument is invalid (does not satisfy the option bounded values)\n   * @throws ExException(\"E521: Number required after =: $token\") in case the cast to VimInt is impossible"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "97f75ce903340798a268453279952a681903c2ee34237daa4bb36b5ae79819d0"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "KDocUnresolvedReference",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Cannot resolve symbol 'StringOption'",
+            "markdown": "Cannot resolve symbol 'StringOption'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/services/OptionService.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 92,
+                  "startColumn": 99,
+                  "charOffset": 3999,
+                  "charLength": 12,
+                  "snippet": {
+                    "text": "StringOption"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 90,
+                  "startColumn": 1,
+                  "charOffset": 3700,
+                  "charLength": 498,
+                  "snippet": {
+                    "text": "   * @throws ExException(\"E518: Unknown option: $token\") in case the option is not found\n   * @throws ExException(\"E474: Invalid argument: $token\") in case the method was called for the [ToggleOption]\n   * @throws ExException(\"E474: Invalid argument: $token\") in case the method was called for the [StringOption] and the argument is invalid (does not satisfy the option bounded values)\n   * @throws ExException(\"E521: Number required after =: $token\") in case the cast to VimInt is impossible\n   */"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "09ac4633c590e1492358489ec4ffab00ae5276a55b99c6cb63343687855ded48"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "KDocUnresolvedReference",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Cannot resolve symbol 'ToggleOption'",
+            "markdown": "Cannot resolve symbol 'ToggleOption'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/services/OptionService.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 117,
+                  "startColumn": 99,
+                  "charOffset": 5610,
+                  "charLength": 12,
+                  "snippet": {
+                    "text": "ToggleOption"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 115,
+                  "startColumn": 1,
+                  "charOffset": 5378,
+                  "charLength": 537,
+                  "snippet": {
+                    "text": "   * @param token used in exception messages\n   * @throws ExException(\"E518: Unknown option: $token\") in case the option is not found\n   * @throws ExException(\"E474: Invalid argument: $token\") in case the method was called for the [ToggleOption]\n   * @throws ExException(\"E474: Invalid argument: $token\") in case the method was called for the [StringOption] and the argument is invalid (does not satisfy the option bounded values)\n   * @throws ExException(\"E521: Number required after =: $token\") in case the cast to VimInt is impossible"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "332ad36b397ab83a5574ba974304a739ef9f3de8439432f06291499e925972d6"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "KDocUnresolvedReference",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Cannot resolve symbol 'StringOption'",
+            "markdown": "Cannot resolve symbol 'StringOption'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/services/OptionService.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 118,
+                  "startColumn": 99,
+                  "charOffset": 5722,
+                  "charLength": 12,
+                  "snippet": {
+                    "text": "StringOption"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 116,
+                  "startColumn": 1,
+                  "charOffset": 5423,
+                  "charLength": 498,
+                  "snippet": {
+                    "text": "   * @throws ExException(\"E518: Unknown option: $token\") in case the option is not found\n   * @throws ExException(\"E474: Invalid argument: $token\") in case the method was called for the [ToggleOption]\n   * @throws ExException(\"E474: Invalid argument: $token\") in case the method was called for the [StringOption] and the argument is invalid (does not satisfy the option bounded values)\n   * @throws ExException(\"E521: Number required after =: $token\") in case the cast to VimInt is impossible\n   */"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "e137daec73d0954c9de1c1084d6303c77c32a829308ed20fdb3030fb7bfc860e"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "KDocUnresolvedReference",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Cannot resolve symbol 'ToggleOption'",
+            "markdown": "Cannot resolve symbol 'ToggleOption'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/services/OptionService.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 104,
+                  "startColumn": 99,
+                  "charOffset": 4748,
+                  "charLength": 12,
+                  "snippet": {
+                    "text": "ToggleOption"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 102,
+                  "startColumn": 1,
+                  "charOffset": 4516,
+                  "charLength": 537,
+                  "snippet": {
+                    "text": "   * @param token used in exception messages\n   * @throws ExException(\"E518: Unknown option: $token\") in case the option is not found\n   * @throws ExException(\"E474: Invalid argument: $token\") in case the method was called for the [ToggleOption]\n   * @throws ExException(\"E474: Invalid argument: $token\") in case the method was called for the [StringOption] and the argument is invalid (does not satisfy the option bounded values)\n   * @throws ExException(\"E521: Number required after =: $token\") in case the cast to VimInt is impossible"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "fa0a728ebe973b10f79618513c089b5d86b3996fe04e15e3f3621f1a09fb8fdd"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "KDocUnresolvedReference",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Cannot resolve symbol 'StringOption'",
+            "markdown": "Cannot resolve symbol 'StringOption'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/services/OptionService.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 105,
+                  "startColumn": 99,
+                  "charOffset": 4860,
+                  "charLength": 12,
+                  "snippet": {
+                    "text": "StringOption"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 103,
+                  "startColumn": 1,
+                  "charOffset": 4561,
+                  "charLength": 498,
+                  "snippet": {
+                    "text": "   * @throws ExException(\"E518: Unknown option: $token\") in case the option is not found\n   * @throws ExException(\"E474: Invalid argument: $token\") in case the method was called for the [ToggleOption]\n   * @throws ExException(\"E474: Invalid argument: $token\") in case the method was called for the [StringOption] and the argument is invalid (does not satisfy the option bounded values)\n   * @throws ExException(\"E521: Number required after =: $token\") in case the cast to VimInt is impossible\n   */"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "49f52fd700ed36e820a9f79cb970b441f21e59bf183446c31d55a98559b70eef"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "KDocUnresolvedReference",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Cannot resolve symbol 'ToggleOption'",
+            "markdown": "Cannot resolve symbol 'ToggleOption'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/services/OptionService.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 171,
+                  "startColumn": 89,
+                  "charOffset": 7929,
+                  "charLength": 12,
+                  "snippet": {
+                    "text": "ToggleOption"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 169,
+                  "startColumn": 1,
+                  "charOffset": 7707,
+                  "charLength": 356,
+                  "snippet": {
+                    "text": "   * @param token used in exception messages\n   * @throws ExException(\"E518: Unknown option: $token\") in case the option is not found\n   * @throws ExException(\"E474: Invalid argument: $token\") in case the option is not a [ToggleOption]\n   */\n  fun setOption(scope: com.maddyhome.idea.vim.options.OptionScope, optionName: String, token: String = optionName)"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "54a77c24e51ac8aba65b99fa2a889ac18088819497088f7ee5cdecbc7c62439e"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "KDocUnresolvedReference",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Cannot resolve symbol 'ToggleOption'",
+            "markdown": "Cannot resolve symbol 'ToggleOption'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/services/OptionService.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 187,
+                  "startColumn": 89,
+                  "charOffset": 8585,
+                  "charLength": 12,
+                  "snippet": {
+                    "text": "ToggleOption"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 185,
+                  "startColumn": 1,
+                  "charOffset": 8363,
+                  "charLength": 358,
+                  "snippet": {
+                    "text": "   * @param token used in exception messages\n   * @throws ExException(\"E518: Unknown option: $token\") in case the option is not found\n   * @throws ExException(\"E474: Invalid argument: $token\") in case the option is not a [ToggleOption]\n   */\n  fun unsetOption(scope: com.maddyhome.idea.vim.options.OptionScope, optionName: String, token: String = optionName)"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "988e899ab760ed1b747df7166271177e01bfa911f4dc2fa8d7ad81fbcf4c74c3"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "KDocUnresolvedReference",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Cannot resolve symbol 'ToggleOption'",
+            "markdown": "Cannot resolve symbol 'ToggleOption'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/services/OptionService.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 126,
+                  "startColumn": 46,
+                  "charOffset": 6148,
+                  "charLength": 12,
+                  "snippet": {
+                    "text": "ToggleOption"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 124,
+                  "startColumn": 1,
+                  "charOffset": 6061,
+                  "charLength": 188,
+                  "snippet": {
+                    "text": "   * Checks if the toggle option on.\n   *\n   * Returns false if [optionName] is not a [ToggleOption]\n   * @param scope global/local option scope\n   * @param optionName option name or alias"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "87417607690bde35d5b90538ebf6684ec8c3b5b9b3b42799f6438e5bcdddde48"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "CommentedOutCode",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Commented out code (4 lines)",
+            "markdown": "Commented out code (4 lines)"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/helper/TestInputModel.java",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 55,
+                  "startColumn": 5,
+                  "charOffset": 1715,
+                  "charLength": 2,
+                  "snippet": {
+                    "text": "/*"
+                  },
+                  "sourceLanguage": "JAVA"
+                },
+                "contextRegion": {
+                  "startLine": 53,
+                  "startColumn": 1,
+                  "charOffset": 1664,
+                  "charLength": 165,
+                  "snippet": {
+                    "text": "\n    // Return key from the unfinished mapping\n    /*\n    MappingStack mappingStack = KeyHandler.getInstance().getMappingStack();\n    if (mappingStack.hasStroke()) {"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "657259d85684f03674976a9df882f95911c687d7f66dfcb3d245346eba65f908"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WEAK WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "FunctionName",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Function name 'search_regcomp' should not contain underscores",
+            "markdown": "Function name `search_regcomp` should not contain underscores"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimSearchGroup.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 36,
+                  "startColumn": 7,
+                  "charOffset": 1304,
+                  "charLength": 14,
+                  "snippet": {
+                    "text": "search_regcomp"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 34,
+                  "startColumn": 1,
+                  "charOffset": 1262,
+                  "charLength": 219,
+                  "snippet": {
+                    "text": "  ): Boolean\n  // TODO rewrite this\n  fun search_regcomp(pat: CharPointer?, which_pat: Int, patSave: Int): Pair<Boolean, Triple<Any, String, Any>>\n  fun findDecimalNumber(line: String): Int?\n  fun clearSearchHighlight()"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "ae13dfe86ac57f8dfed5bede0dbfd327e2d3d53ead8b0f64c6c994bc36e97b27"
+          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -63466,8 +63922,8 @@
                 },
                 "region": {
                   "startLine": 103,
-                  "startColumn": 9,
-                  "charOffset": 3446,
+                  "startColumn": 7,
+                  "charOffset": 3292,
                   "charLength": 8,
                   "snippet": {
                     "text": "no_Magic"
@@ -63477,10 +63933,10 @@
                 "contextRegion": {
                   "startLine": 101,
                   "startColumn": 1,
-                  "charOffset": 3431,
-                  "charLength": 96,
+                  "charOffset": 3281,
+                  "charLength": 82,
                   "snippet": {
-                    "text": "    }\n\n    fun no_Magic(x: Int): Int {\n        return if (is_Magic(x)) {\n            un_Magic(x)"
+                    "text": "  }\n\n  fun no_Magic(x: Int): Int {\n    return if (is_Magic(x)) {\n      un_Magic(x)"
                   }
                 }
               },
@@ -63493,8 +63949,117 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "c32082bbccd21c5b31841905cbfa13222f3b2e137d6d094eb6bb046b668a8afe"
+            "equalIndicator/v1": "35ae340bf06be46245f13ebdb95046de8abfc90ad3a4471e558368bd2b14ee22"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WEAK WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "FunctionName",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Function name 'un_Magic' should not contain underscores",
+            "markdown": "Function name `un_Magic` should not contain underscores"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/regexp/Magic.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 95,
+                  "startColumn": 7,
+                  "charOffset": 3182,
+                  "charLength": 8,
+                  "snippet": {
+                    "text": "un_Magic"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 93,
+                  "startColumn": 1,
+                  "charOffset": 3171,
+                  "charLength": 57,
+                  "snippet": {
+                    "text": "  }\n\n  fun un_Magic(x: Int): Int {\n    return x + 256\n  }"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "932fcf8ae6ae235bb9017c149f8ce84dc92c94ffd22ff536b4f60804b89c3c37"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WEAK WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "FunctionName",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Function name 'is_Magic' should not contain underscores",
+            "markdown": "Function name `is_Magic` should not contain underscores"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/regexp/Magic.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 99,
+                  "startColumn": 7,
+                  "charOffset": 3236,
+                  "charLength": 8,
+                  "snippet": {
+                    "text": "is_Magic"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 97,
+                  "startColumn": 1,
+                  "charOffset": 3225,
+                  "charLength": 59,
+                  "snippet": {
+                    "text": "  }\n\n  fun is_Magic(x: Int): Boolean {\n    return x < 0\n  }"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "3c5c79acc98be5e943922a91dfea833f96bb550a103a7e0047d7ca56ef1da118"
+          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -63519,8 +64084,8 @@
                 },
                 "region": {
                   "startLine": 109,
-                  "startColumn": 9,
-                  "charOffset": 3560,
+                  "startColumn": 7,
+                  "charOffset": 3388,
                   "charLength": 12,
                   "snippet": {
                     "text": "toggle_Magic"
@@ -63530,10 +64095,10 @@
                 "contextRegion": {
                   "startLine": 107,
                   "startColumn": 1,
-                  "charOffset": 3545,
-                  "charLength": 100,
+                  "charOffset": 3377,
+                  "charLength": 86,
                   "snippet": {
-                    "text": "    }\n\n    fun toggle_Magic(x: Int): Int {\n        return if (is_Magic(x)) {\n            un_Magic(x)"
+                    "text": "  }\n\n  fun toggle_Magic(x: Int): Int {\n    return if (is_Magic(x)) {\n      un_Magic(x)"
                   }
                 }
               },
@@ -63546,220 +64111,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "02a63605bfae9c3802e21907e4b6f3e67d74de12d7628627ae70f9b1843f1dd0"
-          },
-          "properties": {
-            "ideaSeverity": "WEAK WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "FunctionName",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Function name 'OPERAND_MIN' should start with a lowercase letter",
-            "markdown": "Function name `OPERAND_MIN` should start with a lowercase letter"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/regexp/CharPointer.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 206,
-                  "startColumn": 9,
-                  "charOffset": 5404,
-                  "charLength": 11,
-                  "snippet": {
-                    "text": "OPERAND_MIN"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 204,
-                  "startColumn": 1,
-                  "charOffset": 5389,
-                  "charLength": 132,
-                  "snippet": {
-                    "text": "    }\n\n    fun OPERAND_MIN(): Int {\n        return (seq[pointer + 3].code shl 24) +\n                (seq[pointer + 4].code shl 16) +"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "3368c89b0fbc6140bdf707a9d393bdc8da77353847497d9966c01e9b2ec059d7"
-          },
-          "properties": {
-            "ideaSeverity": "WEAK WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "FunctionName",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Function name 'OPERAND_CMP' should start with a lowercase letter",
-            "markdown": "Function name `OPERAND_CMP` should start with a lowercase letter"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/regexp/CharPointer.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 220,
-                  "startColumn": 9,
-                  "charOffset": 5843,
-                  "charLength": 11,
-                  "snippet": {
-                    "text": "OPERAND_CMP"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 218,
-                  "startColumn": 1,
-                  "charOffset": 5828,
-                  "charLength": 74,
-                  "snippet": {
-                    "text": "    }\n\n    fun OPERAND_CMP(): Char {\n        return seq[pointer + 7]\n    }"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "dd069e48a2fb4e2dda0a06c31e9d2e4dcbf2e7e47474e3b7f0bbdbf4d42b51e3"
-          },
-          "properties": {
-            "ideaSeverity": "WEAK WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "FunctionName",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Function name 'OPERAND' should start with a lowercase letter",
-            "markdown": "Function name `OPERAND` should start with a lowercase letter"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/regexp/CharPointer.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 198,
-                  "startColumn": 9,
-                  "charOffset": 5224,
-                  "charLength": 7,
-                  "snippet": {
-                    "text": "OPERAND"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 196,
-                  "startColumn": 1,
-                  "charOffset": 5209,
-                  "charLength": 67,
-                  "snippet": {
-                    "text": "    }\n\n    fun OPERAND(): CharPointer {\n        return ref(3)\n    }"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "d19ff938d387c7d13c06c2ea455821d2e5e2f2b02fcf7da28f863957e6c15547"
-          },
-          "properties": {
-            "ideaSeverity": "WEAK WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "FunctionName",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Function name 'OPERAND_MAX' should start with a lowercase letter",
-            "markdown": "Function name `OPERAND_MAX` should start with a lowercase letter"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/regexp/CharPointer.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 213,
-                  "startColumn": 9,
-                  "charOffset": 5623,
-                  "charLength": 11,
-                  "snippet": {
-                    "text": "OPERAND_MAX"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 211,
-                  "startColumn": 1,
-                  "charOffset": 5608,
-                  "charLength": 132,
-                  "snippet": {
-                    "text": "    }\n\n    fun OPERAND_MAX(): Int {\n        return (seq[pointer + 7].code shl 24) +\n                (seq[pointer + 8].code shl 16) +"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "73fef70c9dd47e23433cfed3e5b9a4925933ce384183c818143c610b50e46d6d"
+            "equalIndicator/v1": "a9451dfb2258ae9087b50ac3a000c48fe2d1206555f778f739778bad74889c73"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -63783,9 +64137,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 202,
-                  "startColumn": 9,
-                  "charOffset": 5286,
+                  "startLine": 199,
+                  "startColumn": 7,
+                  "charOffset": 4568,
                   "charLength": 4,
                   "snippet": {
                     "text": "NEXT"
@@ -63793,12 +64147,12 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 200,
+                  "startLine": 197,
                   "startColumn": 1,
-                  "charOffset": 5271,
-                  "charLength": 123,
+                  "charOffset": 4557,
+                  "charLength": 113,
                   "snippet": {
-                    "text": "    }\n\n    fun NEXT(): Int {\n        return (seq[pointer + 1].code and 0xff shl 8) + (seq[pointer + 2].code and 0xff)\n    }"
+                    "text": "  }\n\n  fun NEXT(): Int {\n    return (seq[pointer + 1].code and 0xff shl 8) + (seq[pointer + 2].code and 0xff)\n  }"
                   }
                 }
               },
@@ -63811,8 +64165,63 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "3864ae7fa51f6466585d9ef1144e5236fd7e1e37cfc22320d7f68c1a7eb8b17c"
+            "equalIndicator/v1": "049ee22f35616e0a58eaaf4417b0bca2968fb359998035496941ac2e4deacaac"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WEAK WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "FunctionName",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Function name 'OPERAND' should start with a lowercase letter",
+            "markdown": "Function name `OPERAND` should start with a lowercase letter"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/regexp/CharPointer.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 195,
+                  "startColumn": 7,
+                  "charOffset": 4514,
+                  "charLength": 7,
+                  "snippet": {
+                    "text": "OPERAND"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 193,
+                  "startColumn": 1,
+                  "charOffset": 4503,
+                  "charLength": 57,
+                  "snippet": {
+                    "text": "  }\n\n  fun OPERAND(): CharPointer {\n    return ref(3)\n  }"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "1cc5eef38712f2b65e1c80e22eb0a6a27220e672138c29986ef9dd64e0f75ebf"
+          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -63836,9 +64245,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 194,
-                  "startColumn": 9,
-                  "charOffset": 5168,
+                  "startLine": 191,
+                  "startColumn": 7,
+                  "charOffset": 4466,
                   "charLength": 2,
                   "snippet": {
                     "text": "OP"
@@ -63846,12 +64255,12 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 192,
+                  "startLine": 189,
                   "startColumn": 1,
-                  "charOffset": 5153,
-                  "charLength": 61,
+                  "charOffset": 4455,
+                  "charLength": 51,
                   "snippet": {
-                    "text": "    }\n\n    fun OP(): Int {\n        return charAt().code\n    }"
+                    "text": "  }\n\n  fun OP(): Int {\n    return charAt().code\n  }"
                   }
                 }
               },
@@ -63864,8 +64273,171 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "323cbd07589ba49a98809d54c91d979cc8cf64bed2e91c0bdd4b52a93c2edf69"
+            "equalIndicator/v1": "f39704a44c7d0fa9ab45811233c1a840bc11aad192feaf438218f42c2a2643e1"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WEAK WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "FunctionName",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Function name 'OPERAND_MAX' should start with a lowercase letter",
+            "markdown": "Function name `OPERAND_MAX` should start with a lowercase letter"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/regexp/CharPointer.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 210,
+                  "startColumn": 7,
+                  "charOffset": 4859,
+                  "charLength": 11,
+                  "snippet": {
+                    "text": "OPERAND_MAX"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 208,
+                  "startColumn": 1,
+                  "charOffset": 4848,
+                  "charLength": 114,
+                  "snippet": {
+                    "text": "  }\n\n  fun OPERAND_MAX(): Int {\n    return (seq[pointer + 7].code shl 24) +\n      (seq[pointer + 8].code shl 16) +"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "3a5f8d649e103027a59d061d9a8f6d965bf6216428c5711a77fe16008dee5de8"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WEAK WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "FunctionName",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Function name 'OPERAND_CMP' should start with a lowercase letter",
+            "markdown": "Function name `OPERAND_CMP` should start with a lowercase letter"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/regexp/CharPointer.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 217,
+                  "startColumn": 7,
+                  "charOffset": 5041,
+                  "charLength": 11,
+                  "snippet": {
+                    "text": "OPERAND_CMP"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 215,
+                  "startColumn": 1,
+                  "charOffset": 5030,
+                  "charLength": 64,
+                  "snippet": {
+                    "text": "  }\n\n  fun OPERAND_CMP(): Char {\n    return seq[pointer + 7]\n  }"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "b5042375cdd10ab5bc148e99492164533e4107d1e40d556b5c1e9e0c4588d102"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WEAK WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "FunctionName",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Function name 'OPERAND_MIN' should start with a lowercase letter",
+            "markdown": "Function name `OPERAND_MIN` should start with a lowercase letter"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/regexp/CharPointer.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 203,
+                  "startColumn": 7,
+                  "charOffset": 4678,
+                  "charLength": 11,
+                  "snippet": {
+                    "text": "OPERAND_MIN"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 201,
+                  "startColumn": 1,
+                  "charOffset": 4667,
+                  "charLength": 114,
+                  "snippet": {
+                    "text": "  }\n\n  fun OPERAND_MIN(): Int {\n    return (seq[pointer + 3].code shl 24) +\n      (seq[pointer + 4].code shl 16) +"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "30af0e0ddc09aa266b1cca8b67514f0c0d4b096b0bdf78c76687ba6f006504c7"
+          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -63919,6 +64491,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "3b8f4c620c642d8a33ef94222a9b6c5490ef8b9929ddd43019cbeeaf022c59b3"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -63942,9 +64515,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 34,
+                  "startLine": 33,
                   "startColumn": 31,
-                  "charOffset": 1379,
+                  "charOffset": 1330,
                   "charLength": 3,
                   "snippet": {
                     "text": "0-9"
@@ -63952,9 +64525,9 @@
                   "sourceLanguage": "RegExp"
                 },
                 "contextRegion": {
-                  "startLine": 32,
+                  "startLine": 31,
                   "startColumn": 1,
-                  "charOffset": 1268,
+                  "charOffset": 1219,
                   "charLength": 307,
                   "snippet": {
                     "text": "  private const val allLettersRegex = \"\\\\p{L}\"\n  private val validationPattern =\n    Pattern.compile(\"(\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9^]|[0-9]{1,3})),)*\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9]|[0-9]{1,3})),?$\")\n\n  private lateinit var keywordSpecs: MutableList<KeywordSpec>"
@@ -63970,8 +64543,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "faa5640df26d6d696f212fcf4e4f72d68b5c5ad11224bc75597178430f22d2da"
+            "equalIndicator/v1": "ec1150480349f25a6f25fb0d485629bbbaa95b8e27a3366d5a866cca1739b906"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -63995,9 +64569,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 34,
+                  "startLine": 33,
                   "startColumn": 37,
-                  "charOffset": 1385,
+                  "charOffset": 1336,
                   "charLength": 5,
                   "snippet": {
                     "text": "[0-9]"
@@ -64005,9 +64579,9 @@
                   "sourceLanguage": "RegExp"
                 },
                 "contextRegion": {
-                  "startLine": 32,
+                  "startLine": 31,
                   "startColumn": 1,
-                  "charOffset": 1268,
+                  "charOffset": 1219,
                   "charLength": 307,
                   "snippet": {
                     "text": "  private const val allLettersRegex = \"\\\\p{L}\"\n  private val validationPattern =\n    Pattern.compile(\"(\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9^]|[0-9]{1,3})),)*\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9]|[0-9]{1,3})),?$\")\n\n  private lateinit var keywordSpecs: MutableList<KeywordSpec>"
@@ -64023,8 +64597,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "fe8b0e934f390594831b2f7b49180ea39b1769862946a2edb2a357962db60227"
+            "equalIndicator/v1": "3d0ad46824160c50c120938d71ae76a45f0396d7210f675d9b1409711e08c9f3"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -64048,9 +64623,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 34,
+                  "startLine": 33,
                   "startColumn": 50,
-                  "charOffset": 1398,
+                  "charOffset": 1349,
                   "charLength": 6,
                   "snippet": {
                     "text": "[^0-9]"
@@ -64058,9 +64633,9 @@
                   "sourceLanguage": "RegExp"
                 },
                 "contextRegion": {
-                  "startLine": 32,
+                  "startLine": 31,
                   "startColumn": 1,
-                  "charOffset": 1268,
+                  "charOffset": 1219,
                   "charLength": 307,
                   "snippet": {
                     "text": "  private const val allLettersRegex = \"\\\\p{L}\"\n  private val validationPattern =\n    Pattern.compile(\"(\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9^]|[0-9]{1,3})),)*\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9]|[0-9]{1,3})),?$\")\n\n  private lateinit var keywordSpecs: MutableList<KeywordSpec>"
@@ -64076,8 +64651,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "abfffced93163e76469b9c280bc461fb3fd5e0eba3d4b1e9995e9c057f00043e"
+            "equalIndicator/v1": "c81127216fa75109455858ac220e445452ef1bcae2d33be77e3723a31ca55526"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -64101,9 +64677,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 34,
+                  "startLine": 33,
                   "startColumn": 57,
-                  "charOffset": 1405,
+                  "charOffset": 1356,
                   "charLength": 5,
                   "snippet": {
                     "text": "[0-9]"
@@ -64111,9 +64687,9 @@
                   "sourceLanguage": "RegExp"
                 },
                 "contextRegion": {
-                  "startLine": 32,
+                  "startLine": 31,
                   "startColumn": 1,
-                  "charOffset": 1268,
+                  "charOffset": 1219,
                   "charLength": 307,
                   "snippet": {
                     "text": "  private const val allLettersRegex = \"\\\\p{L}\"\n  private val validationPattern =\n    Pattern.compile(\"(\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9^]|[0-9]{1,3})),)*\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9]|[0-9]{1,3})),?$\")\n\n  private lateinit var keywordSpecs: MutableList<KeywordSpec>"
@@ -64129,8 +64705,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "2ef936daccfcef05b828fe13dbc4da91926c7027e4e63ca3dee6b7a18a914938"
+            "equalIndicator/v1": "2a1248f7b2b8779e21b933ad0eb405e257c39edc23511401d6a34d5077ef4727"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -64154,9 +64731,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 34,
+                  "startLine": 33,
                   "startColumn": 72,
-                  "charOffset": 1420,
+                  "charOffset": 1371,
                   "charLength": 3,
                   "snippet": {
                     "text": "0-9"
@@ -64164,9 +64741,9 @@
                   "sourceLanguage": "RegExp"
                 },
                 "contextRegion": {
-                  "startLine": 32,
+                  "startLine": 31,
                   "startColumn": 1,
-                  "charOffset": 1268,
+                  "charOffset": 1219,
                   "charLength": 307,
                   "snippet": {
                     "text": "  private const val allLettersRegex = \"\\\\p{L}\"\n  private val validationPattern =\n    Pattern.compile(\"(\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9^]|[0-9]{1,3})),)*\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9]|[0-9]{1,3})),?$\")\n\n  private lateinit var keywordSpecs: MutableList<KeywordSpec>"
@@ -64182,8 +64759,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "94a4d0d389849b33aae2662be3ec581d368d42f07890d0f1df097b2d9f3bfff0"
+            "equalIndicator/v1": "2d69911f4a59b38d09728ff390999370fb9c557e3ec7435682bf6b20e6bb4246"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -64207,8 +64785,224 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 34,
+                  "startLine": 33,
                   "startColumn": 78,
+                  "charOffset": 1377,
+                  "charLength": 5,
+                  "snippet": {
+                    "text": "[0-9]"
+                  },
+                  "sourceLanguage": "RegExp"
+                },
+                "contextRegion": {
+                  "startLine": 31,
+                  "startColumn": 1,
+                  "charOffset": 1219,
+                  "charLength": 307,
+                  "snippet": {
+                    "text": "  private const val allLettersRegex = \"\\\\p{L}\"\n  private val validationPattern =\n    Pattern.compile(\"(\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9^]|[0-9]{1,3})),)*\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9]|[0-9]{1,3})),?$\")\n\n  private lateinit var keywordSpecs: MutableList<KeywordSpec>"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "bd17df9b1626e5e8fb9e16cc1a161d77b3216d0dd42155c01d7e4dab930d82d0"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WEAK WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "RegExpSimplifiable",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "'0-9' can be simplified to '\\d'",
+            "markdown": "`0-9` can be simplified to '\\\\d'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/options/helpers/KeywordOptionHelper.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 33,
+                  "startColumn": 101,
+                  "charOffset": 1400,
+                  "charLength": 3,
+                  "snippet": {
+                    "text": "0-9"
+                  },
+                  "sourceLanguage": "RegExp"
+                },
+                "contextRegion": {
+                  "startLine": 31,
+                  "startColumn": 1,
+                  "charOffset": 1219,
+                  "charLength": 307,
+                  "snippet": {
+                    "text": "  private const val allLettersRegex = \"\\\\p{L}\"\n  private val validationPattern =\n    Pattern.compile(\"(\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9^]|[0-9]{1,3})),)*\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9]|[0-9]{1,3})),?$\")\n\n  private lateinit var keywordSpecs: MutableList<KeywordSpec>"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "6b01dad1ac93f498febf8678ecea456bb0ed9dec11d5ddc79eb3a207467e4ac6"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WEAK WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "RegExpSimplifiable",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "'[0-9]' can be simplified to '\\d'",
+            "markdown": "`[0-9]` can be simplified to '\\\\d'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/options/helpers/KeywordOptionHelper.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 33,
+                  "startColumn": 107,
+                  "charOffset": 1406,
+                  "charLength": 5,
+                  "snippet": {
+                    "text": "[0-9]"
+                  },
+                  "sourceLanguage": "RegExp"
+                },
+                "contextRegion": {
+                  "startLine": 31,
+                  "startColumn": 1,
+                  "charOffset": 1219,
+                  "charLength": 307,
+                  "snippet": {
+                    "text": "  private const val allLettersRegex = \"\\\\p{L}\"\n  private val validationPattern =\n    Pattern.compile(\"(\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9^]|[0-9]{1,3})),)*\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9]|[0-9]{1,3})),?$\")\n\n  private lateinit var keywordSpecs: MutableList<KeywordSpec>"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "ece717a650e07255dcf4235353d409b14d4f1feb0e079665a68166bbc0a485a3"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WEAK WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "RegExpSimplifiable",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "'[^0-9]' can be simplified to '\\D'",
+            "markdown": "`[^0-9]` can be simplified to '\\\\D'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/options/helpers/KeywordOptionHelper.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 33,
+                  "startColumn": 120,
+                  "charOffset": 1419,
+                  "charLength": 6,
+                  "snippet": {
+                    "text": "[^0-9]"
+                  },
+                  "sourceLanguage": "RegExp"
+                },
+                "contextRegion": {
+                  "startLine": 31,
+                  "startColumn": 1,
+                  "charOffset": 1219,
+                  "charLength": 307,
+                  "snippet": {
+                    "text": "  private const val allLettersRegex = \"\\\\p{L}\"\n  private val validationPattern =\n    Pattern.compile(\"(\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9^]|[0-9]{1,3})),)*\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9]|[0-9]{1,3})),?$\")\n\n  private lateinit var keywordSpecs: MutableList<KeywordSpec>"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "5b7576c06c5d5ef31b028118a389306af34598c3e8fe8251d78316382b05350d"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WEAK WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "RegExpSimplifiable",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "'[0-9]' can be simplified to '\\d'",
+            "markdown": "`[0-9]` can be simplified to '\\\\d'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/options/helpers/KeywordOptionHelper.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 33,
+                  "startColumn": 127,
                   "charOffset": 1426,
                   "charLength": 5,
                   "snippet": {
@@ -64217,9 +65011,9 @@
                   "sourceLanguage": "RegExp"
                 },
                 "contextRegion": {
-                  "startLine": 32,
+                  "startLine": 31,
                   "startColumn": 1,
-                  "charOffset": 1268,
+                  "charOffset": 1219,
                   "charLength": 307,
                   "snippet": {
                     "text": "  private const val allLettersRegex = \"\\\\p{L}\"\n  private val validationPattern =\n    Pattern.compile(\"(\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9^]|[0-9]{1,3})),)*\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9]|[0-9]{1,3})),?$\")\n\n  private lateinit var keywordSpecs: MutableList<KeywordSpec>"
@@ -64235,114 +65029,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "bad9af0dc307d43ac80a66d703bc48d0a3efb6b042c906ad58225919756dc5ca"
-          },
-          "properties": {
-            "ideaSeverity": "WEAK WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "RegExpSimplifiable",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "'0-9' can be simplified to '\\d'",
-            "markdown": "`0-9` can be simplified to '\\\\d'"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/options/helpers/KeywordOptionHelper.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 34,
-                  "startColumn": 101,
-                  "charOffset": 1449,
-                  "charLength": 3,
-                  "snippet": {
-                    "text": "0-9"
-                  },
-                  "sourceLanguage": "RegExp"
-                },
-                "contextRegion": {
-                  "startLine": 32,
-                  "startColumn": 1,
-                  "charOffset": 1268,
-                  "charLength": 307,
-                  "snippet": {
-                    "text": "  private const val allLettersRegex = \"\\\\p{L}\"\n  private val validationPattern =\n    Pattern.compile(\"(\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9^]|[0-9]{1,3})),)*\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9]|[0-9]{1,3})),?$\")\n\n  private lateinit var keywordSpecs: MutableList<KeywordSpec>"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "df1cdcecb97fe58de0686eb4a8b3a23b3f373446547f6889bd670539533399a6"
-          },
-          "properties": {
-            "ideaSeverity": "WEAK WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "RegExpSimplifiable",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "'[0-9]' can be simplified to '\\d'",
-            "markdown": "`[0-9]` can be simplified to '\\\\d'"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/options/helpers/KeywordOptionHelper.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 34,
-                  "startColumn": 107,
-                  "charOffset": 1455,
-                  "charLength": 5,
-                  "snippet": {
-                    "text": "[0-9]"
-                  },
-                  "sourceLanguage": "RegExp"
-                },
-                "contextRegion": {
-                  "startLine": 32,
-                  "startColumn": 1,
-                  "charOffset": 1268,
-                  "charLength": 307,
-                  "snippet": {
-                    "text": "  private const val allLettersRegex = \"\\\\p{L}\"\n  private val validationPattern =\n    Pattern.compile(\"(\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9^]|[0-9]{1,3})),)*\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9]|[0-9]{1,3})),?$\")\n\n  private lateinit var keywordSpecs: MutableList<KeywordSpec>"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "8b78ca61b92293303321cda0013a3ccbf0574734d9e631c597bc849547c9915c"
+            "equalIndicator/v1": "2a53bea0b7d0e7d1099243b3de26761666aa65d89e00219223c0dba719dff944"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -64366,115 +65055,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 34,
-                  "startColumn": 120,
-                  "charOffset": 1468,
-                  "charLength": 6,
-                  "snippet": {
-                    "text": "[^0-9]"
-                  },
-                  "sourceLanguage": "RegExp"
-                },
-                "contextRegion": {
-                  "startLine": 32,
-                  "startColumn": 1,
-                  "charOffset": 1268,
-                  "charLength": 307,
-                  "snippet": {
-                    "text": "  private const val allLettersRegex = \"\\\\p{L}\"\n  private val validationPattern =\n    Pattern.compile(\"(\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9^]|[0-9]{1,3})),)*\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9]|[0-9]{1,3})),?$\")\n\n  private lateinit var keywordSpecs: MutableList<KeywordSpec>"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "746be5f6b0b983033e804ab48fdc67bd6b142274ebe447b0886a59043037f5a4"
-          },
-          "properties": {
-            "ideaSeverity": "WEAK WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "RegExpSimplifiable",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "'[0-9]' can be simplified to '\\d'",
-            "markdown": "`[0-9]` can be simplified to '\\\\d'"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/options/helpers/KeywordOptionHelper.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 34,
-                  "startColumn": 127,
-                  "charOffset": 1475,
-                  "charLength": 5,
-                  "snippet": {
-                    "text": "[0-9]"
-                  },
-                  "sourceLanguage": "RegExp"
-                },
-                "contextRegion": {
-                  "startLine": 32,
-                  "startColumn": 1,
-                  "charOffset": 1268,
-                  "charLength": 307,
-                  "snippet": {
-                    "text": "  private const val allLettersRegex = \"\\\\p{L}\"\n  private val validationPattern =\n    Pattern.compile(\"(\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9^]|[0-9]{1,3})),)*\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9]|[0-9]{1,3})),?$\")\n\n  private lateinit var keywordSpecs: MutableList<KeywordSpec>"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "8bb0cdc4fc6b659975b7e446a3713e4f3051cbc736a161a79e933eb34ea17295"
-          },
-          "properties": {
-            "ideaSeverity": "WEAK WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "RegExpSimplifiable",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "'[^0-9]' can be simplified to '\\D'",
-            "markdown": "`[^0-9]` can be simplified to '\\\\D'"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/options/helpers/KeywordOptionHelper.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 34,
+                  "startLine": 33,
                   "startColumn": 140,
-                  "charOffset": 1488,
+                  "charOffset": 1439,
                   "charLength": 6,
                   "snippet": {
                     "text": "[^0-9]"
@@ -64482,9 +65065,9 @@
                   "sourceLanguage": "RegExp"
                 },
                 "contextRegion": {
-                  "startLine": 32,
+                  "startLine": 31,
                   "startColumn": 1,
-                  "charOffset": 1268,
+                  "charOffset": 1219,
                   "charLength": 307,
                   "snippet": {
                     "text": "  private const val allLettersRegex = \"\\\\p{L}\"\n  private val validationPattern =\n    Pattern.compile(\"(\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9^]|[0-9]{1,3})),)*\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9]|[0-9]{1,3})),?$\")\n\n  private lateinit var keywordSpecs: MutableList<KeywordSpec>"
@@ -64500,8 +65083,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "8cbd9cd132fdc5cafd84afd4f1f336284f60109b53232edea6bbebbe4458f0f3"
+            "equalIndicator/v1": "b39aa4ee42dd68201dfce01f9e26d28289f655983c961f5a82218fce1c907403"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -64525,9 +65109,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 34,
+                  "startLine": 33,
                   "startColumn": 147,
-                  "charOffset": 1495,
+                  "charOffset": 1446,
                   "charLength": 5,
                   "snippet": {
                     "text": "[0-9]"
@@ -64535,9 +65119,9 @@
                   "sourceLanguage": "RegExp"
                 },
                 "contextRegion": {
-                  "startLine": 32,
+                  "startLine": 31,
                   "startColumn": 1,
-                  "charOffset": 1268,
+                  "charOffset": 1219,
                   "charLength": 307,
                   "snippet": {
                     "text": "  private const val allLettersRegex = \"\\\\p{L}\"\n  private val validationPattern =\n    Pattern.compile(\"(\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9^]|[0-9]{1,3})),)*\\\\^?(([^0-9^]|[0-9]{1,3})-([^0-9]|[0-9]{1,3})|([^0-9]|[0-9]{1,3})),?$\")\n\n  private lateinit var keywordSpecs: MutableList<KeywordSpec>"
@@ -64553,8 +65137,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "97d1bafa9169bcc49dfebcd1945ca8035b7b7519b1c8bcacf9c47969c8fc15d5"
+            "equalIndicator/v1": "01af52c34350a835eaf7b84d79f3df6405a1707072214c71ce7cde2e75c64fd3"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -64578,9 +65163,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 86,
+                  "startLine": 87,
                   "startColumn": 41,
-                  "charOffset": 3390,
+                  "charOffset": 3484,
                   "charLength": 3,
                   "snippet": {
                     "text": "[-]"
@@ -64588,9 +65173,9 @@
                   "sourceLanguage": "RegExp"
                 },
                 "contextRegion": {
-                  "startLine": 84,
+                  "startLine": 85,
                   "startColumn": 1,
-                  "charOffset": 3211,
+                  "charOffset": 3305,
                   "charLength": 362,
                   "snippet": {
                     "text": "      // in the actual alias being created, and we don't want to parse that one.\n      val trimmedInput = argument.takeWhile { it != ' ' }\n      val pattern = Regex(\"(?>-nargs=((|[-])\\\\d+|[?]|[+]|[*]))\").find(trimmedInput) ?: run {\n        injector.messages.showStatusBarMessage(injector.messages.message(\"e176.invalid.number.of.arguments\"))\n        return false"
@@ -64606,8 +65191,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "13fe865a43a09dc46a6536edfc307c066ccaf54d63b11afa3b3624e1cfb7ea7f"
+            "equalIndicator/v1": "725223ae0453b304a3082bd64d215206b8cf4d25b186c04e4d965fec95e1722a"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -64661,6 +65247,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "75ff42f5d613fdec514e4c164ec944392d80ee16859d1d0d58d07c405f858e91"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -64714,6 +65301,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "68c16ce43969842436069627d7150cda8f55b06c14849e583938a895080a33e4"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -64767,6 +65355,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "4296e976637e431e63cab53afe60712813ab02d3c5ba7282196c51e1bc765f57"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -64820,6 +65409,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "c0418939e477f63284d10cba5b9753fb9b8b336270cb54a0f9c726ffe0fe6195"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -64873,6 +65463,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "da5f58fed4280a0ffd3ddfc79ff6f12213d3b5bf710845a68edb63ee2ea2435e"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -64926,6 +65517,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "5ce6ebd4cb98d85575f61625d5dd9819ecac5c90030c87cb44605da4f9dd8d60"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -64979,6 +65571,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "6f78c74ae697ae5b2e971cd9e0d7121cf7a107fdbb54829c997f40b2f4f8ed00"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -65032,6 +65625,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "4e625171362569da6dace7ab95b7e8984570251893e74813a0b0d56a34b7ee2d"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -65056,8 +65650,8 @@
                 },
                 "region": {
                   "startLine": 273,
-                  "startColumn": 30,
-                  "charOffset": 10311,
+                  "startColumn": 29,
+                  "charOffset": 10316,
                   "charLength": 52,
                   "snippet": {
                     "text": "{ it.vimLastColumn = it.getVisualPosition().column }"
@@ -65067,10 +65661,10 @@
                 "contextRegion": {
                   "startLine": 271,
                   "startColumn": 1,
-                  "charOffset": 10260,
-                  "charLength": 113,
+                  "charOffset": 10266,
+                  "charLength": 112,
                   "snippet": {
-                    "text": "          }\n        }\n        editor.forEachCaret( { it.vimLastColumn = it.getVisualPosition().column })\n      }\n"
+                    "text": "          }\n        }\n        editor.forEachCaret({ it.vimLastColumn = it.getVisualPosition().column })\n      }\n"
                   }
                 }
               },
@@ -65083,8 +65677,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "e92a80ead36b858169077429c6edcdda65a4b27326ebba7339e20c31a37e0748"
+            "equalIndicator/v1": "e7fb01ec178c8017844229e891eefba14f43f2494a0273ed59558eba917389cf"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -65092,112 +65687,6 @@
             ]
           }
         },
-        {
-          "ruleId": "Deprecation",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "'com.intellij.openapi.fileEditor.impl.EditorWithProviderComposite' is deprecated",
-            "markdown": "'com.intellij.openapi.fileEditor.impl.EditorWithProviderComposite' is deprecated"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/WindowGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 186,
-                  "startColumn": 11,
-                  "charOffset": 7921,
-                  "charLength": 27,
-                  "snippet": {
-                    "text": "EditorWithProviderComposite"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 184,
-                  "startColumn": 1,
-                  "charOffset": 7816,
-                  "charLength": 266,
-                  "snippet": {
-                    "text": "\n  private static @Nullable Rectangle getEditorWindowRectangle(@NotNull EditorWindow window) {\n    final EditorWithProviderComposite editor = window.getSelectedEditor();\n    if (editor != null) {\n      final Point point = editor.getComponent().getLocationOnScreen();"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "368e43c4ac383e246b9cea18b9abea7c1dd7c04e0c8a75f7d9cf363bb793a9d1"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "Deprecation",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "'getSelectedEditor()' is deprecated",
-            "markdown": "'getSelectedEditor()' is deprecated"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/WindowGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 186,
-                  "startColumn": 55,
-                  "charOffset": 7965,
-                  "charLength": 17,
-                  "snippet": {
-                    "text": "getSelectedEditor"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 184,
-                  "startColumn": 1,
-                  "charOffset": 7816,
-                  "charLength": 266,
-                  "snippet": {
-                    "text": "\n  private static @Nullable Rectangle getEditorWindowRectangle(@NotNull EditorWindow window) {\n    final EditorWithProviderComposite editor = window.getSelectedEditor();\n    if (editor != null) {\n      final Point point = editor.getComponent().getLocationOnScreen();"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "e09ef6ead8ca4ae89fdd6539a2c992a482f921e2a5081d8d198ad402cc358d3d"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
         {
           "ruleId": "ConstantConditions",
           "kind": "fail",
@@ -65244,6 +65733,115 @@
           "partialFingerprints": {
             "equalIndicator/v1": "6d2a6b2b6008f26b77cfc717e58a7a55c71b8181e13c57bd7a36c5ace7ffe4ae"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "ConstantConditions",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Argument 'context' might be null",
+            "markdown": "Argument `context` might be null"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/group/ChangeGroup.java",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 461,
+                  "startColumn": 38,
+                  "charOffset": 20391,
+                  "charLength": 7,
+                  "snippet": {
+                    "text": "context"
+                  },
+                  "sourceLanguage": "JAVA"
+                },
+                "contextRegion": {
+                  "startLine": 459,
+                  "startColumn": 1,
+                  "charOffset": 20207,
+                  "charLength": 278,
+                  "snippet": {
+                    "text": "        // Please don't use `getDocument().getText().isEmpty()` because it converts CharSequence into String\n        if (editor.fileSize() == 0) {\n          insertBeforeCursor(editor, context);\n        }\n        else if (after && !EngineEditorHelperKt.endsWithNewLine(editor)) {"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "fb65412fb4efb517fb13ec21ec993bffa947add45658fc24555377f8e5c5afbf"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "ConstantConditions",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Argument 'context' might be null",
+            "markdown": "Argument `context` might be null"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/group/ChangeGroup.java",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 478,
+                  "startColumn": 34,
+                  "charOffset": 20945,
+                  "charLength": 7,
+                  "snippet": {
+                    "text": "context"
+                  },
+                  "sourceLanguage": "JAVA"
+                },
+                "contextRegion": {
+                  "startLine": 476,
+                  "startColumn": 1,
+                  "charOffset": 20895,
+                  "charLength": 66,
+                  "snippet": {
+                    "text": "    }\n    else {\n      insertBeforeCursor(editor, context);\n    }\n"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "9331a5d507fdb8c1ecdc02cfa740bda58ff7cd616353e1c74842c051e6ea5553"
+          },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -65267,9 +65865,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 835,
+                  "startLine": 840,
                   "startColumn": 31,
-                  "charOffset": 37109,
+                  "charOffset": 37576,
                   "charLength": 11,
                   "snippet": {
                     "text": "toCharArray"
@@ -65277,9 +65875,9 @@
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 833,
+                  "startLine": 838,
                   "startColumn": 1,
-                  "charOffset": 37020,
+                  "charOffset": 37487,
                   "charLength": 131,
                   "snippet": {
                     "text": "  @Override\n  public void saveStrokes(String newStrokes) {\n    char[] chars = newStrokes.toCharArray();\n    strokes.add(chars);\n  }"
@@ -65295,8 +65893,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "1b295dc6a598fb22499cf326dae5b9c02b64e43547944ef10df92826b6e43bc7"
+            "equalIndicator/v1": "bc3321b2ab16d1f3f37cdb8dd3932153405c4acdd302b0da15f934a2f8c874e2"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -65350,6 +65949,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "d262c9b48fec179948be5e810cbeeaf45403c3b1444fb572a66ae59eeff7631b"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -65403,6 +66003,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "7f7bcb678447f4843a09a1e0e2d54f35084a5804d581d4f3111fc6a8e48dd7a7"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -65456,6 +66057,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "2eacdac2f7506433901f41dd3e350de556a44679d1411f4d7836e890d3f9944e"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -65509,6 +66111,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "b9a671d0ad2ed3af037df3a4d850a8c18aa53a9f4f9569262ba1005f00553c4d"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -65562,6 +66165,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "953ac71accc60496a7f3932883701bd147dffa95ecb75cacf9d9065e17c6bd4d"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -65585,9 +66189,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 413,
+                  "startLine": 421,
                   "startColumn": 57,
-                  "charOffset": 17504,
+                  "charOffset": 17745,
                   "charLength": 3,
                   "snippet": {
                     "text": "get"
@@ -65595,62 +66199,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 411,
+                  "startLine": 419,
                   "startColumn": 1,
-                  "charOffset": 17365,
-                  "charLength": 159,
-                  "snippet": {
-                    "text": "    val keys = injector.parser.parseKeys(from)\n    for (mode in MappingMode.ALL) {\n      assertNull(VimPlugin.getKey().getKeyMapping(mode).get(keys))\n    }\n  }"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.test",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "3534269d5b50cfafebc75a937221d6b20a0b65363ff4dd1f0b222f9ad542d9bb"
-          },
-          "properties": {
-            "ideaSeverity": "INFO",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "ReplaceGetOrSet",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Should be replaced with indexing",
-            "markdown": "Should be replaced with indexing"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/test/java/org/jetbrains/plugins/ideavim/VimTestCase.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 420,
-                  "startColumn": 57,
-                  "charOffset": 17718,
-                  "charLength": 3,
-                  "snippet": {
-                    "text": "get"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 418,
-                  "startColumn": 1,
-                  "charOffset": 17589,
+                  "charOffset": 17616,
                   "charLength": 149,
                   "snippet": {
                     "text": "    val keys = injector.parser.parseKeys(from)\n    for (mode in modes) {\n      assertNull(VimPlugin.getKey().getKeyMapping(mode).get(keys))\n    }\n  }"
@@ -65666,8 +66217,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "795706b9aac6c0884ce01f933e2ad1f1fdbef04b50b65d654b354981c08764f8"
+            "equalIndicator/v1": "68fdac8426eadbd8b518153c13e8e9027aad472f26280697149ed5da9c8780b7"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -65691,9 +66243,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 428,
+                  "startLine": 414,
                   "startColumn": 57,
-                  "charOffset": 17995,
+                  "charOffset": 17531,
                   "charLength": 3,
                   "snippet": {
                     "text": "get"
@@ -65701,9 +66253,63 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 426,
+                  "startLine": 412,
                   "startColumn": 1,
-                  "charOffset": 17866,
+                  "charOffset": 17392,
+                  "charLength": 159,
+                  "snippet": {
+                    "text": "    val keys = injector.parser.parseKeys(from)\n    for (mode in MappingMode.ALL) {\n      assertNull(VimPlugin.getKey().getKeyMapping(mode).get(keys))\n    }\n  }"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.test",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "fa70824f5f34ff94bf3de7ec2aac4082753bc45d693cbc5cf9fc50c77c822a60"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "INFO",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "ReplaceGetOrSet",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Should be replaced with indexing",
+            "markdown": "Should be replaced with indexing"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/test/java/org/jetbrains/plugins/ideavim/VimTestCase.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 429,
+                  "startColumn": 57,
+                  "charOffset": 18022,
+                  "charLength": 3,
+                  "snippet": {
+                    "text": "get"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 427,
+                  "startColumn": 1,
+                  "charOffset": 17893,
                   "charLength": 215,
                   "snippet": {
                     "text": "    val toKeys = injector.parser.parseKeys(to)\n    for (mode in modes) {\n      val info = VimPlugin.getKey().getKeyMapping(mode).get(keys)\n      kotlin.test.assertNotNull(info)\n      if (info is ToKeysMappingInfo) {"
@@ -65719,8 +66325,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "fb1c79c628d9eeb06b0283ee0547d4c4487d1a90b12ca3a7a67491b8db64acaa"
+            "equalIndicator/v1": "494f54c4790e3d9b12b44824431f4f3796a883f602a8fef692a2c1e2b9b459a1"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -65744,9 +66351,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 151,
+                  "startLine": 103,
                   "startColumn": 160,
-                  "charOffset": 8981,
+                  "charOffset": 5923,
                   "charLength": 8,
                   "snippet": {
                     "text": "internal"
@@ -65754,9 +66361,9 @@
                   "sourceLanguage": "XML"
                 },
                 "contextRegion": {
-                  "startLine": 149,
+                  "startLine": 101,
                   "startColumn": 1,
-                  "charOffset": 8765,
+                  "charOffset": 5707,
                   "charLength": 448,
                   "snippet": {
                     "text": "    <!-- Internal -->\n    <!--suppress PluginXmlI18n -->\n    <action id=\"VimInternalAddBlockInlays\" class=\"com.maddyhome.idea.vim.action.internal.AddBlockInlaysAction\" text=\"Add Test Block Inlays | IdeaVim Internal\" internal=\"true\"/>\n    <!--suppress PluginXmlI18n -->\n    <action id=\"VimInternalAddInlineInlays\" class=\"com.maddyhome.idea.vim.action.internal.AddInlineInlaysAction\" text=\"Add Test Inline Inlays | IdeaVim Internal\" internal=\"true\"/>"
@@ -65772,8 +66379,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "a146e6011738774bd19998e0a2e419eba07cbab93155c9c2c87123fbcb4a2299"
+            "equalIndicator/v1": "d5b02e2a9d6f960fa3eacab6f89e544ce2bbe3bc69e2bce3b74617f21e74c8e4"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "ERROR",
             "tags": [
@@ -65797,9 +66405,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 153,
+                  "startLine": 105,
                   "startColumn": 163,
-                  "charOffset": 9196,
+                  "charOffset": 6138,
                   "charLength": 8,
                   "snippet": {
                     "text": "internal"
@@ -65807,9 +66415,9 @@
                   "sourceLanguage": "XML"
                 },
                 "contextRegion": {
-                  "startLine": 151,
+                  "startLine": 103,
                   "startColumn": 1,
-                  "charOffset": 8822,
+                  "charOffset": 5764,
                   "charLength": 491,
                   "snippet": {
                     "text": "    <action id=\"VimInternalAddBlockInlays\" class=\"com.maddyhome.idea.vim.action.internal.AddBlockInlaysAction\" text=\"Add Test Block Inlays | IdeaVim Internal\" internal=\"true\"/>\n    <!--suppress PluginXmlI18n -->\n    <action id=\"VimInternalAddInlineInlays\" class=\"com.maddyhome.idea.vim.action.internal.AddInlineInlaysAction\" text=\"Add Test Inline Inlays | IdeaVim Internal\" internal=\"true\"/>\n\n    <action id=\"VimShortcutKeyAction\" class=\"com.maddyhome.idea.vim.action.VimShortcutKeyAction\"/>"
@@ -65825,8 +66433,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "4c0c5b2bd88fcbadcedf4f2ba7fa29f4e78354658821607b0524375828711cb6"
+            "equalIndicator/v1": "856c5c4c005c3d3bfc4c7901c9859d92447d8c6f492d449bae301fd4adc12363"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "ERROR",
             "tags": [
@@ -65850,9 +66459,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 200,
+                  "startLine": 198,
                   "startColumn": 42,
-                  "charOffset": 7773,
+                  "charOffset": 7671,
                   "charLength": 7,
                   "snippet": {
                     "text": "context"
@@ -65860,9 +66469,9 @@
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 198,
+                  "startLine": 196,
                   "startColumn": 1,
-                  "charOffset": 7689,
+                  "charOffset": 7587,
                   "charLength": 206,
                   "snippet": {
                     "text": "   * Saves all files in the project.\n   */\n  public void saveFiles(ExecutionContext context) {\n    ExecuteExtensionKt.execute(VimInjectorKt.getInjector().getNativeActionManager().getSaveAll(), context);\n  }"
@@ -65878,8 +66487,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "884847f9e47479c1ff63fc3f54dd6042685e746fe3a87e400702e70b3de0fb5e"
+            "equalIndicator/v1": "d75d6390acd415a4422f8c249365b9979a6e00f2ad905da42fbff6330b0dfa00"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -65905,7 +66515,7 @@
                 "region": {
                   "startLine": 901,
                   "startColumn": 17,
-                  "charOffset": 42045,
+                  "charOffset": 42051,
                   "charLength": 17,
                   "snippet": {
                     "text": "moveCaretToColumn"
@@ -65915,7 +66525,7 @@
                 "contextRegion": {
                   "startLine": 899,
                   "startColumn": 1,
-                  "charOffset": 42016,
+                  "charOffset": 42022,
                   "charLength": 260,
                   "snippet": {
                     "text": "\n  @Override\n  public Motion moveCaretToColumn(@NotNull VimEditor editor, @NotNull VimCaret caret, int count, boolean allowEnd) {\n    int line = caret.getLine().getLine();\n    int pos = normalizeColumn(((IjVimEditor)editor).getEditor(), line, count, allowEnd);"
@@ -65931,8 +66541,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "b665067f7f1644a449fef6631f11c47c7c073f7961d1be519f00a3ed81ea2fdb"
+            "equalIndicator/v1": "3efefe33127f2bc9fef164b45de2d5ff9eae591a6013d7ea51c68f3b7f7f0b65"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -65986,6 +66597,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "0c0a90df94f01f3d2050e09fa4fcfa895a751bb8777b06d82a92d31a3a70c42a"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -66039,6 +66651,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "f1c3f6dd1fe8f09b593cd6027cee89549313067d3ab0546bfcb2f54f7bf923aa"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -66092,6 +66705,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "37cb8f8d568bdad9ed47741132ad49e54c67be9e1e88900c0610bd01c63b451a"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -66115,9 +66729,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 52,
+                  "startLine": 48,
                   "startColumn": 4,
-                  "charOffset": 2265,
+                  "charOffset": 2066,
                   "charLength": 42,
                   "snippet": {
                     "text": "https://github.com/kana/vim-textobj-entire"
@@ -66125,9 +66739,9 @@
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 50,
+                  "startLine": 46,
                   "startColumn": 1,
-                  "charOffset": 2235,
+                  "charOffset": 2036,
                   "charLength": 82,
                   "snippet": {
                     "text": "/**\n * Port of vim-entire:\n * https://github.com/kana/vim-textobj-entire\n *\n * <p>"
@@ -66143,8 +66757,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "3f3abf2fb941b70dc1804d26afc423afc4c8bfa9c05b30a4fc068b257854021c"
+            "equalIndicator/v1": "ff23c8552370335435e7f7fcc2d997572f8ba14afc2fba94c5dda5a707fe07fc"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -66168,9 +66783,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 67,
+                  "startLine": 63,
                   "startColumn": 4,
-                  "charOffset": 2921,
+                  "charOffset": 2722,
                   "charLength": 77,
                   "snippet": {
                     "text": "https://github.com/kana/vim-textobj-entire/blob/master/doc/textobj-entire.txt"
@@ -66178,9 +66793,9 @@
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 65,
+                  "startLine": 61,
                   "startColumn": 1,
-                  "charOffset": 2861,
+                  "charOffset": 2662,
                   "charLength": 179,
                   "snippet": {
                     "text": " *\n * See also the reference manual for more details at:\n * https://github.com/kana/vim-textobj-entire/blob/master/doc/textobj-entire.txt\n *\n * @author Alexandre Grison (@agrison)"
@@ -66196,8 +66811,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "ada4dc82104fbf74cfc7626836fd34c263014d1ef254c0f1c2030138782bafff"
+            "equalIndicator/v1": "b44bca6ac64354ad82e78ac5c5fa99c1d1999580b018fbbfaed39e183121c345"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -66221,9 +66837,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 51,
+                  "startLine": 48,
                   "startColumn": 4,
-                  "charOffset": 2220,
+                  "charOffset": 2064,
                   "charLength": 50,
                   "snippet": {
                     "text": "https://github.com/michaeljsmith/vim-indent-object"
@@ -66231,9 +66847,9 @@
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 49,
+                  "startLine": 46,
                   "startColumn": 1,
-                  "charOffset": 2183,
+                  "charOffset": 2027,
                   "charLength": 97,
                   "snippet": {
                     "text": "/**\n * Port of vim-indent-object:\n * https://github.com/michaeljsmith/vim-indent-object\n *\n * <p>"
@@ -66249,8 +66865,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "13fae2bb4c77e1b39d462566a6d1ec06d048b6e1f2ec893a5b2cd3a863b73c63"
+            "equalIndicator/v1": "581f2460de0981aade99dcd349fcd7cb7801f6efaaa06edac4c7bd46cad55d28"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -66274,9 +66891,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 63,
+                  "startLine": 60,
                   "startColumn": 4,
-                  "charOffset": 2828,
+                  "charOffset": 2672,
                   "charLength": 84,
                   "snippet": {
                     "text": "https://github.com/michaeljsmith/vim-indent-object/blob/master/doc/indent-object.txt"
@@ -66284,9 +66901,9 @@
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 61,
+                  "startLine": 58,
                   "startColumn": 1,
-                  "charOffset": 2768,
+                  "charOffset": 2612,
                   "charLength": 187,
                   "snippet": {
                     "text": " *\n * See also the reference manual for more details at:\n * https://github.com/michaeljsmith/vim-indent-object/blob/master/doc/indent-object.txt\n *\n * @author Shrikant Kandula (@sharat87)"
@@ -66302,8 +66919,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "4a6275b4042192aad81d97c0d280cab9f1c0eab88935be1d80a67dbb0de927a2"
+            "equalIndicator/v1": "f7b4e9c1d13cbf3d51256ff940f92c8235801a2f56dcd64c91602f375e4c6a33"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -66311,250 +66929,38 @@
             ]
           }
         },
-        {
-          "ruleId": "RemoveEmptyClassBody",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Redundant empty class body",
-            "markdown": "Redundant empty class body"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimScriptExecutorBase.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 3,
-                  "startColumn": 57,
-                  "charOffset": 92,
-                  "charLength": 3,
-                  "snippet": {
-                    "text": "{\n}"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 1,
-                  "startColumn": 1,
-                  "charOffset": 0,
-                  "charLength": 95,
-                  "snippet": {
-                    "text": "package com.maddyhome.idea.vim.api\n\nabstract class VimScriptExecutorBase: VimscriptExecutor {\n}"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "fcb93f8ee288761524f5be8ebfe7761bb3747a1dba00f30630ff1c3f17e7661a"
-          },
-          "properties": {
-            "ideaSeverity": "INFO",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "RemoveEmptyClassBody",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Redundant empty class body",
-            "markdown": "Redundant empty class body"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimEditorGroupBase.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 3,
-                  "startColumn": 52,
-                  "charOffset": 87,
-                  "charLength": 4,
-                  "snippet": {
-                    "text": "{\n\n}"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 1,
-                  "startColumn": 1,
-                  "charOffset": 0,
-                  "charLength": 91,
-                  "snippet": {
-                    "text": "package com.maddyhome.idea.vim.api\n\nabstract class VimEditorGroupBase : VimEditorGroup {\n\n}"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "56f202f0fe60f6e673be86d2fc48d51d5ef1046206fdb86ec4f403a8442148be"
-          },
-          "properties": {
-            "ideaSeverity": "INFO",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "RemoveEmptyClassBody",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Redundant empty class body",
-            "markdown": "Redundant empty class body"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimSearchGroupBase.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 3,
-                  "startColumn": 52,
-                  "charOffset": 87,
-                  "charLength": 3,
-                  "snippet": {
-                    "text": "{\n}"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 1,
-                  "startColumn": 1,
-                  "charOffset": 0,
-                  "charLength": 90,
-                  "snippet": {
-                    "text": "package com.maddyhome.idea.vim.api\n\nabstract class VimSearchGroupBase : VimSearchGroup {\n}"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "795f4f9734bf98492fd2274305a15292e2f9de8f1e31e007f20466754128f1cb"
-          },
-          "properties": {
-            "ideaSeverity": "INFO",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "RemoveEmptyClassBody",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Redundant empty class body",
-            "markdown": "Redundant empty class body"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/undo/UndoRedoBase.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 3,
-                  "startColumn": 43,
-                  "charOffset": 79,
-                  "charLength": 3,
-                  "snippet": {
-                    "text": "{\n}"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 1,
-                  "startColumn": 1,
-                  "charOffset": 0,
-                  "charLength": 82,
-                  "snippet": {
-                    "text": "package com.maddyhome.idea.vim.undo\n\nabstract class UndoRedoBase : VimUndoRedo {\n}"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "516c41caf1ea11516eb6ace5773dcf6c7a8d145d1f10a992f9d2917fa8d5def0"
-          },
-          "properties": {
-            "ideaSeverity": "INFO",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
         {
           "ruleId": "UNUSED_IMPORT",
           "kind": "fail",
           "level": "warning",
           "message": {
-            "text": "Unused import 'import com.maddyhome.idea.vim.common.GoalCommand;'",
-            "markdown": "Unused import `import com.maddyhome.idea.vim.common.GoalCommand;`"
+            "text": "Unused import 'import com.maddyhome.idea.vim.key.Node;'",
+            "markdown": "Unused import `import com.maddyhome.idea.vim.key.Node;`"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/FileGroup.java",
+                  "uri": "src/main/java/com/maddyhome/idea/vim/group/KeyGroup.java",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 42,
+                  "startLine": 41,
                   "startColumn": 1,
-                  "charOffset": 1832,
-                  "charLength": 49,
+                  "charOffset": 1821,
+                  "charLength": 39,
                   "snippet": {
-                    "text": "import com.maddyhome.idea.vim.common.GoalCommand;"
+                    "text": "import com.maddyhome.idea.vim.key.Node;"
                   },
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 40,
+                  "startLine": 39,
                   "startColumn": 1,
-                  "charOffset": 1743,
-                  "charLength": 237,
+                  "charOffset": 1733,
+                  "charLength": 238,
                   "snippet": {
-                    "text": "import com.maddyhome.idea.vim.api.*;\nimport com.maddyhome.idea.vim.command.CommandState;\nimport com.maddyhome.idea.vim.common.GoalCommand;\nimport com.maddyhome.idea.vim.common.TextRange;\nimport com.maddyhome.idea.vim.helper.EditorHelper;"
+                    "text": "import com.maddyhome.idea.vim.api.*;\nimport com.maddyhome.idea.vim.command.MappingMode;\nimport com.maddyhome.idea.vim.key.Node;\nimport com.maddyhome.idea.vim.ex.ExOutputModel;\nimport com.maddyhome.idea.vim.handler.EditorActionHandlerBase;"
                   }
                 }
               },
@@ -66567,8 +66973,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "c2c02374571f5f27f19bbf06cb7277672625eeb153e89d633a3f0bdda5579bd4"
+            "equalIndicator/v1": "0baf32ecaf47d0bd59688459e8408ee6461c170f12b5b5db85c7456ca2e7590b"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -66581,326 +66988,8 @@
           "kind": "fail",
           "level": "warning",
           "message": {
-            "text": "Unused import 'import com.maddyhome.idea.vim.options.OptionConstants;'",
-            "markdown": "Unused import `import com.maddyhome.idea.vim.options.OptionConstants;`"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/FileGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 51,
-                  "startColumn": 1,
-                  "charOffset": 2301,
-                  "charLength": 54,
-                  "snippet": {
-                    "text": "import com.maddyhome.idea.vim.options.OptionConstants;"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 49,
-                  "startColumn": 1,
-                  "charOffset": 2194,
-                  "charLength": 279,
-                  "snippet": {
-                    "text": "import com.maddyhome.idea.vim.newapi.IjExecutionContext;\nimport com.maddyhome.idea.vim.newapi.IjVimEditor;\nimport com.maddyhome.idea.vim.options.OptionConstants;\nimport com.maddyhome.idea.vim.options.OptionScope;\nimport com.maddyhome.idea.vim.vimscript.model.datatypes.VimString;"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "c04ef8b690c8e0918a5a4b150dffa5f877fc3ba1483edb49d650dbeea0d53321"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UNUSED_IMPORT",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unused import 'import com.maddyhome.idea.vim.options.OptionConstants;'",
-            "markdown": "Unused import `import com.maddyhome.idea.vim.options.OptionConstants;`"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/MarkGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 47,
-                  "startColumn": 1,
-                  "charOffset": 2106,
-                  "charLength": 54,
-                  "snippet": {
-                    "text": "import com.maddyhome.idea.vim.options.OptionConstants;"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 45,
-                  "startColumn": 1,
-                  "charOffset": 2018,
-                  "charLength": 262,
-                  "snippet": {
-                    "text": "import com.maddyhome.idea.vim.mark.*;\nimport com.maddyhome.idea.vim.newapi.IjVimEditor;\nimport com.maddyhome.idea.vim.options.OptionConstants;\nimport com.maddyhome.idea.vim.options.OptionScope;\nimport com.maddyhome.idea.vim.vimscript.services.IjVimOptionService;"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "1a9f66dd9108576eb4e9012406eb217c3630f721bfe5751fd3f4fbcca952e608"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UNUSED_IMPORT",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unused import 'import com.intellij.openapi.actionSystem.DataContext;'",
-            "markdown": "Unused import `import com.intellij.openapi.actionSystem.DataContext;`"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/extension/textobjentire/VimTextObjEntireExtension.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 21,
-                  "startColumn": 1,
-                  "charOffset": 826,
-                  "charLength": 53,
-                  "snippet": {
-                    "text": "import com.intellij.openapi.actionSystem.DataContext;"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 19,
-                  "startColumn": 1,
-                  "charOffset": 769,
-                  "charLength": 195,
-                  "snippet": {
-                    "text": "package com.maddyhome.idea.vim.extension.textobjentire;\n\nimport com.intellij.openapi.actionSystem.DataContext;\nimport com.intellij.openapi.editor.Caret;\nimport com.intellij.openapi.editor.Editor;"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "e6bd8c0c39f0f785e2c4f6f91b5972e748270b1d93c77e953a0ae4dc26a12dbd"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UNUSED_IMPORT",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unused import 'import com.intellij.openapi.editor.Editor;'",
-            "markdown": "Unused import `import com.intellij.openapi.editor.Editor;`"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/extension/textobjentire/VimTextObjEntireExtension.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 23,
-                  "startColumn": 1,
-                  "charOffset": 922,
-                  "charLength": 42,
-                  "snippet": {
-                    "text": "import com.intellij.openapi.editor.Editor;"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 21,
-                  "startColumn": 1,
-                  "charOffset": 826,
-                  "charLength": 234,
-                  "snippet": {
-                    "text": "import com.intellij.openapi.actionSystem.DataContext;\nimport com.intellij.openapi.editor.Caret;\nimport com.intellij.openapi.editor.Editor;\nimport com.maddyhome.idea.vim.api.ExecutionContext;\nimport com.maddyhome.idea.vim.api.VimCaret;"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "d6d12121f5594dceacf3003d5af7a50a91132b6699e0090928a83048efcd2a2a"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UNUSED_IMPORT",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unused import 'import com.maddyhome.idea.vim.newapi.IjExecutionContext;'",
-            "markdown": "Unused import `import com.maddyhome.idea.vim.newapi.IjExecutionContext;`"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/extension/textobjentire/VimTextObjEntireExtension.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 37,
-                  "startColumn": 1,
-                  "charOffset": 1657,
-                  "charLength": 56,
-                  "snippet": {
-                    "text": "import com.maddyhome.idea.vim.newapi.IjExecutionContext;"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 35,
-                  "startColumn": 1,
-                  "charOffset": 1524,
-                  "charLength": 288,
-                  "snippet": {
-                    "text": "import com.maddyhome.idea.vim.listener.SelectionVimListenerSuppressor;\nimport com.maddyhome.idea.vim.listener.VimListenerSuppressor;\nimport com.maddyhome.idea.vim.newapi.IjExecutionContext;\nimport com.maddyhome.idea.vim.newapi.IjVimCaret;\nimport com.maddyhome.idea.vim.newapi.IjVimEditor;"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "6ff60dd84faf78172d8fcbdf79f21721c98520b0f801dfcdea866319431558f1"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UNUSED_IMPORT",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unused import 'import org.apache.tools.ant.taskdefs.Exec;'",
-            "markdown": "Unused import `import org.apache.tools.ant.taskdefs.Exec;`"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/extension/textobjentire/VimTextObjEntireExtension.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 40,
-                  "startColumn": 1,
-                  "charOffset": 1813,
-                  "charLength": 42,
-                  "snippet": {
-                    "text": "import org.apache.tools.ant.taskdefs.Exec;"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 38,
-                  "startColumn": 1,
-                  "charOffset": 1714,
-                  "charLength": 226,
-                  "snippet": {
-                    "text": "import com.maddyhome.idea.vim.newapi.IjVimCaret;\nimport com.maddyhome.idea.vim.newapi.IjVimEditor;\nimport org.apache.tools.ant.taskdefs.Exec;\nimport org.jetbrains.annotations.NotNull;\nimport org.jetbrains.annotations.Nullable;"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "6116e92c1274ad0aa9d7ef32daedd1e1f6bcc1e2602cb56ced66e9cd581123d2"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UNUSED_IMPORT",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unused import 'import com.intellij.openapi.actionSystem.DataContext;'",
-            "markdown": "Unused import `import com.intellij.openapi.actionSystem.DataContext;`"
+            "text": "Unused import 'import com.maddyhome.idea.vim.command.MappingMode;'",
+            "markdown": "Unused import `import com.maddyhome.idea.vim.command.MappingMode;`"
           },
           "locations": [
             {
@@ -66910,75 +66999,22 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 21,
+                  "startLine": 26,
                   "startColumn": 1,
-                  "charOffset": 823,
-                  "charLength": 53,
+                  "charOffset": 1029,
+                  "charLength": 50,
                   "snippet": {
-                    "text": "import com.intellij.openapi.actionSystem.DataContext;"
+                    "text": "import com.maddyhome.idea.vim.command.MappingMode;"
                   },
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 19,
-                  "startColumn": 1,
-                  "charOffset": 769,
-                  "charLength": 194,
-                  "snippet": {
-                    "text": "package com.maddyhome.idea.vim.extension.argtextobj;\n\nimport com.intellij.openapi.actionSystem.DataContext;\nimport com.intellij.openapi.editor.Caret;\nimport com.intellij.openapi.editor.Document;"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "ba6d2d0fef83e7d211dae6cec0aeb932af42070fce4c73bb148ccb93d543a1a2"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UNUSED_IMPORT",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unused import 'import com.intellij.openapi.editor.Editor;'",
-            "markdown": "Unused import `import com.intellij.openapi.editor.Editor;`"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/extension/argtextobj/VimArgTextObjExtension.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
                   "startLine": 24,
                   "startColumn": 1,
-                  "charOffset": 964,
-                  "charLength": 42,
+                  "charOffset": 951,
+                  "charLength": 230,
                   "snippet": {
-                    "text": "import com.intellij.openapi.editor.Editor;"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 22,
-                  "startColumn": 1,
-                  "charOffset": 877,
-                  "charLength": 207,
-                  "snippet": {
-                    "text": "import com.intellij.openapi.editor.Caret;\nimport com.intellij.openapi.editor.Document;\nimport com.intellij.openapi.editor.Editor;\nimport com.maddyhome.idea.vim.VimPlugin;\nimport com.maddyhome.idea.vim.api.*;"
+                    "text": "import com.maddyhome.idea.vim.api.*;\nimport com.maddyhome.idea.vim.command.*;\nimport com.maddyhome.idea.vim.command.MappingMode;\nimport com.maddyhome.idea.vim.common.TextRange;\nimport com.maddyhome.idea.vim.extension.VimExtension;"
                   }
                 }
               },
@@ -66991,8 +67027,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "a7ddc8c05a451c201850cfb160ec7625e1a3f453574adb1534b79a6a17adc347"
+            "equalIndicator/v1": "b15ea350614d1076675b766f2807fe551e4dcc00862fff24d7480e1cf47d6ab7"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -67005,33 +67042,33 @@
           "kind": "fail",
           "level": "warning",
           "message": {
-            "text": "Unused import 'import com.maddyhome.idea.vim.newapi.IjExecutionContext;'",
-            "markdown": "Unused import `import com.maddyhome.idea.vim.newapi.IjExecutionContext;`"
+            "text": "Unused import 'import com.maddyhome.idea.vim.command.MappingMode;'",
+            "markdown": "Unused import `import com.maddyhome.idea.vim.command.MappingMode;`"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/extension/argtextobj/VimArgTextObjExtension.java",
+                  "uri": "src/main/java/com/maddyhome/idea/vim/extension/textobjentire/VimTextObjEntireExtension.java",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 38,
+                  "startLine": 27,
                   "startColumn": 1,
-                  "charOffset": 1688,
-                  "charLength": 56,
+                  "charOffset": 1099,
+                  "charLength": 50,
                   "snippet": {
-                    "text": "import com.maddyhome.idea.vim.newapi.IjExecutionContext;"
+                    "text": "import com.maddyhome.idea.vim.command.MappingMode;"
                   },
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 36,
+                  "startLine": 25,
                   "startColumn": 1,
-                  "charOffset": 1555,
-                  "charLength": 288,
+                  "charOffset": 1009,
+                  "charLength": 242,
                   "snippet": {
-                    "text": "import com.maddyhome.idea.vim.listener.SelectionVimListenerSuppressor;\nimport com.maddyhome.idea.vim.listener.VimListenerSuppressor;\nimport com.maddyhome.idea.vim.newapi.IjExecutionContext;\nimport com.maddyhome.idea.vim.newapi.IjVimCaret;\nimport com.maddyhome.idea.vim.newapi.IjVimEditor;"
+                    "text": "import com.maddyhome.idea.vim.api.VimInjectorKt;\nimport com.maddyhome.idea.vim.command.*;\nimport com.maddyhome.idea.vim.command.MappingMode;\nimport com.maddyhome.idea.vim.common.TextRange;\nimport com.maddyhome.idea.vim.extension.VimExtension;"
                   }
                 }
               },
@@ -67044,8 +67081,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "8d970a4dbd227ebe0213e637dd94115b540daabef95e8d0e0e23da081908be39"
+            "equalIndicator/v1": "650744b82ef19583c5f161487510a8f4b4fdae9aa4f76f827252f92f4e107529"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -67058,8 +67096,8 @@
           "kind": "fail",
           "level": "warning",
           "message": {
-            "text": "Unused import 'import com.intellij.openapi.actionSystem.DataContext;'",
-            "markdown": "Unused import `import com.intellij.openapi.actionSystem.DataContext;`"
+            "text": "Unused import 'import com.maddyhome.idea.vim.command.MappingMode;'",
+            "markdown": "Unused import `import com.maddyhome.idea.vim.command.MappingMode;`"
           },
           "locations": [
             {
@@ -67069,22 +67107,22 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 21,
+                  "startLine": 27,
                   "startColumn": 1,
-                  "charOffset": 826,
-                  "charLength": 53,
+                  "charOffset": 1099,
+                  "charLength": 50,
                   "snippet": {
-                    "text": "import com.intellij.openapi.actionSystem.DataContext;"
+                    "text": "import com.maddyhome.idea.vim.command.MappingMode;"
                   },
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 19,
+                  "startLine": 25,
                   "startColumn": 1,
-                  "charOffset": 769,
-                  "charLength": 195,
+                  "charOffset": 1009,
+                  "charLength": 242,
                   "snippet": {
-                    "text": "package com.maddyhome.idea.vim.extension.textobjindent;\n\nimport com.intellij.openapi.actionSystem.DataContext;\nimport com.intellij.openapi.editor.Caret;\nimport com.intellij.openapi.editor.Editor;"
+                    "text": "import com.maddyhome.idea.vim.api.VimInjectorKt;\nimport com.maddyhome.idea.vim.command.*;\nimport com.maddyhome.idea.vim.command.MappingMode;\nimport com.maddyhome.idea.vim.common.TextRange;\nimport com.maddyhome.idea.vim.extension.VimExtension;"
                   }
                 }
               },
@@ -67097,114 +67135,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "43309636a1f930ed48a1650352d41fba9efa7bdc582bf34792c9128ff353344a"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UNUSED_IMPORT",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unused import 'import com.intellij.openapi.editor.Editor;'",
-            "markdown": "Unused import `import com.intellij.openapi.editor.Editor;`"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/extension/textobjindent/VimIndentObject.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 23,
-                  "startColumn": 1,
-                  "charOffset": 922,
-                  "charLength": 42,
-                  "snippet": {
-                    "text": "import com.intellij.openapi.editor.Editor;"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 21,
-                  "startColumn": 1,
-                  "charOffset": 826,
-                  "charLength": 234,
-                  "snippet": {
-                    "text": "import com.intellij.openapi.actionSystem.DataContext;\nimport com.intellij.openapi.editor.Caret;\nimport com.intellij.openapi.editor.Editor;\nimport com.maddyhome.idea.vim.api.ExecutionContext;\nimport com.maddyhome.idea.vim.api.VimCaret;"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "d0432deb4b65d83648eece6a073379abdf7c234efe8737640ae03c4655ad4771"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UNUSED_IMPORT",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unused import 'import com.maddyhome.idea.vim.newapi.IjExecutionContext;'",
-            "markdown": "Unused import `import com.maddyhome.idea.vim.newapi.IjExecutionContext;`"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/extension/textobjindent/VimIndentObject.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 37,
-                  "startColumn": 1,
-                  "charOffset": 1657,
-                  "charLength": 56,
-                  "snippet": {
-                    "text": "import com.maddyhome.idea.vim.newapi.IjExecutionContext;"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 35,
-                  "startColumn": 1,
-                  "charOffset": 1524,
-                  "charLength": 288,
-                  "snippet": {
-                    "text": "import com.maddyhome.idea.vim.listener.SelectionVimListenerSuppressor;\nimport com.maddyhome.idea.vim.listener.VimListenerSuppressor;\nimport com.maddyhome.idea.vim.newapi.IjExecutionContext;\nimport com.maddyhome.idea.vim.newapi.IjVimCaret;\nimport com.maddyhome.idea.vim.newapi.IjVimEditor;"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "0f73e4c674a57341e05fa63a00a8cce21b0a0ca57c95ff559a4511ea31082885"
+            "equalIndicator/v1": "fa9bb5bbdb7ed85198f403adc8cc2f3feb8ee4b6aba34722c604d1269fd532e0"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -67258,6 +67191,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "03baa4c01aa842c86c348373674ba6854832865e7eb14a00e5cde3c9061ec085"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -67311,6 +67245,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "ccf6f8df112c5ee7dc44be1319aa4ace93a187fb9b6ef98a315087012b69d0bd"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -67334,9 +67269,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 337,
+                  "startLine": 339,
                   "startColumn": 7,
-                  "charOffset": 12308,
+                  "charOffset": 12377,
                   "charLength": 12,
                   "snippet": {
                     "text": "listenersMap"
@@ -67344,9 +67279,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 335,
+                  "startLine": 337,
                   "startColumn": 1,
-                  "charOffset": 12297,
+                  "charOffset": 12366,
                   "charLength": 148,
                   "snippet": {
                     "text": "  }\n\n  val listenersMap: MutableMap<VimCaretListener, CaretListener> = mutableMapOf()\n\n  override fun addCaretListener(listener: VimCaretListener) {"
@@ -67362,61 +67297,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "964d909974a5d0d2bbf2078f5ced7aba47cb2b72732bec0f7521b36e240686c0"
-          },
-          "properties": {
-            "ideaSeverity": "INFO",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MemberVisibilityCanBePrivate",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Property 'registeredExtensions' could be private",
-            "markdown": "Property 'registeredExtensions' could be private"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/extension/VimExtensionRegistrar.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 35,
-                  "startColumn": 3,
-                  "charOffset": 1571,
-                  "charLength": 8,
-                  "snippet": {
-                    "text": "internal"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 33,
-                  "startColumn": 1,
-                  "charOffset": 1511,
-                  "charLength": 227,
-                  "snippet": {
-                    "text": "\nobject VimExtensionRegistrar : VimExtensionRegistrator {\n  internal val registeredExtensions: MutableSet<String> = HashSet()\n  internal val extensionAliases = HashMap<String, String>()\n  private var extensionRegistered = false"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "5f17c8246aad943b11a068201f3d372bf9170fd36cf1d32e756c929bab803590"
+            "equalIndicator/v1": "ee7b07d91df79d6542f4c8b61d2ecbb6cf5882c67b3ea9d2cba9e4f9b334ffd1"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -67442,7 +67325,7 @@
                 "region": {
                   "startLine": 36,
                   "startColumn": 3,
-                  "charOffset": 1639,
+                  "charOffset": 1638,
                   "charLength": 8,
                   "snippet": {
                     "text": "internal"
@@ -67452,7 +67335,7 @@
                 "contextRegion": {
                   "startLine": 34,
                   "startColumn": 1,
-                  "charOffset": 1512,
+                  "charOffset": 1511,
                   "charLength": 281,
                   "snippet": {
                     "text": "object VimExtensionRegistrar : VimExtensionRegistrator {\n  internal val registeredExtensions: MutableSet<String> = HashSet()\n  internal val extensionAliases = HashMap<String, String>()\n  private var extensionRegistered = false\n  private val logger = logger<VimExtensionRegistrar>()"
@@ -67468,8 +67351,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "c2d4b8a897029413410f1ef8eec7932ba77062c5e577539fab9930d3d77201f5"
+            "equalIndicator/v1": "b6900885f48cffc1838e56aac64268fbd4e4e2d2d1d1facd9a310ff1be9e3aea"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -67482,33 +67366,33 @@
           "kind": "fail",
           "level": "note",
           "message": {
-            "text": "Property 'ideastatusicon_enabled' could be private",
-            "markdown": "Property 'ideastatusicon_enabled' could be private"
+            "text": "Property 'registeredExtensions' could be private",
+            "markdown": "Property 'registeredExtensions' could be private"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/vimscript/services/IjVimOptionService.kt",
+                  "uri": "src/main/java/com/maddyhome/idea/vim/extension/VimExtensionRegistrar.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 69,
-                  "startColumn": 15,
-                  "charOffset": 2805,
-                  "charLength": 22,
+                  "startLine": 35,
+                  "startColumn": 3,
+                  "charOffset": 1570,
+                  "charLength": 8,
                   "snippet": {
-                    "text": "ideastatusicon_enabled"
+                    "text": "internal"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 67,
+                  "startLine": 33,
                   "startColumn": 1,
-                  "charOffset": 2686,
-                  "charLength": 247,
+                  "charOffset": 1510,
+                  "charLength": 227,
                   "snippet": {
-                    "text": "    const val ideastatusiconName = \"ideastatusicon\"\n    const val ideastatusiconAlias = \"ideastatusicon\"\n    const val ideastatusicon_enabled = \"enabled\"\n    const val ideastatusicon_gray = \"gray\"\n    const val ideastatusicon_disabled = \"disabled\""
+                    "text": "\nobject VimExtensionRegistrar : VimExtensionRegistrator {\n  internal val registeredExtensions: MutableSet<String> = HashSet()\n  internal val extensionAliases = HashMap<String, String>()\n  private var extensionRegistered = false"
                   }
                 }
               },
@@ -67521,8 +67405,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "c5c58127b17f56689c906dc12581cef8a77aeb119d757e2966af35560a22af9e"
+            "equalIndicator/v1": "5a95bb62416748d9f663eb68569789a1c6eaf533d5b2b7c48f111a174b769250"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -67548,7 +67433,7 @@
                 "region": {
                   "startLine": 76,
                   "startColumn": 15,
-                  "charOffset": 3070,
+                  "charOffset": 3068,
                   "charLength": 14,
                   "snippet": {
                     "text": "ideawrite_file"
@@ -67558,7 +67443,7 @@
                 "contextRegion": {
                   "startLine": 74,
                   "startColumn": 1,
-                  "charOffset": 2977,
+                  "charOffset": 2975,
                   "charLength": 169,
                   "snippet": {
                     "text": "    const val ideawriteAlias = \"ideawrite\"\n    const val ideawrite_all = \"all\"\n    const val ideawrite_file = \"file\"\n\n    const val ideavimsupportName = \"ideavimsupport\""
@@ -67574,8 +67459,63 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "15c6cd4e23c8b12e889a9063726d5283a978a64c2e4a5cc96f13259a9deb05a0"
+            "equalIndicator/v1": "e0e55fc05d5cf9f303bd0aa4e840baa819296824ef49eb0d8dc29414352920e3"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "INFO",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "MemberVisibilityCanBePrivate",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Property 'ideastatusicon_enabled' could be private",
+            "markdown": "Property 'ideastatusicon_enabled' could be private"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/vimscript/services/IjVimOptionService.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 69,
+                  "startColumn": 15,
+                  "charOffset": 2803,
+                  "charLength": 22,
+                  "snippet": {
+                    "text": "ideastatusicon_enabled"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 67,
+                  "startColumn": 1,
+                  "charOffset": 2684,
+                  "charLength": 247,
+                  "snippet": {
+                    "text": "    const val ideastatusiconName = \"ideastatusicon\"\n    const val ideastatusiconAlias = \"ideastatusicon\"\n    const val ideastatusicon_enabled = \"enabled\"\n    const val ideastatusicon_gray = \"gray\"\n    const val ideastatusicon_disabled = \"disabled\""
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "2fa5d3a286098fc5b1b8566f55026a15fba867bebcd10462c389c39d4ae34339"
+          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -67629,6 +67569,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "ab7d19f864f6f9a4d285ba51e05b4d7658d80ebfc9f4768efa1883f2b3e78d22"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -67652,9 +67593,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 76,
+                  "startLine": 78,
                   "startColumn": 3,
-                  "charOffset": 2816,
+                  "charOffset": 2857,
                   "charLength": 9,
                   "snippet": {
                     "text": "protected"
@@ -67662,9 +67603,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 74,
+                  "startLine": 76,
                   "startColumn": 1,
-                  "charOffset": 2809,
+                  "charOffset": 2850,
                   "charLength": 208,
                   "snippet": {
                     "text": "  }\n\n  protected fun seemsLikeBlockMode(editor: VimEditor): Boolean {\n    val selections = editor.nativeCarets().map {\n      val adj = if (editor.offsetToLogicalPosition(it.selectionEnd).column == 0) 1 else 0"
@@ -67680,167 +67621,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "8bcab8e808fecd70d3679c15b62ffdd284371905c4837fc88308a79efc353904"
-          },
-          "properties": {
-            "ideaSeverity": "INFO",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MemberVisibilityCanBePrivate",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Property 'keyRoots' could be private",
-            "markdown": "Property 'keyRoots' could be private"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimKeyGroupBase.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 24,
-                  "startColumn": 7,
-                  "charOffset": 992,
-                  "charLength": 8,
-                  "snippet": {
-                    "text": "keyRoots"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 22,
-                  "startColumn": 1,
-                  "charOffset": 828,
-                  "charLength": 361,
-                  "snippet": {
-                    "text": "  val myShortcutConflicts: MutableMap<KeyStroke, ShortcutOwnerInfo> = LinkedHashMap()\n  val requiredShortcutKeys: MutableSet<RequiredShortcut> = HashSet(300)\n  val keyRoots: MutableMap<MappingMode, CommandPartNode<VimActionsInitiator>> = EnumMap(MappingMode::class.java)\n  val keyMappings: MutableMap<MappingMode, KeyMapping> = EnumMap(MappingMode::class.java)\n"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "17bebc698d8882da835051e7e40f8c5e8627286c9e6f8808ccd9201a9e95739e"
-          },
-          "properties": {
-            "ideaSeverity": "INFO",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MemberVisibilityCanBePrivate",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Property 'prefixes' could be private",
-            "markdown": "Property 'prefixes' could be private"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimKeyGroupBase.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 109,
-                  "startColumn": 7,
-                  "charOffset": 4032,
-                  "charLength": 8,
-                  "snippet": {
-                    "text": "prefixes"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 107,
-                  "startColumn": 1,
-                  "charOffset": 3934,
-                  "charLength": 160,
-                  "snippet": {
-                    "text": "\n  var identityChecker: MutableMap<MappingMode, MutableSet<MutableList<KeyStroke>>>? = null\n  var prefixes: MutableMap<MutableList<KeyStroke>, String>? = null\n\n"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "639e29f892294dd02738c7365f7b1fcd7741e158b6499e6c6f56963defac3d03"
-          },
-          "properties": {
-            "ideaSeverity": "INFO",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MemberVisibilityCanBePrivate",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Property 'identityChecker' could be private",
-            "markdown": "Property 'identityChecker' could be private"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimKeyGroupBase.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 108,
-                  "startColumn": 7,
-                  "charOffset": 3941,
-                  "charLength": 15,
-                  "snippet": {
-                    "text": "identityChecker"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 106,
-                  "startColumn": 1,
-                  "charOffset": 3930,
-                  "charLength": 163,
-                  "snippet": {
-                    "text": "  }\n\n  var identityChecker: MutableMap<MappingMode, MutableSet<MutableList<KeyStroke>>>? = null\n  var prefixes: MutableMap<MutableList<KeyStroke>, String>? = null\n"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "8977cdcf7b9bb85364a12f81ef118de89927207241b5e01061bb3b7b93f23e13"
+            "equalIndicator/v1": "3c2da4229ce0749f8b15d3867f3431e794d8e5c02e45bdc8d9118056d6247122"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -67866,7 +67649,7 @@
                 "region": {
                   "startLine": 25,
                   "startColumn": 7,
-                  "charOffset": 1105,
+                  "charOffset": 1097,
                   "charLength": 11,
                   "snippet": {
                     "text": "keyMappings"
@@ -67876,7 +67659,7 @@
                 "contextRegion": {
                   "startLine": 23,
                   "startColumn": 1,
-                  "charOffset": 914,
+                  "charOffset": 906,
                   "charLength": 357,
                   "snippet": {
                     "text": "  val requiredShortcutKeys: MutableSet<RequiredShortcut> = HashSet(300)\n  val keyRoots: MutableMap<MappingMode, CommandPartNode<VimActionsInitiator>> = EnumMap(MappingMode::class.java)\n  val keyMappings: MutableMap<MappingMode, KeyMapping> = EnumMap(MappingMode::class.java)\n\n  override fun removeKeyMapping(modes: Set<MappingMode>, keys: List<KeyStroke>) {"
@@ -67892,8 +67675,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "782d10d915fe138b5e430315fd797d1fdb8908ba41cf2e14b1910b5794055e1c"
+            "equalIndicator/v1": "60f3dd5d4443860cdc7d481a412dece32dc61bfa664515feed624eeda7452437"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -67906,33 +67690,33 @@
           "kind": "fail",
           "level": "note",
           "message": {
-            "text": "Property 'DEL_CONTEXT_FILE_MARKS' could be private",
-            "markdown": "Property 'DEL_CONTEXT_FILE_MARKS' could be private"
+            "text": "Property 'prefixes' could be private",
+            "markdown": "Property 'prefixes' could be private"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/mark/VimMarkConstants.kt",
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimKeyGroupBase.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 19,
-                  "startColumn": 13,
-                  "charOffset": 560,
-                  "charLength": 22,
+                  "startLine": 109,
+                  "startColumn": 7,
+                  "charOffset": 4024,
+                  "charLength": 8,
                   "snippet": {
-                    "text": "DEL_CONTEXT_FILE_MARKS"
+                    "text": "prefixes"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 17,
+                  "startLine": 107,
                   "startColumn": 1,
-                  "charOffset": 506,
-                  "charLength": 137,
+                  "charOffset": 3926,
+                  "charLength": 260,
                   "snippet": {
-                    "text": "  const val RO_FILE_MARKS = \".[]<>^{}()\"\n\n  const val DEL_CONTEXT_FILE_MARKS = \".^[]\\\"\"\n\n  /** Marks: .^[]\"abcdefghijklmnopqrstuvwxyz  */"
+                    "text": "\n  var identityChecker: MutableMap<MappingMode, MutableSet<MutableList<KeyStroke>>>? = null\n  var prefixes: MutableMap<MutableList<KeyStroke>, String>? = null\n\n  override fun getKeyMappingByOwner(owner: MappingOwner): List<Pair<List<KeyStroke>, MappingInfo>> {"
                   }
                 }
               },
@@ -67945,8 +67729,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "595b50eac677aaf666928cad568d7f0582bd43f86763fb0209e39ffd0543bacf"
+            "equalIndicator/v1": "6b26ba4c5433d4f3c259a5227ef9fcd62d0f798525a9ae34a0906fcc5815cf5b"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -67959,33 +67744,33 @@
           "kind": "fail",
           "level": "note",
           "message": {
-            "text": "Property 'RO_FILE_MARKS' could be private",
-            "markdown": "Property 'RO_FILE_MARKS' could be private"
+            "text": "Property 'identityChecker' could be private",
+            "markdown": "Property 'identityChecker' could be private"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/mark/VimMarkConstants.kt",
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimKeyGroupBase.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 17,
-                  "startColumn": 13,
-                  "charOffset": 518,
-                  "charLength": 13,
+                  "startLine": 108,
+                  "startColumn": 7,
+                  "charOffset": 3933,
+                  "charLength": 15,
                   "snippet": {
-                    "text": "RO_FILE_MARKS"
+                    "text": "identityChecker"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 15,
+                  "startLine": 106,
                   "startColumn": 1,
-                  "charOffset": 462,
-                  "charLength": 131,
+                  "charOffset": 3922,
+                  "charLength": 163,
                   "snippet": {
-                    "text": "\n  const val RO_GLOBAL_MARKS = \"0123456789\"\n  const val RO_FILE_MARKS = \".[]<>^{}()\"\n\n  const val DEL_CONTEXT_FILE_MARKS = \".^[]\\\"\""
+                    "text": "  }\n\n  var identityChecker: MutableMap<MappingMode, MutableSet<MutableList<KeyStroke>>>? = null\n  var prefixes: MutableMap<MutableList<KeyStroke>, String>? = null\n"
                   }
                 }
               },
@@ -67998,8 +67783,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "d0945874a8671e14de930266552268a279b6212f4df8067c05da0ab5f4f229d1"
+            "equalIndicator/v1": "f947c75df8aaccfabb2ff6bbe5292c7fe5a9bd9a8f69a336a8c6d71d80aa803b"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -68012,33 +67798,33 @@
           "kind": "fail",
           "level": "note",
           "message": {
-            "text": "Property 'WR_FILE_MARKS' could be private",
-            "markdown": "Property 'WR_FILE_MARKS' could be private"
+            "text": "Property 'keyRoots' could be private",
+            "markdown": "Property 'keyRoots' could be private"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/mark/VimMarkConstants.kt",
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimKeyGroupBase.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 14,
-                  "startColumn": 13,
-                  "charOffset": 420,
-                  "charLength": 13,
+                  "startLine": 24,
+                  "startColumn": 7,
+                  "charOffset": 984,
+                  "charLength": 8,
                   "snippet": {
-                    "text": "WR_FILE_MARKS"
+                    "text": "keyRoots"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 12,
+                  "startLine": 22,
                   "startColumn": 1,
-                  "charOffset": 362,
-                  "charLength": 143,
+                  "charOffset": 820,
+                  "charLength": 361,
                   "snippet": {
-                    "text": "\n  /** Marks: abcdefghijklmnopqrstuvwxyz'  */\n  const val WR_FILE_MARKS = \"$WR_REGULAR_FILE_MARKS'\"\n\n  const val RO_GLOBAL_MARKS = \"0123456789\""
+                    "text": "  val myShortcutConflicts: MutableMap<KeyStroke, ShortcutOwnerInfo> = LinkedHashMap()\n  val requiredShortcutKeys: MutableSet<RequiredShortcut> = HashSet(300)\n  val keyRoots: MutableMap<MappingMode, CommandPartNode<VimActionsInitiator>> = EnumMap(MappingMode::class.java)\n  val keyMappings: MutableMap<MappingMode, KeyMapping> = EnumMap(MappingMode::class.java)\n"
                   }
                 }
               },
@@ -68051,61 +67837,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "8c50ab694c47c46245f7f567581fab9e3f28b0b2fea331a06c7ea3ffcfceb7dd"
-          },
-          "properties": {
-            "ideaSeverity": "INFO",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MemberVisibilityCanBePrivate",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Property 'READONLY_MARKS' could be private",
-            "markdown": "Property 'READONLY_MARKS' could be private"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/mark/VimMarkConstants.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 43,
-                  "startColumn": 13,
-                  "charOffset": 1511,
-                  "charLength": 14,
-                  "snippet": {
-                    "text": "READONLY_MARKS"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 41,
-                  "startColumn": 1,
-                  "charOffset": 1460,
-                  "charLength": 171,
-                  "snippet": {
-                    "text": "\n  /** Marks: 0123456789.[]<>^{}()  */\n  const val READONLY_MARKS = RO_GLOBAL_MARKS + RO_FILE_MARKS\n\n  /** Marks: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'  */"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "3548b8de69b62ab30f0e4b4e47cdcaa6863b22cd5681e55aa85c900cfd77aa3a"
+            "equalIndicator/v1": "32c8383a78afd5d6bad3b16ec387b03f0e4a1b68fb43d6df10c518046156a7f8"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -68159,6 +67893,115 @@
           "partialFingerprints": {
             "equalIndicator/v1": "1dedf44a9e1e1a6947a35f119824441f9b5b36d4b8ff00c9b4f3a76884bab7c8"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "INFO",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "MemberVisibilityCanBePrivate",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Property 'READONLY_MARKS' could be private",
+            "markdown": "Property 'READONLY_MARKS' could be private"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/mark/VimMarkConstants.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 43,
+                  "startColumn": 13,
+                  "charOffset": 1511,
+                  "charLength": 14,
+                  "snippet": {
+                    "text": "READONLY_MARKS"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 41,
+                  "startColumn": 1,
+                  "charOffset": 1460,
+                  "charLength": 171,
+                  "snippet": {
+                    "text": "\n  /** Marks: 0123456789.[]<>^{}()  */\n  const val READONLY_MARKS = RO_GLOBAL_MARKS + RO_FILE_MARKS\n\n  /** Marks: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'  */"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "3548b8de69b62ab30f0e4b4e47cdcaa6863b22cd5681e55aa85c900cfd77aa3a"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "INFO",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "MemberVisibilityCanBePrivate",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Property 'RO_FILE_MARKS' could be private",
+            "markdown": "Property 'RO_FILE_MARKS' could be private"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/mark/VimMarkConstants.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 17,
+                  "startColumn": 13,
+                  "charOffset": 518,
+                  "charLength": 13,
+                  "snippet": {
+                    "text": "RO_FILE_MARKS"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 15,
+                  "startColumn": 1,
+                  "charOffset": 462,
+                  "charLength": 131,
+                  "snippet": {
+                    "text": "\n  const val RO_GLOBAL_MARKS = \"0123456789\"\n  const val RO_FILE_MARKS = \".[]<>^{}()\"\n\n  const val DEL_CONTEXT_FILE_MARKS = \".^[]\\\"\""
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "d0945874a8671e14de930266552268a279b6212f4df8067c05da0ab5f4f229d1"
+          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -68212,6 +68055,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "31e098a425016cf2809790a91e7dcf1aa09004a91bee02d40a1824f20507c84c"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -68224,33 +68068,33 @@
           "kind": "fail",
           "level": "note",
           "message": {
-            "text": "Function 'putTextBlockwise' could be private",
-            "markdown": "Function 'putTextBlockwise' could be private"
+            "text": "Property 'DEL_CONTEXT_FILE_MARKS' could be private",
+            "markdown": "Property 'DEL_CONTEXT_FILE_MARKS' could be private"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/put/VimPutBase.kt",
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/mark/VimMarkConstants.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 233,
-                  "startColumn": 3,
-                  "charOffset": 8395,
-                  "charLength": 9,
+                  "startLine": 19,
+                  "startColumn": 13,
+                  "charOffset": 560,
+                  "charLength": 22,
                   "snippet": {
-                    "text": "protected"
+                    "text": "DEL_CONTEXT_FILE_MARKS"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 231,
+                  "startLine": 17,
                   "startColumn": 1,
-                  "charOffset": 8388,
-                  "charLength": 82,
+                  "charOffset": 506,
+                  "charLength": 137,
                   "snippet": {
-                    "text": "  }\n\n  protected fun putTextBlockwise(\n    editor: VimEditor,\n    caret: VimCaret,"
+                    "text": "  const val RO_FILE_MARKS = \".[]<>^{}()\"\n\n  const val DEL_CONTEXT_FILE_MARKS = \".^[]\\\"\"\n\n  /** Marks: .^[]\"abcdefghijklmnopqrstuvwxyz  */"
                   }
                 }
               },
@@ -68263,8 +68107,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "4300ecb30ba773c6f649b725c27e83f780a840bc085427925439f5c795d540cf"
+            "equalIndicator/v1": "595b50eac677aaf666928cad568d7f0582bd43f86763fb0209e39ffd0543bacf"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -68277,33 +68122,33 @@
           "kind": "fail",
           "level": "note",
           "message": {
-            "text": "Function 'deleteSelectedText' could be private",
-            "markdown": "Function 'deleteSelectedText' could be private"
+            "text": "Property 'WR_FILE_MARKS' could be private",
+            "markdown": "Property 'WR_FILE_MARKS' could be private"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/put/VimPutBase.kt",
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/mark/VimMarkConstants.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 79,
-                  "startColumn": 3,
-                  "charOffset": 3019,
-                  "charLength": 9,
+                  "startLine": 14,
+                  "startColumn": 13,
+                  "charOffset": 420,
+                  "charLength": 13,
                   "snippet": {
-                    "text": "protected"
+                    "text": "WR_FILE_MARKS"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 77,
+                  "startLine": 12,
                   "startColumn": 1,
-                  "charOffset": 3012,
-                  "charLength": 121,
+                  "charOffset": 362,
+                  "charLength": 143,
                   "snippet": {
-                    "text": "  }\n\n  protected fun deleteSelectedText(editor: VimEditor, data: PutData) {\n    if (data.visualSelection == null) return\n"
+                    "text": "\n  /** Marks: abcdefghijklmnopqrstuvwxyz'  */\n  const val WR_FILE_MARKS = \"$WR_REGULAR_FILE_MARKS'\"\n\n  const val RO_GLOBAL_MARKS = \"0123456789\""
                   }
                 }
               },
@@ -68316,167 +68161,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "0f25b65a5734e513e2020ee1c66dd2ebf8255cada9c08d1736a40311326aab9d"
-          },
-          "properties": {
-            "ideaSeverity": "INFO",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MemberVisibilityCanBePrivate",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Function 'putTextCharacterwise' could be private",
-            "markdown": "Function 'putTextCharacterwise' could be private"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/put/VimPutBase.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 162,
-                  "startColumn": 3,
-                  "charOffset": 6343,
-                  "charLength": 9,
-                  "snippet": {
-                    "text": "protected"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 160,
-                  "startColumn": 1,
-                  "charOffset": 6336,
-                  "charLength": 86,
-                  "snippet": {
-                    "text": "  }\n\n  protected fun putTextCharacterwise(\n    editor: VimEditor,\n    caret: VimCaret,"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "30f4fb4e3b97affcb1d9ddea5ff48f5055fefe17195f5bfacb1689b18fa826ca"
-          },
-          "properties": {
-            "ideaSeverity": "INFO",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MemberVisibilityCanBePrivate",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Function 'getMaxSegmentLength' could be private",
-            "markdown": "Function 'getMaxSegmentLength' could be private"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/put/VimPutBase.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 223,
-                  "startColumn": 3,
-                  "charOffset": 8129,
-                  "charLength": 9,
-                  "snippet": {
-                    "text": "protected"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 221,
-                  "startColumn": 1,
-                  "charOffset": 8122,
-                  "charLength": 128,
-                  "snippet": {
-                    "text": "  }\n\n  protected fun getMaxSegmentLength(text: String): Int {\n    val tokenizer = StringTokenizer(text, \"\\n\")\n    var maxLen = 0"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "0c30b2f910aea37cfb40c3dbd42c27e25ea635cf29cbc337f1098480a34301e9"
-          },
-          "properties": {
-            "ideaSeverity": "INFO",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MemberVisibilityCanBePrivate",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Function 'wrapInsertedTextWithVisualMarks' could be private",
-            "markdown": "Function 'wrapInsertedTextWithVisualMarks' could be private"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/put/VimPutBase.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 62,
-                  "startColumn": 3,
-                  "charOffset": 2299,
-                  "charLength": 9,
-                  "snippet": {
-                    "text": "protected"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 60,
-                  "startColumn": 1,
-                  "charOffset": 2209,
-                  "charLength": 308,
-                  "snippet": {
-                    "text": "   * After using \"p\" or \"P\" in Visual mode the text that was put will be selected\n   */\n  protected fun wrapInsertedTextWithVisualMarks(editor: VimEditor, data: PutData, text: ProcessedTextData) {\n    val textLength: Int = data.textData?.rawText?.length ?: return\n    val currentCaret = editor.currentCaret()"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "38bfd6eaff973bc705941087ee40dfd9d4e76fef41d2967c8b281f1c3b25760c"
+            "equalIndicator/v1": "8c50ab694c47c46245f7f567581fab9e3f28b0b2fea331a06c7ea3ffcfceb7dd"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -68500,9 +68187,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 54,
+                  "startLine": 56,
                   "startColumn": 3,
-                  "charOffset": 2048,
+                  "charOffset": 2168,
                   "charLength": 9,
                   "snippet": {
                     "text": "protected"
@@ -68510,9 +68197,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 52,
+                  "startLine": 54,
                   "startColumn": 1,
-                  "charOffset": 2041,
+                  "charOffset": 2161,
                   "charLength": 142,
                   "snippet": {
                     "text": "  }\n\n  protected fun wasTextInsertedLineWise(text: ProcessedTextData): Boolean {\n    return text.typeInRegister == SelectionType.LINE_WISE\n  }"
@@ -68528,8 +68215,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "86472bb0e7e2adf658091b5345fbb9fe7f26cce718bfc4873331af06d2b43198"
+            "equalIndicator/v1": "2c0d6b837e471fa0c5b70dcbff3a2f80b42294196250003d1ef93a86b0350bda"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -68553,9 +68241,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 187,
+                  "startLine": 189,
                   "startColumn": 3,
-                  "charOffset": 7057,
+                  "charOffset": 7249,
                   "charLength": 9,
                   "snippet": {
                     "text": "protected"
@@ -68563,9 +68251,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 185,
+                  "startLine": 187,
                   "startColumn": 1,
-                  "charOffset": 7050,
+                  "charOffset": 7242,
                   "charLength": 81,
                   "snippet": {
                     "text": "  }\n\n  protected fun putTextLinewise(\n    editor: VimEditor,\n    caret: VimCaret,"
@@ -68581,8 +68269,171 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "21c780dd45f6eaa693e70d66c572760c237093fd03dad717671fabcb3c3210f5"
+            "equalIndicator/v1": "5a5e2f3c7ff9b25e16c068bbf0845224b47b2afee7bbc11c533c0d470f21e844"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "INFO",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "MemberVisibilityCanBePrivate",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Function 'putTextCharacterwise' could be private",
+            "markdown": "Function 'putTextCharacterwise' could be private"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/put/VimPutBase.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 164,
+                  "startColumn": 3,
+                  "charOffset": 6532,
+                  "charLength": 9,
+                  "snippet": {
+                    "text": "protected"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 162,
+                  "startColumn": 1,
+                  "charOffset": 6525,
+                  "charLength": 86,
+                  "snippet": {
+                    "text": "  }\n\n  protected fun putTextCharacterwise(\n    editor: VimEditor,\n    caret: VimCaret,"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "2e4db5b21f0790b96208fff9e22d6fe155444eba3dd90015b803ed61b460d919"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "INFO",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "MemberVisibilityCanBePrivate",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Function 'putTextBlockwise' could be private",
+            "markdown": "Function 'putTextBlockwise' could be private"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/put/VimPutBase.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 235,
+                  "startColumn": 3,
+                  "charOffset": 8590,
+                  "charLength": 9,
+                  "snippet": {
+                    "text": "protected"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 233,
+                  "startColumn": 1,
+                  "charOffset": 8583,
+                  "charLength": 82,
+                  "snippet": {
+                    "text": "  }\n\n  protected fun putTextBlockwise(\n    editor: VimEditor,\n    caret: VimCaret,"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "877118a712eee2e792e499756839d8b9e9378cbbc4b5ae2d9213d7aff069ad26"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "INFO",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "MemberVisibilityCanBePrivate",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Function 'getMaxSegmentLength' could be private",
+            "markdown": "Function 'getMaxSegmentLength' could be private"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/put/VimPutBase.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 225,
+                  "startColumn": 3,
+                  "charOffset": 8324,
+                  "charLength": 9,
+                  "snippet": {
+                    "text": "protected"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 223,
+                  "startColumn": 1,
+                  "charOffset": 8317,
+                  "charLength": 128,
+                  "snippet": {
+                    "text": "  }\n\n  protected fun getMaxSegmentLength(text: String): Int {\n    val tokenizer = StringTokenizer(text, \"\\n\")\n    var maxLen = 0"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "c2401802b9ef1cb09d79c032c523f3da6fd32452381febdedddb2fd39bef65dd"
+          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -68636,6 +68487,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "d5427569795d9ff4c91b58af3209544d4b82e22a4b0142f03aebeff39dce24b1"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -68689,6 +68541,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "37a075d67d4b0e6995ac3a7bc7886a71c736731d93989cfa8605441a9ca35a0e"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -68713,8 +68566,8 @@
                 },
                 "region": {
                   "startLine": 95,
-                  "startColumn": 9,
-                  "charOffset": 3320,
+                  "startColumn": 7,
+                  "charOffset": 3182,
                   "charLength": 8,
                   "snippet": {
                     "text": "un_Magic"
@@ -68724,10 +68577,10 @@
                 "contextRegion": {
                   "startLine": 93,
                   "startColumn": 1,
-                  "charOffset": 3305,
-                  "charLength": 67,
+                  "charOffset": 3171,
+                  "charLength": 57,
                   "snippet": {
-                    "text": "    }\n\n    fun un_Magic(x: Int): Int {\n        return x + 256\n    }"
+                    "text": "  }\n\n  fun un_Magic(x: Int): Int {\n    return x + 256\n  }"
                   }
                 }
               },
@@ -68740,61 +68593,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "f99c8dd1d4805ed53290c87890e67c032ae0e3b40ccbc1104bf077a695f04482"
-          },
-          "properties": {
-            "ideaSeverity": "INFO",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MemberVisibilityCanBePrivate",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Property 'NAMED_REGISTERS' could be private",
-            "markdown": "Property 'NAMED_REGISTERS' could be private"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/register/RegisterConstants.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 15,
-                  "startColumn": 13,
-                  "charOffset": 538,
-                  "charLength": 15,
-                  "snippet": {
-                    "text": "NAMED_REGISTERS"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 13,
-                  "startColumn": 1,
-                  "charOffset": 441,
-                  "charLength": 263,
-                  "snippet": {
-                    "text": "  const val CLIPBOARD_REGISTERS = \"*+\"\n  const val NUMBERED_REGISTERS = \"0123456789\"\n  const val NAMED_REGISTERS = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n\n  const val WRITABLE_REGISTERS = (NUMBERED_REGISTERS + NAMED_REGISTERS + CLIPBOARD_REGISTERS"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "2cd9741b5d7f2de25e6a46f19aeb2770ee74e3d2475310e325e86d83f12e2582"
+            "equalIndicator/v1": "d407bf58805b5f1b6933bb5ad2d87e3fdf9624e368c50aae6199e81740dbe6b3"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -68848,6 +68649,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "1ab278e7243a6f7bcef822bb23ef217e4f9a4202665b9a807eeace572f8f17dc"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -68860,33 +68662,33 @@
           "kind": "fail",
           "level": "note",
           "message": {
-            "text": "Function 'storeTextInternal' could be private",
-            "markdown": "Function 'storeTextInternal' could be private"
+            "text": "Property 'NAMED_REGISTERS' could be private",
+            "markdown": "Property 'NAMED_REGISTERS' could be private"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/register/VimRegisterGroupBase.kt",
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/register/RegisterConstants.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 148,
-                  "startColumn": 7,
-                  "charOffset": 4832,
-                  "charLength": 17,
+                  "startLine": 15,
+                  "startColumn": 13,
+                  "charOffset": 538,
+                  "charLength": 15,
                   "snippet": {
-                    "text": "storeTextInternal"
+                    "text": "NAMED_REGISTERS"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 146,
+                  "startLine": 13,
                   "startColumn": 1,
-                  "charOffset": 4821,
-                  "charLength": 144,
+                  "charOffset": 441,
+                  "charLength": 205,
                   "snippet": {
-                    "text": "  }\n\n  fun storeTextInternal(\n    editor: VimEditor, range: TextRange, text: String,\n    type: SelectionType, register: Char, isDelete: Boolean,"
+                    "text": "  const val CLIPBOARD_REGISTERS = \"*+\"\n  const val NUMBERED_REGISTERS = \"0123456789\"\n  const val NAMED_REGISTERS = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n\n  const val WRITABLE_REGISTERS = ("
                   }
                 }
               },
@@ -68899,61 +68701,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "8c4a9064274b70c1daf8066eceade311a17a967c7394a1185cfb94cb368d1b50"
-          },
-          "properties": {
-            "ideaSeverity": "INFO",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MemberVisibilityCanBePrivate",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Function 'refreshClipboardRegister' could be private",
-            "markdown": "Function 'refreshClipboardRegister' could be private"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/register/VimRegisterGroupBase.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 318,
-                  "startColumn": 3,
-                  "charOffset": 11827,
-                  "charLength": 9,
-                  "snippet": {
-                    "text": "protected"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 316,
-                  "startColumn": 1,
-                  "charOffset": 11820,
-                  "charLength": 211,
-                  "snippet": {
-                    "text": "  }\n\n  protected fun refreshClipboardRegister(r: Char): Register? {\n    val clipboardData = injector.clipboardManager.getClipboardTextAndTransferableData() ?: return null\n    val currentRegister = myRegisters[r]"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "60aa5e8345fc1240a15ae1a7196a981284dd2bae1c82262706e4f720c01a25d3"
+            "equalIndicator/v1": "ac7200a7dd0b5286d209a36fa4ac6fb161e49829cab72caa1f0428b05a20c1ae"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -68977,9 +68727,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 125,
+                  "startLine": 126,
                   "startColumn": 3,
-                  "charOffset": 3874,
+                  "charOffset": 3894,
                   "charLength": 9,
                   "snippet": {
                     "text": "protected"
@@ -68987,12 +68737,12 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 123,
+                  "startLine": 124,
                   "startColumn": 1,
-                  "charOffset": 3867,
-                  "charLength": 186,
+                  "charOffset": 3887,
+                  "charLength": 189,
                   "snippet": {
-                    "text": "  }\n\n  protected fun isSmallDeletionSpecialCase(editor: VimEditor): Boolean {\n    val currentCommand = CommandState.getInstance(editor).executingCommand\n    if (currentCommand != null) {"
+                    "text": "  }\n\n  protected fun isSmallDeletionSpecialCase(editor: VimEditor): Boolean {\n    val currentCommand = VimStateMachine.getInstance(editor).executingCommand\n    if (currentCommand != null) {"
                   }
                 }
               },
@@ -69005,8 +68755,171 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "820368d5035b97309d414d5319d131c5cfedb13b4dfccfe4a9b212b3b6649a30"
+            "equalIndicator/v1": "1866c822b26a155c845b449e892ddf7d12713bef7a9a7db2a3f706affa5001e0"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "INFO",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "MemberVisibilityCanBePrivate",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Function 'refreshClipboardRegister' could be private",
+            "markdown": "Function 'refreshClipboardRegister' could be private"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/register/VimRegisterGroupBase.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 331,
+                  "startColumn": 3,
+                  "charOffset": 12069,
+                  "charLength": 9,
+                  "snippet": {
+                    "text": "protected"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 329,
+                  "startColumn": 1,
+                  "charOffset": 12062,
+                  "charLength": 211,
+                  "snippet": {
+                    "text": "  }\n\n  protected fun refreshClipboardRegister(r: Char): Register? {\n    val clipboardData = injector.clipboardManager.getClipboardTextAndTransferableData() ?: return null\n    val currentRegister = myRegisters[r]"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "15116c470a1398f48f9f4f01e5eb0a0d5c7b05800059eb4e0edbb2287c3f3000"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "INFO",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "MemberVisibilityCanBePrivate",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Function 'storeTextInternal' could be private",
+            "markdown": "Function 'storeTextInternal' could be private"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/register/VimRegisterGroupBase.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 149,
+                  "startColumn": 7,
+                  "charOffset": 4855,
+                  "charLength": 17,
+                  "snippet": {
+                    "text": "storeTextInternal"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 147,
+                  "startColumn": 1,
+                  "charOffset": 4844,
+                  "charLength": 74,
+                  "snippet": {
+                    "text": "  }\n\n  fun storeTextInternal(\n    editor: VimEditor,\n    range: TextRange,"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "9b31b3a1226a31f4aeaf91801a82247093b9b4d58558e262efd8f519e207b76a"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "INFO",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "MemberVisibilityCanBePrivate",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Property 'functionCall' could be private",
+            "markdown": "Property 'functionCall' could be private"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/CallCommand.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 39,
+                  "startColumn": 43,
+                  "charOffset": 1755,
+                  "charLength": 12,
+                  "snippet": {
+                    "text": "functionCall"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 37,
+                  "startColumn": 1,
+                  "charOffset": 1692,
+                  "charLength": 241,
+                  "snippet": {
+                    "text": " * see \"h :call\"\n */\nclass CallCommand(val ranges: Ranges, val functionCall: Expression) : Command.SingleExecution(ranges) {\n\n  override val argFlags = flags(RangeFlag.RANGE_OPTIONAL, ArgumentFlag.ARGUMENT_OPTIONAL, Access.SELF_SYNCHRONIZED)"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "5a74770671224a328a18f2a0dac8e014521fe3a506ecd49d412098534fc7e73c"
+          },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -69060,6 +68973,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "318e93d00dda5157fa5b6a92eb185d7b553a3441157c418e4d3cacc2d4d7220e"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -69113,6 +69027,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "b7962c66ec39079b9fa95ea09ab1b585fadce5316ce81264984b572866d6dbae"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -69166,6 +69081,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "e644c45b97d6419758402b5052e153d4bddbd2af832341617ceafaad28ca8457"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -69219,6 +69135,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "54aea5623263c8daa648241124013fb86604c6ecd51570718e9fa7bff7ad4b31"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -69272,6 +69189,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "10d1a4ae0f6827e2a87bb0d65105fb1b3748434428123ac98a1803f7fc796b78"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -69325,6 +69243,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "bc38d0d783c5b03f95e5c437fc3e4f9393fdcf24bf76ff0b5dcd0db6f6f95a81"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -69378,6 +69297,61 @@
           "partialFingerprints": {
             "equalIndicator/v1": "5d92cec56076f9069499aa6d7d6db77ef0d8b6fee35b3437425aa45eb3edd05c"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "EmptyMethod",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "The method is empty",
+            "markdown": "The method is empty"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/test/java/org/jetbrains/plugins/ideavim/ex/implementation/LongerFunctionTest.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 117,
+                  "startColumn": 7,
+                  "charOffset": 3452,
+                  "charLength": 11,
+                  "snippet": {
+                    "text": "`test mock`"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 115,
+                  "startColumn": 1,
+                  "charOffset": 3386,
+                  "charLength": 87,
+                  "snippet": {
+                    "text": "\n  // Remove this test when tests above will be uncommented\n  fun `test mock`() {\n  }\n}"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.test",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "e5e4fb14e1fe8d52c163f59297bf7a85263feb4febef7580343eec2b3cb0595a"
+          },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -69431,6 +69405,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "808749c7f1e750b758436cdf1602a40f69c17befce2b4b44cad5ddf99e32bee1"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -69484,6 +69459,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "d314c216080e9973e6630afc192f2d31263ee5f8f26ecf614c111cd851b0d395"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -69537,6 +69513,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "17e60b6a0ebb87b5ff5199359ea1412f4c3430539f61c52095ceb210d7266aaf"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -69590,6 +69567,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "60bc2bd75155aff5808e14d1e4586fa9006df20dac6eae82e0a3d38adc93ac37"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -69643,6 +69621,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "37f874c09d71f93c0ec4ac573d29a43725b73e9efd5b39cc6d8eb5b958194cb3"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -69696,6 +69675,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "f4291394279d9cc945aaece0ba31a6dbd48173b02b1e616ef40757b4d75a2bb1"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -69749,6 +69729,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "389e34e8ac5d63c723b3c75a97c9d553d3107326e91e22b69f1278d115606fbc"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -69802,6 +69783,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "43e1769b1548b07d69a3bebf8701051ad4a8d257176e98bf269a033e37997132"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -69855,6 +69837,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "00b39ca361d85f2c40bef6fcde997fd6b2a75ac55fd7740c9ff7cb0eb307c2d8"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -69908,6 +69891,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "9d11c9aae85119d2752255ba23881e217fab34a7239178feec8b8d50eb2f7e43"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -69961,6 +69945,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "487012a85e005b4fa25a6c96785b9528f5b77b479fb581b0debc3debc3699d8d"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -70014,6 +69999,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "5e30e5c3acb7bd790821d321bf50882f802a94b5c9d0884147baf6f9ed20807d"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -70067,6 +70053,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "ddf294a1dc232cade103308e9da763f3cc45cc30517a1bd49b7c0d7986ce1319"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -70120,6 +70107,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "d1b41c96128a3737183709e8d5eab41f5fd78fb179a8479e1995978120c2421e"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -70173,6 +70161,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "4a0ec4b9411c7c6e97484918eb26d3e393f800e33ddc1b1c0eef8e4f3e6c49b8"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -70226,6 +70215,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "dcb18f23dda15b4847ee9049ef7a583f9148d8519e6a4a5532a49093eb327bc0"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -70279,6 +70269,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "6444dc5bbf40b6275b01dca6c668e0ae000b67d6625b81a81360cb63426c48fa"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -70332,6 +70323,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "32c6f6b0a23364ea010d251bc211ca524bff6b05d79bd3bd650c370b8d3f03df"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -70385,6 +70377,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "df4d67b7d208f12b10cfaf0d7beaf1cde19acd91d3f12ee944f338779ea172dd"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -70438,6 +70431,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "ace085b0f4a5429621ec6c43f00852f1dfe78d7f9bd68adabf171cbfec38fab6"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -70491,6 +70485,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "403fd698a575731d00278e3d32a0f16b485a9b50bfe4d68611890c8e0da52c84"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -70544,6 +70539,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "81377679af3e5f27b70387af2662ac31fd5bde17373216a6a40b7e2661026a39"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -70597,6 +70593,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "c79bf08c1de564a1208ac68c644c400ce25b9a37e69c9095da5860f27d293b0a"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -70650,6 +70647,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "68649f627c9b0a0dda295bcc7ba07af96342fa171a9e2b2380546403d6fffcc2"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -70675,7 +70673,7 @@
                 "region": {
                   "startLine": 94,
                   "startColumn": 14,
-                  "charOffset": 3852,
+                  "charOffset": 3855,
                   "charLength": 14,
                   "snippet": {
                     "text": "afterExecution"
@@ -70685,7 +70683,7 @@
                 "contextRegion": {
                   "startLine": 92,
                   "startColumn": 1,
-                  "charOffset": 3757,
+                  "charOffset": 3760,
                   "charLength": 191,
                   "snippet": {
                     "text": "     * [res] has true if ALL executions of [executeAction] returned true.\n     */\n    open fun afterExecution(editor: VimEditor, context: ExecutionContext, cmd: Command, res: Boolean) {}\n  }\n"
@@ -70701,8 +70699,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "8d65c8ec9fb3980b90ef4cc4d26f71df5e323f1f6bc1f7ee94366fba23e7f427"
+            "equalIndicator/v1": "be328cb37fa951df24f2f3f9bbbf572f31c55788e1faa4c94b38371915570439"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -70726,9 +70725,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 66,
+                  "startLine": 67,
                   "startColumn": 15,
-                  "charOffset": 2797,
+                  "charOffset": 2855,
                   "charLength": 11,
                   "snippet": {
                     "text": "NO_MAPPINGS"
@@ -70736,9 +70735,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 64,
+                  "startLine": 65,
                   "startColumn": 1,
-                  "charOffset": 2772,
+                  "charOffset": 2830,
                   "charLength": 86,
                   "snippet": {
                     "text": "\n  @NonNls\n  private val NO_MAPPINGS = \"surround_no_mappings\"\n\n  override fun init() {"
@@ -70754,8 +70753,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "ae0e8d5b4a21531efac1044da1964784b015c7a1969e42be487320eeb1965edc"
+            "equalIndicator/v1": "5a769b4613f89db4ef69cf51b3a029b29e313b667f052a4181f009c7e3c107b4"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -70809,6 +70809,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "ece3a114180bfb362c691b2354d827eda786f3feb91e57d4c0b3dd9ee2579940"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -70862,6 +70863,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "c04b29e6a32e9f40b9b1108bcabb8e2ff3b3515f5b4c224bf589a48f1c17da72"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -70915,430 +70917,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "5e4048461c867218cb2fd35e5bd8dc5328b01b8be95e06fe91e762d3afcddfcd"
           },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KotlinUnusedImport",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unused import directive",
-            "markdown": "Unused import directive"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/ex/ranges/ExRanges.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 24,
-                  "startColumn": 1,
-                  "charOffset": 987,
-                  "charLength": 50,
-                  "snippet": {
-                    "text": "import com.maddyhome.idea.vim.diagnostic.VimLogger"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 22,
-                  "startColumn": 1,
-                  "charOffset": 897,
-                  "charLength": 238,
-                  "snippet": {
-                    "text": "import com.maddyhome.idea.vim.api.injector\nimport com.maddyhome.idea.vim.common.Direction\nimport com.maddyhome.idea.vim.diagnostic.VimLogger\nimport com.maddyhome.idea.vim.diagnostic.debug\nimport com.maddyhome.idea.vim.diagnostic.vimLogger"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "0067469769b42e7a3ebbbfcd6b8e918a8a46bd6a74f224dc65d05303bea54f81"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KotlinUnusedImport",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unused import directive",
-            "markdown": "Unused import directive"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimProcessGroup.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 21,
-                  "startColumn": 1,
-                  "charOffset": 850,
-                  "charLength": 40,
-                  "snippet": {
-                    "text": "import org.jetbrains.annotations.NotNull"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 19,
-                  "startColumn": 1,
-                  "charOffset": 803,
-                  "charLength": 158,
-                  "snippet": {
-                    "text": "\nimport com.maddyhome.idea.vim.command.Command\nimport org.jetbrains.annotations.NotNull\nimport org.jetbrains.annotations.Nullable\nimport javax.swing.KeyStroke"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "a97cddb071a8c126f1522f30fb0a939e08c62c71ebe55f305d0043ed0fac72bf"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KotlinUnusedImport",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unused import directive",
-            "markdown": "Unused import directive"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimProcessGroup.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 22,
-                  "startColumn": 1,
-                  "charOffset": 891,
-                  "charLength": 41,
-                  "snippet": {
-                    "text": "import org.jetbrains.annotations.Nullable"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 20,
-                  "startColumn": 1,
-                  "charOffset": 804,
-                  "charLength": 158,
-                  "snippet": {
-                    "text": "import com.maddyhome.idea.vim.command.Command\nimport org.jetbrains.annotations.NotNull\nimport org.jetbrains.annotations.Nullable\nimport javax.swing.KeyStroke\n"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "030210c75f875e2e463353569f4cc8130f5fa6acfa6409d0fbae2a299996d63f"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KotlinUnusedImport",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unused import directive",
-            "markdown": "Unused import directive"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/regexp/CharacterClasses.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 20,
-                  "startColumn": 1,
-                  "charOffset": 807,
-                  "charLength": 53,
-                  "snippet": {
-                    "text": "import com.maddyhome.idea.vim.regexp.CharacterClasses"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 18,
-                  "startColumn": 1,
-                  "charOffset": 768,
-                  "charLength": 133,
-                  "snippet": {
-                    "text": "package com.maddyhome.idea.vim.regexp\n\nimport com.maddyhome.idea.vim.regexp.CharacterClasses\nimport org.jetbrains.annotations.NonNls\n"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "ce12b4ed22a466c45daebed50e669ee9d1b00ccadfd7cb4980fcb8d9b5bdd7d5"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KotlinUnusedImport",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unused import directive",
-            "markdown": "Unused import directive"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/regexp/CharPointer.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 21,
-                  "startColumn": 1,
-                  "charOffset": 837,
-                  "charLength": 48,
-                  "snippet": {
-                    "text": "import com.maddyhome.idea.vim.regexp.CharPointer"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 19,
-                  "startColumn": 1,
-                  "charOffset": 806,
-                  "charLength": 172,
-                  "snippet": {
-                    "text": "\nimport java.lang.StringBuffer\nimport com.maddyhome.idea.vim.regexp.CharPointer\nimport java.lang.IllegalStateException\nimport com.maddyhome.idea.vim.regexp.CharacterClasses"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "9db7cb20ebe0676920c210be8b511b17831a0a3a73d7ee7c1e839b09c8fa1961"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KotlinUnusedImport",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unused import directive",
-            "markdown": "Unused import directive"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/regexp/CharPointer.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 22,
-                  "startColumn": 1,
-                  "charOffset": 886,
-                  "charLength": 38,
-                  "snippet": {
-                    "text": "import java.lang.IllegalStateException"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 20,
-                  "startColumn": 1,
-                  "charOffset": 807,
-                  "charLength": 198,
-                  "snippet": {
-                    "text": "import java.lang.StringBuffer\nimport com.maddyhome.idea.vim.regexp.CharPointer\nimport java.lang.IllegalStateException\nimport com.maddyhome.idea.vim.regexp.CharacterClasses\nimport java.nio.CharBuffer"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "9a2e60214378366f817dff90d55f6de232c617525bcd90d7589dffe73bec9624"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KotlinUnusedImport",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unused import directive",
-            "markdown": "Unused import directive"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/regexp/CharPointer.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 23,
-                  "startColumn": 1,
-                  "charOffset": 925,
-                  "charLength": 53,
-                  "snippet": {
-                    "text": "import com.maddyhome.idea.vim.regexp.CharacterClasses"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 21,
-                  "startColumn": 1,
-                  "charOffset": 837,
-                  "charLength": 187,
-                  "snippet": {
-                    "text": "import com.maddyhome.idea.vim.regexp.CharPointer\nimport java.lang.IllegalStateException\nimport com.maddyhome.idea.vim.regexp.CharacterClasses\nimport java.nio.CharBuffer\nimport java.util.*"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "64400b11cdfce4f96aebbc420878cc65dca1b769f3dbaa84477894485d99d6ab"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KotlinUnusedImport",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unused import directive",
-            "markdown": "Unused import directive"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands/mapping/MapCommand.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 37,
-                  "startColumn": 1,
-                  "charOffset": 1731,
-                  "charLength": 34,
-                  "snippet": {
-                    "text": "import java.util.stream.Collectors"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 35,
-                  "startColumn": 1,
-                  "charOffset": 1672,
-                  "charLength": 123,
-                  "snippet": {
-                    "text": "import org.jetbrains.annotations.NonNls\nimport java.util.*\nimport java.util.stream.Collectors\nimport javax.swing.KeyStroke\n"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "665b5bd0efd29696191d1965aa208038490529065fb2308d5bd58210798ff7ab"
-          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -71362,9 +70941,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 35,
+                  "startLine": 54,
                   "startColumn": 9,
-                  "charOffset": 1324,
+                  "charOffset": 2071,
                   "charLength": 5,
                   "snippet": {
                     "text": "after"
@@ -71372,12 +70951,12 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 33,
+                  "startLine": 52,
                   "startColumn": 1,
-                  "charOffset": 1239,
-                  "charLength": 219,
+                  "charOffset": 1986,
+                  "charLength": 223,
                   "snippet": {
-                    "text": "                hard by the torrent of a mountain pass.\n    \"\"\".trimIndent()\n    val after = before\n    doTest(keys, before, after, CommandState.Mode.COMMAND, CommandState.SubMode.NONE)\n    val editor = myFixture.editor"
+                    "text": "                hard by the torrent of a mountain pass.\n    \"\"\".trimIndent()\n    val after = before\n    doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)\n    assertFalse(hasSelection())"
                   }
                 }
               },
@@ -71390,8 +70969,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "d87031212b5699a7c5ead5ffbc40fda64c4d4ae092654973297d573737c1a5c6"
+            "equalIndicator/v1": "aec213ae94cc76c82708fbf433ac2741affbc0afb91ecb20bc34c3176c5b7d93"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -71415,9 +70995,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 51,
+                  "startLine": 38,
                   "startColumn": 9,
-                  "charOffset": 1901,
+                  "charOffset": 1488,
                   "charLength": 5,
                   "snippet": {
                     "text": "after"
@@ -71425,12 +71005,12 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 49,
+                  "startLine": 36,
                   "startColumn": 1,
-                  "charOffset": 1816,
-                  "charLength": 217,
+                  "charOffset": 1403,
+                  "charLength": 225,
                   "snippet": {
-                    "text": "                hard by the torrent of a mountain pass.\n    \"\"\".trimIndent()\n    val after = before\n    doTest(keys, before, after, CommandState.Mode.COMMAND, CommandState.SubMode.NONE)\n    assertFalse(hasSelection())"
+                    "text": "                hard by the torrent of a mountain pass.\n    \"\"\".trimIndent()\n    val after = before\n    doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)\n    val editor = myFixture.editor"
                   }
                 }
               },
@@ -71443,8 +71023,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "c097512ef428469eb095591f5af29c8cf0b6c76a051d7fddc8a8cd600fd86873"
+            "equalIndicator/v1": "277d0bd6dd3aa54fb755b6b758b61fa09e8af3c65f1a9f711c7943e3a8577792"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -71498,6 +71079,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "85ae44b9ae84ddc0deebf7970e26cca79348b03a8d80f91b586f4dac295fb9e4"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -71521,9 +71103,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 226,
-                  "startColumn": 17,
-                  "charOffset": 6000,
+                  "startLine": 223,
+                  "startColumn": 11,
+                  "charOffset": 5180,
                   "charLength": 3,
                   "snippet": {
                     "text": "ptr"
@@ -71531,12 +71113,12 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 224,
+                  "startLine": 221,
                   "startColumn": 1,
-                  "charOffset": 5904,
-                  "charLength": 176,
+                  "charOffset": 5096,
+                  "charLength": 154,
                   "snippet": {
-                    "text": "    override fun equals(obj: Any?): Boolean {\n        if (obj is CharPointer) {\n            val ptr = obj\n            return ptr.seq === seq && ptr.pointer == pointer\n        }"
+                    "text": "  override fun equals(obj: Any?): Boolean {\n    if (obj is CharPointer) {\n      val ptr = obj\n      return ptr.seq === seq && ptr.pointer == pointer\n    }"
                   }
                 }
               },
@@ -71549,8 +71131,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "cb20ae5262e77e6122f070f01c447c0133865bca44a7cab08274b4397f95996b"
+            "equalIndicator/v1": "99cd9ce167f387bb7cb9f17ed2643a80a691eb59fd89287ce90c65c0b9f347e8"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -71604,6 +71187,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "de1853ae166f6c88f423e18662c7090db4cd608a330c05595e8aa073320b2bea"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -71627,9 +71211,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 539,
+                  "startLine": 563,
                   "startColumn": 11,
-                  "charOffset": 21463,
+                  "charOffset": 22320,
                   "charLength": 3,
                   "snippet": {
                     "text": "for"
@@ -71637,9 +71221,9 @@
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 537,
+                  "startLine": 561,
                   "startColumn": 1,
-                  "charOffset": 21326,
+                  "charOffset": 22183,
                   "charLength": 209,
                   "snippet": {
                     "text": "        String line = getText(editor, range.getStartOffsets()[i], range.getEndOffsets()[i]);\n        if (line.length() == 0) {\n          for (int j = 0; j < max; j++) {\n            res.append(' ');\n          }"
@@ -71655,8 +71239,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "b4853da6b75740045245c62cda70965fe551c6325ba3fe3b57f1422409634435"
+            "equalIndicator/v1": "0b5870e2dd4aa5739d1bb3fd0b7cfddd9d86ff88716d0459c57f0964044651a0"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -71680,9 +71265,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 94,
+                  "startLine": 106,
                   "startColumn": 20,
-                  "charOffset": 4038,
+                  "charOffset": 4487,
                   "charLength": 28,
                   "snippet": {
                     "text": "if (visualSelection != null)"
@@ -71690,12 +71275,12 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 92,
+                  "startLine": 104,
                   "startColumn": 1,
-                  "charOffset": 3945,
-                  "charLength": 230,
+                  "charOffset": 4424,
+                  "charLength": 200,
                   "snippet": {
-                    "text": "    notifyAboutIdeaPut(editor)\n    logger.debug(\"Perform put via plugin\")\n    val myCarets = if (visualSelection != null) {\n      visualSelection.caretsAndSelections.keys.sortedByDescending { it.getLogicalPosition() }\n    } else {"
+                    "text": "\n    logger.debug(\"Perform put via plugin\")\n    val myCarets = if (visualSelection != null) {\n      visualSelection.caretsAndSelections.keys.sortedByDescending { it.getLogicalPosition() }\n    } else {"
                   }
                 }
               },
@@ -71708,8 +71293,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "a01bd33f6b8ea61e17043c6e6d27d97da7aa5775a898df9410d7fccecd626ef3"
+            "equalIndicator/v1": "e1c28cfcbf383e72c5e1beda9a0c6bf36c847a5dc86a9e85bc8beed722c57e2c"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -71733,9 +71319,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 96,
+                  "startLine": 97,
                   "startColumn": 33,
-                  "charOffset": 4371,
+                  "charOffset": 4401,
                   "charLength": 33,
                   "snippet": {
                     "text": "it: TextBlockTransferableData? ->"
@@ -71743,9 +71329,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 94,
+                  "startLine": 95,
                   "startColumn": 1,
-                  "charOffset": 4225,
+                  "charOffset": 4255,
                   "charLength": 269,
                   "snippet": {
                     "text": "    // See https://youtrack.jetbrains.com/issue/VIM-1785\n    // See https://youtrack.jetbrains.com/issue/VIM-1731\n    transferableData.removeIf { it: TextBlockTransferableData? -> it is RtfTransferableData || it is HtmlTransferableData }\n    return transferableData\n  }"
@@ -71761,8 +71347,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "fdcbb668aac0bf6a5dc2ab4ff23cd950ac2c22b833cf8ee4d6a2fd6a949a9bae"
+            "equalIndicator/v1": "773f6d15fc0101ccb944d0269cbfd0ca0e54a35129d1f255686779a0c8aa5acf"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -71786,9 +71373,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 126,
+                  "startLine": 143,
                   "startColumn": 84,
-                  "charOffset": 4504,
+                  "charOffset": 5033,
                   "charLength": 5,
                   "snippet": {
                     "text": "false"
@@ -71796,9 +71383,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 124,
+                  "startLine": 141,
                   "startColumn": 1,
-                  "charOffset": 4297,
+                  "charOffset": 4826,
                   "charLength": 227,
                   "snippet": {
                     "text": "  fun executeNormalWithoutMapping(keys: List<KeyStroke>, editor: Editor) {\n    val context = EditorDataContext.init(editor)\n    keys.forEach { KeyHandler.getInstance().handleKey(editor.vim, it, context.vim, false, false) }\n  }\n"
@@ -71814,8 +71401,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "6ac3b4570af594708d6c18dba65fb364c5503371aedbc610692efa764ee6feeb"
+            "equalIndicator/v1": "9028baa125bbc313f2b3886dfbd8a653d7bbf0259461197e6fb52506187c41e8"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -71839,9 +71427,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 126,
+                  "startLine": 143,
                   "startColumn": 91,
-                  "charOffset": 4511,
+                  "charOffset": 5040,
                   "charLength": 5,
                   "snippet": {
                     "text": "false"
@@ -71849,9 +71437,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 124,
+                  "startLine": 141,
                   "startColumn": 1,
-                  "charOffset": 4297,
+                  "charOffset": 4826,
                   "charLength": 227,
                   "snippet": {
                     "text": "  fun executeNormalWithoutMapping(keys: List<KeyStroke>, editor: Editor) {\n    val context = EditorDataContext.init(editor)\n    keys.forEach { KeyHandler.getInstance().handleKey(editor.vim, it, context.vim, false, false) }\n  }\n"
@@ -71867,8 +71455,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "617e160d9d880b972c844c933a4b9679f8d75cfe437d08d78678be065b66635a"
+            "equalIndicator/v1": "98dae3c9b40f862f175f6b53a76557408db94d49ae1a92d07094757661a52f1e"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -71922,6 +71511,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "47a70c08182782affe83d4f0320e4c5810af6fb6a66de6d5cddf9167e156e112"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -71975,6 +71565,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "0dcd5c809f99b23f1e514f4029c999260aa4f0d5716a8fca50f22468f4a68696"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -72028,6 +71619,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "534541bd5799dc029fe69fb3b6d839facf20ae9c559ed8acb1fddcec8a0ddc14"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -72081,6 +71673,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "e14f3542f8c671faa86359fd51b03245078a8ad2d92f48dbbbb24cb397606a97"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -72088,59 +71681,6 @@
             ]
           }
         },
-        {
-          "ruleId": "Convert2Diamond",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Explicit type argument VimDataType can be replaced with <>",
-            "markdown": "Explicit type argument VimDataType can be replaced with \\<\\>"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/SearchGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 87,
-                  "startColumn": 32,
-                  "charOffset": 4094,
-                  "charLength": 11,
-                  "snippet": {
-                    "text": "VimDataType"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 85,
-                  "startColumn": 1,
-                  "charOffset": 3981,
-                  "charLength": 226,
-                  "snippet": {
-                    "text": "    VimPlugin.getOptionService().addListener(\n      OptionConstants.hlsearchName,\n      new OptionChangeListener<VimDataType>() {\n        @Override\n        public void processGlobalValueChange(@Nullable VimDataType oldValue) {"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "37eb9998d0b69aaa639f3e1c96ef7bd350289bcf0227b1934154189fa7c6b373"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
         {
           "ruleId": "Convert2Diamond",
           "kind": "fail",
@@ -72187,6 +71727,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "81a7201deab4ab929cee768d1a5f8f97fd96a4129f43556b1e75593d106e5b28"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -72195,143 +71736,37 @@
           }
         },
         {
-          "ruleId": "KotlinInternalInJava",
+          "ruleId": "Convert2Diamond",
           "kind": "fail",
-          "level": "error",
+          "level": "warning",
           "message": {
-            "text": "Usage of Kotlin internal declaration from different module",
-            "markdown": "Usage of Kotlin internal declaration from different module"
+            "text": "Explicit type argument VimDataType can be replaced with <>",
+            "markdown": "Explicit type argument VimDataType can be replaced with \\<\\>"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "src/test/java/org/jetbrains/plugins/ideavim/JavaVimTestCase.java",
+                  "uri": "src/main/java/com/maddyhome/idea/vim/group/SearchGroup.java",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 66,
-                  "startColumn": 7,
-                  "charOffset": 2482,
-                  "charLength": 22,
+                  "startLine": 87,
+                  "startColumn": 32,
+                  "charOffset": 4094,
+                  "charLength": 11,
                   "snippet": {
-                    "text": "VimVariableServiceImpl"
+                    "text": "VimDataType"
                   },
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 64,
+                  "startLine": 85,
                   "startColumn": 1,
-                  "charOffset": 2379,
-                  "charLength": 261,
+                  "charOffset": 3981,
+                  "charLength": 226,
                   "snippet": {
-                    "text": "  protected void tearDown() throws Exception {\n    ExEntryPanel.getInstance().deactivate(false);\n    ((VimVariableServiceImpl) VimPlugin.getVariableService()).clear();\n    Timer swingTimer = VimVisualTimer.INSTANCE.getSwingTimer();\n    if (swingTimer != null) {"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.test",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "2f077aa76f91c8749a3a45cdf67fc79f72a5c07a15b12ca80fd3b12e43eec012"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KotlinInternalInJava",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "Usage of Kotlin internal declaration from different module",
-            "markdown": "Usage of Kotlin internal declaration from different module"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/test/java/org/jetbrains/plugins/ideavim/JavaVimTestCase.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 36,
-                  "startColumn": 8,
-                  "charOffset": 1593,
-                  "charLength": 64,
-                  "snippet": {
-                    "text": "com.maddyhome.idea.vim.vimscript.services.VimVariableServiceImpl"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 34,
-                  "startColumn": 1,
-                  "charOffset": 1485,
-                  "charLength": 258,
-                  "snippet": {
-                    "text": "import com.maddyhome.idea.vim.ui.ex.ExEntryPanel;\nimport com.maddyhome.idea.vim.options.OptionScope;\nimport com.maddyhome.idea.vim.vimscript.services.VimVariableServiceImpl;\nimport org.jetbrains.annotations.NotNull;\nimport org.jetbrains.annotations.Nullable;"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.test",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "94f8d7cfec9c56b14e267f996abbe82b5da965a8cbbeab0eebb24df4d59d5e2c"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KotlinDeprecation",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Elvis operator (?:) always returns the left operand of non-nullable type EditorLine.Pointer",
-            "markdown": "Elvis operator (?:) always returns the left operand of non-nullable type EditorLine.Pointer"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/newapi/ChangeGroup.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 182,
-                  "startColumn": 26,
-                  "charOffset": 7026,
-                  "charLength": 36,
-                  "snippet": {
-                    "text": "editor.addLine(position) ?: continue"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 180,
-                  "startColumn": 1,
-                  "charOffset": 6888,
-                  "charLength": 221,
-                  "snippet": {
-                    "text": "      val position = EditorLine.Offset.init(editor.offsetToLogicalPosition(lineEndOffset).line + shift, editor)\n\n      val insertedLine = editor.addLine(position) ?: continue\n      VimPlugin.getChange().saveStrokes(\"\\n\")\n"
+                    "text": "    VimPlugin.getOptionService().addListener(\n      OptionConstants.hlsearchName,\n      new OptionChangeListener<VimDataType>() {\n        @Override\n        public void processGlobalValueChange(@Nullable VimDataType oldValue) {"
                   }
                 }
               },
@@ -72344,114 +71779,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "9df0c23b4c5c9b98d29e188500d54e1f0e1dc51ab2271d63e1752bbc92e391ee"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KotlinDeprecation",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "'StringValidatedByCustomRule(String, String): StringEventField' is deprecated. Please use EventFields.StringValidatedByCustomRule(String, Class)",
-            "markdown": "'StringValidatedByCustomRule(String, String): StringEventField' is deprecated. Please use EventFields.StringValidatedByCustomRule(String, Class)"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/statistic/ActionTracker.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 29,
-                  "startColumn": 76,
-                  "charOffset": 1365,
-                  "charLength": 27,
-                  "snippet": {
-                    "text": "StringValidatedByCustomRule"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 27,
-                  "startColumn": 1,
-                  "charOffset": 1105,
-                  "charLength": 357,
-                  "snippet": {
-                    "text": "    private val GROUP = EventLogGroup(\"vim.actions\", 1)\n    private val TRACKED_ACTIONS = GROUP.registerEvent(\"tracked\", EventFields.StringValidatedByCustomRule(\"action_id\", \"action\"))\n    private val COPIED_ACTIONS = GROUP.registerEvent(\"copied\", EventFields.StringValidatedByCustomRule(\"action_id\", \"action\"))\n\n    fun logTrackedAction(actionId: String) {"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "fa39c03d47f073e3d1ca9e64436fee51e25bb58e632f592af2efde1da7cff8f7"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KotlinDeprecation",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "'StringValidatedByCustomRule(String, String): StringEventField' is deprecated. Please use EventFields.StringValidatedByCustomRule(String, Class)",
-            "markdown": "'StringValidatedByCustomRule(String, String): StringEventField' is deprecated. Please use EventFields.StringValidatedByCustomRule(String, Class)"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/statistic/ActionTracker.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 28,
-                  "startColumn": 78,
-                  "charOffset": 1238,
-                  "charLength": 27,
-                  "snippet": {
-                    "text": "StringValidatedByCustomRule"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 26,
-                  "startColumn": 1,
-                  "charOffset": 1084,
-                  "charLength": 333,
-                  "snippet": {
-                    "text": "  companion object {\n    private val GROUP = EventLogGroup(\"vim.actions\", 1)\n    private val TRACKED_ACTIONS = GROUP.registerEvent(\"tracked\", EventFields.StringValidatedByCustomRule(\"action_id\", \"action\"))\n    private val COPIED_ACTIONS = GROUP.registerEvent(\"copied\", EventFields.StringValidatedByCustomRule(\"action_id\", \"action\"))\n"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "3d9416a8e2ba9adf55ea4206dbd806c8fb5e556d0a8acd265ea5bec0d2f26a2c"
+            "equalIndicator/v1": "37eb9998d0b69aaa639f3e1c96ef7bd350289bcf0227b1934154189fa7c6b373"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -72505,59 +71835,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "06e1a12c36bb87cfb723b47c0a8e5f8bddfcf8e8f261e48327ce2295a2ad1493"
           },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "KotlinDeprecation",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Unnecessary non-null assertion (!!) on a non-null receiver of type Scope",
-            "markdown": "Unnecessary non-null assertion (!!) on a non-null receiver of type Scope"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/services/VimVariableServiceBase.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 108,
-                  "startColumn": 54,
-                  "charOffset": 5642,
-                  "charLength": 2,
-                  "snippet": {
-                    "text": "!!"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 106,
-                  "startColumn": 1,
-                  "charOffset": 5522,
-                  "charLength": 217,
-                  "snippet": {
-                    "text": "      ?: throw ExException(\n        \"E121: Undefined variable: \" +\n          (if (variable.scope != null) variable.scope!!.c + \":\" else \"\") +\n          variable.name.evaluate(editor, context, vimContext).value\n      )"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "1337457c6200f7485ad13d4055aaaa68461a1be87e93b6a70f5a651ba0fd828d"
-          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -72611,6 +71889,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "7ed08753af8199165160ec21e99006c9784d337e372db291cd6596323e79f226"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -72634,9 +71913,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 186,
+                  "startLine": 195,
                   "startColumn": 21,
-                  "charOffset": 7614,
+                  "charOffset": 7889,
                   "charLength": 11,
                   "snippet": {
                     "text": "getFileSize"
@@ -72644,9 +71923,9 @@
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 184,
+                  "startLine": 193,
                   "startColumn": 1,
-                  "charOffset": 7574,
+                  "charOffset": 7849,
                   "charLength": 282,
                   "snippet": {
                     "text": "   */\n  @Deprecated\n  public static int getFileSize(final @NotNull Editor editor, final boolean includeEndNewLine) {\n    final int len = editor.getDocument().getTextLength();\n    return includeEndNewLine || len == 0 || editor.getDocument().getCharsSequence().charAt(len - 1) != '\\n'"
@@ -72662,8 +71941,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "7b011a8ab7e5ef8dbe730c48ce35f134efd6abb9f87792129f9aa81c6f0a4d01"
+            "equalIndicator/v1": "6f29d8f571ee4ffbd8289ec88ab76c82cd30cbb0d407efe293d9983fbdac5a3b"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -72689,7 +71969,7 @@
                 "region": {
                   "startLine": 545,
                   "startColumn": 34,
-                  "charOffset": 21574,
+                  "charOffset": 21559,
                   "charLength": 4,
                   "snippet": {
                     "text": "node"
@@ -72699,7 +71979,7 @@
                 "contextRegion": {
                   "startLine": 543,
                   "startColumn": 1,
-                  "charOffset": 21469,
+                  "charOffset": 21454,
                   "charLength": 245,
                   "snippet": {
                     "text": "    private var currentNode: CommandPartNode<NerdAction> = actionsRoot\n\n    private fun collectShortcuts(node: Node<NerdAction>): Set<KeyStroke> {\n      return if (node is CommandPartNode<NerdAction>) {\n        val res = node.keys.toMutableSet()"
@@ -72715,8 +71995,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "ed5ed768dadeeb8e643e1aa7388177ff7d1cb0c6208cf56326b94d32f805197d"
+            "equalIndicator/v1": "8fd0dd950de83526a06cd4195bb5c0e2d409ee42f7f4357efad4e7c8e625314d"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -72742,7 +72023,7 @@
                 "region": {
                   "startLine": 272,
                   "startColumn": 73,
-                  "charOffset": 12143,
+                  "charOffset": 12182,
                   "charLength": 10,
                   "snippet": {
                     "text": "escapeChar"
@@ -72752,7 +72033,7 @@
                 "contextRegion": {
                   "startLine": 270,
                   "startColumn": 1,
-                  "charOffset": 12066,
+                  "charOffset": 12105,
                   "charLength": 169,
                   "snippet": {
                     "text": "  }\n\n  private String doEscape(String original, String charsToEscape, String escapeChar) {\n    String result = original;\n    for (char c : charsToEscape.toCharArray()) {"
@@ -72768,8 +72049,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "a57dea04e00b7d85b51a6227d97d24107eb1b77fe8b12cb567392c582b26da55"
+            "equalIndicator/v1": "60114ad2221812b14ef72ca507bf8e5b72ea3742b273c1ea010b16ce6ea4e094"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -72795,7 +72077,7 @@
                 "region": {
                   "startLine": 151,
                   "startColumn": 5,
-                  "charOffset": 6464,
+                  "charOffset": 6533,
                   "charLength": 9,
                   "snippet": {
                     "text": "logReason"
@@ -72805,10 +72087,10 @@
                 "contextRegion": {
                   "startLine": 149,
                   "startColumn": 1,
-                  "charOffset": 6383,
-                  "charLength": 283,
+                  "charOffset": 6452,
+                  "charLength": 286,
                   "snippet": {
-                    "text": "    editor: Editor,\n    selectionSource: VimListenerManager.SelectionSource,\n    logReason: Boolean,\n  ): CommandState.Mode {\n    val selectmode = (VimPlugin.getOptionService().getOptionValue(OptionScope.LOCAL(IjVimEditor(editor)), OptionConstants.selectmodeName) as VimString).value"
+                    "text": "    editor: Editor,\n    selectionSource: VimListenerManager.SelectionSource,\n    logReason: Boolean,\n  ): VimStateMachine.Mode {\n    val selectmode = (VimPlugin.getOptionService().getOptionValue(OptionScope.LOCAL(IjVimEditor(editor)), OptionConstants.selectmodeName) as VimString).value"
                   }
                 }
               },
@@ -72821,8 +72103,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "b555049f261860739748456caeb6e9f51b681be463e00e6dae11c994fddcc8ff"
+            "equalIndicator/v1": "e4a9a1411c7f23842f9977e665cd132b4f0ac1b821482f7fb8e4e98d175cb62d"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -72876,6 +72159,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "a453e97e573202af1f663f6a51f920d4f210d7a8861fa3fdc6ad43af3bf71555"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -72899,9 +72183,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 185,
+                  "startLine": 186,
                   "startColumn": 37,
-                  "charOffset": 7937,
+                  "charOffset": 7964,
                   "charLength": 7,
                   "snippet": {
                     "text": "content"
@@ -72909,9 +72193,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 183,
+                  "startLine": 184,
                   "startColumn": 1,
-                  "charOffset": 7697,
+                  "charOffset": 7724,
                   "charLength": 360,
                   "snippet": {
                     "text": "  protected fun configureByJavaText(content: String) = configureByText(JavaFileType.INSTANCE, content)\n  protected fun configureByXmlText(content: String) = configureByText(XmlFileType.INSTANCE, content)\n  protected fun configureByJsonText(content: String) = configureByText(JsonFileType.INSTANCE, content)\n\n  protected fun configureAndGuard(content: String) {"
@@ -72927,8 +72211,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "0fffcf276156c104c929b30b875ca92c733ce28ead9aea41232134afb5ff4c69"
+            "equalIndicator/v1": "f7839de50a13dd8212c6b9286fec25ad6b2b1889b571bb539eaf878c95b27683"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -72952,9 +72237,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 194,
+                  "startLine": 195,
                   "startColumn": 51,
-                  "charOffset": 8259,
+                  "charOffset": 8286,
                   "charLength": 11,
                   "snippet": {
                     "text": "placeholder"
@@ -72962,9 +72247,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 192,
+                  "startLine": 193,
                   "startColumn": 1,
-                  "charOffset": 8204,
+                  "charOffset": 8231,
                   "charLength": 180,
                   "snippet": {
                     "text": "  }\n\n  protected fun configureAndFold(content: String, placeholder: String) {\n    val ranges = extractBrackets(content)\n    myFixture.editor.foldingModel.runBatchFoldingOperation {"
@@ -72980,8 +72265,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "ebe6e13e0dda6fe0cf57bad574bbe92655c1579e2e84597db3b484cbb359cbc9"
+            "equalIndicator/v1": "7ee6fdf2a1451ee5409ed16d2699e5914ee03a2887d8a958353ddccc7aa71de3"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -73005,9 +72291,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 612,
+                  "startLine": 613,
                   "startColumn": 72,
-                  "charOffset": 23716,
+                  "charOffset": 23776,
                   "charLength": 14,
                   "snippet": {
                     "text": "widthInColumns"
@@ -73015,12 +72301,12 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 610,
+                  "startLine": 611,
                   "startColumn": 1,
-                  "charOffset": 23506,
-                  "charLength": 431,
+                  "charOffset": 23566,
+                  "charLength": 453,
                   "snippet": {
-                    "text": "  // per platform (e.g. Windows is 7, Mac is 8) so we can't guarantee correct positioning for tests if we use hard coded\n  // pixel widths\n  protected fun addInlay(offset: Int, relatesToPrecedingText: Boolean, widthInColumns: Int): Inlay<*> {\n    val widthInPixels = EditorUtil.getPlainSpaceWidth(myFixture.editor) * widthInColumns\n    return EditorTestUtil.addInlay(myFixture.editor, offset, relatesToPrecedingText, widthInPixels)"
+                    "text": "  // per platform (e.g. Windows is 7, Mac is 8) so we can't guarantee correct positioning for tests if we use hard coded\n  // pixel widths\n  protected fun addInlay(offset: Int, relatesToPrecedingText: Boolean, widthInColumns: Int): Inlay<*> {\n    val widthInPixels = (EditorHelper.getPlainSpaceWidthFloat(myFixture.editor) * widthInColumns).roundToInt()\n    return EditorTestUtil.addInlay(myFixture.editor, offset, relatesToPrecedingText, widthInPixels)"
                   }
                 }
               },
@@ -73033,8 +72319,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "822065e18bf377de94bbb7bde747b278c3558704607adb94faf7be4a5cd76e26"
+            "equalIndicator/v1": "f90517bde020dbdd050e873056879b2b0df82d5b9499adf51970693bfe6e67e8"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -73058,9 +72345,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 621,
+                  "startLine": 622,
                   "startColumn": 44,
-                  "charOffset": 24450,
+                  "charOffset": 24532,
                   "charLength": 9,
                   "snippet": {
                     "text": "showAbove"
@@ -73068,12 +72355,12 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 619,
+                  "startLine": 620,
                   "startColumn": 1,
-                  "charOffset": 24177,
-                  "charLength": 475,
+                  "charOffset": 24259,
+                  "charLength": 497,
                   "snippet": {
-                    "text": "  // us to integer multiples of line heights. I don't think this will cause any issues, but we can change this to a\n  // float if necessary. We'd still be working scaled to the line height, so fractional values should still work.\n  protected fun addBlockInlay(offset: Int, showAbove: Boolean, heightInRows: Int): Inlay<*> {\n    val widthInColumns = 10 // Arbitrary width. We don't care.\n    val widthInPixels = EditorUtil.getPlainSpaceWidth(myFixture.editor) * widthInColumns"
+                    "text": "  // us to integer multiples of line heights. I don't think this will cause any issues, but we can change this to a\n  // float if necessary. We'd still be working scaled to the line height, so fractional values should still work.\n  protected fun addBlockInlay(offset: Int, showAbove: Boolean, heightInRows: Int): Inlay<*> {\n    val widthInColumns = 10 // Arbitrary width. We don't care.\n    val widthInPixels = (EditorHelper.getPlainSpaceWidthFloat(myFixture.editor) * widthInColumns).roundToInt()"
                   }
                 }
               },
@@ -73086,114 +72373,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "bc19b0bdd44b1e76cc4ae9c2c7c23879f9826124ca76df30775401f0dbc22974"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "SameParameterValue",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Actual value of parameter 'notifierEnabled' is always 'true'",
-            "markdown": "Actual value of parameter 'notifierEnabled' is always 'true'"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/test/java/org/jetbrains/plugins/ideavim/action/change/delete/JoinNotificationTest.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 81,
-                  "startColumn": 29,
-                  "charOffset": 3276,
-                  "charLength": 15,
-                  "snippet": {
-                    "text": "notifierEnabled"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 79,
-                  "startColumn": 1,
-                  "charOffset": 3243,
-                  "charLength": 171,
-                  "snippet": {
-                    "text": "  }\n\n  private fun appReadySetup(notifierEnabled: Boolean) {\n    EventLog.markAllAsRead(myFixture.project)\n    VimPlugin.getVimState().isIdeaJoinNotified = notifierEnabled"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.test",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "93cbaa62e88a998e3ed295e79abc8afd7545aacd2cfc1ef3d3ca8ec043ad5739"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "SameParameterValue",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Actual value of parameter 'notifierEnabled' is always 'true'",
-            "markdown": "Actual value of parameter 'notifierEnabled' is always 'true'"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/test/java/org/jetbrains/plugins/ideavim/action/copy/IdeaPutNotificationsTest.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 91,
-                  "startColumn": 29,
-                  "charOffset": 3751,
-                  "charLength": 15,
-                  "snippet": {
-                    "text": "notifierEnabled"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 89,
-                  "startColumn": 1,
-                  "charOffset": 3718,
-                  "charLength": 170,
-                  "snippet": {
-                    "text": "  }\n\n  private fun appReadySetup(notifierEnabled: Boolean) {\n    EventLog.markAllAsRead(myFixture.project)\n    VimPlugin.getVimState().isIdeaPutNotified = notifierEnabled"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.test",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "71f558c214870a9a72223fee40f5b006caba9652ca127308ad919dae5460907f"
+            "equalIndicator/v1": "c0cb81a2bd03b32fbabd3ad1c2b5d0843928ae1001c1aa67ea4c3f7ce432244d"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -73247,6 +72429,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "3b600c1db309b1c532bdd0a74fb3b0c9f3ed279e041cf11ec858dfb32305ad12"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -73300,6 +72483,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "fce7467e8fa19fbb2ed2aef57cefd5f91af5499b927fd4dae38f33600615761d"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -73353,6 +72537,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "ba541aac40bb09211ee9b60fafe1a66e0a47647265f16df7f77f6666abe26184"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -73406,6 +72591,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "259baf14be03de737ad7a28842719ddcabdf06357135abc370283a29b6d32826"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -73459,6 +72645,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "27418ddd863581e66e002585c3c5b761d03f8fa20c7a4498473df082446d51e6"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -73512,6 +72699,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "45a40f276c7c0480755e2af140c4400a9771da3db06b367cd34f358f81957ed7"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -73537,7 +72725,7 @@
                 "region": {
                   "startLine": 126,
                   "startColumn": 97,
-                  "charOffset": 5540,
+                  "charOffset": 5544,
                   "charLength": 13,
                   "snippet": {
                     "text": "isInOpPending"
@@ -73547,7 +72735,7 @@
                 "contextRegion": {
                   "startLine": 124,
                   "startColumn": 1,
-                  "charOffset": 5350,
+                  "charOffset": 5354,
                   "charLength": 232,
                   "snippet": {
                     "text": "        editor.forEachCaret { caret ->\n          VimPlugin.getMark().saveJumpLocation(editor)\n          injector.motion.moveCaret(editor, caret, getMatchitOffset(editor.ij, caret.ij, count, isInOpPending, reverse))\n        }\n      }"
@@ -73563,8 +72751,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "2a338a9ddb0f2d5689ce6e5fed9330a7b2a407dca867e1eb7963c81c5b436b1d"
+            "equalIndicator/v1": "ea8fa9474c68b3c6238b42dbaded22b683f9fabba4c318ae3bde47bde47c8311"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -73590,7 +72779,7 @@
                 "region": {
                   "startLine": 175,
                   "startColumn": 24,
-                  "charOffset": 9020,
+                  "charOffset": 9113,
                   "charLength": 26,
                   "snippet": {
                     "text": "expressionValue is VimBlob"
@@ -73600,7 +72789,7 @@
                 "contextRegion": {
                   "startLine": 173,
                   "startColumn": 1,
-                  "charOffset": 8963,
+                  "charOffset": 9056,
                   "charLength": 121,
                   "snippet": {
                     "text": "                }\n              }\n            } else if (expressionValue is VimBlob) {\n              TODO()\n            }"
@@ -73616,8 +72805,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "d73ed267b6e297e793a1b623b27bc233f623d1530faf69f563c22198bb761f77"
+            "equalIndicator/v1": "cb1da1ce2477803714529116e0aa31bf07cf409cb7a426fc449f905673d18d13"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -73641,9 +72831,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 43,
+                  "startLine": 44,
                   "startColumn": 5,
-                  "charOffset": 1978,
+                  "charOffset": 2072,
                   "charLength": 2,
                   "snippet": {
                     "text": "if"
@@ -73651,12 +72841,12 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 41,
+                  "startLine": 42,
                   "startColumn": 1,
-                  "charOffset": 1878,
-                  "charLength": 245,
+                  "charOffset": 1934,
+                  "charLength": 283,
                   "snippet": {
-                    "text": "\n  override fun processCommand(editor: VimEditor, context: ExecutionContext): ExecutionResult {\n    if (functionCall is FunctionCallExpression) {\n      val function = injector.functionService.getFunctionHandlerOrNull(\n        functionCall.scope,"
+                    "text": "\n  override fun processCommand(editor: VimEditor, context: ExecutionContext, operatorArguments: OperatorArguments): ExecutionResult {\n    if (functionCall is FunctionCallExpression) {\n      val function = injector.functionService.getFunctionHandlerOrNull(\n        functionCall.scope,"
                   }
                 }
               },
@@ -73669,8 +72859,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "16d2a6aa95bea5d7f5bc21d41dab337e2c2441061ad0c9ff83f24ff3cd978f52"
+            "equalIndicator/v1": "b28e0dfa742766e99dece0bd9b0e8ccfe6fc329876ffca1e3809035793961142"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -73694,9 +72885,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 166,
+                  "startLine": 129,
                   "startColumn": 28,
-                  "charOffset": 6944,
+                  "charOffset": 4990,
                   "charLength": 14,
                   "snippet": {
                     "text": "valuesToRemove"
@@ -73704,9 +72895,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 164,
+                  "startLine": 127,
                   "startColumn": 1,
-                  "charOffset": 6813,
+                  "charOffset": 4859,
                   "charLength": 199,
                   "snippet": {
                     "text": "        // exactly as they appear in the option.  Remove flags\n        // one by one to avoid problems.\n        elements.removeAll(valuesToRemove)\n      }\n      elements.joinToString(separator = \",\")"
@@ -73722,8 +72913,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "5ee833ded5fcd4bb1efdd6a835b619f801104fa549e4c1a3c584d27a8f18890e"
+            "equalIndicator/v1": "48e911adad2ffcc703cd50b27356c4330b9174cccdf9f3fdfb0ac71777138c49"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -73777,6 +72969,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "b4907cfa9d99747f2889683ddcfb563e191cbb7560d949a40e6c13eaa8341950"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -73830,6 +73023,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "13232831a6ab488e09eb5d4a11afd8df9a2e51e9587d767408ca330f54a08cd8"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -73883,6 +73077,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "0af7d1191b437ecb25ed6695708b5535e221995125809c0d61b60eb786ddbb72"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -73936,6 +73131,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "d9e7e40940949bcf96155c3399e8deccdeb9bac06788fcc3cd7eb0567532b4b6"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -73989,6 +73185,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "979a36b81958d6068601bbb3a1f022673faa5362804de4b4fdec8808300e2357"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -74012,9 +73209,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 251,
-                  "startColumn": 21,
-                  "charOffset": 6578,
+                  "startLine": 248,
+                  "startColumn": 17,
+                  "charOffset": 5670,
                   "charLength": 3,
                   "snippet": {
                     "text": "min"
@@ -74022,12 +73219,12 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 249,
+                  "startLine": 246,
                   "startColumn": 1,
-                  "charOffset": 6514,
-                  "charLength": 91,
+                  "charOffset": 5612,
+                  "charLength": 83,
                   "snippet": {
-                    "text": "\n    private fun normalize(pos: Int): Int {\n        return Math.min(seq.length, pos)\n    }\n"
+                    "text": "\n  private fun normalize(pos: Int): Int {\n    return Math.min(seq.length, pos)\n  }\n"
                   }
                 }
               },
@@ -74040,8 +73237,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "0f8113fb079b46e974d4425d39606c64f6c8eeb8305f327f16e485fad30ba528"
+            "equalIndicator/v1": "24f55bb971413617993c50c853d2758c671c9623917ca8f6dc77b76b3eaf0728"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -74067,7 +73265,7 @@
                 "region": {
                   "startLine": 160,
                   "startColumn": 3,
-                  "charOffset": 5207,
+                  "charOffset": 5198,
                   "charLength": 5,
                   "snippet": {
                     "text": "class"
@@ -74077,7 +73275,7 @@
                 "contextRegion": {
                   "startLine": 158,
                   "startColumn": 1,
-                  "charOffset": 5094,
+                  "charOffset": 5085,
                   "charLength": 168,
                   "snippet": {
                     "text": "\n  class Characters(val text: CharSequence, val leftOffset: Offset, val rightOffset: Offset) : OperatedRange()\n  class Block : OperatedRange() {\n    init {\n      TODO()"
@@ -74093,8 +73291,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "614e3bc3292ba59b5b25454cbf7a2dbbc4beb875ab558ecde4d5d64664b83ed9"
+            "equalIndicator/v1": "f03d719e18205b52b9df0740ad84d61708f7faa549ee681ad721396fbbd57873"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -74102,59 +73301,6 @@
             ]
           }
         },
-        {
-          "ruleId": "RedundantSuppression",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Redundant suppression",
-            "markdown": "Redundant suppression"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/EventFacade.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 105,
-                  "startColumn": 15,
-                  "charOffset": 3795,
-                  "charLength": 27,
-                  "snippet": {
-                    "text": "removeEditorFactoryListener"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 103,
-                  "startColumn": 1,
-                  "charOffset": 3745,
-                  "charLength": 254,
-                  "snippet": {
-                    "text": "\n  @SuppressWarnings(\"deprecation\")\n  public void removeEditorFactoryListener(@NotNull EditorFactoryListener listener) {\n    // Listener is removed not only if application is disposed\n    EditorFactory.getInstance().removeEditorFactoryListener(listener);"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "d8c998fe5960ee4b21a370d8946bd2d0637603c9faec95e64f8b55b3686dee55"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
         {
           "ruleId": "RedundantSuppression",
           "kind": "fail",
@@ -74171,9 +73317,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 269,
+                  "startLine": 266,
                   "startColumn": 7,
-                  "charOffset": 9719,
+                  "charOffset": 9572,
                   "charLength": 29,
                   "snippet": {
                     "text": "//noinspection DuplicatedCode"
@@ -74181,12 +73327,12 @@
                   "sourceLanguage": "JAVA"
                 },
                 "contextRegion": {
-                  "startLine": 267,
+                  "startLine": 264,
                   "startColumn": 1,
-                  "charOffset": 9614,
-                  "charLength": 262,
+                  "charOffset": 9467,
+                  "charLength": 265,
                   "snippet": {
-                    "text": "\n      final ArgumentTextObjectHandler textObjectHandler = new ArgumentTextObjectHandler(isInner);\n      //noinspection DuplicatedCode\n      if (!commandState.isOperatorPending()) {\n        vimEditor.getEditor().getCaretModel().runForEachCaret((Caret caret) -> {"
+                    "text": "\n      final ArgumentTextObjectHandler textObjectHandler = new ArgumentTextObjectHandler(isInner);\n      //noinspection DuplicatedCode\n      if (!vimStateMachine.isOperatorPending()) {\n        vimEditor.getEditor().getCaretModel().runForEachCaret((Caret caret) -> {"
                   }
                 }
               },
@@ -74199,8 +73345,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "8c93adb0e3738ec085c89c226b0166ed2ceac98720dccff6d48d6df19ef941a2"
+            "equalIndicator/v1": "132ad366ca08c1d8519d8872f765137766a1712c1a5ab7f69c66a483fa4a1c8f"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -74226,7 +73373,7 @@
                 "region": {
                   "startLine": 301,
                   "startColumn": 7,
-                  "charOffset": 13596,
+                  "charOffset": 13624,
                   "charLength": 2,
                   "snippet": {
                     "text": "if"
@@ -74236,7 +73383,7 @@
                 "contextRegion": {
                   "startLine": 299,
                   "startColumn": 1,
-                  "charOffset": 13422,
+                  "charOffset": 13450,
                   "charLength": 450,
                   "snippet": {
                     "text": "      Pair<TextRange, SelectionType> deleteRangeAndType =\n        getDeleteRangeAndType2(editor, caret, context, argument, true, operatorArguments.withCount0(count0));\n      if (deleteRangeAndType == null) return false;\n      //ChangeGroupKt.changeRange(((IjVimEditor) editor).getEditor(), ((IjVimCaret) caret).getCaret(), deleteRangeAndType.getFirst(), deleteRangeAndType.getSecond(), ((IjExecutionContext) context).getContext());\n      return true;"
@@ -74252,8 +73399,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "b1a9ec0c08c73bc35efd02b12b0725d19de73186ba61d5131d69f93c69e7fdcc"
+            "equalIndicator/v1": "1bb702f20286f08fe74730c768ffd535f9672b5fe7de2f89a76c960d447a395f"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -74307,6 +73455,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "775bfcf15e481537aaf4a366d7ceee5f81cc83f4eef725285bd43124fc4d2c80"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -74360,6 +73509,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "5ab3dd623faf18384ee878654c144e20f53ff72d4f070e06c4c575a212a2be77"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -74413,6 +73563,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "ba349e38201fe1e112983c0fc043e0beb348ef6d3faad4df63d54746c1858e97"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -74449,9 +73600,9 @@
                   "startLine": 30,
                   "startColumn": 1,
                   "charOffset": 1173,
-                  "charLength": 123,
+                  "charLength": 128,
                   "snippet": {
-                    "text": "  val ACTION_EXPAND_ALL_REGIONS: String\n  val ACTION_EXPAND_REGION: String\n  val ACTION_EXPAND_REGION_RECURSIVELY: String\n\n"
+                    "text": "  val ACTION_EXPAND_ALL_REGIONS: String\n  val ACTION_EXPAND_REGION: String\n  val ACTION_EXPAND_REGION_RECURSIVELY: String\n\n  /**"
                   }
                 }
               },
@@ -74464,61 +73615,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "809d416ba4b6465f5e98c0111ca966b3b4e4fdb2f26862e801e3b8be233d89e3"
-          },
-          "properties": {
-            "ideaSeverity": "WEAK WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "PropertyName",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Property name 'ACTION_EXPAND_REGION' should start with a lowercase letter",
-            "markdown": "Property name `ACTION_EXPAND_REGION` should start with a lowercase letter"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimActionExecutor.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 31,
-                  "startColumn": 7,
-                  "charOffset": 1219,
-                  "charLength": 20,
-                  "snippet": {
-                    "text": "ACTION_EXPAND_REGION"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 29,
-                  "startColumn": 1,
-                  "charOffset": 1124,
-                  "charLength": 171,
-                  "snippet": {
-                    "text": "  val ACTION_COLLAPSE_REGION_RECURSIVELY: String\n  val ACTION_EXPAND_ALL_REGIONS: String\n  val ACTION_EXPAND_REGION: String\n  val ACTION_EXPAND_REGION_RECURSIVELY: String\n"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "6a41fbde3afba809083db4ccdf05ed9670f7b70a7696d536799bf054923396b6"
+            "equalIndicator/v1": "66b945c2a87206b4d7b1a3dd5fecd1e17e0bd3701e6d922a8650b700fff793c0"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -74572,6 +73671,61 @@
           "partialFingerprints": {
             "equalIndicator/v1": "74586bc0c26a40f26e473d18a3c51ad7a55f1dbc30a8784f0e398b25d891ac57"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WEAK WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "PropertyName",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Property name 'ACTION_EXPAND_REGION' should start with a lowercase letter",
+            "markdown": "Property name `ACTION_EXPAND_REGION` should start with a lowercase letter"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimActionExecutor.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 31,
+                  "startColumn": 7,
+                  "charOffset": 1219,
+                  "charLength": 20,
+                  "snippet": {
+                    "text": "ACTION_EXPAND_REGION"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 29,
+                  "startColumn": 1,
+                  "charOffset": 1124,
+                  "charLength": 171,
+                  "snippet": {
+                    "text": "  val ACTION_COLLAPSE_REGION_RECURSIVELY: String\n  val ACTION_EXPAND_ALL_REGIONS: String\n  val ACTION_EXPAND_REGION: String\n  val ACTION_EXPAND_REGION_RECURSIVELY: String\n"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "6a41fbde3afba809083db4ccdf05ed9670f7b70a7696d536799bf054923396b6"
+          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -74625,6 +73779,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "e443ea549cb874b5e0ae7a151e1d615324e52ec07239f386e6dd8f9a7ca157ff"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -74678,6 +73833,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "a561b7552821ad0dde997ecf70954ce5e55f07998be3c734e61f12fb3c9a1038"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -74697,13 +73853,13 @@
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/extension/VimExtensionHandler.kt",
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/extension/ExtensionHandler.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
                   "startLine": 44,
-                  "startColumn": 13,
-                  "charOffset": 1789,
+                  "startColumn": 9,
+                  "charOffset": 1749,
                   "charLength": 16,
                   "snippet": {
                     "text": "_backingFunction"
@@ -74713,10 +73869,10 @@
                 "contextRegion": {
                   "startLine": 42,
                   "startColumn": 1,
-                  "charOffset": 1720,
-                  "charLength": 184,
+                  "charOffset": 1689,
+                  "charLength": 165,
                   "snippet": {
-                    "text": "\n    abstract class WithCallback : VimExtensionHandler {\n        var _backingFunction: Runnable? = null\n        fun continueVimExecution() {\n            if (_backingFunction != null) {"
+                    "text": "\n  abstract class WithCallback : ExtensionHandler {\n    var _backingFunction: Runnable? = null\n    fun continueVimExecution() {\n      if (_backingFunction != null) {"
                   }
                 }
               },
@@ -74729,8 +73885,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "5d20d1786634431700e8b0e2cea235e43f503fe05e6b330a40111e0912b2c21c"
+            "equalIndicator/v1": "b5d7b4a57e2882b823f33ef47a2275015a0dbabda0caba8f70778b9b9bd2353c"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -74754,9 +73911,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 122,
-                  "startColumn": 16,
-                  "charOffset": 3485,
+                  "startLine": 121,
+                  "startColumn": 12,
+                  "charOffset": 3157,
                   "charLength": 22,
                   "snippet": {
                     "text": "ch >= ' ' && ch <= '~'"
@@ -74764,12 +73921,12 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 120,
+                  "startLine": 119,
                   "startColumn": 1,
-                  "charOffset": 3432,
-                  "charLength": 100,
+                  "charOffset": 3110,
+                  "charLength": 92,
                   "snippet": {
-                    "text": "\n    fun isPrint(ch: Char): Boolean {\n        return ch >= ' ' && ch <= '~' || ch.code > 0xff\n    }\n"
+                    "text": "\n  fun isPrint(ch: Char): Boolean {\n    return ch >= ' ' && ch <= '~' || ch.code > 0xff\n  }\n"
                   }
                 }
               },
@@ -74782,8 +73939,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "9eef1963682f287d2eb69453bb2dc041fae796dbd0846c81f6281c2fbea6f3f0"
+            "equalIndicator/v1": "69a78558b1d17895a57967602d07c5e7de6c8872b2697dd51eee9a4906d88e91"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -74807,9 +73965,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 118,
-                  "startColumn": 16,
-                  "charOffset": 3403,
+                  "startLine": 117,
+                  "startColumn": 12,
+                  "charOffset": 3083,
                   "charLength": 22,
                   "snippet": {
                     "text": "ch >= '!' && ch <= '~'"
@@ -74817,12 +73975,12 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 116,
+                  "startLine": 115,
                   "startColumn": 1,
-                  "charOffset": 3350,
-                  "charLength": 82,
+                  "charOffset": 3036,
+                  "charLength": 74,
                   "snippet": {
-                    "text": "\n    fun isGraph(ch: Char): Boolean {\n        return ch >= '!' && ch <= '~'\n    }\n"
+                    "text": "\n  fun isGraph(ch: Char): Boolean {\n    return ch >= '!' && ch <= '~'\n  }\n"
                   }
                 }
               },
@@ -74835,8 +73993,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "9de7c2654ca076f835a9e5687add36b9de2daa98d5f2fc93e2654d673f85a6f3"
+            "equalIndicator/v1": "0d7db8989c9aad3a41ae9db3da14b49a58ed1c0568db21a405d7afe28f77de9e"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "INFO",
             "tags": [
@@ -74890,6 +74049,115 @@
           "partialFingerprints": {
             "equalIndicator/v1": "cbbcdfa83acf4cdce48c34553593f28a23bc65d931ca220ef86e5bb5acabf651"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "RedundantNullableReturnType",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "'visitWrappedExpression' always returns non-null type",
+            "markdown": "'visitWrappedExpression' always returns non-null type"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/vimscript/parser/visitors/ExpressionVisitor.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 225,
+                  "startColumn": 81,
+                  "charOffset": 11273,
+                  "charLength": 1,
+                  "snippet": {
+                    "text": "?"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 223,
+                  "startColumn": 1,
+                  "charOffset": 11188,
+                  "charLength": 160,
+                  "snippet": {
+                    "text": "  }\n\n  override fun visitWrappedExpression(ctx: WrappedExpressionContext): Expression? {\n    val result = visit(ctx.expr())\n    result.originalString = ctx.text"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "2b9f9899c2ff191f060d44afda71385b0a98c2f264869de67c4028acd3cf982a"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "JavadocDeclaration",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "'@param operatorArguments' tag description is missing",
+            "markdown": "`@param operatorArguments` tag description is missing"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/group/ChangeGroup.java",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 433,
+                  "startColumn": 13,
+                  "charOffset": 19024,
+                  "charLength": 17,
+                  "snippet": {
+                    "text": "operatorArguments"
+                  },
+                  "sourceLanguage": "JAVA"
+                },
+                "contextRegion": {
+                  "startLine": 431,
+                  "startColumn": 1,
+                  "charOffset": 18910,
+                  "charLength": 197,
+                  "snippet": {
+                    "text": "   * @param range             The range to change\n   * @param type              The type of the range\n   * @param operatorArguments\n   * @return true if able to delete the range, false if not\n   */"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "c17502af48f8eed67aeac51f595dd8254d44b94b5f0d3726e6e4a3241c1ac734"
+          },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -74943,59 +74211,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "4da9ffdada06c31f2717520f01e8a7955156ee79f07f10623b3a9a56a0aa09d3"
           },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "RedundantCast",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Casting 'VimPlugin.getVariableService()' to 'VimVariableServiceImpl' is redundant",
-            "markdown": "Casting `VimPlugin.getVariableService()` to `VimVariableServiceImpl` is redundant"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/test/java/org/jetbrains/plugins/ideavim/JavaVimTestCase.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 66,
-                  "startColumn": 7,
-                  "charOffset": 2482,
-                  "charLength": 22,
-                  "snippet": {
-                    "text": "VimVariableServiceImpl"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 64,
-                  "startColumn": 1,
-                  "charOffset": 2379,
-                  "charLength": 261,
-                  "snippet": {
-                    "text": "  protected void tearDown() throws Exception {\n    ExEntryPanel.getInstance().deactivate(false);\n    ((VimVariableServiceImpl) VimPlugin.getVariableService()).clear();\n    Timer swingTimer = VimVisualTimer.INSTANCE.getSwingTimer();\n    if (swingTimer != null) {"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.test",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "fefe33a009962d0dcd24e6edf71670612d274816a71deeb8072b54d91507ba5f"
-          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -75008,33 +74224,33 @@
           "kind": "fail",
           "level": "error",
           "message": {
-            "text": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
+            "text": "'create(com.intellij.openapi.actionSystem.@org.jetbrains.annotations.NotNull DataContext, com.intellij.openapi.editor.@org.jetbrains.annotations.NotNull Caret)' is available only since 222.3048.13 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.3048.13. Note that this method might have had a different full signature in the previous IDEs.",
+            "markdown": "'create(com.intellij.openapi.actionSystem.@org.jetbrains.annotations.NotNull DataContext, com.intellij.openapi.editor.@org.jetbrains.annotations.NotNull Caret)' is available only since 222.3048.13 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.3048.13. Note that this method might have had a different full signature in the previous IDEs."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/mark/IntellijMark.kt",
+                  "uri": "src/main/java/com/maddyhome/idea/vim/newapi/IjExecutionContextManager.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 25,
-                  "startColumn": 36,
-                  "charOffset": 974,
-                  "charLength": 16,
+                  "startLine": 40,
+                  "startColumn": 56,
+                  "charOffset": 1812,
+                  "charLength": 6,
                   "snippet": {
-                    "text": "BookmarksManager"
+                    "text": "create"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 23,
+                  "startLine": 38,
                   "startColumn": 1,
-                  "charOffset": 879,
-                  "charLength": 153,
+                  "charOffset": 1646,
+                  "charLength": 200,
                   "snippet": {
-                    "text": "  override fun clear() {\n    val mark = getMark() ?: return\n    getProject()?.let { project -> BookmarksManager.getInstance(project)?.remove(mark) }\n  }\n"
+                    "text": "\n  override fun createCaretSpecificDataContext(context: ExecutionContext, caret: VimCaret): ExecutionContext {\n    return IjExecutionContext(CaretSpecificDataContext.create(context.ij, caret.ij))\n  }\n"
                   }
                 }
               },
@@ -75047,8 +74263,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "4f5e0604895041a48d417468134051d774384180c84c115d1339f4911e343f4d"
+            "equalIndicator/v1": "61df788c241de6e74c0b13193524de85ff044f839bd07c4b281e46bced66329c"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "ERROR",
             "tags": [
@@ -75061,1252 +74278,33 @@
           "kind": "fail",
           "level": "error",
           "message": {
-            "text": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
+            "text": "'create(com.intellij.openapi.actionSystem.@org.jetbrains.annotations.NotNull DataContext, com.intellij.openapi.editor.@org.jetbrains.annotations.NotNull Caret)' is available only since 222.3048.13 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.3048.13. Note that this method might have had a different full signature in the previous IDEs.",
+            "markdown": "'create(com.intellij.openapi.actionSystem.@org.jetbrains.annotations.NotNull DataContext, com.intellij.openapi.editor.@org.jetbrains.annotations.NotNull Caret)' is available only since 222.3048.13 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.3048.13. Note that this method might have had a different full signature in the previous IDEs."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/mark/IntellijMark.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 28,
-                  "startColumn": 26,
-                  "charOffset": 1058,
-                  "charLength": 12,
-                  "snippet": {
-                    "text": "LineBookmark"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 26,
-                  "startColumn": 1,
-                  "charOffset": 1028,
-                  "charLength": 86,
-                  "snippet": {
-                    "text": "  }\n\n  private fun getMark(): LineBookmark? =\n    getProject()?.let {\n      project ->"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "b47e5d45a71430b877db92a58b494d74b9b69ba97b19d9462aa84b5f17cca442"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/mark/IntellijMark.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 31,
-                  "startColumn": 7,
-                  "charOffset": 1121,
-                  "charLength": 16,
-                  "snippet": {
-                    "text": "BookmarksManager"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 29,
-                  "startColumn": 1,
-                  "charOffset": 1074,
-                  "charLength": 144,
-                  "snippet": {
-                    "text": "    getProject()?.let {\n      project ->\n      BookmarksManager.getInstance(project)?.getBookmark(BookmarkType.get(key)) as? LineBookmark\n    }\n"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "cf54760423e7030eca78c3700055377a5402350ac231159d0f7fbecf97abedec"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/mark/IntellijMark.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 31,
-                  "startColumn": 85,
-                  "charOffset": 1199,
-                  "charLength": 12,
-                  "snippet": {
-                    "text": "LineBookmark"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 29,
-                  "startColumn": 1,
-                  "charOffset": 1074,
-                  "charLength": 144,
-                  "snippet": {
-                    "text": "    getProject()?.let {\n      project ->\n      BookmarksManager.getInstance(project)?.getBookmark(BookmarkType.get(key)) as? LineBookmark\n    }\n"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "cc349fd21dbf935e5955ed6dc4d0c80e217df1fd6b43742d5bceb64501672fad"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/mark/IntellijMark.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 10,
-                  "startColumn": 30,
-                  "charOffset": 339,
-                  "charLength": 12,
-                  "snippet": {
-                    "text": "LineBookmark"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 8,
-                  "startColumn": 1,
-                  "charOffset": 274,
-                  "charLength": 202,
-                  "snippet": {
-                    "text": "import java.lang.ref.WeakReference\n\nclass IntellijMark(bookmark: LineBookmark, override val col: Int, project: Project?) : Mark {\n\n  private val project: WeakReference<Project?> = WeakReference(project)"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "54cfaaddb7b2854fcf14904680e6497066898d43a1f9209b07fc06b61ec7b98d"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/mark/IntellijMark.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 14,
-                  "startColumn": 22,
-                  "charOffset": 499,
-                  "charLength": 16,
-                  "snippet": {
-                    "text": "BookmarksManager"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 12,
-                  "startColumn": 1,
-                  "charOffset": 405,
-                  "charLength": 227,
-                  "snippet": {
-                    "text": "  private val project: WeakReference<Project?> = WeakReference(project)\n\n  override val key = BookmarksManager.getInstance(project)?.getType(bookmark)?.mnemonic!!\n  override val logicalLine: Int\n    get() = getMark()?.line ?: 0"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "9cea6c2a4d24d0bcd2cd00057644cea6cf90cf22c12a54a43ecaa493c69e1aef"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/MarkGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 396,
-                  "startColumn": 41,
-                  "charOffset": 15610,
-                  "charLength": 12,
-                  "snippet": {
-                    "text": "LineBookmark"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 394,
-                  "startColumn": 1,
-                  "charOffset": 15563,
-                  "charLength": 157,
-                  "snippet": {
-                    "text": "    }\n\n    private void createVimMark(@NotNull LineBookmark b, char mnemonic) {\n      int col = 0;\n      Editor editor = EditorHelper.getEditor(b.getFile());"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "a29e7236f678ed5b554d324f62e182acb3c4f7500299fdfea37448d1de153976"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.BookmarkGroup' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.BookmarkGroup' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/MarkGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 362,
-                  "startColumn": 40,
-                  "charOffset": 13959,
-                  "charLength": 13,
-                  "snippet": {
-                    "text": "BookmarkGroup"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 360,
-                  "startColumn": 1,
-                  "charOffset": 13905,
-                  "charLength": 324,
-                  "snippet": {
-                    "text": "\n    @Override\n    public void bookmarkAdded(@NotNull BookmarkGroup group, com.intellij.ide.bookmark.@NotNull Bookmark bookmark) {\n      if (!VimPlugin.isEnabled()) return;\n      if (!VimPlugin.getOptionService().isSet(OptionScope.GLOBAL.INSTANCE, IjVimOptionService.ideamarksName, IjVimOptionService.ideamarksName)) return;"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "aa9bc03af8a76dae2809776b773318f69c1c1feab00c27335afaa58409806177"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.Bookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.Bookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/MarkGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 362,
-                  "startColumn": 96,
-                  "charOffset": 14015,
-                  "charLength": 8,
-                  "snippet": {
-                    "text": "Bookmark"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 360,
-                  "startColumn": 1,
-                  "charOffset": 13905,
-                  "charLength": 324,
-                  "snippet": {
-                    "text": "\n    @Override\n    public void bookmarkAdded(@NotNull BookmarkGroup group, com.intellij.ide.bookmark.@NotNull Bookmark bookmark) {\n      if (!VimPlugin.isEnabled()) return;\n      if (!VimPlugin.getOptionService().isSet(OptionScope.GLOBAL.INSTANCE, IjVimOptionService.ideamarksName, IjVimOptionService.ideamarksName)) return;"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "ba60e3f1b7b38181ea36a5af12bbb1d6982f514cec928b2189fde5c3912a27a4"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/MarkGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 366,
-                  "startColumn": 33,
-                  "charOffset": 14263,
-                  "charLength": 12,
-                  "snippet": {
-                    "text": "LineBookmark"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 364,
-                  "startColumn": 1,
-                  "charOffset": 14078,
-                  "charLength": 334,
-                  "snippet": {
-                    "text": "      if (!VimPlugin.getOptionService().isSet(OptionScope.GLOBAL.INSTANCE, IjVimOptionService.ideamarksName, IjVimOptionService.ideamarksName)) return;\n\n      if (!(bookmark instanceof LineBookmark)) return;\n      BookmarksManager bookmarksManager = BookmarksManager.getInstance(myProject);\n      if (bookmarksManager == null) return;"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "4fd7135c4a395f82633ec83875e77a1bc0d71db6c7d0996449265bda4c379c98"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/MarkGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 367,
-                  "startColumn": 7,
-                  "charOffset": 14292,
-                  "charLength": 16,
-                  "snippet": {
-                    "text": "BookmarksManager"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 365,
-                  "startColumn": 1,
-                  "charOffset": 14230,
-                  "charLength": 244,
-                  "snippet": {
-                    "text": "\n      if (!(bookmark instanceof LineBookmark)) return;\n      BookmarksManager bookmarksManager = BookmarksManager.getInstance(myProject);\n      if (bookmarksManager == null) return;\n      BookmarkType type = bookmarksManager.getType(bookmark);"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "f0bef862b86968a65a57dced00549a63c14fe1fb6eeb5738e11f6e3199ffd059"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/MarkGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 367,
-                  "startColumn": 43,
-                  "charOffset": 14328,
-                  "charLength": 16,
-                  "snippet": {
-                    "text": "BookmarksManager"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 365,
-                  "startColumn": 1,
-                  "charOffset": 14230,
-                  "charLength": 244,
-                  "snippet": {
-                    "text": "\n      if (!(bookmark instanceof LineBookmark)) return;\n      BookmarksManager bookmarksManager = BookmarksManager.getInstance(myProject);\n      if (bookmarksManager == null) return;\n      BookmarkType type = bookmarksManager.getType(bookmark);"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "56b6c8335dd44a19473445e460dacca9830da1384c384a7257035e4016d5e303"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/MarkGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 375,
-                  "startColumn": 22,
-                  "charOffset": 14628,
-                  "charLength": 12,
-                  "snippet": {
-                    "text": "LineBookmark"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 373,
-                  "startColumn": 1,
-                  "charOffset": 14550,
-                  "charLength": 118,
-                  "snippet": {
-                    "text": "      if (GLOBAL_MARKS.indexOf(mnemonic) == -1) return;\n\n      createVimMark((LineBookmark)bookmark, mnemonic);\n    }\n"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "c9e3db8b1fe226cb6548e1d7203eec18b603508b6cb5d6e874d9362a51444a2b"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.BookmarksListener' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.BookmarksListener' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/MarkGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 354,
-                  "startColumn": 81,
-                  "charOffset": 13763,
-                  "charLength": 17,
-                  "snippet": {
-                    "text": "BookmarksListener"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 352,
-                  "startColumn": 1,
-                  "charOffset": 13678,
-                  "charLength": 142,
-                  "snippet": {
-                    "text": "  }\n\n  public static class VimBookmarksListener implements com.intellij.ide.bookmark.BookmarksListener {\n    private final Project myProject;\n"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "82207e7eed3bd0f13014a36e34ba2ddc321fb62982f1edb6228ddb70bbdc3eef"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.BookmarkGroup' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.BookmarkGroup' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/MarkGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 379,
-                  "startColumn": 42,
-                  "charOffset": 14724,
-                  "charLength": 13,
-                  "snippet": {
-                    "text": "BookmarkGroup"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 377,
-                  "startColumn": 1,
-                  "charOffset": 14668,
-                  "charLength": 326,
-                  "snippet": {
-                    "text": "\n    @Override\n    public void bookmarkRemoved(@NotNull BookmarkGroup group, com.intellij.ide.bookmark.@NotNull Bookmark bookmark) {\n      if (!VimPlugin.isEnabled()) return;\n      if (!VimPlugin.getOptionService().isSet(OptionScope.GLOBAL.INSTANCE, IjVimOptionService.ideamarksName, IjVimOptionService.ideamarksName)) return;"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "36ad76d364cc920642303738b59fc16890b5107f55a135dd788bc7f8c5fd54d2"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.Bookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.Bookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/MarkGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 379,
-                  "startColumn": 98,
-                  "charOffset": 14780,
-                  "charLength": 8,
-                  "snippet": {
-                    "text": "Bookmark"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 377,
-                  "startColumn": 1,
-                  "charOffset": 14668,
-                  "charLength": 326,
-                  "snippet": {
-                    "text": "\n    @Override\n    public void bookmarkRemoved(@NotNull BookmarkGroup group, com.intellij.ide.bookmark.@NotNull Bookmark bookmark) {\n      if (!VimPlugin.isEnabled()) return;\n      if (!VimPlugin.getOptionService().isSet(OptionScope.GLOBAL.INSTANCE, IjVimOptionService.ideamarksName, IjVimOptionService.ideamarksName)) return;"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "14ac2c47608b64ccdefe6eb402dda0c82b315102141072b43f6d3629b1894fc4"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/MarkGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 383,
-                  "startColumn": 33,
-                  "charOffset": 15028,
-                  "charLength": 12,
-                  "snippet": {
-                    "text": "LineBookmark"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 381,
-                  "startColumn": 1,
-                  "charOffset": 14843,
-                  "charLength": 334,
-                  "snippet": {
-                    "text": "      if (!VimPlugin.getOptionService().isSet(OptionScope.GLOBAL.INSTANCE, IjVimOptionService.ideamarksName, IjVimOptionService.ideamarksName)) return;\n\n      if (!(bookmark instanceof LineBookmark)) return;\n      BookmarksManager bookmarksManager = BookmarksManager.getInstance(myProject);\n      if (bookmarksManager == null) return;"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "d902e065a97464480f3666689b56d0b99219715128eeae390ad7b7520cc47297"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/MarkGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 384,
-                  "startColumn": 7,
-                  "charOffset": 15057,
-                  "charLength": 16,
-                  "snippet": {
-                    "text": "BookmarksManager"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 382,
-                  "startColumn": 1,
-                  "charOffset": 14995,
-                  "charLength": 244,
-                  "snippet": {
-                    "text": "\n      if (!(bookmark instanceof LineBookmark)) return;\n      BookmarksManager bookmarksManager = BookmarksManager.getInstance(myProject);\n      if (bookmarksManager == null) return;\n      BookmarkType type = bookmarksManager.getType(bookmark);"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "6ad17b83f9886de79b6a6c00c603632964ec078a26c8e2167f65421790288a4d"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/MarkGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 384,
-                  "startColumn": 43,
-                  "charOffset": 15093,
-                  "charLength": 16,
-                  "snippet": {
-                    "text": "BookmarksManager"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 382,
-                  "startColumn": 1,
-                  "charOffset": 14995,
-                  "charLength": 244,
-                  "snippet": {
-                    "text": "\n      if (!(bookmark instanceof LineBookmark)) return;\n      BookmarksManager bookmarksManager = BookmarksManager.getInstance(myProject);\n      if (bookmarksManager == null) return;\n      BookmarkType type = bookmarksManager.getType(bookmark);"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "10db34ba4c409fd545919813a10abcc226f4b0695307b74f9f8e6cba47a2b5e9"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/MarkGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 390,
-                  "startColumn": 80,
-                  "charOffset": 15431,
-                  "charLength": 12,
-                  "snippet": {
-                    "text": "LineBookmark"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 388,
-                  "startColumn": 1,
-                  "charOffset": 15272,
-                  "charLength": 282,
-                  "snippet": {
-                    "text": "      char ch = type.getMnemonic();\n      if (GLOBAL_MARKS.indexOf(ch) != -1) {\n        FileMarks<Character, Mark> fmarks = VimPlugin.getMark().getFileMarks(((LineBookmark)bookmark).getFile().getPath());\n        fmarks.remove(ch);\n        VimPlugin.getMark().globalMarks.remove(ch);"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "817b4c5aad5b8b64b122e3153500d144bd38d352553c4dc2b9684a58f2595f95"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/MarkGroup.java",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 83,
-                  "startColumn": 15,
-                  "charOffset": 3590,
-                  "charLength": 12,
-                  "snippet": {
-                    "text": "LineBookmark"
-                  },
-                  "sourceLanguage": "JAVA"
-                },
-                "contextRegion": {
-                  "startLine": 81,
-                  "startColumn": 1,
-                  "charOffset": 3421,
-                  "charLength": 298,
-                  "snippet": {
-                    "text": "  public @Nullable Mark createSystemMark(char ch, int line, int col, @NotNull VimEditor editor) {\n    Editor ijEditor = ((IjVimEditor)editor).getEditor();\n    @Nullable LineBookmark systemMark = SystemMarks.createOrGetSystemMark(ch, line, ijEditor);\n    if (systemMark == null) {\n      return null;"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "0b12c0980dd4d7505ff6354b8ac761f58e3b04b4e379372742c711a0a327f1b4"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/SystemMarks.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 57,
-                  "startColumn": 85,
-                  "charOffset": 2297,
-                  "charLength": 12,
-                  "snippet": {
-                    "text": "LineBookmark"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 55,
-                  "startColumn": 1,
-                  "charOffset": 2210,
-                  "charLength": 253,
-                  "snippet": {
-                    "text": "}\n\ninternal fun Project.createLineBookmark(editor: Editor, line: Int, mnemonic: Char): LineBookmark? {\n  val bookmarksManager = BookmarksManager.getInstance(this) ?: return null\n  val lineBookmarkProvider = LineBookmarkProvider.find(this) ?: return null"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "6108d5b01a7ec55921b95b9da7228daefa78b4556f16697a036d50bbd222548d"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/SystemMarks.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 58,
-                  "startColumn": 26,
-                  "charOffset": 2338,
-                  "charLength": 16,
-                  "snippet": {
-                    "text": "BookmarksManager"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 56,
-                  "startColumn": 1,
-                  "charOffset": 2212,
-                  "charLength": 350,
-                  "snippet": {
-                    "text": "\ninternal fun Project.createLineBookmark(editor: Editor, line: Int, mnemonic: Char): LineBookmark? {\n  val bookmarksManager = BookmarksManager.getInstance(this) ?: return null\n  val lineBookmarkProvider = LineBookmarkProvider.find(this) ?: return null\n  val bookmark = lineBookmarkProvider.createBookmark(editor, line) as LineBookmark? ?: return null"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "67a004f3d2c0d5bad1630ddf60e2da0b6331cebed66a2b6f0ab64d69fc18a50b"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/SystemMarks.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 60,
-                  "startColumn": 71,
-                  "charOffset": 2534,
-                  "charLength": 12,
-                  "snippet": {
-                    "text": "LineBookmark"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 58,
-                  "startColumn": 1,
-                  "charOffset": 2313,
-                  "charLength": 337,
-                  "snippet": {
-                    "text": "  val bookmarksManager = BookmarksManager.getInstance(this) ?: return null\n  val lineBookmarkProvider = LineBookmarkProvider.find(this) ?: return null\n  val bookmark = lineBookmarkProvider.createBookmark(editor, line) as LineBookmark? ?: return null\n  val type = BookmarkType.get(mnemonic)\n  if (type == BookmarkType.DEFAULT) return null"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "2b2d22f0e853acb3de02ed8743b3147a64c83244e3484dd9ca5379243e87d7f4"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/SystemMarks.kt",
+                  "uri": "src/main/java/com/maddyhome/idea/vim/newapi/IjExecutionContextManager.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
                   "startLine": 36,
-                  "startColumn": 69,
-                  "charOffset": 1479,
-                  "charLength": 12,
+                  "startColumn": 56,
+                  "charOffset": 1608,
+                  "charLength": 6,
                   "snippet": {
-                    "text": "LineBookmark"
+                    "text": "create"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
                   "startLine": 34,
                   "startColumn": 1,
-                  "charOffset": 1375,
-                  "charLength": 275,
+                  "charOffset": 1461,
+                  "charLength": 185,
                   "snippet": {
-                    "text": "  companion object {\n    @JvmStatic\n    fun createOrGetSystemMark(ch: Char, line: Int, editor: Editor): LineBookmark? {\n      if (!VimPlugin.getOptionService().isSet(LOCAL(IjVimEditor(editor)), IjVimOptionService.ideamarksName, IjVimOptionService.ideamarksName)) return null\n"
+                    "text": "\n  override fun onCaret(caret: VimCaret, prevContext: ExecutionContext): ExecutionContext {\n    return IjExecutionContext(CaretSpecificDataContext.create(prevContext.ij, caret.ij))\n  }\n"
                   }
                 }
               },
@@ -76319,8 +74317,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "6d203138cdaea03ed442105950d259ea66924a25b373dfd257f53ae9c37049e4"
+            "equalIndicator/v1": "e872fffc46837790842536b008fdd7e467e3c36c66d7c2ce54a3f699846c2cbb"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "ERROR",
             "tags": [
@@ -76333,33 +74332,33 @@
           "kind": "fail",
           "level": "error",
           "message": {
-            "text": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
+            "text": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs.",
+            "markdown": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/SystemMarks.kt",
+                  "uri": "src/main/java/com/maddyhome/idea/vim/statistic/ActionTracker.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 43,
-                  "startColumn": 30,
-                  "charOffset": 1821,
-                  "charLength": 16,
+                  "startLine": 28,
+                  "startColumn": 25,
+                  "charOffset": 1223,
+                  "charLength": 13,
                   "snippet": {
-                    "text": "BookmarksManager"
+                    "text": "EventLogGroup"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 41,
+                  "startLine": 26,
                   "startColumn": 1,
-                  "charOffset": 1739,
-                  "charLength": 230,
+                  "charOffset": 1120,
+                  "charLength": 206,
                   "snippet": {
-                    "text": "      if (type == BookmarkType.DEFAULT) return null\n\n      val bookmarksManager = BookmarksManager.getInstance(project) ?: return null\n      val foundBookmark = bookmarksManager.getBookmark(type)\n      if (foundBookmark != null) {"
+                    "text": "internal class ActionTracker : CounterUsagesCollector() {\n  companion object {\n    private val GROUP = EventLogGroup(\"vim.actions\", 1)\n    private val TRACKED_ACTIONS = GROUP.registerEvent(\n      \"tracked\","
                   }
                 }
               },
@@ -76372,8 +74371,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "88710d1d094342fda1f8aca4c37b80ed643f35b0eaa727bf081ee2f780e6d152"
+            "equalIndicator/v1": "20d9b7c09cff0f258da5b189a0e60ad727ff3a6c31962cd355116df42a86b5f0"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "ERROR",
             "tags": [
@@ -76386,33 +74386,33 @@
           "kind": "fail",
           "level": "error",
           "message": {
-            "text": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.LineBookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
+            "text": "'StringValidatedByCustomRule(java.lang.String, java.lang.Class)' is available only since 222.2270.31 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs.",
+            "markdown": "'StringValidatedByCustomRule(java.lang.String, java.lang.Class)' is available only since 222.2270.31 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/SystemMarks.kt",
+                  "uri": "src/main/java/com/maddyhome/idea/vim/statistic/ActionTracker.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 46,
-                  "startColumn": 30,
-                  "charOffset": 1999,
-                  "charLength": 12,
+                  "startLine": 31,
+                  "startColumn": 19,
+                  "charOffset": 1345,
+                  "charLength": 27,
                   "snippet": {
-                    "text": "LineBookmark"
+                    "text": "StringValidatedByCustomRule"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 44,
+                  "startLine": 29,
                   "startColumn": 1,
-                  "charOffset": 1874,
-                  "charLength": 211,
+                  "charOffset": 1255,
+                  "charLength": 223,
                   "snippet": {
-                    "text": "      val foundBookmark = bookmarksManager.getBookmark(type)\n      if (foundBookmark != null) {\n        if (foundBookmark is LineBookmark && foundBookmark.line == line) {\n          return foundBookmark\n        }"
+                    "text": "    private val TRACKED_ACTIONS = GROUP.registerEvent(\n      \"tracked\",\n      EventFields.StringValidatedByCustomRule(\"action_id\", ActionRuleValidator::class.java)\n    )\n    private val COPIED_ACTIONS = GROUP.registerEvent("
                   }
                 }
               },
@@ -76425,8 +74425,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "3774659a797030f3872dc237ed15137e8f418bb77d9b96b0a9ac9a89bfc23074"
+            "equalIndicator/v1": "ed9c3c558b134a3141398fd0f0b2e5e09633f2e0abdc4d010ce03ed1dddbd130"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "ERROR",
             "tags": [
@@ -76439,33 +74440,33 @@
           "kind": "fail",
           "level": "error",
           "message": {
-            "text": "'com.intellij.ide.bookmark.Bookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.Bookmark' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
+            "text": "'StringValidatedByCustomRule(java.lang.String, java.lang.Class)' is available only since 222.2270.31 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs.",
+            "markdown": "'StringValidatedByCustomRule(java.lang.String, java.lang.Class)' is available only since 222.2270.31 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/SystemMarks.kt",
+                  "uri": "src/main/java/com/maddyhome/idea/vim/statistic/ActionTracker.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 72,
-                  "startColumn": 14,
-                  "charOffset": 2873,
-                  "charLength": 8,
+                  "startLine": 35,
+                  "startColumn": 19,
+                  "charOffset": 1513,
+                  "charLength": 27,
                   "snippet": {
-                    "text": "Bookmark"
+                    "text": "StringValidatedByCustomRule"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 70,
+                  "startLine": 33,
                   "startColumn": 1,
-                  "charOffset": 2857,
-                  "charLength": 135,
+                  "charOffset": 1425,
+                  "charLength": 168,
                   "snippet": {
-                    "text": "}\n\ninternal fun Bookmark.mnemonic(project: Project?): Char {\n  return BookmarksManager.getInstance(project)?.getType(this)!!.mnemonic\n}"
+                    "text": "    private val COPIED_ACTIONS = GROUP.registerEvent(\n      \"copied\",\n      EventFields.StringValidatedByCustomRule(\"action_id\", ActionRuleValidator::class.java)\n    )\n"
                   }
                 }
               },
@@ -76478,8 +74479,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "f1c824b7c106e3a626d96733f05cb616def8350259d2d24b7ebf3d207522fb71"
+            "equalIndicator/v1": "c51972c48c72b99203855249ebee49da2321dcb9d2bbb4ac106a3b0c7d573e0e"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "ERROR",
             "tags": [
@@ -76492,167 +74494,8 @@
           "kind": "fail",
           "level": "error",
           "message": {
-            "text": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.ide.bookmark.BookmarksManager' is available only since 213.5744.223 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 213.5744.223. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/group/SystemMarks.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 73,
-                  "startColumn": 10,
-                  "charOffset": 2927,
-                  "charLength": 16,
-                  "snippet": {
-                    "text": "BookmarksManager"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 71,
-                  "startColumn": 1,
-                  "charOffset": 2859,
-                  "charLength": 134,
-                  "snippet": {
-                    "text": "\ninternal fun Bookmark.mnemonic(project: Project?): Char {\n  return BookmarksManager.getInstance(project)?.getType(this)!!.mnemonic\n}\n"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "04d8d32d59b1e5aaa13ef085df3f8aa7f317416c0d18c56853ec0f5ae0b90af0"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.openapi.wm.ex.ToolWindowManagerEx.Companion' is available only since 221.3427.89 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 221.3427.89. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.openapi.wm.ex.ToolWindowManagerEx.Companion' is available only since 221.3427.89 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 221.3427.89. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/extension/nerdtree/NerdTree.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 167,
-                  "startColumn": 24,
-                  "charOffset": 8408,
-                  "charLength": 19,
-                  "snippet": {
-                    "text": "ToolWindowManagerEx"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 165,
-                  "startColumn": 1,
-                  "charOffset": 8231,
-                  "charLength": 330,
-                  "snippet": {
-                    "text": "    override fun execute(command: String, ranges: Ranges, editor: VimEditor, context: ExecutionContext) {\n      val project = editor.ij.project ?: return\n      val toolWindow = ToolWindowManagerEx.getInstanceEx(project).getToolWindow(ToolWindowId.PROJECT_VIEW) ?: return\n      if (toolWindow.isVisible) {\n        toolWindow.hide()"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "624fef07d592089a4e5af2c4c23f61402d39e31c83e4985f5b7d289d38531c5b"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'com.intellij.openapi.wm.ex.ToolWindowManagerEx.Companion' is available only since 221.3427.89 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 221.3427.89. Note that this type might have had a different fully qualified name in the previous IDEs.",
-            "markdown": "'com.intellij.openapi.wm.ex.ToolWindowManagerEx.Companion' is available only since 221.3427.89 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 221.3427.89. Note that this type might have had a different fully qualified name in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/extension/nerdtree/NerdTree.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 155,
-                  "startColumn": 24,
-                  "charOffset": 7941,
-                  "charLength": 19,
-                  "snippet": {
-                    "text": "ToolWindowManagerEx"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 153,
-                  "startColumn": 1,
-                  "charOffset": 7764,
-                  "charLength": 330,
-                  "snippet": {
-                    "text": "    override fun execute(command: String, ranges: Ranges, editor: VimEditor, context: ExecutionContext) {\n      val project = editor.ij.project ?: return\n      val toolWindow = ToolWindowManagerEx.getInstanceEx(project).getToolWindow(ToolWindowId.PROJECT_VIEW) ?: return\n      if (toolWindow.isVisible) {\n        toolWindow.hide()"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "3fa2408de1f8db31aea7425efc7c64d6e16eb3eb6f45e5c8d420a145f5b48b80"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs.",
-            "markdown": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs."
+            "text": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs.",
+            "markdown": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs."
           },
           "locations": [
             {
@@ -76690,8 +74533,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "b31c5e028f384935fa23c23a45e4c4e667c530348785f41fc29a1fe4db7ae82b"
+            "equalIndicator/v1": "357f2ab75dbf0ba72f1449bce418c04768662dd2190f5181f73abecd00a1a6b8"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "ERROR",
             "tags": [
@@ -76704,61 +74548,8 @@
           "kind": "fail",
           "level": "error",
           "message": {
-            "text": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs.",
-            "markdown": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/statistic/ActionTracker.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 27,
-                  "startColumn": 25,
-                  "charOffset": 1129,
-                  "charLength": 13,
-                  "snippet": {
-                    "text": "EventLogGroup"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 25,
-                  "startColumn": 1,
-                  "charOffset": 1026,
-                  "charLength": 390,
-                  "snippet": {
-                    "text": "internal class ActionTracker : CounterUsagesCollector() {\n  companion object {\n    private val GROUP = EventLogGroup(\"vim.actions\", 1)\n    private val TRACKED_ACTIONS = GROUP.registerEvent(\"tracked\", EventFields.StringValidatedByCustomRule(\"action_id\", \"action\"))\n    private val COPIED_ACTIONS = GROUP.registerEvent(\"copied\", EventFields.StringValidatedByCustomRule(\"action_id\", \"action\"))"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "57dffb87b5ad1fe863e5b053d9f09e16bbc09c7cb2317c0a4effdb955f58ee7d"
-          },
-          "properties": {
-            "ideaSeverity": "ERROR",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MissingRecentApi",
-          "kind": "fail",
-          "level": "error",
-          "message": {
-            "text": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs.",
-            "markdown": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs."
+            "text": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs.",
+            "markdown": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs."
           },
           "locations": [
             {
@@ -76796,8 +74587,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "22f46e28646cbfae1834242ece404ce061d3371cf7736a046a7ec817c8c6c703"
+            "equalIndicator/v1": "47dfffdfce84780b06478b1e749bd2c92312760883bf06f87d1f67b980221bbd"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "ERROR",
             "tags": [
@@ -76810,8 +74602,8 @@
           "kind": "fail",
           "level": "error",
           "message": {
-            "text": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs.",
-            "markdown": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs."
+            "text": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs.",
+            "markdown": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs."
           },
           "locations": [
             {
@@ -76849,8 +74641,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "3ddab678843d73b166ef6104f90948aaf1891421ea6d2f2bf33a0c9823ef3ea4"
+            "equalIndicator/v1": "ea04f5aba8fe0d8d915ffa481fcb0f4997365794e0f3c3438852fb81b77812e2"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "ERROR",
             "tags": [
@@ -76863,8 +74656,8 @@
           "kind": "fail",
           "level": "error",
           "message": {
-            "text": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs.",
-            "markdown": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 213.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs."
+            "text": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs.",
+            "markdown": "'EventLogGroup(java.lang.String, int, java.lang.String)' is available only since 222.2270.31 but the module is targeted for 222.0+. It may lead to compatibility problems with IDEs prior to 222.2270.31. Note that this method might have had a different full signature in the previous IDEs."
           },
           "locations": [
             {
@@ -76902,8 +74695,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "d23e0c40fd8ba92174117773127a526ff91df1c34669da5d71b13d9297a12487"
+            "equalIndicator/v1": "30e530917a5a77cbdac3ee455ecf12339272a600a835af535cf1e5e8967f860a"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "ERROR",
             "tags": [
@@ -76937,6 +74731,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "57501fb1482111cbe5182097777553ba6b35c6195a0172bc098522b62957abe8"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -76970,39 +74765,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "4769854752ed0c5559b401c09f4ee7ef69cc95bd083635e70ffc5bffb1d08730"
           },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "CheckDependencyLicenses",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "'guava' ('11.0.2') 'Apache-2.0' license is in the prohibited licenses list with project license 'GPL-2.0-only'",
-            "markdown": "'guava' ('11.0.2') 'Apache-2.0' license is in the prohibited licenses list with project license 'GPL-2.0-only'"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "IdeaVIM.vim-engine.main"
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "37c1cb10260903c8bbddb68a7ed2b13fbdec8c845558956df7d2d4e6615d0aee"
-          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -77036,6 +74799,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "55c07354f2900e37172d50ee348dc27faa966f076b3581509378504464fa31a2"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -77069,6 +74833,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "b12efffe6faf95425efb62909083525b66755908ed1b017802687a35bee7d198"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -77102,72 +74867,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "9aba4f74188f97c75a5ec8e262b879b726a970f76d851770a9cdf502834aa739"
           },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "CheckDependencyLicenses",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "'jsr305' ('1.3.9') 'Apache-2.0' license is in the prohibited licenses list with project license 'GPL-2.0-only'",
-            "markdown": "'jsr305' ('1.3.9') 'Apache-2.0' license is in the prohibited licenses list with project license 'GPL-2.0-only'"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "IdeaVIM.vim-engine.main"
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "ca27f4f7df87fc23d9682020a7cf0d061ecc0a2805bee1674a2ee9ae62a55ca2"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "CheckDependencyLicenses",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "'commons-lang3' ('3.12.0') 'Apache-2.0' license is in the prohibited licenses list with project license 'GPL-2.0-only'",
-            "markdown": "'commons-lang3' ('3.12.0') 'Apache-2.0' license is in the prohibited licenses list with project license 'GPL-2.0-only'"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "IdeaVIM.vim-engine.main"
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "beae08d4dbde1087f7f19371b5827894146b812f114d31c46fd0a689f399ca9c"
-          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -77201,6 +74901,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "32aac8ac8f10865aba834d1d64add8d820f3373ebb51540cfcd9a2cf7602afde"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -77234,6 +74935,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "56a10f0a2d18768ac256a45885631a0c21a7150dbef2b03eb11de2acbd3fd7eb"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -77246,8 +74948,8 @@
           "kind": "fail",
           "level": "warning",
           "message": {
-            "text": "'java' ('ideaIC-IC-222.3153.4-withSources') 'Apache-2.0' license is in the prohibited licenses list with project license 'GPL-2.0-only'",
-            "markdown": "'java' ('ideaIC-IC-222.3153.4-withSources') 'Apache-2.0' license is in the prohibited licenses list with project license 'GPL-2.0-only'"
+            "text": "'java' ('ideaIC-IC-222.3345.16-withSources') 'Apache-2.0' license is in the prohibited licenses list with project license 'GPL-2.0-only'",
+            "markdown": "'java' ('ideaIC-IC-222.3345.16-withSources') 'Apache-2.0' license is in the prohibited licenses list with project license 'GPL-2.0-only'"
           },
           "locations": [
             {
@@ -77265,8 +74967,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "e1b11652887c721213864f2a3577dffc76a3edcb57cae0a1f63b749c62faf3a6"
+            "equalIndicator/v1": "0e277580e9d274874efc41ea9bbd0de593a9505a2fca12d5637f0fc6073fcd05"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -77279,8 +74982,8 @@
           "kind": "fail",
           "level": "warning",
           "message": {
-            "text": "'yaml' ('ideaIC-IC-222.3153.4-withSources') 'Apache-2.0' license is in the prohibited licenses list with project license 'GPL-2.0-only'",
-            "markdown": "'yaml' ('ideaIC-IC-222.3153.4-withSources') 'Apache-2.0' license is in the prohibited licenses list with project license 'GPL-2.0-only'"
+            "text": "'yaml' ('ideaIC-IC-222.3345.16-withSources') 'Apache-2.0' license is in the prohibited licenses list with project license 'GPL-2.0-only'",
+            "markdown": "'yaml' ('ideaIC-IC-222.3345.16-withSources') 'Apache-2.0' license is in the prohibited licenses list with project license 'GPL-2.0-only'"
           },
           "locations": [
             {
@@ -77298,8 +75001,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "6c7956e1308f605c7663cb052fe91b32cb25e2ce31aa5a9db2482dfa1b59c378"
+            "equalIndicator/v1": "d429279fa0b8a54202ceb48402ba6db75b36f4489fe7bddc3fe97493072ed486"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -77333,6 +75037,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "b54e2f9694df24243ff4d9df6cfcaf47ae664c73201acfa438020a1afecbe236"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -77366,6 +75071,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "45eb98a6552d676efab520dc2ae46b21fc0f62838af0a36695e9d3041e01aaea"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -77399,6 +75105,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "b7a5b75de5870dd93700d18a533e75f5715b0618a3f487450ec9043a08ca2fa4"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -77432,6 +75139,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "b9e738ce40a6f50c7ad25cea6fc921ff6e0ac8eaf97642c6cabede56217f7587"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -77485,6 +75193,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "3d3dbbf8f2cda7fd9efc736154e282f2c5998a546660f5749a63392983149cd3"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -77538,6 +75247,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "c731cd830ebc81ad87e7f1afc2c84049aab752b4f0f23e9229d97c9a2aefdf3c"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -77591,6 +75301,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "4bb791b0b952dd405d1ac9b74858fc64538ba6dde7d4d24eea19abe7189d0a59"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -77644,59 +75355,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "a5763c7d7de834e5a547f1d91f8aed955af27f367538a4223a23519593f9d221"
           },
-          "properties": {
-            "ideaSeverity": "WEAK WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MayBeConstant",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Might be 'const'",
-            "markdown": "Might be 'const'"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimSearchGroup.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 46,
-                  "startColumn": 9,
-                  "charOffset": 1709,
-                  "charLength": 7,
-                  "snippet": {
-                    "text": "RE_BOTH"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 44,
-                  "startColumn": 1,
-                  "charOffset": 1648,
-                  "charLength": 160,
-                  "snippet": {
-                    "text": "    val RE_SUBST = 1 // Save/use substitute pattern\n\n    val RE_BOTH = 2 // Save to both patterns\n\n    val RE_LAST = 2 // Use last used pattern if \"pat\" is NULL"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "044f5d422dfacce376dab0a104cd5ce4a7af733b8f5e785e67db88ebb0aa7af3"
-          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -77750,6 +75409,61 @@
           "partialFingerprints": {
             "equalIndicator/v1": "b782545bea9a380ea044a1c6f4d232ed9d431177c9aed72987325ab80454308a"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WEAK WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "MayBeConstant",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Might be 'const'",
+            "markdown": "Might be 'const'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimSearchGroup.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 46,
+                  "startColumn": 9,
+                  "charOffset": 1709,
+                  "charLength": 7,
+                  "snippet": {
+                    "text": "RE_BOTH"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 44,
+                  "startColumn": 1,
+                  "charOffset": 1648,
+                  "charLength": 160,
+                  "snippet": {
+                    "text": "    val RE_SUBST = 1 // Save/use substitute pattern\n\n    val RE_BOTH = 2 // Save to both patterns\n\n    val RE_LAST = 2 // Use last used pattern if \"pat\" is NULL"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "044f5d422dfacce376dab0a104cd5ce4a7af733b8f5e785e67db88ebb0aa7af3"
+          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -77803,6 +75517,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "53c575058d4933f164e1520709882f3b210785b0e9af8dcf7a02130f63835b30"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -77856,6 +75571,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "3e70262c99752d29503b0c30a7945681abaa8ed70ead7135c40dd20bd655a587"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -77909,59 +75625,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "e5f57d541e0d55ed28169e20ea5e6cdf2946616875fe3f71b362702a55ccd610"
           },
-          "properties": {
-            "ideaSeverity": "WEAK WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "MayBeConstant",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "'const' might be used instead of '@JvmField'",
-            "markdown": "'const' might be used instead of '@JvmField'"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/history/HistoryConstants.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 5,
-                  "startColumn": 7,
-                  "charOffset": 84,
-                  "charLength": 6,
-                  "snippet": {
-                    "text": "SEARCH"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 3,
-                  "startColumn": 1,
-                  "charOffset": 40,
-                  "charLength": 95,
-                  "snippet": {
-                    "text": "object HistoryConstants {\n  @JvmField\n  val SEARCH = \"search\"\n  @JvmField\n  val COMMAND = \"cmd\""
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "09ae5d80973bb981e9818b905d2af2f0ba5efcc8f6890fba0c179724130bf946"
-          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -78015,6 +75679,61 @@
           "partialFingerprints": {
             "equalIndicator/v1": "6a145fdf148e52f358717ea72aa91cc1adb80adde65b1c93f7eb78eb32c165a5"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WEAK WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "MayBeConstant",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "'const' might be used instead of '@JvmField'",
+            "markdown": "'const' might be used instead of '@JvmField'"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/history/HistoryConstants.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 5,
+                  "startColumn": 7,
+                  "charOffset": 84,
+                  "charLength": 6,
+                  "snippet": {
+                    "text": "SEARCH"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 3,
+                  "startColumn": 1,
+                  "charOffset": 40,
+                  "charLength": 95,
+                  "snippet": {
+                    "text": "object HistoryConstants {\n  @JvmField\n  val SEARCH = \"search\"\n  @JvmField\n  val COMMAND = \"cmd\""
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "09ae5d80973bb981e9818b905d2af2f0ba5efcc8f6890fba0c179724130bf946"
+          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -78038,9 +75757,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 85,
-                  "startColumn": 16,
-                  "charOffset": 2666,
+                  "startLine": 84,
+                  "startColumn": 12,
+                  "charOffset": 2412,
                   "charLength": 35,
                   "snippet": {
                     "text": "ch.digitToIntOrNull(16) ?: -1 != -1"
@@ -78048,12 +75767,12 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 83,
+                  "startLine": 82,
                   "startColumn": 1,
-                  "charOffset": 2615,
-                  "charLength": 93,
+                  "charOffset": 2367,
+                  "charLength": 85,
                   "snippet": {
-                    "text": "\n    fun isHex(ch: Char): Boolean {\n        return ch.digitToIntOrNull(16) ?: -1 != -1\n    }\n"
+                    "text": "\n  fun isHex(ch: Char): Boolean {\n    return ch.digitToIntOrNull(16) ?: -1 != -1\n  }\n"
                   }
                 }
               },
@@ -78066,8 +75785,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "7b5aea0896440e17ba40e0ac42d2282caa4999b462cc283e3a1cff8db66753d2"
+            "equalIndicator/v1": "8494b4c0e6377dd7e85b64754af3ea17527e688d95fe0c614ec86258a7145d0c"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -78091,9 +75811,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 89,
-                  "startColumn": 16,
-                  "charOffset": 2761,
+                  "startLine": 88,
+                  "startColumn": 12,
+                  "charOffset": 2499,
                   "charLength": 34,
                   "snippet": {
                     "text": "ch.digitToIntOrNull(8) ?: -1 != -1"
@@ -78101,12 +75821,12 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 87,
+                  "startLine": 86,
                   "startColumn": 1,
-                  "charOffset": 2708,
-                  "charLength": 94,
+                  "charOffset": 2452,
+                  "charLength": 86,
                   "snippet": {
-                    "text": "\n    fun isOctal(ch: Char): Boolean {\n        return ch.digitToIntOrNull(8) ?: -1 != -1\n    }\n"
+                    "text": "\n  fun isOctal(ch: Char): Boolean {\n    return ch.digitToIntOrNull(8) ?: -1 != -1\n  }\n"
                   }
                 }
               },
@@ -78119,8 +75839,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "eeff822d7ceeae7a5e3e58fc1df08e86421b813eb72e46817df85e572863a2a2"
+            "equalIndicator/v1": "3a1f046a37788a0855749522c246db3777247bda5a922262dfbf3e2c9cdd5304"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -78128,6 +75849,60 @@
             ]
           }
         },
+        {
+          "ruleId": "LocalVariableName",
+          "kind": "fail",
+          "level": "note",
+          "message": {
+            "text": "Local variable name 'AST' should start with a lowercase letter",
+            "markdown": "Local variable name `AST` should start with a lowercase letter"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/vimscript/parser/VimscriptParser.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 77,
+                  "startColumn": 9,
+                  "charOffset": 3106,
+                  "charLength": 3,
+                  "snippet": {
+                    "text": "AST"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 75,
+                  "startColumn": 1,
+                  "charOffset": 2978,
+                  "charLength": 231,
+                  "snippet": {
+                    "text": "  override fun parseCommand(command: String): Command? {\n    val parser = getParser(addNewlineIfMissing(command), true)\n    val AST: ParseTree = parser.command()\n    if (linesWithErrors.isNotEmpty()) {\n      linesWithErrors.clear()"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "42b789e54139c54608b74011417fee15320356f3edb7fc9b5c50a6d5ee5af623"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WEAK WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
         {
           "ruleId": "LocalVariableName",
           "kind": "fail",
@@ -78174,6 +75949,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "f4ccc356623eff4ccb44bd40f8b31d22d9aae9bd9ab0d51b9d3cb36446013475"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -78227,6 +76003,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "b85b5e5891b244ecb98c0e94eeea0953c53b98dc45a3287019844cfe203490f8"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -78280,59 +76057,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "2a38616b0c712d19e4b1e3124c7b8beff16ec00f4179868ebe639f7f3c277808"
           },
-          "properties": {
-            "ideaSeverity": "WEAK WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "LocalVariableName",
-          "kind": "fail",
-          "level": "note",
-          "message": {
-            "text": "Local variable name 'AST' should start with a lowercase letter",
-            "markdown": "Local variable name `AST` should start with a lowercase letter"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/vimscript/parser/VimscriptParser.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 77,
-                  "startColumn": 9,
-                  "charOffset": 3106,
-                  "charLength": 3,
-                  "snippet": {
-                    "text": "AST"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 75,
-                  "startColumn": 1,
-                  "charOffset": 2978,
-                  "charLength": 231,
-                  "snippet": {
-                    "text": "  override fun parseCommand(command: String): Command? {\n    val parser = getParser(addNewlineIfMissing(command), true)\n    val AST: ParseTree = parser.command()\n    if (linesWithErrors.isNotEmpty()) {\n      linesWithErrors.clear()"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "42b789e54139c54608b74011417fee15320356f3edb7fc9b5c50a6d5ee5af623"
-          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -78386,6 +76111,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "20817e163cd4e2154f3fdbb0188f6180ee59711bf1da3fb75f33d972e2598984"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
@@ -78398,33 +76124,33 @@
           "kind": "fail",
           "level": "warning",
           "message": {
-            "text": "Function \"addLeafs\" is never used",
-            "markdown": "Function \"addLeafs\" is never used"
+            "text": "Function \"enterVisualMode\" is never used",
+            "markdown": "Function \"enterVisualMode\" is never used"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/key/NodesHelper.kt",
+                  "uri": "src/main/java/com/maddyhome/idea/vim/group/visual/VisualMotionGroup.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 25,
-                  "startColumn": 17,
-                  "charOffset": 953,
-                  "charLength": 8,
+                  "startLine": 49,
+                  "startColumn": 7,
+                  "charOffset": 1815,
+                  "charLength": 15,
                   "snippet": {
-                    "text": "addLeafs"
+                    "text": "enterVisualMode"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 23,
+                  "startLine": 47,
                   "startColumn": 1,
-                  "charOffset": 890,
-                  "charLength": 164,
+                  "charOffset": 1765,
+                  "charLength": 196,
                   "snippet": {
-                    "text": "import com.maddyhome.idea.vim.common.addLeafs\n\nfun <T> Node<T>.addLeafs(keys: String, actionHolder: T) {\n  addLeafs(injector.parser.parseKeys(keys), actionHolder)\n}"
+                    "text": "   * Please see: https://jb.gg/zo8n0r\n   */\n  fun enterVisualMode(editor: Editor, subMode: CommandState.SubMode? = null): Boolean {\n    return this.enterVisualMode(editor.vim, subMode?.engine)\n  }"
                   }
                 }
               },
@@ -78437,8 +76163,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "ee40caa2e39a57fd7a5af1026f0dda5b85c50a54a4c512a637ec01933d08ee32"
+            "equalIndicator/v1": "52f51e876ef8bfd0b0144388f7a17befe2ca878628a70dcd52fb876b78ae2886"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -78451,8 +76178,8 @@
           "kind": "fail",
           "level": "warning",
           "message": {
-            "text": "Property \"inSingleCommandMode\" is never used",
-            "markdown": "Property \"inSingleCommandMode\" is never used"
+            "text": "Property \"isEndAllowed\" is never used",
+            "markdown": "Property \"isEndAllowed\" is never used"
           },
           "locations": [
             {
@@ -78462,75 +76189,22 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 96,
-                  "startColumn": 12,
-                  "charOffset": 3563,
-                  "charLength": 19,
-                  "snippet": {
-                    "text": "inSingleCommandMode"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 94,
-                  "startColumn": 1,
-                  "charOffset": 3515,
-                  "charLength": 110,
-                  "snippet": {
-                    "text": "\n@get:JvmName(\"inSingleCommandMode\")\nval Editor.inSingleCommandMode: Boolean\n  get() = this.mode.inSingleMode\n"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "685d3868397fde83733e893677be4d808bf2800c872c6aeb68b79724fffec87a"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UnusedSymbol",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Property \"inRepeatMode\" is never used",
-            "markdown": "Property \"inRepeatMode\" is never used"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/helper/CommandStateExtensions.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 77,
-                  "startColumn": 12,
-                  "charOffset": 2969,
+                  "startLine": 72,
+                  "startColumn": 23,
+                  "charOffset": 2922,
                   "charLength": 12,
                   "snippet": {
-                    "text": "inRepeatMode"
+                    "text": "isEndAllowed"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 75,
+                  "startLine": 70,
                   "startColumn": 1,
-                  "charOffset": 2928,
-                  "charLength": 108,
+                  "charOffset": 2860,
+                  "charLength": 119,
                   "snippet": {
-                    "text": "\n@get:JvmName(\"inRepeatMode\")\nval Editor.inRepeatMode\n  get() = this.vim.commandState.isDotRepeatInProgress\n"
+                    "text": " * Please see: https://jb.gg/zo8n0r\n */\nval CommandState.Mode.isEndAllowed: Boolean\n  get() = this.engine.isEndAllowed\n"
                   }
                 }
               },
@@ -78543,8 +76217,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "b4bc16b23d1fadeab596f70a2319fd636fe1e9ac403f60a57951da27bf0a0f15"
+            "equalIndicator/v1": "5e03c2ea5971e83730fbc16356d4024932771e30add657a4923fce8ebdcb7774"
           },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -78568,9 +76243,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 107,
-                  "startColumn": 23,
-                  "charOffset": 3913,
+                  "startLine": 124,
+                  "startColumn": 26,
+                  "charOffset": 4564,
                   "charLength": 18,
                   "snippet": {
                     "text": "inSingleNormalMode"
@@ -78578,12 +76253,12 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 105,
+                  "startLine": 122,
                   "startColumn": 1,
-                  "charOffset": 3855,
-                  "charLength": 153,
+                  "charOffset": 4503,
+                  "charLength": 159,
                   "snippet": {
-                    "text": "\n@get:JvmName(\"inSingleNormalMode\")\nval CommandState.Mode.inSingleNormalMode: Boolean\n  get() = when (this) {\n    CommandState.Mode.INSERT_NORMAL -> true"
+                    "text": "\n@get:JvmName(\"inSingleNormalMode\")\nval VimStateMachine.Mode.inSingleNormalMode: Boolean\n  get() = when (this) {\n    VimStateMachine.Mode.INSERT_NORMAL -> true"
                   }
                 }
               },
@@ -78596,8 +76271,117 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "3fe8f62a607ecf8be2534170da511637983365b533e2f86bfb1cf74de0b034ee"
+            "equalIndicator/v1": "0f3d40abb84837f69e9b12037164d5dfcdf887e87af90ccb81a4d996c4df5858"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Property \"inRepeatMode\" is never used",
+            "markdown": "Property \"inRepeatMode\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/helper/CommandStateExtensions.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 94,
+                  "startColumn": 12,
+                  "charOffset": 3563,
+                  "charLength": 12,
+                  "snippet": {
+                    "text": "inRepeatMode"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 92,
+                  "startColumn": 1,
+                  "charOffset": 3522,
+                  "charLength": 111,
+                  "snippet": {
+                    "text": "\n@get:JvmName(\"inRepeatMode\")\nval Editor.inRepeatMode\n  get() = this.vim.vimStateMachine.isDotRepeatInProgress\n"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "4c473e0e37265e2408e857d3587be43d5d4a2a60b36246dc7442089ab16447ab"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Property \"inSingleCommandMode\" is never used",
+            "markdown": "Property \"inSingleCommandMode\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/helper/CommandStateExtensions.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 113,
+                  "startColumn": 12,
+                  "charOffset": 4193,
+                  "charLength": 19,
+                  "snippet": {
+                    "text": "inSingleCommandMode"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 111,
+                  "startColumn": 1,
+                  "charOffset": 4145,
+                  "charLength": 116,
+                  "snippet": {
+                    "text": "\n@get:JvmName(\"inSingleCommandMode\")\nval Editor.inSingleCommandMode: Boolean\n  get() = this.editorMode.inSingleMode\n"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "e4b7f362391cc67760af13e5a88d07d16b2438d0bc10b27b5e72c25dffd02e5a"
+          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -78651,6 +76435,115 @@
           "partialFingerprints": {
             "equalIndicator/v1": "cfef7361af9720cd222a0dd2e101c3adc10baea236fd18b3cb8a999518e62a94"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Object \"StringHelper\" is never used",
+            "markdown": "Object \"StringHelper\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/helper/StringHelper.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 29,
+                  "startColumn": 8,
+                  "charOffset": 1032,
+                  "charLength": 12,
+                  "snippet": {
+                    "text": "StringHelper"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 27,
+                  "startColumn": 1,
+                  "charOffset": 985,
+                  "charLength": 125,
+                  "snippet": {
+                    "text": " * Please see: https://jb.gg/zo8n0r\n */\nobject StringHelper {\n  @JvmStatic\n  fun parseKeys(string: String): List<KeyStroke> {"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "fc970b0907867bc2069bfa1f0f0bbd1f8e981336f1f96f6766f09dcdee1bf8ee"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Function \"isCloseKeyStroke\" is never used",
+            "markdown": "Function \"isCloseKeyStroke\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/helper/StringHelper.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 42,
+                  "startColumn": 7,
+                  "charOffset": 1388,
+                  "charLength": 16,
+                  "snippet": {
+                    "text": "isCloseKeyStroke"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 40,
+                  "startColumn": 1,
+                  "charOffset": 1368,
+                  "charLength": 107,
+                  "snippet": {
+                    "text": "\n  @JvmStatic\n  fun isCloseKeyStroke(stroke: KeyStroke): Boolean {\n    return stroke.isCloseKeyStroke()\n  }"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "272007e73a3b7a67a9dd95eef1bbd0e1eca92a422312ba2846e8cda7b0fc0fb2"
+          },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -78676,7 +76569,7 @@
                 "region": {
                   "startLine": 52,
                   "startColumn": 5,
-                  "charOffset": 2282,
+                  "charOffset": 2285,
                   "charLength": 11,
                   "snippet": {
                     "text": "changeRange"
@@ -78686,7 +76579,7 @@
                 "contextRegion": {
                   "startLine": 50,
                   "startColumn": 1,
-                  "charOffset": 2227,
+                  "charOffset": 2230,
                   "charLength": 101,
                   "snippet": {
                     "text": "import com.maddyhome.idea.vim.options.OptionScope\n\nfun changeRange(\n  editor: Editor,\n  caret: Caret,"
@@ -78702,8 +76595,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "226d4c9a10f7cffb8b43b51bceba043973cf72fa041a8d9868a1a6d18ae1b462"
+            "equalIndicator/v1": "f537fc8c5785f09f59d966146dcbb68919feb556ae816a7b5352b6fc26e6f98a"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -78757,59 +76651,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "eac1e484987e98b4f182eeff581585db9ef59e5378fd6e4e01f95d0979592453"
           },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UnusedSymbol",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Property \"originalEditor\" is never used",
-            "markdown": "Property \"originalEditor\" is never used"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/main/java/com/maddyhome/idea/vim/newapi/IjVimEditor.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 72,
-                  "startColumn": 7,
-                  "charOffset": 3451,
-                  "charLength": 14,
-                  "snippet": {
-                    "text": "originalEditor"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 70,
-                  "startColumn": 1,
-                  "charOffset": 3333,
-                  "charLength": 188,
-                  "snippet": {
-                    "text": "  // TBH, I don't like the names. Need to think a bit more about this\n  val editor = editor.getTopLevelEditor()\n  val originalEditor = editor\n\n  override val lfMakesNewLine: Boolean = true"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "9db688dec3173e93db9a8d5a1f5bd490524c362d8766e2ef6b3d77a5fdd17262"
-          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -78863,6 +76705,61 @@
           "partialFingerprints": {
             "equalIndicator/v1": "32325ce9b5430507dd4eed4d21cdf70e5a89a90ecf781786d19b0b760905b26a"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Property \"originalEditor\" is never used",
+            "markdown": "Property \"originalEditor\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/newapi/IjVimEditor.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 74,
+                  "startColumn": 7,
+                  "charOffset": 3517,
+                  "charLength": 14,
+                  "snippet": {
+                    "text": "originalEditor"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 72,
+                  "startColumn": 1,
+                  "charOffset": 3399,
+                  "charLength": 188,
+                  "snippet": {
+                    "text": "  // TBH, I don't like the names. Need to think a bit more about this\n  val editor = editor.getTopLevelEditor()\n  val originalEditor = editor\n\n  override val lfMakesNewLine: Boolean = true"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "ca1aea228a25dd4c5ab0611997adc998c8f0c79689b1a54dc7045255655aa661"
+          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -78916,6 +76813,655 @@
           "partialFingerprints": {
             "equalIndicator/v1": "0821e160c782affd2a6dd9955629d721d66b60fa2ec11c658e21031f965bd0e9"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Function \"toRegex\" is never used",
+            "markdown": "Function \"toRegex\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/option/OptionsManager.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 49,
+                  "startColumn": 7,
+                  "charOffset": 2194,
+                  "charLength": 7,
+                  "snippet": {
+                    "text": "toRegex"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 47,
+                  "startColumn": 1,
+                  "charOffset": 2132,
+                  "charLength": 119,
+                  "snippet": {
+                    "text": "\nclass KeywordOption(val helper: KeywordOptionHelper) {\n  fun toRegex(): List<String> {\n    return helper.toRegex()\n  }"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "2b4f95689f44a385ca04475a0eebedc37b63fd551a5aa17223a4056a044ce99a"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Object \"OptionsManager\" is never used",
+            "markdown": "Object \"OptionsManager\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/option/OptionsManager.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 35,
+                  "startColumn": 8,
+                  "charOffset": 1503,
+                  "charLength": 14,
+                  "snippet": {
+                    "text": "OptionsManager"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 33,
+                  "startColumn": 1,
+                  "charOffset": 1456,
+                  "charLength": 198,
+                  "snippet": {
+                    "text": " * Please see: https://jb.gg/zo8n0r\n */\nobject OptionsManager {\n  val ignorecase: ToggleOption\n    get() = (injector.optionService as IjVimOptionService).getRawOption(ignorecaseName) as ToggleOption"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "99fdee2229bc49542b504ca999151219f2b8c9ab4881868b85546c2a917f8a81"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Property \"iskeyword\" is never used",
+            "markdown": "Property \"iskeyword\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/option/OptionsManager.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 44,
+                  "startColumn": 7,
+                  "charOffset": 2058,
+                  "charLength": 9,
+                  "snippet": {
+                    "text": "iskeyword"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 42,
+                  "startColumn": 1,
+                  "charOffset": 1917,
+                  "charLength": 214,
+                  "snippet": {
+                    "text": "  val timeoutlen: NumberOption\n    get() = (injector.optionService as IjVimOptionService).getRawOption(timeoutlenName) as NumberOption\n  val iskeyword: KeywordOption\n    get() = KeywordOption(KeywordOptionHelper)\n}"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "66e14dcda79490ec89e01f7e0afcad5bab4d528a3048953c1890e0564ca30e35"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Property \"timeout\" is never used",
+            "markdown": "Property \"timeout\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/option/OptionsManager.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 40,
+                  "startColumn": 7,
+                  "charOffset": 1794,
+                  "charLength": 7,
+                  "snippet": {
+                    "text": "timeout"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 38,
+                  "startColumn": 1,
+                  "charOffset": 1655,
+                  "charLength": 292,
+                  "snippet": {
+                    "text": "  val smartcase: ToggleOption\n    get() = (injector.optionService as IjVimOptionService).getRawOption(smartcaseName) as ToggleOption\n  val timeout: ToggleOption\n    get() = (injector.optionService as IjVimOptionService).getRawOption(timeoutName) as ToggleOption\n  val timeoutlen: NumberOption"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "8ae706e897b6d7f5d88832e7e76849fa5fd76da0532f19b0e3f95108c12a3e96"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Property \"timeoutlen\" is never used",
+            "markdown": "Property \"timeoutlen\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/option/OptionsManager.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 42,
+                  "startColumn": 7,
+                  "charOffset": 1923,
+                  "charLength": 10,
+                  "snippet": {
+                    "text": "timeoutlen"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 40,
+                  "startColumn": 1,
+                  "charOffset": 1788,
+                  "charLength": 294,
+                  "snippet": {
+                    "text": "  val timeout: ToggleOption\n    get() = (injector.optionService as IjVimOptionService).getRawOption(timeoutName) as ToggleOption\n  val timeoutlen: NumberOption\n    get() = (injector.optionService as IjVimOptionService).getRawOption(timeoutlenName) as NumberOption\n  val iskeyword: KeywordOption"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "1d3fd9237b70e9c96cb17bcf2b8fdf0f4992d24525f17a69f4efc921e60da68d"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Property \"smartcase\" is never used",
+            "markdown": "Property \"smartcase\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/option/OptionsManager.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 38,
+                  "startColumn": 7,
+                  "charOffset": 1661,
+                  "charLength": 9,
+                  "snippet": {
+                    "text": "smartcase"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 36,
+                  "startColumn": 1,
+                  "charOffset": 1520,
+                  "charLength": 295,
+                  "snippet": {
+                    "text": "  val ignorecase: ToggleOption\n    get() = (injector.optionService as IjVimOptionService).getRawOption(ignorecaseName) as ToggleOption\n  val smartcase: ToggleOption\n    get() = (injector.optionService as IjVimOptionService).getRawOption(smartcaseName) as ToggleOption\n  val timeout: ToggleOption"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "581e1cd0c4010def0aca677dc7d02eb56f3d122876ec91196f8770830ddb3e2a"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Object \"StrictMode\" is never used",
+            "markdown": "Object \"StrictMode\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/option/OptionsManager.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 54,
+                  "startColumn": 8,
+                  "charOffset": 2262,
+                  "charLength": 10,
+                  "snippet": {
+                    "text": "StrictMode"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 52,
+                  "startColumn": 1,
+                  "charOffset": 2252,
+                  "charLength": 148,
+                  "snippet": {
+                    "text": "}\n\nobject StrictMode {\n  fun fail(message: String) {\n    if (injector.optionService.isSet(OptionScope.GLOBAL, OptionConstants.ideastrictmodeName)) {"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "7c058874f36435d23da9fcc4f3fcd000e6c841ae5e984fbeaca56d82c293bff9"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Class \"WithCallback\" is never used",
+            "markdown": "Class \"WithCallback\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/extension/VimExtensionHandler.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 38,
+                  "startColumn": 18,
+                  "charOffset": 1382,
+                  "charLength": 12,
+                  "snippet": {
+                    "text": "WithCallback"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 36,
+                  "startColumn": 1,
+                  "charOffset": 1312,
+                  "charLength": 140,
+                  "snippet": {
+                    "text": "  fun execute(editor: Editor, context: DataContext)\n\n  abstract class WithCallback : ExtensionHandler.WithCallback(), VimExtensionHandler\n}\n"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "0c73483e6cc0d3fa17cd6434dcd2c7284395579775b5fadb1a21bf24b158298d"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Property \"mappingState\" is never used",
+            "markdown": "Property \"mappingState\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/command/CommandState.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 40,
+                  "startColumn": 7,
+                  "charOffset": 1301,
+                  "charLength": 12,
+                  "snippet": {
+                    "text": "mappingState"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 38,
+                  "startColumn": 1,
+                  "charOffset": 1259,
+                  "charLength": 102,
+                  "snippet": {
+                    "text": "    get() = machine.commandBuilder\n\n  val mappingState: MappingState\n    get() = machine.mappingState\n"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "01ac090e9d6fc01021ff4190db5cdff62f8acc29a451a5e0bbd43350a7b4c01e"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Property \"isOperatorPending\" is never used",
+            "markdown": "Property \"isOperatorPending\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/command/CommandState.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 31,
+                  "startColumn": 7,
+                  "charOffset": 1097,
+                  "charLength": 17,
+                  "snippet": {
+                    "text": "isOperatorPending"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 29,
+                  "startColumn": 1,
+                  "charOffset": 1031,
+                  "charLength": 131,
+                  "snippet": {
+                    "text": "class CommandState(private val machine: VimStateMachine) {\n\n  val isOperatorPending: Boolean\n    get() = machine.isOperatorPending\n"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "50bdb93d8e2f69c1b1f7ace5d72a4441601609f90f2438401a236ee36d183c1b"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Property \"commandBuilder\" is never used",
+            "markdown": "Property \"commandBuilder\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/command/CommandState.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 37,
+                  "startColumn": 7,
+                  "charOffset": 1228,
+                  "charLength": 14,
+                  "snippet": {
+                    "text": "commandBuilder"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 35,
+                  "startColumn": 1,
+                  "charOffset": 1193,
+                  "charLength": 101,
+                  "snippet": {
+                    "text": "    get() = machine.mode.ij\n\n  val commandBuilder: CommandBuilder\n    get() = machine.commandBuilder\n"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "5ce8ad16f241a89f8304b8f3e737c92dec7c5115f5c6b2ad72003c4a5b7d6aef"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Function \"addLeafs\" is never used",
+            "markdown": "Function \"addLeafs\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/extension/nerdtree/NerdTree.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 564,
+                  "startColumn": 25,
+                  "charOffset": 22244,
+                  "charLength": 8,
+                  "snippet": {
+                    "text": "addLeafs"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 562,
+                  "startColumn": 1,
+                  "charOffset": 22217,
+                  "charLength": 128,
+                  "snippet": {
+                    "text": "}\n\nprivate fun <T> Node<T>.addLeafs(keys: String, actionHolder: T) {\n  addLeafs(injector.parser.parseKeys(keys), actionHolder)\n}"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "7e1d8937c41e815fd6de9b79777f053281ffb33b17c52e453a856178911f4138"
+          },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -78941,7 +77487,7 @@
                 "region": {
                   "startLine": 20,
                   "startColumn": 7,
-                  "charOffset": 617,
+                  "charOffset": 618,
                   "charLength": 10,
                   "snippet": {
                     "text": "addProblem"
@@ -78951,7 +77497,7 @@
                 "contextRegion": {
                   "startLine": 18,
                   "startColumn": 1,
-                  "charOffset": 606,
+                  "charOffset": 607,
                   "charLength": 96,
                   "snippet": {
                     "text": "  }\n\n  fun addProblem(type: String, problem: Problem) {\n    problems.putValue(type, problem)\n  }"
@@ -78967,8 +77513,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "e66f6f83475d802bc5e87bf9c5bf3f0fe5a47032ad2991261ea6ee6615cedaa4"
+            "equalIndicator/v1": "b26e37c24752ba9c8511cb5820033a6a2d0255953cba87df9b789b86e9ec86b4"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -78994,7 +77541,7 @@
                 "region": {
                   "startLine": 24,
                   "startColumn": 7,
-                  "charOffset": 710,
+                  "charOffset": 711,
                   "charLength": 21,
                   "snippet": {
                     "text": "findIncorrectMappings"
@@ -79004,7 +77551,7 @@
                 "contextRegion": {
                   "startLine": 22,
                   "startColumn": 1,
-                  "charOffset": 699,
+                  "charOffset": 700,
                   "charLength": 134,
                   "snippet": {
                     "text": "  }\n\n  fun findIncorrectMappings(): List<Problem> {\n    val problems = ArrayList<Problem>()\n    MappingMode.values().forEach { mode ->"
@@ -79020,8 +77567,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "737c7fb9d5efcc054ee4e617022eedea11cf4ed49c980dce9854722b04377ddf"
+            "equalIndicator/v1": "65663b86f12a6ca4ad253ac0c62156efa9c8000f8c17acecfdfe2686e5e3732b"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -79075,6 +77623,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "486dfe3996507a02d103eb3140ceae0122c71cac819cb43e59afb2bb87ffb01a"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -79098,9 +77647,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 221,
+                  "startLine": 224,
                   "startColumn": 3,
-                  "charOffset": 8299,
+                  "charOffset": 8365,
                   "charLength": 9,
                   "snippet": {
                     "text": "IDEAVIMRC"
@@ -79108,9 +77657,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 219,
+                  "startLine": 222,
                   "startColumn": 1,
-                  "charOffset": 8289,
+                  "charOffset": 8355,
                   "charLength": 46,
                   "snippet": {
                     "text": "\n  CMD,\n  IDEAVIMRC,\n  ACTION_COMMAND,\n  PLUG,"
@@ -79126,114 +77675,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "4f5a8aa4cefe634553fa62dc2a7f9e819cdf31580003a1f0ec4e7c27c1b682bc"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UnusedSymbol",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Property \"functionAlias\" is never used",
-            "markdown": "Property \"functionAlias\" is never used"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/test/java/org/jetbrains/plugins/ideavim/ex/parser/statements/FunctionDeclarationTests.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 46,
-                  "startColumn": 9,
-                  "charOffset": 1782,
-                  "charLength": 13,
-                  "snippet": {
-                    "text": "functionAlias"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 44,
-                  "startColumn": 1,
-                  "charOffset": 1758,
-                  "charLength": 144,
-                  "snippet": {
-                    "text": "\n    @JvmStatic\n    val functionAlias = listOf(\"fu\", \"fun\", \"func\", \"funct\", \"functi\", \"functio\", \"function\")\n      @DataPoints(\"function\") get\n"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.test",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "16510ad8bc135f16936e59ce3112302357573383460ed95c20607204316dca3c"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UnusedSymbol",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Property \"endfunctionAlias\" is never used",
-            "markdown": "Property \"endfunctionAlias\" is never used"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "src/test/java/org/jetbrains/plugins/ideavim/ex/parser/statements/FunctionDeclarationTests.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 50,
-                  "startColumn": 9,
-                  "charOffset": 1926,
-                  "charLength": 16,
-                  "snippet": {
-                    "text": "endfunctionAlias"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 48,
-                  "startColumn": 1,
-                  "charOffset": 1902,
-                  "charLength": 184,
-                  "snippet": {
-                    "text": "\n    @JvmStatic\n    val endfunctionAlias =\n      listOf(\"endf\", \"endfu\", \"endfun\", \"endfunc\", \"endfunct\", \"endfuncti\", \"endfunctio\", \"endfunction\")\n      @DataPoints(\"endfunction\") get"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.test",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "94f875b9e32f1bbbe3a22ff9cfec18b934e92c90f0cc4fb6500814ca162f746d"
+            "equalIndicator/v1": "e3d840deab34549c4c588cb303246d6a9807f78275ad70d087cac1db14e37ca0"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -79287,6 +77731,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "e920496bece0a942b763eaeed9af5b0adee95a9ef3965d9a50a068f03d6576cf"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -79299,33 +77744,33 @@
           "kind": "fail",
           "level": "warning",
           "message": {
-            "text": "Property \"finallyNames\" is never used",
-            "markdown": "Property \"finallyNames\" is never used"
+            "text": "Property \"endfunctionAlias\" is never used",
+            "markdown": "Property \"endfunctionAlias\" is never used"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "src/test/java/org/jetbrains/plugins/ideavim/ex/parser/statements/TryCatchTests.kt",
+                  "uri": "src/test/java/org/jetbrains/plugins/ideavim/ex/parser/statements/FunctionDeclarationTests.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 52,
-                  "startColumn": 9,
-                  "charOffset": 1763,
-                  "charLength": 12,
-                  "snippet": {
-                    "text": "finallyNames"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
                   "startLine": 50,
-                  "startColumn": 1,
-                  "charOffset": 1739,
-                  "charLength": 117,
+                  "startColumn": 9,
+                  "charOffset": 1926,
+                  "charLength": 16,
                   "snippet": {
-                    "text": "\n    @JvmStatic\n    val finallyNames = listOf(\"fina\", \"final\", \"finall\", \"finally\")\n      @DataPoints(\"finally\") get\n"
+                    "text": "endfunctionAlias"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 48,
+                  "startColumn": 1,
+                  "charOffset": 1902,
+                  "charLength": 184,
+                  "snippet": {
+                    "text": "\n    @JvmStatic\n    val endfunctionAlias =\n      listOf(\"endf\", \"endfu\", \"endfun\", \"endfunc\", \"endfunct\", \"endfuncti\", \"endfunctio\", \"endfunction\")\n      @DataPoints(\"endfunction\") get"
                   }
                 }
               },
@@ -79338,8 +77783,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "eb70dc8bc2dcacd92b92bb6fd0e9418e26fc281ba0f5220b8d41961b5adf6cde"
+            "equalIndicator/v1": "94f875b9e32f1bbbe3a22ff9cfec18b934e92c90f0cc4fb6500814ca162f746d"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -79352,33 +77798,33 @@
           "kind": "fail",
           "level": "warning",
           "message": {
-            "text": "Property \"catchNames\" is never used",
-            "markdown": "Property \"catchNames\" is never used"
+            "text": "Property \"functionAlias\" is never used",
+            "markdown": "Property \"functionAlias\" is never used"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "src/test/java/org/jetbrains/plugins/ideavim/ex/parser/statements/TryCatchTests.kt",
+                  "uri": "src/test/java/org/jetbrains/plugins/ideavim/ex/parser/statements/FunctionDeclarationTests.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 48,
+                  "startLine": 46,
                   "startColumn": 9,
-                  "charOffset": 1664,
-                  "charLength": 10,
+                  "charOffset": 1782,
+                  "charLength": 13,
                   "snippet": {
-                    "text": "catchNames"
+                    "text": "functionAlias"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 46,
+                  "startLine": 44,
                   "startColumn": 1,
-                  "charOffset": 1640,
-                  "charLength": 99,
+                  "charOffset": 1758,
+                  "charLength": 144,
                   "snippet": {
-                    "text": "\n    @JvmStatic\n    val catchNames = listOf(\"cat\", \"catc\", \"catch\")\n      @DataPoints(\"catch\") get\n"
+                    "text": "\n    @JvmStatic\n    val functionAlias = listOf(\"fu\", \"fun\", \"func\", \"funct\", \"functi\", \"functio\", \"function\")\n      @DataPoints(\"function\") get\n"
                   }
                 }
               },
@@ -79391,8 +77837,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "bea8b7d3b1d3443fafd664cd2c2d351fbdfb190caa47ea2dd3ebfac5b6f483aa"
+            "equalIndicator/v1": "16510ad8bc135f16936e59ce3112302357573383460ed95c20607204316dca3c"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -79446,6 +77893,61 @@
           "partialFingerprints": {
             "equalIndicator/v1": "9cda6c083e128de0b10b78ed42f3ca23d97a3f390bf8fb8e86c3d7c8b46cdb90"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Property \"catchNames\" is never used",
+            "markdown": "Property \"catchNames\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/test/java/org/jetbrains/plugins/ideavim/ex/parser/statements/TryCatchTests.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 48,
+                  "startColumn": 9,
+                  "charOffset": 1664,
+                  "charLength": 10,
+                  "snippet": {
+                    "text": "catchNames"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 46,
+                  "startColumn": 1,
+                  "charOffset": 1640,
+                  "charLength": 99,
+                  "snippet": {
+                    "text": "\n    @JvmStatic\n    val catchNames = listOf(\"cat\", \"catc\", \"catch\")\n      @DataPoints(\"catch\") get\n"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.test",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "bea8b7d3b1d3443fafd664cd2c2d351fbdfb190caa47ea2dd3ebfac5b6f483aa"
+          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -79499,6 +78001,61 @@
           "partialFingerprints": {
             "equalIndicator/v1": "4eccb5303ce70b116cff0688ad376caaf66734a3923b115fe8535571591291b0"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Property \"finallyNames\" is never used",
+            "markdown": "Property \"finallyNames\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/test/java/org/jetbrains/plugins/ideavim/ex/parser/statements/TryCatchTests.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 52,
+                  "startColumn": 9,
+                  "charOffset": 1763,
+                  "charLength": 12,
+                  "snippet": {
+                    "text": "finallyNames"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 50,
+                  "startColumn": 1,
+                  "charOffset": 1739,
+                  "charLength": 117,
+                  "snippet": {
+                    "text": "\n    @JvmStatic\n    val finallyNames = listOf(\"fina\", \"final\", \"finall\", \"finally\")\n      @DataPoints(\"finally\") get\n"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.test",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "eb70dc8bc2dcacd92b92bb6fd0e9418e26fc281ba0f5220b8d41961b5adf6cde"
+          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -79524,7 +78081,7 @@
                 "region": {
                   "startLine": 853,
                   "startColumn": 7,
-                  "charOffset": 25110,
+                  "charOffset": 25122,
                   "charLength": 34,
                   "snippet": {
                     "text": "`ignoretest with shorter conflict`"
@@ -79534,7 +78091,7 @@
                 "contextRegion": {
                   "startLine": 851,
                   "startColumn": 1,
-                  "charOffset": 25045,
+                  "charOffset": 25057,
                   "charLength": 138,
                   "snippet": {
                     "text": "\n  @TestWithoutNeovim(reason = SkipNeovimReason.DIFFERENT)\n  fun `ignoretest with shorter conflict`() {\n    val text = \"\"\"\n          -----"
@@ -79550,8 +78107,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "338546c1161d2ad0709d493c4763de1ffa4a6d9ef58ebda1e0cf9aa674ee141c"
+            "equalIndicator/v1": "8c38b0a3b876b89a9b09f3b3ad60eed0e30ef02f56d7fc83ff1f7ef8158d9467"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -79577,7 +78135,7 @@
                 "region": {
                   "startLine": 128,
                   "startColumn": 7,
-                  "charOffset": 4425,
+                  "charOffset": 4431,
                   "charLength": 30,
                   "snippet": {
                     "text": "`ignore test macro with macro`"
@@ -79587,7 +78145,7 @@
                 "contextRegion": {
                   "startLine": 126,
                   "startColumn": 1,
-                  "charOffset": 4382,
+                  "charOffset": 4388,
                   "charLength": 123,
                   "snippet": {
                     "text": "\n  // Broken, see the resulting text\n  fun `ignore test macro with macro`() {\n    val content = \"\"\"\n            A Discovery"
@@ -79603,8 +78161,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "06de81e6815ad618cff0cca0963714d805b2aebf06b0d329c23d9431c0681190"
+            "equalIndicator/v1": "2d57c74e396ec0f95d825967b6affebc6a510f94b5e63a348be64a359fc7991e"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -79641,9 +78200,9 @@
                   "startLine": 1,
                   "startColumn": 1,
                   "charOffset": 0,
-                  "charLength": 91,
+                  "charLength": 87,
                   "snippet": {
-                    "text": "package com.maddyhome.idea.vim.api\n\nabstract class VimEditorGroupBase : VimEditorGroup {\n\n}"
+                    "text": "package com.maddyhome.idea.vim.api\n\nabstract class VimEditorGroupBase : VimEditorGroup\n"
                   }
                 }
               },
@@ -79656,8 +78215,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "8c8960cc55793be629eb6ba9a4c34e835e4fc9e2fa8eceaf3b6a1ad472039c51"
+            "equalIndicator/v1": "94a7b71be51626a7bc001988a8f27146b6c295c991ccfbf782876dabe38b4ed7"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -79711,59 +78271,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "fb9dece80073d4bb86479746c3df5016892bc0bdd11cc71de2d571d3c786c6fe"
           },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UnusedSymbol",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Property \"RE_BOTH\" is never used",
-            "markdown": "Property \"RE_BOTH\" is never used"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimSearchGroup.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 46,
-                  "startColumn": 9,
-                  "charOffset": 1709,
-                  "charLength": 7,
-                  "snippet": {
-                    "text": "RE_BOTH"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 44,
-                  "startColumn": 1,
-                  "charOffset": 1648,
-                  "charLength": 160,
-                  "snippet": {
-                    "text": "    val RE_SUBST = 1 // Save/use substitute pattern\n\n    val RE_BOTH = 2 // Save to both patterns\n\n    val RE_LAST = 2 // Use last used pattern if \"pat\" is NULL"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "e5ca3472f76390aae0663f05eef7262a70a1e3e044882106ede55402f820d5a0"
-          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -79817,6 +78325,61 @@
           "partialFingerprints": {
             "equalIndicator/v1": "00deef72b19cda03bb20dab9ebd66077ed20a2c2cb70c41e05b5ee1f89d2b1f5"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Property \"RE_BOTH\" is never used",
+            "markdown": "Property \"RE_BOTH\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimSearchGroup.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 46,
+                  "startColumn": 9,
+                  "charOffset": 1709,
+                  "charLength": 7,
+                  "snippet": {
+                    "text": "RE_BOTH"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 44,
+                  "startColumn": 1,
+                  "charOffset": 1648,
+                  "charLength": 160,
+                  "snippet": {
+                    "text": "    val RE_SUBST = 1 // Save/use substitute pattern\n\n    val RE_BOTH = 2 // Save to both patterns\n\n    val RE_LAST = 2 // Use last used pattern if \"pat\" is NULL"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "e5ca3472f76390aae0663f05eef7262a70a1e3e044882106ede55402f820d5a0"
+          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -79870,6 +78433,61 @@
           "partialFingerprints": {
             "equalIndicator/v1": "cb98c33c143987ef2dcc98d3108f06b864d9181e7e1a9295152940de04e08c4d"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Function \"currentStackTrace\" is never used",
+            "markdown": "Function \"currentStackTrace\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimExceptionUtil.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 4,
+                  "startColumn": 7,
+                  "charOffset": 71,
+                  "charLength": 17,
+                  "snippet": {
+                    "text": "currentStackTrace"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 2,
+                  "startColumn": 1,
+                  "charOffset": 35,
+                  "charLength": 66,
+                  "snippet": {
+                    "text": "\ninterface VimExceptionUtil {\n  fun currentStackTrace(): String\n}\n"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "363d5d341e2575fa45b84f4bad12b89331f92a700fe92c395d4f9d34bf725396"
+          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -79923,165 +78541,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "664f010763be042b4b6be98f410cf97664ba6b8aa3e918282305b6fbb293d964"
           },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UnusedSymbol",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Function \"currentStackTrace\" is never used",
-            "markdown": "Function \"currentStackTrace\" is never used"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimExceptionUtil.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 4,
-                  "startColumn": 7,
-                  "charOffset": 71,
-                  "charLength": 17,
-                  "snippet": {
-                    "text": "currentStackTrace"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 2,
-                  "startColumn": 1,
-                  "charOffset": 35,
-                  "charLength": 65,
-                  "snippet": {
-                    "text": "\ninterface VimExceptionUtil {\n  fun currentStackTrace(): String\n}"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "126ca4e2360a613603e55ae43baa3a9d8dfb76b8b70e6e25c6fc6103ac848402"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UnusedSymbol",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Property \"NV\" is never used",
-            "markdown": "Property \"NV\" is never used"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/common/MappingMode.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 70,
-                  "startColumn": 13,
-                  "charOffset": 2172,
-                  "charLength": 2,
-                  "snippet": {
-                    "text": "NV"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 68,
-                  "startColumn": 1,
-                  "charOffset": 2026,
-                  "charLength": 304,
-                  "snippet": {
-                    "text": "        val NX: EnumSet<MappingMode> = EnumSet.of(NORMAL, VISUAL)\n        val IC: EnumSet<MappingMode> = EnumSet.of(INSERT, CMD_LINE)\n        val NV: EnumSet<MappingMode> = EnumSet.of(NORMAL, VISUAL, SELECT)\n        val NXO: EnumSet<MappingMode> = EnumSet.of(NORMAL, VISUAL, OP_PENDING)\n        @JvmField"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "83fc7623bc9e86488b4dc0a816dda18a768a10f8b680c3cac088cc86b80cd814"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UnusedSymbol",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Property \"IC\" is never used",
-            "markdown": "Property \"IC\" is never used"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/common/MappingMode.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 69,
-                  "startColumn": 13,
-                  "charOffset": 2104,
-                  "charLength": 2,
-                  "snippet": {
-                    "text": "IC"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 67,
-                  "startColumn": 1,
-                  "charOffset": 1956,
-                  "charLength": 356,
-                  "snippet": {
-                    "text": "        val XO: EnumSet<MappingMode> = EnumSet.of(VISUAL, OP_PENDING)\n        val NX: EnumSet<MappingMode> = EnumSet.of(NORMAL, VISUAL)\n        val IC: EnumSet<MappingMode> = EnumSet.of(INSERT, CMD_LINE)\n        val NV: EnumSet<MappingMode> = EnumSet.of(NORMAL, VISUAL, SELECT)\n        val NXO: EnumSet<MappingMode> = EnumSet.of(NORMAL, VISUAL, OP_PENDING)"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "f2f1041b86ad29248d826dd4157c0318d5b1966a7d4d218ac7edef08d260f8b9"
-          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -80105,9 +78565,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 81,
+                  "startLine": 86,
                   "startColumn": 15,
-                  "charOffset": 2855,
+                  "charOffset": 3119,
                   "charLength": 12,
                   "snippet": {
                     "text": "inNormalMode"
@@ -80115,9 +78575,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 79,
+                  "startLine": 84,
                   "startColumn": 1,
-                  "charOffset": 2836,
+                  "charOffset": 3100,
                   "charLength": 65,
                   "snippet": {
                     "text": "  }\n\nval VimEditor.inNormalMode\n  get() = this.mode.inNormalMode\n"
@@ -80133,8 +78593,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "26d0192064e00dbbe7c2b97865ae391122bfafd14d4b266da605ebefd0d3acf6"
+            "equalIndicator/v1": "8fd0272cf522c3e371c3afc1bbdb5c8c90134264b7200afbbdd19f2cb25426aa"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -80159,8 +78620,8 @@
                 },
                 "region": {
                   "startLine": 27,
-                  "startColumn": 5,
-                  "charOffset": 898,
+                  "startColumn": 3,
+                  "charOffset": 886,
                   "charLength": 11,
                   "snippet": {
                     "text": "constructor"
@@ -80170,10 +78631,10 @@
                 "contextRegion": {
                   "startLine": 25,
                   "startColumn": 1,
-                  "charOffset": 887,
-                  "charLength": 69,
+                  "charOffset": 879,
+                  "charLength": 59,
                   "snippet": {
-                    "text": "    }\n\n    constructor(flags: Int) {\n        this.flags = flags\n    }"
+                    "text": "  }\n\n  constructor(flags: Int) {\n    this.flags = flags\n  }"
                   }
                 }
               },
@@ -80186,8 +78647,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "0203f6309e8bb25f6abba481ec7f3d8b2b56f0bc172551698e77b62d355164e0"
+            "equalIndicator/v1": "d0008d7816053a00ff8dbb43b433460703eb97d0983400bf8ef0f74c3d7ff8d1"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -80212,8 +78674,8 @@
                 },
                 "region": {
                   "startLine": 39,
-                  "startColumn": 9,
-                  "charOffset": 1093,
+                  "startColumn": 7,
+                  "charOffset": 1057,
                   "charLength": 6,
                   "snippet": {
                     "text": "allSet"
@@ -80223,10 +78685,10 @@
                 "contextRegion": {
                   "startLine": 37,
                   "startColumn": 1,
-                  "charOffset": 1078,
-                  "charLength": 95,
+                  "charOffset": 1046,
+                  "charLength": 85,
                   "snippet": {
-                    "text": "    }\n\n    fun allSet(flags: Int): Boolean {\n        return this.flags and flags == flags\n    }"
+                    "text": "  }\n\n  fun allSet(flags: Int): Boolean {\n    return this.flags and flags == flags\n  }"
                   }
                 }
               },
@@ -80239,8 +78701,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "bb5e8eaa9c6d8f9a09658e5ddd6e26968cbd1dbfde472becab0e02284f4ac141"
+            "equalIndicator/v1": "1c7a87ae784a94b365c5e8d853141d99ad9fb81c706a2ea9390f99c995f50307"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -80265,8 +78728,8 @@
                 },
                 "region": {
                   "startLine": 25,
-                  "startColumn": 19,
-                  "charOffset": 996,
+                  "startColumn": 15,
+                  "charOffset": 978,
                   "charLength": 10,
                   "snippet": {
                     "text": "e_badrange"
@@ -80276,10 +78739,10 @@
                 "contextRegion": {
                   "startLine": 23,
                   "startColumn": 1,
-                  "charOffset": 888,
-                  "charLength": 219,
+                  "charOffset": 882,
+                  "charLength": 199,
                   "snippet": {
-                    "text": "        const val INT_BAD_CMD = \"intbadcmd\"\n        const val e_backslash = \"e_backslash\"\n        const val e_badrange = \"e_badrange\"\n        const val e_norange = \"e_norange\"\n        const val e_rangereq = \"e_rangereq\""
+                    "text": "    const val INT_BAD_CMD = \"intbadcmd\"\n    const val e_backslash = \"e_backslash\"\n    const val e_badrange = \"e_badrange\"\n    const val e_norange = \"e_norange\"\n    const val e_rangereq = \"e_rangereq\""
                   }
                 }
               },
@@ -80292,114 +78755,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "5e32fe3cceb2e17db347ddef90d9c36d6f474249975a26947a051aedd5d52006"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UnusedSymbol",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Property \"INT_BAD_CMD\" is never used",
-            "markdown": "Property \"INT_BAD_CMD\" is never used"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/helper/Msg.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 23,
-                  "startColumn": 19,
-                  "charOffset": 906,
-                  "charLength": 11,
-                  "snippet": {
-                    "text": "INT_BAD_CMD"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 21,
-                  "startColumn": 1,
-                  "charOffset": 823,
-                  "charLength": 198,
-                  "snippet": {
-                    "text": "    companion object {\n        const val NOT_EX_CMD = \"notexcmd\"\n        const val INT_BAD_CMD = \"intbadcmd\"\n        const val e_backslash = \"e_backslash\"\n        const val e_badrange = \"e_badrange\""
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "dc884afaba8b886b765a562c0e4b585380512e3508dcd793c2c71befadd2ca8a"
-          },
-          "properties": {
-            "ideaSeverity": "WARNING",
-            "tags": [
-              "ideaSeverity"
-            ]
-          }
-        },
-        {
-          "ruleId": "UnusedSymbol",
-          "kind": "fail",
-          "level": "warning",
-          "message": {
-            "text": "Property \"e_invarg\" is never used",
-            "markdown": "Property \"e_invarg\" is never used"
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/helper/Msg.kt",
-                  "uriBaseId": "SRCROOT"
-                },
-                "region": {
-                  "startLine": 73,
-                  "startColumn": 19,
-                  "charOffset": 2692,
-                  "charLength": 8,
-                  "snippet": {
-                    "text": "e_invarg"
-                  },
-                  "sourceLanguage": "kotlin"
-                },
-                "contextRegion": {
-                  "startLine": 71,
-                  "startColumn": 1,
-                  "charOffset": 2594,
-                  "charLength": 157,
-                  "snippet": {
-                    "text": "        const val e_patnotf2 = \"e_patnotf2\"\n        const val unkopt = \"unkopt\"\n        const val e_invarg = \"e_invarg\"\n        const val E475 = \"E475\"\n    }"
-                  }
-                }
-              },
-              "logicalLocations": [
-                {
-                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
-                  "kind": "module"
-                }
-              ]
-            }
-          ],
-          "partialFingerprints": {
-            "equalIndicator/v1": "e9e68c5a93d711f68878f563febc318db467bba4f70f4e388fb0374481036f5c"
+            "equalIndicator/v1": "b269c1a9dc164a252251e8da08ebfa565149e381276218d91c1065bb39beee37"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -80424,8 +78782,8 @@
                 },
                 "region": {
                   "startLine": 30,
-                  "startColumn": 19,
-                  "charOffset": 1208,
+                  "startColumn": 15,
+                  "charOffset": 1170,
                   "charLength": 8,
                   "snippet": {
                     "text": "e_noprev"
@@ -80435,10 +78793,10 @@
                 "contextRegion": {
                   "startLine": 28,
                   "startColumn": 1,
-                  "charOffset": 1108,
-                  "charLength": 197,
+                  "charOffset": 1082,
+                  "charLength": 177,
                   "snippet": {
-                    "text": "        const val e_argreq = \"e_argreq\"\n        const val e_argforb = \"e_argforb\"\n        const val e_noprev = \"e_noprev\"\n        const val e_nopresub = \"e_nopresub\"\n        const val E191 = \"E191\""
+                    "text": "    const val e_argreq = \"e_argreq\"\n    const val e_argforb = \"e_argforb\"\n    const val e_noprev = \"e_noprev\"\n    const val e_nopresub = \"e_nopresub\"\n    const val E191 = \"E191\""
                   }
                 }
               },
@@ -80451,8 +78809,9 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "39635c60fbfe8b35007f1fd1d8542871522acfdaec4fc9126702dec19a93ab63"
+            "equalIndicator/v1": "ea4c08719ce007153a1dceb90e628b9c6b08cb065ea3fedbfac8ef97b93a772b"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -80465,33 +78824,33 @@
           "kind": "fail",
           "level": "warning",
           "message": {
-            "text": "Property \"virtualedit_insert\" is never used",
-            "markdown": "Property \"virtualedit_insert\" is never used"
+            "text": "Property \"INT_BAD_CMD\" is never used",
+            "markdown": "Property \"INT_BAD_CMD\" is never used"
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/options/OptionConstants.kt",
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/helper/Msg.kt",
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 111,
+                  "startLine": 23,
                   "startColumn": 15,
-                  "charOffset": 3383,
-                  "charLength": 18,
+                  "charOffset": 896,
+                  "charLength": 11,
                   "snippet": {
-                    "text": "virtualedit_insert"
+                    "text": "INT_BAD_CMD"
                   },
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 109,
+                  "startLine": 21,
                   "startColumn": 1,
-                  "charOffset": 3281,
-                  "charLength": 170,
+                  "charOffset": 823,
+                  "charLength": 180,
                   "snippet": {
-                    "text": "    const val virtualedit_onemore = \"onemore\"\n    const val virtualedit_block = \"block\"\n    const val virtualedit_insert = \"insert\"\n    const val virtualedit_all = \"all\"\n"
+                    "text": "  companion object {\n    const val NOT_EX_CMD = \"notexcmd\"\n    const val INT_BAD_CMD = \"intbadcmd\"\n    const val e_backslash = \"e_backslash\"\n    const val e_badrange = \"e_badrange\""
                   }
                 }
               },
@@ -80504,8 +78863,171 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "c8a4b10b8acf695fdce0b90afbaabcf83ebe475de8e835f2c08c491285ccc533"
+            "equalIndicator/v1": "4f099c9a217766e45c0bce621666a5943a12b9eb0cf146fed98ae66543b908e9"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Property \"e_invarg\" is never used",
+            "markdown": "Property \"e_invarg\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/helper/Msg.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 73,
+                  "startColumn": 15,
+                  "charOffset": 2482,
+                  "charLength": 8,
+                  "snippet": {
+                    "text": "e_invarg"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 71,
+                  "startColumn": 1,
+                  "charOffset": 2396,
+                  "charLength": 139,
+                  "snippet": {
+                    "text": "    const val e_patnotf2 = \"e_patnotf2\"\n    const val unkopt = \"unkopt\"\n    const val e_invarg = \"e_invarg\"\n    const val E475 = \"E475\"\n  }"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "a2d8181cc38ae9b6a2bf897326e5c37ecd19c0368d127dfb6729f47286d331da"
+          },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Property \"IC\" is never used",
+            "markdown": "Property \"IC\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/command/MappingMode.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 72,
+                  "startColumn": 9,
+                  "charOffset": 2077,
+                  "charLength": 2,
+                  "snippet": {
+                    "text": "IC"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 70,
+                  "startColumn": 1,
+                  "charOffset": 1941,
+                  "charLength": 262,
+                  "snippet": {
+                    "text": "    val XO: EnumSet<MappingMode> = EnumSet.of(VISUAL, OP_PENDING)\n    val NX: EnumSet<MappingMode> = EnumSet.of(NORMAL, VISUAL)\n    val IC: EnumSet<MappingMode> = EnumSet.of(INSERT, CMD_LINE)\n    val NV: EnumSet<MappingMode> = EnumSet.of(NORMAL, VISUAL, SELECT)\n"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "de0b4461cf95eb5d890b4b8154ab6c9951998433665d548a290f63dccae4f039"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Property \"NV\" is never used",
+            "markdown": "Property \"NV\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/command/MappingMode.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 73,
+                  "startColumn": 9,
+                  "charOffset": 2141,
+                  "charLength": 2,
+                  "snippet": {
+                    "text": "NV"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 71,
+                  "startColumn": 1,
+                  "charOffset": 2007,
+                  "charLength": 210,
+                  "snippet": {
+                    "text": "    val NX: EnumSet<MappingMode> = EnumSet.of(NORMAL, VISUAL)\n    val IC: EnumSet<MappingMode> = EnumSet.of(INSERT, CMD_LINE)\n    val NV: EnumSet<MappingMode> = EnumSet.of(NORMAL, VISUAL, SELECT)\n\n    @JvmField"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "01eaffab98d5fd9b4e10bce6d64a107cee5c6d87f7fb53fa2ce1923e66057fa1"
+          },
+          "baselineState": "new",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -80559,6 +79081,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "0e8affc922e0ca21eab6e0e87173f8b4d591acd7a3462bb8d393a5d39c59ef83"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -80612,6 +79135,61 @@
           "partialFingerprints": {
             "equalIndicator/v1": "7fe491a0dba870692e12319dcff6d4e92adcbb710667f9488a4d819344e4babe"
           },
+          "baselineState": "unchanged",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
+        },
+        {
+          "ruleId": "UnusedSymbol",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Property \"virtualedit_insert\" is never used",
+            "markdown": "Property \"virtualedit_insert\" is never used"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "vim-engine/src/main/kotlin/com/maddyhome/idea/vim/options/OptionConstants.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 111,
+                  "startColumn": 15,
+                  "charOffset": 3383,
+                  "charLength": 18,
+                  "snippet": {
+                    "text": "virtualedit_insert"
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 109,
+                  "startColumn": 1,
+                  "charOffset": 3281,
+                  "charLength": 170,
+                  "snippet": {
+                    "text": "    const val virtualedit_onemore = \"onemore\"\n    const val virtualedit_block = \"block\"\n    const val virtualedit_insert = \"insert\"\n    const val virtualedit_all = \"all\"\n"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.vim-engine.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "c8a4b10b8acf695fdce0b90afbaabcf83ebe475de8e835f2c08c491285ccc533"
+          },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -80665,6 +79243,7 @@
           "partialFingerprints": {
             "equalIndicator/v1": "2eff502ff20763160f22ccf435efa277c69b842bba54ae3ef6df52394557f597"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WARNING",
             "tags": [
@@ -80688,9 +79267,9 @@
                   "uriBaseId": "SRCROOT"
                 },
                 "region": {
-                  "startLine": 367,
+                  "startLine": 369,
                   "startColumn": 49,
-                  "charOffset": 13275,
+                  "charOffset": 13344,
                   "charLength": 6,
                   "snippet": {
                     "text": "getUrl"
@@ -80698,9 +79277,9 @@
                   "sourceLanguage": "kotlin"
                 },
                 "contextRegion": {
-                  "startLine": 365,
+                  "startLine": 367,
                   "startColumn": 1,
-                  "charOffset": 13182,
+                  "charOffset": 13251,
                   "charLength": 154,
                   "snippet": {
                     "text": "\n  override fun extractProtocol(): String? {\n    return EditorHelper.getVirtualFile(editor)?.getUrl()?.let { VirtualFileManager.extractProtocol(it) }\n  }\n"
@@ -80716,27 +79295,685 @@
             }
           ],
           "partialFingerprints": {
-            "equalIndicator/v1": "bc2c48e50143e6a7b76a9d1fa2e1c30fb270825e4e4e77e4ee7a996e4e6c3c84"
+            "equalIndicator/v1": "31d2cb00b7037dd8b20fa3adb3b0140289aa09c1af725bc18b56895b3903dbcf"
           },
+          "baselineState": "unchanged",
           "properties": {
             "ideaSeverity": "WEAK WARNING",
             "tags": [
               "ideaSeverity"
             ]
           }
+        },
+        {
+          "ruleId": "RemoveRedundantQualifierName",
+          "kind": "fail",
+          "level": "warning",
+          "message": {
+            "text": "Redundant qualifier name",
+            "markdown": "Redundant qualifier name"
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "src/main/java/com/maddyhome/idea/vim/command/CommandState.kt",
+                  "uriBaseId": "SRCROOT"
+                },
+                "region": {
+                  "startLine": 34,
+                  "startColumn": 13,
+                  "charOffset": 1175,
+                  "charLength": 13,
+                  "snippet": {
+                    "text": "CommandState."
+                  },
+                  "sourceLanguage": "kotlin"
+                },
+                "contextRegion": {
+                  "startLine": 32,
+                  "startColumn": 1,
+                  "charOffset": 1124,
+                  "charLength": 97,
+                  "snippet": {
+                    "text": "    get() = machine.isOperatorPending\n\n  val mode: CommandState.Mode\n    get() = machine.mode.ij\n"
+                  }
+                }
+              },
+              "logicalLocations": [
+                {
+                  "fullyQualifiedName": "IdeaVIM.main",
+                  "kind": "module"
+                }
+              ]
+            }
+          ],
+          "partialFingerprints": {
+            "equalIndicator/v1": "1058cc85b8c8ccc4914e8870b5b2ee08148a36fd30b53bbb7c5cf33b1409c3d2"
+          },
+          "baselineState": "new",
+          "properties": {
+            "ideaSeverity": "WARNING",
+            "tags": [
+              "ideaSeverity"
+            ]
+          }
         }
       ],
       "automationDetails": {
-        "id": "project/qodana/2022-06-23",
-        "guid": "6c5739a9-b7bc-49d5-acca-7f265c349ed3"
+        "id": "project/qodana/2022-07-11",
+        "guid": "5b98316d-de10-40f0-a33c-7aa8e48916f5"
       },
       "newlineSequences": [
         "\r\n",
         "\n"
       ],
       "properties": {
+        "qodana.sanity.results": [
+          {
+            "ruleId": "KotlinAnnotator",
+            "kind": "fail",
+            "level": "error",
+            "message": {
+              "text": "'visitScript' overrides nothing",
+              "markdown": "'visitScript' overrides nothing"
+            },
+            "locations": [
+              {
+                "physicalLocation": {
+                  "artifactLocation": {
+                    "uri": "src/main/java/com/maddyhome/idea/vim/vimscript/parser/visitors/ScriptVisitor.kt",
+                    "uriBaseId": "SRCROOT"
+                  },
+                  "region": {
+                    "startLine": 27,
+                    "startColumn": 3,
+                    "charOffset": 1091,
+                    "charLength": 8,
+                    "snippet": {
+                      "text": "override"
+                    },
+                    "sourceLanguage": "kotlin"
+                  },
+                  "contextRegion": {
+                    "startLine": 25,
+                    "startColumn": 1,
+                    "charOffset": 1032,
+                    "charLength": 247,
+                    "snippet": {
+                      "text": "object ScriptVisitor : VimscriptBaseVisitor<Script>() {\n\n  override fun visitScript(ctx: VimscriptParser.ScriptContext): Script {\n    return if (ctx.children != null) {\n      val statements = ctx.children.mapNotNull { ExecutableVisitor.visit(it) }"
+                    }
+                  }
+                },
+                "logicalLocations": [
+                  {
+                    "fullyQualifiedName": "IdeaVIM.main",
+                    "kind": "module"
+                  }
+                ]
+              }
+            ],
+            "partialFingerprints": {
+              "equalIndicator/v1": "69c0afcecbdb4f30c8cc23016e42a58b939457b8de426c5b718acd33005ff800"
+            },
+            "properties": {
+              "ideaSeverity": "ERROR"
+            }
+          },
+          {
+            "ruleId": "KotlinAnnotator",
+            "kind": "fail",
+            "level": "error",
+            "message": {
+              "text": "Unresolved reference: VimscriptParser",
+              "markdown": "Unresolved reference: VimscriptParser"
+            },
+            "locations": [
+              {
+                "physicalLocation": {
+                  "artifactLocation": {
+                    "uri": "src/main/java/com/maddyhome/idea/vim/vimscript/parser/visitors/ScriptVisitor.kt",
+                    "uriBaseId": "SRCROOT"
+                  },
+                  "region": {
+                    "startLine": 27,
+                    "startColumn": 33,
+                    "charOffset": 1121,
+                    "charLength": 15,
+                    "snippet": {
+                      "text": "VimscriptParser"
+                    },
+                    "sourceLanguage": "kotlin"
+                  },
+                  "contextRegion": {
+                    "startLine": 25,
+                    "startColumn": 1,
+                    "charOffset": 1032,
+                    "charLength": 247,
+                    "snippet": {
+                      "text": "object ScriptVisitor : VimscriptBaseVisitor<Script>() {\n\n  override fun visitScript(ctx: VimscriptParser.ScriptContext): Script {\n    return if (ctx.children != null) {\n      val statements = ctx.children.mapNotNull { ExecutableVisitor.visit(it) }"
+                    }
+                  }
+                },
+                "logicalLocations": [
+                  {
+                    "fullyQualifiedName": "IdeaVIM.main",
+                    "kind": "module"
+                  }
+                ]
+              }
+            ],
+            "partialFingerprints": {
+              "equalIndicator/v1": "72b18d7a68a230f39e94748844dd22557258bea27ddc9c5cbbfc8ee04ca471eb"
+            },
+            "properties": {
+              "ideaSeverity": "ERROR"
+            }
+          },
+          {
+            "ruleId": "KotlinAnnotator",
+            "kind": "fail",
+            "level": "error",
+            "message": {
+              "text": "Unresolved reference: visit",
+              "markdown": "Unresolved reference: visit"
+            },
+            "locations": [
+              {
+                "physicalLocation": {
+                  "artifactLocation": {
+                    "uri": "src/main/java/com/maddyhome/idea/vim/vimscript/parser/visitors/ScriptVisitor.kt",
+                    "uriBaseId": "SRCROOT"
+                  },
+                  "region": {
+                    "startLine": 29,
+                    "startColumn": 68,
+                    "charOffset": 1268,
+                    "charLength": 5,
+                    "snippet": {
+                      "text": "visit"
+                    },
+                    "sourceLanguage": "kotlin"
+                  },
+                  "contextRegion": {
+                    "startLine": 27,
+                    "startColumn": 1,
+                    "charOffset": 1089,
+                    "charLength": 228,
+                    "snippet": {
+                      "text": "  override fun visitScript(ctx: VimscriptParser.ScriptContext): Script {\n    return if (ctx.children != null) {\n      val statements = ctx.children.mapNotNull { ExecutableVisitor.visit(it) }\n      Script(statements)\n    } else {"
+                    }
+                  }
+                },
+                "logicalLocations": [
+                  {
+                    "fullyQualifiedName": "IdeaVIM.main",
+                    "kind": "module"
+                  }
+                ]
+              }
+            ],
+            "partialFingerprints": {
+              "equalIndicator/v1": "0a493e405f4d5119883f912e2554cb9a47d5f2007ca7ddc101d64b95777787bb"
+            },
+            "properties": {
+              "ideaSeverity": "ERROR"
+            }
+          },
+          {
+            "ruleId": "KotlinAnnotator",
+            "kind": "fail",
+            "level": "error",
+            "message": {
+              "text": "Expression expected, but a package name found",
+              "markdown": "Expression expected, but a package name found"
+            },
+            "locations": [
+              {
+                "physicalLocation": {
+                  "artifactLocation": {
+                    "uri": "src/main/java/com/maddyhome/idea/vim/vimscript/parser/visitors/ScriptVisitor.kt",
+                    "uriBaseId": "SRCROOT"
+                  },
+                  "region": {
+                    "startLine": 29,
+                    "startColumn": 74,
+                    "charOffset": 1274,
+                    "charLength": 2,
+                    "snippet": {
+                      "text": "it"
+                    },
+                    "sourceLanguage": "kotlin"
+                  },
+                  "contextRegion": {
+                    "startLine": 27,
+                    "startColumn": 1,
+                    "charOffset": 1089,
+                    "charLength": 228,
+                    "snippet": {
+                      "text": "  override fun visitScript(ctx: VimscriptParser.ScriptContext): Script {\n    return if (ctx.children != null) {\n      val statements = ctx.children.mapNotNull { ExecutableVisitor.visit(it) }\n      Script(statements)\n    } else {"
+                    }
+                  }
+                },
+                "logicalLocations": [
+                  {
+                    "fullyQualifiedName": "IdeaVIM.main",
+                    "kind": "module"
+                  }
+                ]
+              }
+            ],
+            "partialFingerprints": {
+              "equalIndicator/v1": "674c455d4db637afa9fc0ae2e2c5396baea158317b4997c405bb9744c931ddf2"
+            },
+            "properties": {
+              "ideaSeverity": "ERROR"
+            }
+          },
+          {
+            "ruleId": "KotlinAnnotator",
+            "kind": "fail",
+            "level": "error",
+            "message": {
+              "text": "Unresolved reference: generated",
+              "markdown": "Unresolved reference: generated"
+            },
+            "locations": [
+              {
+                "physicalLocation": {
+                  "artifactLocation": {
+                    "uri": "src/main/java/com/maddyhome/idea/vim/vimscript/parser/VimscriptParser.kt",
+                    "uriBaseId": "SRCROOT"
+                  },
+                  "region": {
+                    "startLine": 26,
+                    "startColumn": 48,
+                    "charOffset": 1171,
+                    "charLength": 9,
+                    "snippet": {
+                      "text": "generated"
+                    },
+                    "sourceLanguage": "kotlin"
+                  },
+                  "contextRegion": {
+                    "startLine": 24,
+                    "startColumn": 1,
+                    "charOffset": 980,
+                    "charLength": 359,
+                    "snippet": {
+                      "text": "import com.maddyhome.idea.vim.vimscript.model.expressions.Expression\nimport com.maddyhome.idea.vim.vimscript.parser.errors.IdeavimErrorListener\nimport com.maddyhome.idea.vim.vimscript.parser.generated.VimscriptLexer\nimport com.maddyhome.idea.vim.vimscript.parser.generated.VimscriptParser\nimport com.maddyhome.idea.vim.vimscript.parser.visitors.CommandVisitor"
+                    }
+                  }
+                },
+                "logicalLocations": [
+                  {
+                    "fullyQualifiedName": "IdeaVIM.main",
+                    "kind": "module"
+                  }
+                ]
+              }
+            ],
+            "partialFingerprints": {
+              "equalIndicator/v1": "72b9f476ae75a6db7ef2a506a68d6039e1077de8ca23278d55373eea4b3684dc"
+            },
+            "properties": {
+              "ideaSeverity": "ERROR"
+            }
+          },
+          {
+            "ruleId": "KotlinAnnotator",
+            "kind": "fail",
+            "level": "error",
+            "message": {
+              "text": "Unresolved reference: generated",
+              "markdown": "Unresolved reference: generated"
+            },
+            "locations": [
+              {
+                "physicalLocation": {
+                  "artifactLocation": {
+                    "uri": "src/main/java/com/maddyhome/idea/vim/vimscript/parser/VimscriptParser.kt",
+                    "uriBaseId": "SRCROOT"
+                  },
+                  "region": {
+                    "startLine": 27,
+                    "startColumn": 48,
+                    "charOffset": 1243,
+                    "charLength": 9,
+                    "snippet": {
+                      "text": "generated"
+                    },
+                    "sourceLanguage": "kotlin"
+                  },
+                  "contextRegion": {
+                    "startLine": 25,
+                    "startColumn": 1,
+                    "charOffset": 1049,
+                    "charLength": 364,
+                    "snippet": {
+                      "text": "import com.maddyhome.idea.vim.vimscript.parser.errors.IdeavimErrorListener\nimport com.maddyhome.idea.vim.vimscript.parser.generated.VimscriptLexer\nimport com.maddyhome.idea.vim.vimscript.parser.generated.VimscriptParser\nimport com.maddyhome.idea.vim.vimscript.parser.visitors.CommandVisitor\nimport com.maddyhome.idea.vim.vimscript.parser.visitors.ExpressionVisitor"
+                    }
+                  }
+                },
+                "logicalLocations": [
+                  {
+                    "fullyQualifiedName": "IdeaVIM.main",
+                    "kind": "module"
+                  }
+                ]
+              }
+            ],
+            "partialFingerprints": {
+              "equalIndicator/v1": "0b2e91fc5f3fb80c49370ec52b9555c01db0edf2161148c70975ef9d80e0d266"
+            },
+            "properties": {
+              "ideaSeverity": "ERROR"
+            }
+          },
+          {
+            "ruleId": "KotlinAnnotator",
+            "kind": "fail",
+            "level": "error",
+            "message": {
+              "text": "Unresolved reference: command",
+              "markdown": "Unresolved reference: command"
+            },
+            "locations": [
+              {
+                "physicalLocation": {
+                  "artifactLocation": {
+                    "uri": "src/main/java/com/maddyhome/idea/vim/vimscript/parser/VimscriptParser.kt",
+                    "uriBaseId": "SRCROOT"
+                  },
+                  "region": {
+                    "startLine": 77,
+                    "startColumn": 33,
+                    "charOffset": 3130,
+                    "charLength": 7,
+                    "snippet": {
+                      "text": "command"
+                    },
+                    "sourceLanguage": "kotlin"
+                  },
+                  "contextRegion": {
+                    "startLine": 75,
+                    "startColumn": 1,
+                    "charOffset": 2978,
+                    "charLength": 231,
+                    "snippet": {
+                      "text": "  override fun parseCommand(command: String): Command? {\n    val parser = getParser(addNewlineIfMissing(command), true)\n    val AST: ParseTree = parser.command()\n    if (linesWithErrors.isNotEmpty()) {\n      linesWithErrors.clear()"
+                    }
+                  }
+                },
+                "logicalLocations": [
+                  {
+                    "fullyQualifiedName": "IdeaVIM.main",
+                    "kind": "module"
+                  }
+                ]
+              }
+            ],
+            "partialFingerprints": {
+              "equalIndicator/v1": "60b45bda1de2d4749f60f2ced4221b01b160ab6ace44d910ccb3776a9ab8a4fd"
+            },
+            "properties": {
+              "ideaSeverity": "ERROR"
+            }
+          },
+          {
+            "ruleId": "KotlinAnnotator",
+            "kind": "fail",
+            "level": "error",
+            "message": {
+              "text": "Unresolved reference: visit",
+              "markdown": "Unresolved reference: visit"
+            },
+            "locations": [
+              {
+                "physicalLocation": {
+                  "artifactLocation": {
+                    "uri": "src/main/java/com/maddyhome/idea/vim/vimscript/parser/VimscriptParser.kt",
+                    "uriBaseId": "SRCROOT"
+                  },
+                  "region": {
+                    "startLine": 82,
+                    "startColumn": 27,
+                    "charOffset": 3260,
+                    "charLength": 5,
+                    "snippet": {
+                      "text": "visit"
+                    },
+                    "sourceLanguage": "kotlin"
+                  },
+                  "contextRegion": {
+                    "startLine": 80,
+                    "startColumn": 1,
+                    "charOffset": 3210,
+                    "charLength": 65,
+                    "snippet": {
+                      "text": "      return null\n    }\n    return CommandVisitor.visit(AST)\n  }\n"
+                    }
+                  }
+                },
+                "logicalLocations": [
+                  {
+                    "fullyQualifiedName": "IdeaVIM.main",
+                    "kind": "module"
+                  }
+                ]
+              }
+            ],
+            "partialFingerprints": {
+              "equalIndicator/v1": "b65593e808147fa0eb7d4b028dba8120db0f2246be04cd8c5d26f824841c35f8"
+            },
+            "properties": {
+              "ideaSeverity": "ERROR"
+            }
+          },
+          {
+            "ruleId": "KotlinAnnotator",
+            "kind": "fail",
+            "level": "error",
+            "message": {
+              "text": "Unresolved reference: RangeOffsetContext",
+              "markdown": "Unresolved reference: RangeOffsetContext"
+            },
+            "locations": [
+              {
+                "physicalLocation": {
+                  "artifactLocation": {
+                    "uri": "src/main/java/com/maddyhome/idea/vim/vimscript/parser/visitors/CommandVisitor.kt",
+                    "uriBaseId": "SRCROOT"
+                  },
+                  "region": {
+                    "startLine": 133,
+                    "startColumn": 37,
+                    "charOffset": 8539,
+                    "charLength": 18,
+                    "snippet": {
+                      "text": "RangeOffsetContext"
+                    },
+                    "sourceLanguage": "kotlin"
+                  },
+                  "contextRegion": {
+                    "startLine": 131,
+                    "startColumn": 1,
+                    "charOffset": 8431,
+                    "charLength": 177,
+                    "snippet": {
+                      "text": "  private val expressionVisitor: ExpressionVisitor = ExpressionVisitor\n\n  private fun parseRangeOffset(ctx: RangeOffsetContext?): Int {\n    var offset = 0\n    if (ctx != null) {"
+                    }
+                  }
+                },
+                "logicalLocations": [
+                  {
+                    "fullyQualifiedName": "IdeaVIM.main",
+                    "kind": "module"
+                  }
+                ]
+              }
+            ],
+            "partialFingerprints": {
+              "equalIndicator/v1": "b41c67b756c7688d408288eeb051ff6cd822980b35dd98facd35183f811afe45"
+            },
+            "properties": {
+              "ideaSeverity": "ERROR"
+            }
+          },
+          {
+            "ruleId": "KotlinAnnotator",
+            "kind": "fail",
+            "level": "error",
+            "message": {
+              "text": "'visitShiftRightCommand' overrides nothing",
+              "markdown": "'visitShiftRightCommand' overrides nothing"
+            },
+            "locations": [
+              {
+                "physicalLocation": {
+                  "artifactLocation": {
+                    "uri": "src/main/java/com/maddyhome/idea/vim/vimscript/parser/visitors/CommandVisitor.kt",
+                    "uriBaseId": "SRCROOT"
+                  },
+                  "region": {
+                    "startLine": 282,
+                    "startColumn": 3,
+                    "charOffset": 14439,
+                    "charLength": 8,
+                    "snippet": {
+                      "text": "override"
+                    },
+                    "sourceLanguage": "kotlin"
+                  },
+                  "contextRegion": {
+                    "startLine": 280,
+                    "startColumn": 1,
+                    "charOffset": 14432,
+                    "charLength": 212,
+                    "snippet": {
+                      "text": "  }\n\n  override fun visitShiftRightCommand(ctx: VimscriptParser.ShiftRightCommandContext): ShiftRightCommand {\n    val ranges = parseRanges(ctx.range())\n    val argument = (ctx.commandArgument?.text ?: \"\").trim()"
+                    }
+                  }
+                },
+                "logicalLocations": [
+                  {
+                    "fullyQualifiedName": "IdeaVIM.main",
+                    "kind": "module"
+                  }
+                ]
+              }
+            ],
+            "partialFingerprints": {
+              "equalIndicator/v1": "1f6f8e881f7eda97f63ffb528ec0600da705bcb522084c56a9b93e1ba5bd3a78"
+            },
+            "properties": {
+              "ideaSeverity": "ERROR"
+            }
+          },
+          {
+            "ruleId": "KotlinAnnotator",
+            "kind": "fail",
+            "level": "error",
+            "message": {
+              "text": "Unresolved reference: VimscriptParser",
+              "markdown": "Unresolved reference: VimscriptParser"
+            },
+            "locations": [
+              {
+                "physicalLocation": {
+                  "artifactLocation": {
+                    "uri": "src/main/java/com/maddyhome/idea/vim/vimscript/parser/visitors/CommandVisitor.kt",
+                    "uriBaseId": "SRCROOT"
+                  },
+                  "region": {
+                    "startLine": 282,
+                    "startColumn": 44,
+                    "charOffset": 14480,
+                    "charLength": 15,
+                    "snippet": {
+                      "text": "VimscriptParser"
+                    },
+                    "sourceLanguage": "kotlin"
+                  },
+                  "contextRegion": {
+                    "startLine": 280,
+                    "startColumn": 1,
+                    "charOffset": 14432,
+                    "charLength": 212,
+                    "snippet": {
+                      "text": "  }\n\n  override fun visitShiftRightCommand(ctx: VimscriptParser.ShiftRightCommandContext): ShiftRightCommand {\n    val ranges = parseRanges(ctx.range())\n    val argument = (ctx.commandArgument?.text ?: \"\").trim()"
+                    }
+                  }
+                },
+                "logicalLocations": [
+                  {
+                    "fullyQualifiedName": "IdeaVIM.main",
+                    "kind": "module"
+                  }
+                ]
+              }
+            ],
+            "partialFingerprints": {
+              "equalIndicator/v1": "0f655481d61a1fa258b9ed123a0554543bc76ba83d8521a13d8e9383b0a2060f"
+            },
+            "properties": {
+              "ideaSeverity": "ERROR"
+            }
+          },
+          {
+            "ruleId": "KotlinAnnotator",
+            "kind": "fail",
+            "level": "error",
+            "message": {
+              "text": "'visitEchoCommand' overrides nothing",
+              "markdown": "'visitEchoCommand' overrides nothing"
+            },
+            "locations": [
+              {
+                "physicalLocation": {
+                  "artifactLocation": {
+                    "uri": "src/main/java/com/maddyhome/idea/vim/vimscript/parser/visitors/CommandVisitor.kt",
+                    "uriBaseId": "SRCROOT"
+                  },
+                  "region": {
+                    "startLine": 192,
+                    "startColumn": 3,
+                    "charOffset": 10705,
+                    "charLength": 8,
+                    "snippet": {
+                      "text": "override"
+                    },
+                    "sourceLanguage": "kotlin"
+                  },
+                  "contextRegion": {
+                    "startLine": 190,
+                    "startColumn": 1,
+                    "charOffset": 10698,
+                    "charLength": 164,
+                    "snippet": {
+                      "text": "  }\n\n  override fun visitEchoCommand(ctx: EchoCommandContext): Command {\n    val ranges: Ranges = parseRanges(ctx.range())\n    val expressions = ctx.expr().stream()"
+                    }
+                  }
+                },
+                "logicalLocations": [
+                  {
+                    "fullyQualifiedName": "IdeaVIM.main",
+                    "kind": "module"
+                  }
+                ]
+              }
+            ],
+            "partialFingerprints": {
+              "equalIndicator/v1": "a051c68850d5d456853baed1f94784af74e611ff46aeec51980cf2ae247c6746"
+            },
+            "properties": {
+              "ideaSeverity": "ERROR"
+            }
+          }
+        ],
         "deviceId": "200820300000000-3739-f754-fa7f-706addabc16b",
         "tags": [
+          "qodana.sanity.results",
           "deviceId"
         ]
       }