@echo off rem Based on scalac.bat from the Scala distribution rem Copyright 2002-2011, LAMP/EPFL rem Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. rem Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. rem We adopt the following conventions: rem - System/user environment variables start with a letter rem - Local batch variables start with an underscore ('_') setlocal call :set_home if "%_KOTLIN_COMPILER%"=="" set _KOTLIN_COMPILER=org.jetbrains.kotlin.cli.jvm.K2JVMCompiler if not "%JAVA_HOME%"=="" ( rem Prepend JAVA_HOME to local PATH to be able to simply execute "java" later in the script. set "PATH=%JAVA_HOME%\bin;%PATH%" ) rem We use the value of the JAVA_OPTS environment variable if defined if "%JAVA_OPTS%"=="" set JAVA_OPTS=-Xmx256M -Xms32M rem Iterate through arguments and split them into java and kotlin ones :loop set _arg=%~1 if "%_arg%" == "" goto loopend if "%_arg:~0,2%"=="-J" ( if "%_arg:~2%"=="" ( echo error: empty -J argument goto error ) set JAVA_OPTS=%JAVA_OPTS% "%_arg:~2%" ) else ( if "%_arg:~0,2%"=="-D" ( set JAVA_OPTS=%JAVA_OPTS% "%_arg%" ) else ( set KOTLIN_OPTS=%KOTLIN_OPTS% "%_arg%" ) ) shift goto loop :loopend setlocal EnableDelayedExpansion call :set_java_version if !_java_major_version! geq 9 ( rem Workaround the illegal reflective access warning from ReflectionUtil to ResourceBundle.setParent, see IDEA-248785. set JAVA_OPTS=!JAVA_OPTS! "--add-opens" "java.base/java.util=ALL-UNNAMED" ) if "!_KOTLIN_RUNNER!"=="1" ( java !JAVA_OPTS! "-Dkotlin.home=%_KOTLIN_HOME%" -cp "%_KOTLIN_HOME%\lib\kotlin-runner.jar" ^ org.jetbrains.kotlin.runner.Main %KOTLIN_OPTS% ) else ( set _ADDITIONAL_CLASSPATH= if !_java_major_version! lss 13 ( set JAVA_OPTS=!JAVA_OPTS! "-noverify" ) if not "%_KOTLIN_TOOL%"=="" ( set _ADDITIONAL_CLASSPATH=;%_KOTLIN_HOME%\lib\%_KOTLIN_TOOL% ) java !JAVA_OPTS! -cp "%_KOTLIN_HOME%\lib\kotlin-preloader.jar" ^ org.jetbrains.kotlin.preloading.Preloader -cp "%_KOTLIN_HOME%\lib\kotlin-compiler.jar!_ADDITIONAL_CLASSPATH!" ^ %_KOTLIN_COMPILER% %KOTLIN_OPTS% ) goto end rem ########################################################################## rem # subroutines :set_home set _BIN_DIR= for %%i in (%~sf0) do set _BIN_DIR=%_BIN_DIR%%%~dpsi set _KOTLIN_HOME=%_BIN_DIR%.. goto :eof rem Parses "java -version" output and stores the major version to _java_major_version. rem Note that this only loads the first component of the version, so "1.8.0_265" -> "1". rem But it's fine because major version is 9 for JDK 9, and so on. rem Needs to be executed in the EnableDelayedExpansion mode. :set_java_version set _version= rem Parse output and take the third token from the string containing " version ". rem It should be something like "1.8.0_275" or "15.0.1". for /f "tokens=3" %%i in ('java -version 2^>^&1 ^| findstr /i " version "') do ( rem Split the string by "-" or "." and take the first token. for /f "delims=-. tokens=1" %%j in ("%%i") do ( rem At this point, _version should be something like "1 or "15. Note the leading quote. set _version=%%j ) ) if "!_version!"=="" ( rem If failed to parse the output, set the version to 1. set _java_major_version=1 ) else ( rem Strip the leading quote. set _java_major_version=!_version:~1! ) goto :eof :error set ERRORLEVEL=1 :end exit /b %ERRORLEVEL%