Skip to content
The Kotlin Programming Language
Kotlin Java JavaScript HTML Lex TypeScript
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.idea Minor. Add "commonized" to project dictionary May 28, 2020
android-studio Prepare building plugins modules against 1.8 JDK Apr 4, 2016
annotations Remove KotlinSignature annotations from project code Oct 13, 2015
ant Build: Fix manifest for kotlin-compiler in jps build Jun 27, 2019
benchmarks [FIR] Introduce FirResolveProcessors May 24, 2020
build-common Collect unique subtypes from incremental compilation cache May 15, 2020
buildSrc as41: Setup bunch config and compatibility dsl for AS 4.1 May 27, 2020
compiler Minor, fix some warnings such as "unused main argument" in generators May 27, 2020
core Support fun interfaces in kotlinx-metadata May 27, 2020
dependencies Infer internal artifacts bootstrap repository Apr 29, 2020
docs Mention the `master` branch as the target of pull requests in contrib… Sep 2, 2019
generators Minor, fix some warnings such as "unused main argument" in generators May 27, 2020
gradle as41: Build against AS 4.1 C10 May 27, 2020
idea-runner Build: Fix usages of "java.home" for tools.jar dependency Sep 25, 2019
idea Code style settings: fix top border in UI May 28, 2020
include Drop coroutines from compiler jar, add appropriate plugin dependency May 24, 2020
j2k fix some tests for as36 May 8, 2020
jps-plugin as41: Build against AS 4.1 C10 May 27, 2020
js Minor, fix some warnings such as "unused main argument" in generators May 27, 2020
libraries [Commonizer] Leaf source sets should depend on commonized "common" libs May 28, 2020
license Remove Apache notice added to LGPL license text Mar 25, 2020
native [Commonizer] Update stats collector to report lifted up declarations May 28, 2020
nj2k KT-38450 Add functional interface converter to the NJ2K May 25, 2020
plugins Minor, fix some warnings such as "unused main argument" in generators May 27, 2020
prepare Revert renaming scripting plugin jar: May 27, 2020
resources Inline some properties from kotlinManifest.properties that were used … May 5, 2017
spec-docs Fix "Koltin" typos throughout codebase (#3383) May 20, 2020
test-instrumenter Fix nullability in the instrumenter, avoid exceptions on tests setup Jul 15, 2019
tests remove stale GradleScriptInputsWatcher references May 26, 2020
third-party KT-29586: Add android.annotation annotations Jan 31, 2019
.bunch as41: Setup bunch config and compatibility dsl for AS 4.1 May 27, 2020
.gitattributes Add "*.png binary" to .gitattributes May 15, 2020
.gitignore [JS_IR] Use new plugin to build Kotlin/JS stdlib with IR compiler May 8, 2020
CODE_OF_CONDUCT.md Code of Conduct for Kotlin project Feb 19, 2019
ChangeLog.md Added 1.3.71, 1.3.72 changelogs Apr 15, 2020
ReadMe.md Fix TeamCity badge May 7, 2020
build.gradle.kts KT-38250 The minimal supported Gradle version is 5.3 now May 27, 2020
gradle.properties Bootstrap: 1.4.0-dev-8798 May 20, 2020
gradlew Build: Upgrade gradle to 6.0.1 Nov 27, 2019
gradlew.bat Build: Update gradle to 5.6.2 Oct 28, 2019
settings.gradle Revert renaming scripting plugin jar: May 27, 2020
upload_plugins.gradle.kts Build: Rewrite upload_plugins.gradle in Kotlin Aug 16, 2019

ReadMe.md

official project TeamCity (simple build status) Maven Central GitHub license

Kotlin Programming Language

Welcome to Kotlin! Some handy links:

Editing Kotlin

Build environment requirements

In order to build Kotlin distribution you need to have:

  • JDK 1.6, 1.7, 1.8 and 9

  • Setup environment variables as following:

      JAVA_HOME="path to JDK 1.8"
      JDK_16="path to JDK 1.6"
      JDK_17="path to JDK 1.7"
      JDK_18="path to JDK 1.8"
      JDK_9="path to JDK 9"
    

For local development, if you're not working on bytecode generation or the standard library, it's OK to have only JDK 1.8 and JDK 9 installed, and to point JDK_16 and JDK_17 environment variables to your JDK 1.8 installation.

You also can use Gradle properties to setup JDK_* variables.

Note: The JDK 6 for MacOS is not available on Oracle's site. You can download it here.

On Windows you might need to add long paths setting to the repo:

git config core.longpaths true 

Building

The project is built with Gradle. Run Gradle to build the project and to run the tests using the following command on Unix/macOS:

./gradlew <tasks-and-options>

or the following command on Windows:

gradlew <tasks-and-options>

On the first project configuration gradle will download and setup the dependencies on

  • intellij-core is a part of command line compiler and contains only necessary APIs.
  • idea-full is a full blown IntelliJ IDEA Community Edition to be used in the plugin module.

These dependencies are quite large, so depending on the quality of your internet connection you might face timeouts getting them. In this case you can increase timeout by specifying the following command line parameters on the first run:

./gradlew -Dhttp.socketTimeout=60000 -Dhttp.connectionTimeout=60000

Important gradle tasks

  • clean - clean build results
  • dist - assembles the compiler distribution into dist/kotlinc/ folder
  • ideaPlugin - assembles the Kotlin IDEA plugin distribution into dist/artifacts/ideaPlugin/Kotlin/ folder
  • install - build and install all public artifacts into local maven repository
  • runIde - build IDEA plugin and run IDEA with it
  • coreLibsTest - build and run stdlib, reflect and kotlin-test tests
  • gradlePluginTest - build and run gradle plugin tests
  • compilerTest - build and run all compiler tests
  • ideaPluginTest - build and run all IDEA plugin tests

OPTIONAL: Some artifacts, mainly Maven plugin ones, are built separately with Maven. Refer to libraries/ReadMe.md for details.

Building for different versions of IntelliJ IDEA and Android Studio

Kotlin plugin is intended to work with several recent versions of IntelliJ IDEA and Android Studio. Each platform is allowed to have a different set of features and might provide a slightly different API. Instead of using several parallel Git branches, project stores everything in a single branch, but files may have counterparts with version extensions (*.as32, *.172, *.181). The primary file is expected to be replaced with its counterpart when targeting non-default platform.

More detailed description of this scheme can be found at https://github.com/JetBrains/bunches/blob/master/ReadMe.md.

Usually, there's no need to care about multiple platforms as all features are enabled everywhere by default. Additional counterparts should be created if there's an expected difference in behavior or an incompatible API usage is required and there's no reasonable workaround to save source compatibility. Kotlin plugin contains a pre-commit check that shows a warning if a file has been updated without its counterparts.

Development for some particular platform is possible after 'switching' that can be done with Bunch Tool from the command line.

cd kotlin-project-dir

# switching to IntelliJ Idea 2019.1
bunch switch 191

Working with the project in IntelliJ IDEA

Working with the Kotlin project requires at least IntelliJ IDEA 2019.1. You can download IntelliJ IDEA 2019.1 here.

After cloning the project, to import the project in IntelliJ choose the project directory in the Open project dialog. Then, after project opened, select File -> New -> Module from Existing Sources... in the menu, and select build.gradle.kts file in the project's root folder.

In the import dialog, select use default gradle wrapper.

To be able to run tests from IntelliJ easily, check Delegate IDE build/run actions to Gradle and choose Gradle Test Runner in the Gradle runner settings after importing the project.

At this time, you can use the latest released 1.3.x version of the Kotlin plugin for working with the code. To make sure you have the latest version installed, use Tools -> Kotlin -> Configure Kotlin Plugin Updates.

Compiling and running

From this root project there are Run/Debug Configurations for running IDEA or the Generate Compiler Tests for example; so if you want to try out the latest and greatest IDEA plugin

  • VCS -> Git -> Pull
  • Run the IDEA run configuration in the project
  • A child IntelliJ IDEA with the Kotlin plugin will then startup

Including into composite build

To include kotlin compiler into composite build you need to define dependencySubstitution for kotlin-compiler module in settings.gradle.kts

includeBuild("/path/to/kotlin") {
    dependencySubstitution {
        substitute(module("org.jetbrains.kotlin:kotlin-compiler"))
            .with(project(":include:kotlin-compiler"))
    }
}

or in settings.gradle

includeBuild('/path/to/kotlin') {
    dependencySubstitution {
        substitute module('org.jetbrains.kotlin:kotlin-compiler') with project(':include:kotlin-compiler')
    }
}

License

Kotlin is distributed under the terms of the Apache License (Version 2.0). See license folder for details.

Contributing

Please be sure to review Kotlin's contributing guidelines to learn how to help the project.

You can’t perform that action at this time.