diff --git a/.gitignore b/.gitignore
index 4be9db8..0b246e2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,4 +3,5 @@
 !/.idea/runConfigurations
 
 /.gradle/
+/.intellijPlatform/
 /build/
diff --git a/build.gradle.kts b/build.gradle.kts
index bb8095b..078dd4b 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,10 +1,8 @@
 @file:Suppress("ConvertLambdaToReference")
 
-import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
-
 plugins {
-	kotlin("jvm") version "1.8.0"
-	id("org.jetbrains.intellij") version "1.17.0"
+	kotlin("jvm")
+	id("org.jetbrains.intellij.platform")
 }
 
 group = "com.chylex.intellij.inspectionlens"
@@ -12,37 +10,40 @@ version = "1.5.1"
 
 repositories {
 	mavenCentral()
+	
+	intellijPlatform {
+		defaultRepositories()
+	}
 }
 
-intellij {
-	version.set("2023.3.3")
-	updateSinceUntilBuild.set(false)
+dependencies {
+	intellijPlatform {
+		intellijIdeaUltimate("2023.3.3")
+		bundledPlugin("tanvd.grazi")
+	}
 	
-	plugins.add("tanvd.grazi")
+	testImplementation("org.junit.jupiter:junit-jupiter:5.9.2")
+}
+
+intellijPlatform {
+	pluginConfiguration {
+		ideaVersion {
+			sinceBuild.set("233.11361.10")
+			untilBuild.set(provider { null })
+		}
+	}
 }
 
 kotlin {
 	jvmToolchain(17)
-}
-
-dependencies {
-	testImplementation("org.junit.jupiter:junit-jupiter:5.9.2")
-}
-
-tasks.patchPluginXml {
-	sinceBuild.set("233.11361.10")
-}
-
-tasks.buildSearchableOptions {
-	enabled = false
+	
+	compilerOptions {
+		freeCompilerArgs = listOf(
+			"-X" + "jvm-default=all"
+		)
+	}
 }
 
 tasks.test {
 	useJUnitPlatform()
 }
-
-tasks.withType<KotlinCompile> {
-	kotlinOptions.freeCompilerArgs = listOf(
-		"-Xjvm-default=all"
-	)
-}
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 7f93135..a4b76b9 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 3fa8f86..cea7a79 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
 networkTimeout=10000
 validateDistributionUrl=true
 zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
index 1aa94a4..f3b75f3 100755
--- a/gradlew
+++ b/gradlew
@@ -15,6 +15,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
+# SPDX-License-Identifier: Apache-2.0
+#
 
 ##############################################################################
 #
@@ -55,7 +57,7 @@
 #       Darwin, MinGW, and NonStop.
 #
 #   (3) This script is generated from the Groovy template
-#       https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+#       https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
 #       within the Gradle project.
 #
 #       You can find Gradle at https://github.com/gradle/gradle/.
@@ -84,7 +86,7 @@ done
 # shellcheck disable=SC2034
 APP_BASE_NAME=${0##*/}
 # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
-APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
 
 # Use the maximum available, or set MAX_FD != -1 to use that value.
 MAX_FD=maximum
diff --git a/gradlew.bat b/gradlew.bat
index 93e3f59..9d21a21 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -13,6 +13,8 @@
 @rem See the License for the specific language governing permissions and
 @rem limitations under the License.
 @rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
 
 @if "%DEBUG%"=="" @echo off
 @rem ##########################################################################
@@ -43,11 +45,11 @@ set JAVA_EXE=java.exe
 %JAVA_EXE% -version >NUL 2>&1
 if %ERRORLEVEL% equ 0 goto execute
 
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
 
 goto fail
 
@@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
 
 if exist "%JAVA_EXE%" goto execute
 
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
 
 goto fail
 
diff --git a/settings.gradle.kts b/settings.gradle.kts
index f7be99d..5aabcff 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -1 +1,8 @@
 rootProject.name = "InspectionLens"
+
+pluginManagement {
+	plugins {
+		kotlin("jvm") version "1.9.21"
+		id("org.jetbrains.intellij.platform") version "2.2.1"
+	}
+}