diff --git a/CHANGELOG.md b/CHANGELOG.md
index 704d04d52cdae9e3822351786e03f9f36778c7e2..f5f25385d1c20060379b7f92ae2bf3ce7fb6f905 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,24 +12,34 @@
 
 ### Fixed
 
+## [0.3.5]
+
+### Added
+
+- Support for IntelliJ IDEA 2024.3.
+
 ## [0.3.4] - 2024-08-07
 
 ### Added
+
 - Support for IntelliJ IDEA 2024.2.
 
 ## [0.3.3] - 2023-12-29
 
 ### Added
+
 - Support for IntelliJ IDEA 2023.3.
 
 ## [0.3.2] - 2023-09-13
 
 ### Added
+
 - Support for IntelliJ IDEA 2023.2.
 
 ## [0.3.1]
 
 ### Added
+
 - Usages are now highlighted.
 - Note that although it works in the Java embeddings within aspects, it does *not* work in "real" Java classes.
   Please use this feature with caution. As with most refactoring tools, it is quite fragile and won't give correct
@@ -41,16 +51,19 @@
 - Support for IntelliJ IDEA 2022.3 and 2023.1.
 
 ### Fixed
+
 - A bug for type name refactoring in grammar files which prevented the actual definition from being renamed.
 - Wrong inspection messages related to names in wrappers of injected java code ("x", "m", "X").
 - A bug that required a visibility modifier in refined constructors.
 
 ### Removed
+
 - Support for all IntelliJ IDEA version prior to 2022.3.
 
 ## [0.2.0]
 
 ### Added
+
 - Support for IntelliJ IDEA 2021.2.3.
 - syntax highlighter and color settings
   two file types for jrag and jadd
@@ -59,9 +72,11 @@
 - Dark mode icon which is a bit less colourful.
 
 ### Removed
+
 - Support for IntelliJ IDEA 2020.2.4. Minimal version now is 2021.1.1.
 
-[Unreleased]: https://git-st.inf.tu-dresden.de/jastadd/jetbrains-plugin//compare/v0.3.4...HEAD
+[Unreleased]: https://git-st.inf.tu-dresden.de/jastadd/jetbrains-plugin//compare/v0.3.5...HEAD
+[0.3.5]: https://git-st.inf.tu-dresden.de/jastadd/jetbrains-plugin//compare/v0.3.4...v0.3.5
 [0.3.4]: https://git-st.inf.tu-dresden.de/jastadd/jetbrains-plugin//compare/v0.3.3...v0.3.4
 [0.3.3]: https://git-st.inf.tu-dresden.de/jastadd/jetbrains-plugin//compare/v0.3.2...v0.3.3
 [0.3.2]: https://git-st.inf.tu-dresden.de/jastadd/jetbrains-plugin//compare/v0.3.1...v0.3.2
diff --git a/build.gradle.kts b/build.gradle.kts
index a5e0bea9ef09433f028d5ce9fa1f4f6275d3f80a..93cd05e49732fbf968869399f374fc5ca7149e5b 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -37,8 +37,8 @@ repositories {
 }
 
 java {
-    sourceCompatibility = JavaVersion.VERSION_17
-    targetCompatibility = JavaVersion.VERSION_17
+    sourceCompatibility = JavaVersion.VERSION_21
+    targetCompatibility = JavaVersion.VERSION_21
 }
 
 idea {
diff --git a/gradle.properties b/gradle.properties
index 93b26dd0bfd93226b68ce403700324be66108901..8447f1a69ce222fb71fe21aa72b5c2dc8a8d8de7 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -4,16 +4,16 @@
 pluginGroup = org.jastadd
 pluginId = JastAdd
 pluginName = JastAdd Language Support
-pluginVersion = 0.3.4
+pluginVersion = 0.3.5
 pluginRepositoryUrl = https://git-st.inf.tu-dresden.de/jastadd/jetbrains-plugin/
 
 # See https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html
 # for insight into build numbers and IntelliJ Platform versions.
 pluginSinceBuild = 223
-pluginUntilBuild = 242.*
+pluginUntilBuild = 243.*
 
 platformType = IC
-platformVersion = 2024.2
+platformVersion = 2024.3
 
 # Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html
 # Example: platformPlugins = com.jetbrains.php:203.4449.22, org.intellij.scala:2023.3.27@EAP
@@ -22,7 +22,7 @@ platformPlugins =
 platformBundledPlugins = com.intellij.java
 
 # Gradle Releases -> https://github.com/gradle/gradle/releases
-gradleVersion = 8.9
+gradleVersion = 8.11
 
 # Opt-out flag for bundling Kotlin standard library.
 # See https://plugins.jetbrains.com/docs/intellij/kotlin.html#kotlin-standard-library for details.
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 943f0cbfa754578e88a3dae77fce6e3dea56edbf..2c3521197d7c4586c843d1d3e9090525f1898cde 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 c5a661c9613b09d6b70aced3de59db4a940fb97c..94113f200e61179d552438ad36de4a645738eac2 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,7 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip
 networkTimeout=10000
+validateDistributionUrl=true
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index 65dcd68d65c82f2a5338fded4af852f9caf93b93..f5feea6d6b116baaca5a2642d4d9fa1f47d574a7 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/.
@@ -83,10 +85,9 @@ done
 # This is normally unused
 # shellcheck disable=SC2034
 APP_BASE_NAME=${0##*/}
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
+' "$PWD" ) || exit
 
 # Use the maximum available, or set MAX_FD != -1 to use that value.
 MAX_FD=maximum
@@ -133,10 +134,13 @@ location of your Java installation."
     fi
 else
     JAVACMD=java
-    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+    if ! command -v java >/dev/null 2>&1
+    then
+        die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
 
 Please set the JAVA_HOME variable in your environment to match the
 location of your Java installation."
+    fi
 fi
 
 # Increase the maximum file descriptors if we can.
@@ -144,7 +148,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
     case $MAX_FD in #(
       max*)
         # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
-        # shellcheck disable=SC3045 
+        # shellcheck disable=SC2039,SC3045
         MAX_FD=$( ulimit -H -n ) ||
             warn "Could not query maximum file descriptor limit"
     esac
@@ -152,7 +156,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
       '' | soft) :;; #(
       *)
         # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
-        # shellcheck disable=SC3045 
+        # shellcheck disable=SC2039,SC3045
         ulimit -n "$MAX_FD" ||
             warn "Could not set maximum file descriptor limit to $MAX_FD"
     esac
@@ -197,11 +201,15 @@ if "$cygwin" || "$msys" ; then
     done
 fi
 
-# Collect all arguments for the java command;
-#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-#     shell script including quotes and variable substitutions, so put them in
-#     double quotes to make sure that they get re-expanded; and
-#   * put everything else in single quotes, so that it's not re-expanded.
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+#   * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+#     and any embedded shellness will be escaped.
+#   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+#     treated as '${Hostname}' itself on the command line.
 
 set -- \
         "-Dorg.gradle.appname=$APP_BASE_NAME" \
diff --git a/gradlew.bat b/gradlew.bat
index 6689b85beecde676054c39c2408085f41e6be6dc..9b42019c7915b971238526075306ffba3b666dd5 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