mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-04-12 15:52:11 +00:00
Compare commits
120 Commits
FIR/invoke
...
native_com
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8c81b1760f | ||
|
|
dc4e06c6af | ||
|
|
38f6303702 | ||
|
|
b6353524a0 | ||
|
|
2e8d524b19 | ||
|
|
75afa63a79 | ||
|
|
3cd89c71cd | ||
|
|
7e376ff3c6 | ||
|
|
8cc11279d7 | ||
|
|
9a01d323aa | ||
|
|
a84470c124 | ||
|
|
87944cd866 | ||
|
|
ff97e1cea9 | ||
|
|
ff38226b01 | ||
|
|
e934478581 | ||
|
|
39616479ba | ||
|
|
38c5f58be7 | ||
|
|
0fe065ba77 | ||
|
|
4d601d34d0 | ||
|
|
39e22851cd | ||
|
|
d2cf140965 | ||
|
|
b1e2afccb5 | ||
|
|
a1d586cfc5 | ||
|
|
056f99228f | ||
|
|
88bdb7a8b9 | ||
|
|
9e61c7db7d | ||
|
|
572ac40df0 | ||
|
|
276aa903db | ||
|
|
8df4c48be2 | ||
|
|
a62d3812f6 | ||
|
|
2bd835f008 | ||
|
|
e7cf4fd3f2 | ||
|
|
320b0f907b | ||
|
|
7650f63921 | ||
|
|
419195e608 | ||
|
|
a616b79cba | ||
|
|
183eca867e | ||
|
|
7dbd79304d | ||
|
|
6e20d4deec | ||
|
|
068afcacae | ||
|
|
d2d73b5043 | ||
|
|
3391530809 | ||
|
|
4d96bfe089 | ||
|
|
9d37feab72 | ||
|
|
feb8b91075 | ||
|
|
fbe6c72c46 | ||
|
|
04a898dd44 | ||
|
|
8a05e00960 | ||
|
|
a690dbefe5 | ||
|
|
c366433034 | ||
|
|
8be1487429 | ||
|
|
7c62ffa9cd | ||
|
|
10c71ea2f2 | ||
|
|
bb98d95186 | ||
|
|
5098171326 | ||
|
|
e9c071aabc | ||
|
|
ed7b530513 | ||
|
|
65feaf9a4a | ||
|
|
558d1edd39 | ||
|
|
492dd24897 | ||
|
|
710134b4a6 | ||
|
|
c253404622 | ||
|
|
94a88c5c19 | ||
|
|
8ac926d3e2 | ||
|
|
1dcad35f21 | ||
|
|
6df81c5fc7 | ||
|
|
6c0cec151e | ||
|
|
22b2fc0c9f | ||
|
|
48596fe2c7 | ||
|
|
7fcc915fc4 | ||
|
|
7c4e5dbb09 | ||
|
|
4b12826e99 | ||
|
|
fab11884cc | ||
|
|
800ccdcc1d | ||
|
|
0d16f0de42 | ||
|
|
d191510b42 | ||
|
|
536ab732cd | ||
|
|
e100e3ec58 | ||
|
|
e6a560c49c | ||
|
|
f1636cab67 | ||
|
|
15a60b8640 | ||
|
|
86395bc6dc | ||
|
|
a8345c25f0 | ||
|
|
017d99de4c | ||
|
|
bb020202aa | ||
|
|
e111863ee2 | ||
|
|
d940851bdf | ||
|
|
868c22b4cf | ||
|
|
a8755cef36 | ||
|
|
1629c46177 | ||
|
|
3dfd560470 | ||
|
|
f745c84574 | ||
|
|
502a6086d6 | ||
|
|
1050b9d19b | ||
|
|
7954c1fced | ||
|
|
5454bed997 | ||
|
|
c361b184d9 | ||
|
|
4b1c847863 | ||
|
|
1162c1be5f | ||
|
|
b55d69c36b | ||
|
|
0af1dc35a4 | ||
|
|
ef27fe4e0e | ||
|
|
614c68280f | ||
|
|
bfbdd3f2fb | ||
|
|
157ad173ec | ||
|
|
dfbe43fe16 | ||
|
|
3dc42d2525 | ||
|
|
919d527aa7 | ||
|
|
45991a69ff | ||
|
|
a134e568f2 | ||
|
|
3af23f2d3f | ||
|
|
7572ee4122 | ||
|
|
41f3415b4a | ||
|
|
9dbd7269cb | ||
|
|
dd3d2311a8 | ||
|
|
b28e71730b | ||
|
|
5e91bc5697 | ||
|
|
ef209999f7 | ||
|
|
d364505652 | ||
|
|
30d2a1ae2a |
13
.bunch
13
.bunch
@@ -1,7 +1,8 @@
|
||||
191
|
||||
192
|
||||
183
|
||||
182_183
|
||||
as33_182_183
|
||||
as34_183
|
||||
as35
|
||||
182
|
||||
181_182
|
||||
as32_181_182
|
||||
as33_182
|
||||
as34
|
||||
as35_as34
|
||||
191
|
||||
|
||||
11
.gitignore
vendored
11
.gitignore
vendored
@@ -2,7 +2,7 @@
|
||||
.idea/shelf
|
||||
/android.tests.dependencies
|
||||
/confluence/target
|
||||
/dependencies/repo
|
||||
/dependencies
|
||||
/dist
|
||||
/local
|
||||
/gh-pages
|
||||
@@ -15,6 +15,10 @@ workspace.xml
|
||||
*.versionsBackup
|
||||
/idea/testData/debugger/tinyApp/classes*
|
||||
/jps-plugin/testData/kannotator
|
||||
/ultimate/dependencies
|
||||
/ultimate/ideaSDK
|
||||
/ultimate/out
|
||||
/ultimate/tmp
|
||||
/js/js.translator/testData/out/
|
||||
/js/js.translator/testData/out-min/
|
||||
.gradle/
|
||||
@@ -36,9 +40,4 @@ build/
|
||||
.idea/inspectionProfiles/profiles_settings.xml
|
||||
.idea/.name
|
||||
.idea/artifacts/dist_auto_*
|
||||
.idea/artifacts/ideaPlugin.xml
|
||||
kotlin-ultimate/
|
||||
node_modules/
|
||||
.rpt2_cache/
|
||||
libraries/tools/kotlin-test-nodejs-runner/lib/
|
||||
local.properties
|
||||
|
||||
8
.idea/ant.xml
generated
Normal file
8
.idea/ant.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AntConfiguration">
|
||||
<buildFile url="file://$PROJECT_DIR$/libraries/build-docs.xml">
|
||||
<maximumHeapSize value="1024" />
|
||||
</buildFile>
|
||||
</component>
|
||||
</project>
|
||||
10
.idea/artifacts/dist.xml
generated
10
.idea/artifacts/dist.xml
generated
@@ -8,16 +8,16 @@
|
||||
</element>
|
||||
</element>
|
||||
<element id="file-copy" path="$PROJECT_DIR$/build/build.txt" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-minimal-for-test/1.3.50-dev-397/9537914625d42146d9ebdd50cc7427c1116958dd/kotlin-stdlib-minimal-for-test-1.3.50-dev-397.jar" output-file-name="kotlin-stdlib-minimal-for-test.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-minimal-for-test/1.3.30-dev-1419/3fc425e5a7e1979aad08d0f420f07c19c9c36d63/kotlin-stdlib-minimal-for-test-1.3.30-dev-1419.jar" output-file-name="kotlin-stdlib-minimal-for-test.jar" />
|
||||
<element id="directory" name="common">
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.3.50-dev-397/41d9c6981aea1e2b3be9491c0d69f068cfeda9d8/kotlin-stdlib-common-1.3.50-dev-397.jar" output-file-name="kotlin-stdlib-common.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.3.50-dev-397/908a2bdb953a6cc1e0ee306066b435c7469bc1/kotlin-stdlib-common-1.3.50-dev-397-sources.jar" output-file-name="kotlin-stdlib-common-sources.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.3.30-dev-1419/1edc4fbedf02e815e3d277c47640c9c79b5df72e/kotlin-stdlib-common-1.3.30-dev-1419.jar" output-file-name="kotlin-stdlib-common.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.3.30-dev-1419/f83bc827e5ac23a35f2700edd716971ae9e50100/kotlin-stdlib-common-1.3.30-dev-1419-sources.jar" output-file-name="kotlin-stdlib-common-sources.jar" />
|
||||
</element>
|
||||
<element id="directory" name="js">
|
||||
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-js/1.3.50-dev-397/8fecb29089c335c4cb37f2ae37f204bd8c0a015/kotlin-stdlib-js-1.3.50-dev-397.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-js/1.3.30-dev-1419/4dd9f2176adacefa49984a277b71d7a1645ceda2/kotlin-stdlib-js-1.3.30-dev-1419.jar" path-in-jar="/" />
|
||||
</element>
|
||||
<element id="directory" name="maven">
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.3.50-dev-397/49551e2d0590be904a7178f881a90753425fe8e0/kotlin-stdlib-1.3.50-dev-397-sources.jar" output-file-name="kotlin-stdlib-sources.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.3.30-dev-1419/561605d51586e253a15097d3f1d386fb6758fdd4/kotlin-stdlib-1.3.30-dev-1419-sources.jar" output-file-name="kotlin-stdlib-sources.jar" />
|
||||
</element>
|
||||
<element id="directory" name="kotlinc">
|
||||
<element id="artifact" artifact-name="kotlinc" />
|
||||
|
||||
215
.idea/artifacts/ideaPlugin.xml
generated
Normal file
215
.idea/artifacts/ideaPlugin.xml
generated
Normal file
@@ -0,0 +1,215 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact name="ideaPlugin">
|
||||
<output-path>$PROJECT_DIR$/out/artifacts/ideaPlugin</output-path>
|
||||
<root id="root">
|
||||
<element id="directory" name="Kotlin">
|
||||
<element id="directory" name="lib">
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/io.javaslang/javaslang/2.0.6/415b0d40db4890849270c2a5cb50050fc6ee7636/javaslang-2.0.6.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/javax.inject/javax.inject/1/6975da39a7040257bd51d21a231b76c915872d38/javax.inject-1.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core/1.0.1/f33e8dab753f33d1bbb07cca664fd6f13d993d7e/kotlinx-coroutines-core-1.0.1.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-jdk8/1.0.1/ee52dcd51dbdd3f94271cab32c76ce820adfe024/kotlinx-coroutines-jdk8-1.0.1.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains/markdown/0.1.25/f22b57c632b83433112102c9da9a0f8edf946091/markdown-0.1.25.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/io.javaslang/javaslang-match/2.0.6/d57a666939103b659813de52102d3ff0baa8ad5f/javaslang-match-2.0.6.jar" />
|
||||
<element id="archive" name="allopen-ide-plugin.jar">
|
||||
<element id="module-output" name="kotlin.allopen-ide-plugin.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/plugins/allopen/allopen-ide/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="android-lint.jar">
|
||||
<element id="module-output" name="kotlin.plugins.lint.main" />
|
||||
<element id="module-output" name="kotlin.plugins.uast-kotlin.main" />
|
||||
<element id="module-output" name="kotlin.plugins.uast-kotlin-idea.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/prepare/android-lint/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="android-ide.jar">
|
||||
<element id="module-output" name="kotlin.idea.idea-android.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/idea/idea-android/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="android-output-parser-ide.jar">
|
||||
<element id="module-output" name="kotlin.idea.idea-android-output-parser.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/idea/idea-android/idea-android-output-parser/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="idea-git.jar">
|
||||
<element id="module-output" name="kotlin.idea.idea-git.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/idea/idea-git/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="jps-common-ide.jar">
|
||||
<element id="module-output" name="kotlin.idea.idea-jps-common.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/idea/idea-jps-common/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="jvm-ide.jar">
|
||||
<element id="module-output" name="kotlin.idea.idea-jvm.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/idea/idea-jvm/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="maven-ide.jar">
|
||||
<element id="module-output" name="kotlin.idea.idea-maven.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/idea/idea-maven/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="kotlin-gradle-tooling.jar">
|
||||
<element id="module-output" name="kotlin.idea.kotlin-gradle-tooling.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/idea/kotlin-gradle-tooling/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="j2k.jar">
|
||||
<element id="module-output" name="kotlin.j2k.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/j2k/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="kotlin-allopen-compiler-plugin.jar">
|
||||
<element id="module-output" name="kotlin.kotlin-allopen-compiler-plugin.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/plugins/allopen/allopen-cli/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="kotlin-noarg-compiler-plugin.jar">
|
||||
<element id="module-output" name="kotlin.kotlin-noarg-compiler-plugin.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/plugins/noarg/noarg-cli/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="kotlin-sam-with-receiver-compiler-plugin.jar">
|
||||
<element id="module-output" name="kotlin.kotlin-sam-with-receiver-compiler-plugin.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/plugins/sam-with-receiver/sam-with-receiver-cli/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="kotlin-script-util.jar">
|
||||
<element id="module-output" name="kotlin.kotlin-script-util.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/libraries/tools/kotlin-script-util/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="kotlin-scripting-common.jar">
|
||||
<element id="module-output" name="kotlin.kotlin-scripting-common.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/libraries/scripting/common/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="kotlin-scripting-common-sources.jar">
|
||||
<element id="dir-copy" path="$PROJECT_DIR$/libraries/scripting/common/src" />
|
||||
<element id="directory" name="main">
|
||||
<element id="directory" name="kotlin" />
|
||||
</element>
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/libraries/scripting/common/build/tmp/sourcesJar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="kotlin-scripting-compiler.jar">
|
||||
<element id="module-output" name="kotlin.kotlin-scripting-compiler.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/plugins/scripting/scripting-cli/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="kotlin-scripting-idea.jar">
|
||||
<element id="module-output" name="kotlin.kotlin-scripting-idea.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/plugins/scripting/scripting-idea/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="kotlin-scripting-intellij.jar">
|
||||
<element id="module-output" name="kotlin.kotlin-scripting-intellij.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/libraries/scripting/intellij/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="kotlin-scripting-jvm.jar">
|
||||
<element id="module-output" name="kotlin.kotlin-scripting-jvm.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/libraries/scripting/jvm/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="kotlin-scripting-jvm-sources.jar">
|
||||
<element id="dir-copy" path="$PROJECT_DIR$/libraries/scripting/jvm/src" />
|
||||
<element id="directory" name="main">
|
||||
<element id="directory" name="kotlin" />
|
||||
</element>
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/libraries/scripting/jvm/build/tmp/sourcesJar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="kotlinx-serialization-compiler-plugin.jar">
|
||||
<element id="module-output" name="kotlin.kotlinx-serialization-compiler-plugin.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/plugins/kotlin-serialization/kotlin-serialization-compiler/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="kotlinx-serialization-ide-plugin.jar">
|
||||
<element id="module-output" name="kotlin.kotlinx-serialization-ide-plugin.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/plugins/kotlin-serialization/kotlin-serialization-ide/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="noarg-ide-plugin.jar">
|
||||
<element id="module-output" name="kotlin.noarg-ide-plugin.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/plugins/noarg/noarg-ide/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="android-extensions-compiler.jar">
|
||||
<element id="module-output" name="kotlin.plugins.android-extensions-compiler.main" />
|
||||
<element id="module-output" name="kotlin.kotlin-android-extensions-runtime.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/plugins/android-extensions/android-extensions-compiler/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="android-extensions-ide.jar">
|
||||
<element id="module-output" name="kotlin.plugins.android-extensions-ide.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/plugins/android-extensions/android-extensions-idea/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="kapt3-idea.jar">
|
||||
<element id="module-output" name="kotlin.plugins.kapt3-idea.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/plugins/kapt3/kapt3-idea/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="kotlin-script-runtime.jar">
|
||||
<element id="module-output" name="kotlin.kotlin-script-runtime.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/libraries/tools/script-runtime/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="sam-with-receiver-ide-plugin.jar">
|
||||
<element id="module-output" name="kotlin.sam-with-receiver-ide-plugin.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/plugins/sam-with-receiver/sam-with-receiver-ide/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="directory" name="jps">
|
||||
<element id="artifact" artifact-name="kotlin-jps-plugin.jar" />
|
||||
</element>
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.3.30-dev-1419/285fde038cb28087a51aee95919d428a2511b443/kotlin-stdlib-jdk8-1.3.30-dev-1419.jar" output-file-name="kotlin-stdlib-jdk8.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.3.30-dev-1419/72c0c2470715b0aa18d5624c4fa9db0345b6c09f/kotlin-stdlib-jdk7-1.3.30-dev-1419.jar" output-file-name="kotlin-stdlib-jdk7.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.3.30-dev-1419/c4bca00118a72c8d59fbe3d2c6621e0d79f12095/kotlin-stdlib-1.3.30-dev-1419.jar" output-file-name="kotlin-stdlib.jar" />
|
||||
<element id="artifact" artifact-name="kotlin-reflect.jar" />
|
||||
<element id="artifact" artifact-name="kotlin-compiler-client-embeddable.jar" />
|
||||
<element id="artifact" artifact-name="kotlin-plugin.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.3.30-dev-1419/1edc4fbedf02e815e3d277c47640c9c79b5df72e/kotlin-stdlib-common-1.3.30-dev-1419.jar" output-file-name="kotlin-stdlib-common.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar" />
|
||||
<element id="artifact" artifact-name="kotlin-daemon-client.jar" />
|
||||
</element>
|
||||
<element id="directory" name="kotlinc">
|
||||
<element id="artifact" artifact-name="kotlinc" />
|
||||
</element>
|
||||
</element>
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
32
.idea/artifacts/kotlin_compiler_jar.xml
generated
32
.idea/artifacts/kotlin_compiler_jar.xml
generated
@@ -8,28 +8,28 @@
|
||||
</element>
|
||||
<element id="file-copy" path="$PROJECT_DIR$/prepare/compiler/build/tmp/packCompiler/MANIFEST.MF" />
|
||||
</element>
|
||||
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/builtins/1.3.50-dev-397/842ec330289185e9ea136dd86f2846b6ff9a8a10/builtins-1.3.50-dev-397.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/dependencies/repo/kotlin.build/ideaIC/191.6707.61/artifacts/lib/asm-all-7.0.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/dependencies/repo/kotlin.build/ideaIC/191.6707.61/artifacts/lib/guava-25.1-jre.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/dependencies/repo/kotlin.build/intellij-core/191.6707.61/artifacts/intellij-core.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/builtins/1.3.30-dev-1419/d204f62db9ed29f42e939e0e62c4ee933863e05b/builtins-1.3.30-dev-1419.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/buildSrc/prepare-deps/intellij-sdk/build/repo/kotlin.build.custom.deps/183.5153.4/intellij/lib/asm-all-7.0.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/buildSrc/prepare-deps/intellij-sdk/build/repo/kotlin.build.custom.deps/183.5153.4/intellij/lib/guava-25.1-jre.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/buildSrc/prepare-deps/intellij-sdk/build/repo/kotlin.build.custom.deps/183.5153.4/intellij-core/intellij-core.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.fusesource.jansi/jansi/1.16/b1aaf0028852164ab6b4057192ccd0ba7dedd3a5/jansi-1.16.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/dependencies/repo/kotlin.build/intellij-core/191.6707.61/artifacts/java-compatibility-1.0.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/buildSrc/prepare-deps/intellij-sdk/build/repo/kotlin.build.custom.deps/183.5153.4/intellij-core/java-compatibility-1.0.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/io.javaslang/javaslang/2.0.6/415b0d40db4890849270c2a5cb50050fc6ee7636/javaslang-2.0.6.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/io.javaslang/javaslang-match/2.0.6/d57a666939103b659813de52102d3ff0baa8ad5f/javaslang-match-2.0.6.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/javax.inject/javax.inject/1/6975da39a7040257bd51d21a231b76c915872d38/javax.inject-1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/dependencies/repo/kotlin.build/ideaIC/191.6707.61/artifacts/lib/jdom.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/buildSrc/prepare-deps/intellij-sdk/build/repo/kotlin.build.custom.deps/183.5153.4/intellij/lib/jdom.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jline/jline/3.3.1/d8a30137fe4ee2246b71b3915baac767d348c5bb/jline-3.3.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/dependencies/repo/kotlin.build/ideaIC/191.6707.61/artifacts/lib/jna-platform.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/dependencies/repo/kotlin.build/ideaIC/191.6707.61/artifacts/lib/jna.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/dependencies/repo/kotlin.build/jps-standalone/191.6707.61/artifacts/jps-model.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/buildSrc/prepare-deps/intellij-sdk/build/repo/kotlin.build.custom.deps/183.5153.4/intellij/lib/jna-platform.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/buildSrc/prepare-deps/intellij-sdk/build/repo/kotlin.build.custom.deps/183.5153.4/intellij/lib/jna.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/buildSrc/prepare-deps/intellij-sdk/build/repo/kotlin.build.custom.deps/183.5153.4/jps-standalone/jps-model.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/1.3.9/40719ea6961c0cb6afaeb6a921eaa1f6afd4cfdf/jsr305-1.3.9.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core/1.0.1/f33e8dab753f33d1bbb07cca664fd6f13d993d7e/kotlinx-coroutines-core-1.0.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/dependencies/repo/kotlin.build/ideaIC/191.6707.61/artifacts/lib/log4j.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/dependencies/repo/kotlin.build/ideaIC/191.6707.61/artifacts/lib/lz4-1.3.0.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/dependencies/repo/kotlin.build/ideaIC/191.6707.61/artifacts/lib/oro-2.0.8.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/dependencies/repo/kotlin.build/ideaIC/191.6707.61/artifacts/lib/picocontainer-1.2.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/buildSrc/prepare-deps/intellij-sdk/build/repo/kotlin.build.custom.deps/183.5153.4/intellij/lib/log4j.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/buildSrc/prepare-deps/intellij-sdk/build/repo/kotlin.build.custom.deps/183.5153.4/intellij/lib/lz4-1.3.0.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/buildSrc/prepare-deps/intellij-sdk/build/repo/kotlin.build.custom.deps/183.5153.4/intellij/lib/oro-2.0.8.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/buildSrc/prepare-deps/intellij-sdk/build/repo/kotlin.build.custom.deps/183.5153.4/intellij/lib/picocontainer-1.2.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/protobuf-relocated/2.6.1/9a9536949348fae596f4878243dffd0ed351993d/protobuf-relocated-2.6.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/dependencies/repo/kotlin.build/ideaIC/191.6707.61/artifacts/lib/streamex-0.6.7.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$PROJECT_DIR$/buildSrc/prepare-deps/intellij-sdk/build/repo/kotlin.build.custom.deps/183.5153.4/intellij/lib/streamex-0.6.7.jar" path-in-jar="/" />
|
||||
<element id="module-output" name="kotlin.compiler.backend-common.main" />
|
||||
<element id="module-output" name="kotlin.compiler.backend.js.main" />
|
||||
<element id="module-output" name="kotlin.compiler.backend.jvm.main" />
|
||||
@@ -44,6 +44,7 @@
|
||||
<element id="module-output" name="kotlin.core.descriptors.main" />
|
||||
<element id="module-output" name="kotlin.core.deserialization.main" />
|
||||
<element id="module-output" name="kotlin.compiler.frontend.java.main" />
|
||||
<element id="module-output" name="kotlin.compiler.frontend.script.main" />
|
||||
<element id="module-output" name="kotlin.compiler.frontend.main" />
|
||||
<element id="module-output" name="kotlin.compiler.incremental-compilation-impl.main" />
|
||||
<element id="module-output" name="kotlin.compiler.ir.backend.common.main" />
|
||||
@@ -66,9 +67,6 @@
|
||||
<element id="module-output" name="kotlin.core.util.runtime.main" />
|
||||
<element id="module-output" name="kotlin.compiler.util.main" />
|
||||
<element id="module-output" name="kotlin.compiler.frontend.common.main" />
|
||||
<element id="module-output" name="kotlin.core.type-system.main" />
|
||||
<element id="module-output" name="kotlin.compiler.ir.serialization.common.main" />
|
||||
<element id="module-output" name="kotlin.compiler.ir.serialization.js.main" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
1
.idea/artifacts/kotlin_jps_plugin_jar.xml
generated
1
.idea/artifacts/kotlin_jps_plugin_jar.xml
generated
@@ -32,7 +32,6 @@
|
||||
<element id="module-output" name="kotlin.kotlin-preloader.main" />
|
||||
<element id="module-output" name="kotlin.core.util.runtime.main" />
|
||||
<element id="module-output" name="kotlin.compiler.util.main" />
|
||||
<element id="module-output" name="kotlin.core.type-system.main" />
|
||||
<element id="file-copy" path="$PROJECT_DIR$/resources/kotlinManifest.properties" />
|
||||
</root>
|
||||
</artifact>
|
||||
|
||||
57
.idea/artifacts/kotlin_plugin_jar.xml
generated
Normal file
57
.idea/artifacts/kotlin_plugin_jar.xml
generated
Normal file
@@ -0,0 +1,57 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="kotlin-plugin.jar">
|
||||
<output-path>$PROJECT_DIR$/out/artifacts/kotlin_plugin_jar</output-path>
|
||||
<root id="archive" name="kotlin-plugin.jar">
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/prepare/idea-plugin/build/tmp/shadowJar/MANIFEST.MF" />
|
||||
</element>
|
||||
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/builtins/1.3.30-dev-1419/d204f62db9ed29f42e939e0e62c4ee933863e05b/builtins-1.3.30-dev-1419.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/protobuf-relocated/2.6.1/9a9536949348fae596f4878243dffd0ed351993d/protobuf-relocated-2.6.1.jar" path-in-jar="/" />
|
||||
<element id="module-output" name="kotlin.plugins.annotation-based-compiler-plugins-ide-support.main" />
|
||||
<element id="module-output" name="kotlin.compiler.backend-common.main" />
|
||||
<element id="module-output" name="kotlin.compiler.backend.main" />
|
||||
<element id="module-output" name="kotlin.compiler.backend.jvm.main" />
|
||||
<element id="module-output" name="kotlin.compiler.cli-common.main" />
|
||||
<element id="module-output" name="kotlin.compiler.container.main" />
|
||||
<element id="module-output" name="kotlin.compiler.daemon-common.main" />
|
||||
<element id="module-output" name="kotlin.core.descriptors.jvm.main" />
|
||||
<element id="module-output" name="kotlin.core.descriptors.main" />
|
||||
<element id="module-output" name="kotlin.core.deserialization.main" />
|
||||
<element id="module-output" name="kotlin.eval4j.main" />
|
||||
<element id="module-output" name="kotlin.idea.fir-view.main" />
|
||||
<element id="module-output" name="kotlin.compiler.frontend.java.main" />
|
||||
<element id="module-output" name="kotlin.compiler.frontend.script.main" />
|
||||
<element id="module-output" name="kotlin.compiler.frontend.main" />
|
||||
<element id="module-output" name="kotlin.idea.ide-common.main" />
|
||||
<element id="module-output" name="kotlin.idea.idea-core.main" />
|
||||
<element id="module-output" name="kotlin.idea.formatter.main" />
|
||||
<element id="module-output" name="kotlin.idea.idea-gradle-native.main" />
|
||||
<element id="module-output" name="kotlin.idea.idea-gradle.main" />
|
||||
<element id="module-output" name="kotlin.idea.idea-native.main" />
|
||||
<element id="module-output" name="kotlin.idea.main" />
|
||||
<element id="module-output" name="kotlin.compiler.ir.backend.common.main" />
|
||||
<element id="module-output" name="kotlin.compiler.ir.psi2ir.main" />
|
||||
<element id="module-output" name="kotlin.compiler.ir.tree.main" />
|
||||
<element id="module-output" name="kotlin.js.js.ast.main" />
|
||||
<element id="module-output" name="kotlin.js.js.frontend.main" />
|
||||
<element id="module-output" name="kotlin.js.js.parser.main" />
|
||||
<element id="module-output" name="kotlin.js.js.serializer.main" />
|
||||
<element id="module-output" name="kotlin.js.js.translator.main" />
|
||||
<element id="module-output" name="kotlin.kotlin-build-common.main" />
|
||||
<element id="module-output" name="kotlin.kotlin-native.kotlin-native-library-reader.main" />
|
||||
<element id="module-output" name="kotlin.kotlin-native.kotlin-native-utils.main" />
|
||||
<element id="module-output" name="kotlin.kotlin-preloader.main" />
|
||||
<element id="module-output" name="kotlin.compiler.light-classes.main" />
|
||||
<element id="module-output" name="kotlin.core.metadata.jvm.main" />
|
||||
<element id="module-output" name="kotlin.core.metadata.main" />
|
||||
<element id="module-output" name="kotlin.compiler.plugin-api.main" />
|
||||
<element id="module-output" name="kotlin.compiler.psi.main" />
|
||||
<element id="module-output" name="kotlin.compiler.resolution.main" />
|
||||
<element id="module-output" name="kotlin.compiler.serialization.main" />
|
||||
<element id="module-output" name="kotlin.core.util.runtime.main" />
|
||||
<element id="module-output" name="kotlin.compiler.util.main" />
|
||||
<element id="file-copy" path="$PROJECT_DIR$/resources/kotlinManifest.properties" />
|
||||
<element id="module-output" name="kotlin.compiler.frontend.common.main" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
1
.idea/artifacts/kotlin_reflect_jar.xml
generated
1
.idea/artifacts/kotlin_reflect_jar.xml
generated
@@ -16,7 +16,6 @@
|
||||
<element id="module-output" name="kotlin.core.metadata.jvm.main" />
|
||||
<element id="module-output" name="kotlin.core.metadata.main" />
|
||||
<element id="module-output" name="kotlin.core.util.runtime.main" />
|
||||
<element id="module-output" name="kotlin.core.type-system.main" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
23
.idea/artifacts/kotlinc.xml
generated
23
.idea/artifacts/kotlinc.xml
generated
@@ -7,7 +7,7 @@
|
||||
</element>
|
||||
<element id="directory" name="lib">
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar" />
|
||||
<element id="file-copy" path="$PROJECT_DIR$/dependencies/repo/kotlin.build/ideaIC/191.6707.61/artifacts/lib/trove4j.jar" />
|
||||
<element id="file-copy" path="$PROJECT_DIR$/buildSrc/prepare-deps/intellij-sdk/build/repo/kotlin.build.custom.deps/183.5153.4/intellij/lib/trove4j.jar" />
|
||||
<element id="archive" name="allopen-compiler-plugin.jar">
|
||||
<element id="module-output" name="kotlin.kotlin-allopen-compiler-plugin.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
@@ -129,12 +129,9 @@
|
||||
<element id="archive" name="kotlin-scripting-compiler.jar">
|
||||
<element id="module-output" name="kotlin.kotlin-scripting-compiler.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/plugins/scripting/scripting-compiler/build/tmp/jar/MANIFEST.MF" />
|
||||
<element id="file-copy" path="$PROJECT_DIR$/plugins/scripting/scripting-cli/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="archive" name="kotlin-scripting-compiler-impl.jar">
|
||||
<element id="module-output" name="kotlin.kotlin-scripting-compiler-impl.main" />
|
||||
</element>
|
||||
<element id="archive" name="kotlin-scripting-jvm.jar">
|
||||
<element id="module-output" name="kotlin.kotlin-scripting-jvm.main" />
|
||||
<element id="directory" name="META-INF">
|
||||
@@ -226,14 +223,14 @@
|
||||
<element id="file-copy" path="$PROJECT_DIR$/plugins/android-extensions/android-extensions-compiler/build/tmp/jar/MANIFEST.MF" />
|
||||
</element>
|
||||
</element>
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.3.50-dev-397/cea97f07f62c8c851aca7dc9710d9c0214b585ad/kotlin-stdlib-jdk8-1.3.50-dev-397.jar" output-file-name="kotlin-stdlib-jdk8.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.3.50-dev-397/37b7a5e6a0178c1ef97d486c2baaab0b07e119d9/kotlin-stdlib-jdk7-1.3.50-dev-397.jar" output-file-name="kotlin-stdlib-jdk7.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.3.50-dev-397/a49478f35e92b4bf2e1a3bd628dc71e561d2eb04/kotlin-stdlib-1.3.50-dev-397.jar" output-file-name="kotlin-stdlib.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.3.50-dev-397/d87ad86ff1d0f960c89bee95c4f643297e54f9f1/kotlin-stdlib-jdk7-1.3.50-dev-397-sources.jar" output-file-name="kotlin-stdlib-jdk7-sources.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.3.50-dev-397/1f51a4f91853cfea7a295fd3154b11ed16d64932/kotlin-stdlib-jdk8-1.3.50-dev-397-sources.jar" output-file-name="kotlin-stdlib-jdk8-sources.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-js/1.3.50-dev-397/a6fb09cf5de9f1afa10699ae2b58156067307cd/kotlin-stdlib-js-1.3.50-dev-397-sources.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-js/1.3.50-dev-397/8fecb29089c335c4cb37f2ae37f204bd8c0a015/kotlin-stdlib-js-1.3.50-dev-397.jar" output-file-name="kotlin-stdlib-js.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.3.50-dev-397/49551e2d0590be904a7178f881a90753425fe8e0/kotlin-stdlib-1.3.50-dev-397-sources.jar" output-file-name="kotlin-stdlib-sources.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.3.30-dev-1419/285fde038cb28087a51aee95919d428a2511b443/kotlin-stdlib-jdk8-1.3.30-dev-1419.jar" output-file-name="kotlin-stdlib-jdk8.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.3.30-dev-1419/72c0c2470715b0aa18d5624c4fa9db0345b6c09f/kotlin-stdlib-jdk7-1.3.30-dev-1419.jar" output-file-name="kotlin-stdlib-jdk7.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.3.30-dev-1419/c4bca00118a72c8d59fbe3d2c6621e0d79f12095/kotlin-stdlib-1.3.30-dev-1419.jar" output-file-name="kotlin-stdlib.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.3.30-dev-1419/e2746fab1a3723c30250a10362be8c12e3d2bdd/kotlin-stdlib-jdk7-1.3.30-dev-1419-sources.jar" output-file-name="kotlin-stdlib-jdk7-sources.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.3.30-dev-1419/40b256e6fd67b3217ac2aefcb70c4bf2f5d76f4f/kotlin-stdlib-jdk8-1.3.30-dev-1419-sources.jar" output-file-name="kotlin-stdlib-jdk8-sources.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-js/1.3.30-dev-1419/cc7460047507b64f44b9e156dbcaa3079fc43594/kotlin-stdlib-js-1.3.30-dev-1419-sources.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-js/1.3.30-dev-1419/4dd9f2176adacefa49984a277b71d7a1645ceda2/kotlin-stdlib-js-1.3.30-dev-1419.jar" output-file-name="kotlin-stdlib-js.jar" />
|
||||
<element id="file-copy" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.3.30-dev-1419/561605d51586e253a15097d3f1d386fb6758fdd4/kotlin-stdlib-1.3.30-dev-1419-sources.jar" output-file-name="kotlin-stdlib-sources.jar" />
|
||||
<element id="artifact" artifact-name="kotlin-compiler.jar" />
|
||||
<element id="artifact" artifact-name="kotlin-reflect.jar" />
|
||||
<element id="artifact" artifact-name="kotlin-daemon-client.jar" />
|
||||
|
||||
2
.idea/copyright/apache.xml
generated
2
.idea/copyright/apache.xml
generated
@@ -1,7 +1,7 @@
|
||||
<component name="CopyrightManager">
|
||||
<copyright>
|
||||
<option name="allowReplaceRegexp" value="JetBrains" />
|
||||
<option name="notice" value="Copyright 2010-&#36;today.year JetBrains s.r.o. and Kotlin Programming Language contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file." />
|
||||
<option name="notice" value="Copyright 2010-&#36;today.year JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file." />
|
||||
<option name="myName" value="apache" />
|
||||
</copyright>
|
||||
</component>
|
||||
3
.idea/dictionaries/4u7.xml
generated
3
.idea/dictionaries/4u7.xml
generated
@@ -4,11 +4,8 @@
|
||||
<w>cidr</w>
|
||||
<w>foldable</w>
|
||||
<w>instrumentator</w>
|
||||
<w>jdks</w>
|
||||
<w>protobuf</w>
|
||||
<w>redirector</w>
|
||||
<w>remapper</w>
|
||||
<w>unpresent</w>
|
||||
</words>
|
||||
</dictionary>
|
||||
</component>
|
||||
7
.idea/dictionaries/NK.xml
generated
7
.idea/dictionaries/NK.xml
generated
@@ -1,7 +0,0 @@
|
||||
<component name="ProjectDictionaryState">
|
||||
<dictionary name="NK">
|
||||
<words>
|
||||
<w>typealias</w>
|
||||
</words>
|
||||
</dictionary>
|
||||
</component>
|
||||
1
.idea/dictionaries/Nikolay_Krasko.xml
generated
1
.idea/dictionaries/Nikolay_Krasko.xml
generated
@@ -19,7 +19,6 @@
|
||||
<w>preloader</w>
|
||||
<w>preloading</w>
|
||||
<w>preprocess</w>
|
||||
<w>proximities</w>
|
||||
<w>redeclarations</w>
|
||||
<w>smap</w>
|
||||
<w>subclassed</w>
|
||||
|
||||
41
.idea/inspectionProfiles/idea_default.xml
generated
41
.idea/inspectionProfiles/idea_default.xml
generated
@@ -21,6 +21,7 @@
|
||||
</inspection_tool>
|
||||
<inspection_tool class="BooleanMethodIsAlwaysInverted" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="BusyWait" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="CStyleArrayDeclaration" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="CastConflictsWithInstanceof" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="CastToIncompatibleInterface" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="ChainedEquality" enabled="false" level="WARNING" enabled_by_default="true" />
|
||||
@@ -75,7 +76,6 @@
|
||||
<option name="m_ignoreLoopsWithoutConditions" value="false" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="ForLoopThatDoesntUseLoopVariable" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="GrPackage" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="HtmlUnknownTag" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="myValues">
|
||||
<value>
|
||||
@@ -98,22 +98,29 @@
|
||||
<inspection_tool class="IncompatibleAPI" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="problems">
|
||||
<list>
|
||||
<Problem reference="com.intellij.util.JdomKt#element" reason="Removed in 191" />
|
||||
<Problem reference="com.intellij.util.AstLoadingFilter" reason="Absent in 181. Almost all methods were renamed in 183. Use org.jetbrains.kotlin.util.AstLoadingFilter instead." />
|
||||
<Problem reference="com.intellij.codeInspection.reference.RefFile#getPsiElement" reason="Absent in 182. Use psiFile extension instead." />
|
||||
<Problem reference="com.intellij.execution.JavaRunConfigurationExtensionManager#getInstance" reason="Can't be used in Kotlin, because method was replaced with property after J2K in 183. Use JavaRunConfigurationExtensionManagerUtil instead." />
|
||||
<Problem reference="org.jetbrains.java.decompiler.main.decompiler.BaseDecompiler#addSpace" reason="Method was replaced with outher methods in 182. Use addSpaceEx instead." />
|
||||
<Problem reference="com.intellij.util.JdomKt#element" reason="Removed in 191" />
|
||||
<Problem reference="com.intellij.execution.configurations.RunConfigurationBase" reason="Generalized in 183. Use RunConfigurationBaseAny instead in signatures." />
|
||||
<Problem reference="com.intellij.execution.configurations.LocatableConfigurationBase" reason="Generalized in 183. Use LocatableConfigurationBaseAny instead in signatures." />
|
||||
<Problem reference="com.intellij.execution.configurations.ModuleBasedConfiguration" reason="Generalized in 183. Use ModuleBasedConfigurationElement instead." />
|
||||
<Problem reference="com.intellij.util.AstLoadingFilter" reason="Absent in 181. Almost all methods were renamed in 183. Use org.jetbrains.kotlin.util.AstLoadingFilter instead." />
|
||||
<Problem reference="com.intellij.testFramework.codeInsight.hierarchy.HierarchyViewTestFixture" reason="Absent in <= 181. Use org.jetbrains.kotlin.test.HierarchyViewTestFixture instead." />
|
||||
<Problem reference="org.jetbrains.kotlin.test.HierarchyViewTestFixtureCompat" reason="Do not use the wrapper for 181 directly. Use org.jetbrains.kotlin.test.HierarchyViewTestFixture instead." />
|
||||
<Problem reference="com.intellij.psi.codeStyle.CodeStyleSettingsProvider" reason="Additional method is introduced in 183 instead of deprecated one. Use CodeStyleSettingsProviderCompat instead." />
|
||||
<Problem reference="com.intellij.openapi.extensions.ExtensionPointName#getExtensionList()" reason="Absent in 182 and before." />
|
||||
<Problem reference="com.intellij.openapi.extensions.ExtensionPointName#extensions()" reason="Absent in 182." />
|
||||
<Problem reference="com.intellij.openapi.extensions.ExtensionPointName#hasAnyExtensions" reason="Absent in 182." />
|
||||
<Problem reference="com.intellij.openapi.extensions.ExtensionPointName#getExtensionList(com.intellij.openapi.extensions.AreaInstance)" reason="Absent in 182." />
|
||||
<Problem reference="com.intellij.openapi.extensions.ExtensionPointName#extensions(com.intellij.openapi.extensions.AreaInstance)" reason="Absent in 182." />
|
||||
<Problem reference="com.intellij.openapi.extensions.ExtensionPointName#getPoint" reason="Absent in 182." />
|
||||
<Problem reference="com.intellij.openapi.extensions.ExtensionPointName#findExtensionOrFail" reason="Absent in 182." />
|
||||
<Problem reference="com.intellij.openapi.ui.popup.PopupChooserBuilder#PopupChooserBuilder(javax.swing.JList)" reason="Generified in 182. Use PopupChooserBuilderWrapper instead." />
|
||||
<Problem reference="com.intellij.openapi.editor.event.EditorFactoryListener" reason="Default implementations were added in 183. Use EditorFactoryListenerWrapper for inheritance instead." />
|
||||
<Problem reference="com.intellij.codeInspection.reference.RefFile#getPsiElement" reason="Absent in 182. Use psiFile extension instead." />
|
||||
<Problem reference="com.intellij.openapi.diagnostic.LoggerKt#debugOrInfoIfTestMode" reason="Absent in 182." />
|
||||
<Problem reference="com.intellij.psi.search.PsiSearchHelper#getInstance" reason="Absent in 181. Use psiSearchHelperInstance() instead." />
|
||||
<Problem reference="com.intellij.psi.search.PsiSearchHelper.SERVICE" reason="Deprecated since 182. Use psiSearchHelperInstance() instead." />
|
||||
<Problem reference="org.jetbrains.kotlin.idea.reporter.ITNReporterCompat#submit" reason="parentComponent is nullable in AS" />
|
||||
<Problem reference="com.intellij.diagnostic.ITNReporter#submit" reason="parentComponent is nullable in AS" />
|
||||
<Problem reference="com.intellij.codeInspection.dataFlow.Nullness" reason="Deprecated since 182. Use org.jetbrains.kotlin.idea.util.compat.Nullability instead." />
|
||||
</list>
|
||||
</option>
|
||||
</inspection_tool>
|
||||
@@ -266,10 +273,6 @@
|
||||
<option name="ignoreObjectMethods" value="true" />
|
||||
<option name="ignoreAnonymousClassMethods" value="false" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="MissingRecentApi" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="sinceBuildString" value="182.0" />
|
||||
<option name="untilBuildString" value="192.SNAPSHOT" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="MisspelledCompareTo" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="MisspelledEquals" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="MisspelledHashcode" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
@@ -301,6 +304,16 @@
|
||||
<inspection_tool class="PackageName" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||
<option name="namePattern" value="[a-z_][a-z\d_]*(\.[a-z_][a-zA-Z\d_]*)*" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="ProblematicAPIUsage" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="problems">
|
||||
<list>
|
||||
<Problem reference="com.intellij.testFramework.PlatformTestCase#createModuleAt" reason="Not static anymore in 181 after 7dacf096c47d2125e17031c71a037b63ab00ec53" />
|
||||
<Problem reference="com.intellij.testFramework.PlatformTestCase#doCreateRealModuleIn" reason="Not static anymore in 181 after 7dacf096c47d2125e17031c71a037b63ab00ec53" />
|
||||
<Problem reference="com.intellij.openapi.progress.ProgressManager#getProgressIndicator" reason="Nullable in 181. Temporary use progressIndicatorNullable instead." />
|
||||
<Problem reference="com.intellij.testFramework.fixtures.CodeInsightTestFixture#getProjectDisposable" reason="Method was introduced in 173 and absent in 172. Use getProjectDisposableEx instead. (95eaf81e0ea497f8c69263c11fd3202d28a7a1b2)" />
|
||||
</list>
|
||||
</option>
|
||||
</inspection_tool>
|
||||
<inspection_tool class="ProtectedMemberInFinalClass" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="PublicFieldAccessedInSynchronizedContext" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="PyCompatibilityInspection" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
@@ -316,11 +329,16 @@
|
||||
</inspection_tool>
|
||||
<inspection_tool class="SSBasedInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<searchConfiguration name="SwingUtilities.invokeLater" text="SwingUtilities.invokeLater($runnable$)" recursive="false" caseInsensitive="false" type="JAVA">
|
||||
<constraint name="Instance" regexp="SwingUtilities" minCount="0" target="true" within="" contains="" />
|
||||
<constraint name="MethodCall" within="" contains="" />
|
||||
<constraint name="Parameter" minCount="0" maxCount="2147483647" within="" contains="" />
|
||||
<constraint name="__context__" within="" contains="" />
|
||||
<constraint name="runnable" within="" contains="" />
|
||||
</searchConfiguration>
|
||||
<replaceConfiguration name="DirectCallOfDispose" text="$Instance$.dispose()" recursive="false" caseInsensitive="false" type="JAVA" reformatAccordingToStyle="true" shortenFQN="true" replacement="Disposer.dispose($Instance$)">
|
||||
<constraint name="Instance" regexp="super" nameOfExprType="Disposable" withinHierarchy="true" exprTypeWithinHierarchy="true" minCount="0" negateName="true" within="" contains="" />
|
||||
<constraint name="MethodCall" target="true" within="" contains="" />
|
||||
<constraint name="Parameter" minCount="0" maxCount="2147483647" within="" contains="" />
|
||||
<constraint name="__context__" within="" contains="" />
|
||||
</replaceConfiguration>
|
||||
<replaceConfiguration name="new Object[0]" text="new Object[0]" recursive="false" caseInsensitive="true" type="JAVA" reformatAccordingToStyle="true" shortenFQN="true" replacement="com.intellij.util.ArrayUtil.EMPTY_OBJECT_ARRAY" />
|
||||
@@ -384,7 +402,6 @@
|
||||
</inspection_tool>
|
||||
<inspection_tool class="StringEquality" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="StringEqualsEmptyString" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="StringOperationCanBeSimplifiedMerged" />
|
||||
<inspection_tool class="SwitchStatementWithConfusingDeclaration" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="SynchronizeOnThis" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="SystemOutErr" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
|
||||
5
.idea/misc.xml
generated
5
.idea/misc.xml
generated
@@ -47,8 +47,6 @@
|
||||
</option>
|
||||
</component>
|
||||
<component name="NullableNotNullManager">
|
||||
<option name="myDefaultNullable" value="org.jetbrains.annotations.Nullable" />
|
||||
<option name="myDefaultNotNull" value="org.jetbrains.annotations.NotNull" />
|
||||
<option name="myNullables">
|
||||
<value>
|
||||
<list size="9">
|
||||
@@ -86,9 +84,6 @@
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="false" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
<component name="PsiViewerSettings">
|
||||
<option name="splitDividerLocation" value="35" />
|
||||
</component>
|
||||
<component name="SuppressABINotification">
|
||||
<option name="modulesWithSuppressedNotConfigured">
|
||||
<set>
|
||||
|
||||
19
.idea/runConfigurations/IDEA__Not_Internal_.xml
generated
19
.idea/runConfigurations/IDEA__Not_Internal_.xml
generated
@@ -1,19 +0,0 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="IDEA (Not Internal)" type="GradleRunConfiguration" factoryName="Gradle">
|
||||
<ExternalSystemSettings>
|
||||
<option name="executionName" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="externalSystemIdString" value="GRADLE" />
|
||||
<option name="scriptParameters" value="-Pidea.is.internal=false" />
|
||||
<option name="taskDescriptions">
|
||||
<list />
|
||||
</option>
|
||||
<option name="taskNames">
|
||||
<list>
|
||||
<option value="runIde" />
|
||||
</list>
|
||||
</option>
|
||||
<option name="vmOptions" value="" />
|
||||
</ExternalSystemSettings>
|
||||
</configuration>
|
||||
</component>
|
||||
7637
ChangeLog.md
7637
ChangeLog.md
File diff suppressed because it is too large
Load Diff
@@ -41,11 +41,7 @@ For local development, if you're not working on bytecode generation or the stand
|
||||
|
||||
You also can use [Gradle properties](https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_properties_and_system_properties) to setup JDK_* variables.
|
||||
|
||||
> Note: The JDK 6 for MacOS is not available on Oracle's site. You can [download it here](https://support.apple.com/kb/DL1572).
|
||||
|
||||
On Windows you might need to add long paths setting to the repo:
|
||||
|
||||
git config core.longpaths true
|
||||
> Note: The JDK 6 for MacOS is not available on Oracle's site. You can [download it here](https://support.apple.com/kb/DL1572).
|
||||
|
||||
## Building
|
||||
|
||||
|
||||
@@ -129,7 +129,7 @@ class KotlinCompilerAdapter : Javac13() {
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val KOTLIN_EXTENSIONS = listOf("kt", "kts")
|
||||
private val KOTLIN_EXTENSIONS = Arrays.asList("kt", "kts")
|
||||
|
||||
private fun filterOutKotlinSources(files: Array<File>): Array<File> {
|
||||
return files.filterNot {
|
||||
|
||||
@@ -40,4 +40,4 @@ javadocJar()
|
||||
|
||||
testsJar()
|
||||
|
||||
projectTest(parallel = true)
|
||||
projectTest()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.build
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.build
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.build
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.build
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.compilerRunner;
|
||||
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import kotlin.collections.CollectionsKt;
|
||||
import kotlin.jvm.JvmClassMappingKt;
|
||||
import kotlin.reflect.KClass;
|
||||
@@ -24,7 +25,6 @@ import kotlin.reflect.KVisibility;
|
||||
import kotlin.reflect.full.KClasses;
|
||||
import kotlin.reflect.jvm.ReflectJvmMapping;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.cli.common.arguments.Argument;
|
||||
import org.jetbrains.kotlin.cli.common.arguments.CommonToolArguments;
|
||||
import org.jetbrains.kotlin.cli.common.arguments.InternalArgument;
|
||||
@@ -60,7 +60,7 @@ public class ArgumentUtils {
|
||||
@NotNull List<String> result
|
||||
) throws IllegalAccessException, InstantiationException, InvocationTargetException {
|
||||
for (KProperty1 property : KClasses.getMemberProperties(clazz)) {
|
||||
Argument argument = findInstance(property.getAnnotations(), Argument.class);
|
||||
Argument argument = ContainerUtil.findInstance(property.getAnnotations(), Argument.class);
|
||||
if (argument == null) continue;
|
||||
|
||||
if (property.getVisibility() != KVisibility.PUBLIC) continue;
|
||||
@@ -90,14 +90,4 @@ public class ArgumentUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static <T> T findInstance(Iterable<? super T> iterable, Class<T> clazz) {
|
||||
for (Object item : iterable) {
|
||||
if (clazz.isInstance(item)) {
|
||||
return clazz.cast(item);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,15 +16,15 @@
|
||||
|
||||
package org.jetbrains.kotlin.compilerRunner;
|
||||
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class OutputItemsCollectorImpl implements OutputItemsCollector {
|
||||
private final List<SimpleOutputItem> outputs = new ArrayList<>();
|
||||
private final List<SimpleOutputItem> outputs = ContainerUtil.newArrayList();
|
||||
|
||||
@Override
|
||||
public void add(Collection<File> sourceFiles, File outputFile) {
|
||||
|
||||
@@ -45,10 +45,7 @@ interface IncrementalCacheCommon {
|
||||
/**
|
||||
* Incremental cache common for JVM and JS for specifit ClassName type
|
||||
*/
|
||||
abstract class AbstractIncrementalCache<ClassName>(
|
||||
workingDir: File,
|
||||
protected val pathConverter: FileToPathConverter
|
||||
) : BasicMapsOwner(workingDir), IncrementalCacheCommon {
|
||||
abstract class AbstractIncrementalCache<ClassName>(workingDir: File) : BasicMapsOwner(workingDir), IncrementalCacheCommon {
|
||||
companion object {
|
||||
private val SUBTYPES = "subtypes"
|
||||
private val SUPERTYPES = "supertypes"
|
||||
@@ -73,16 +70,17 @@ abstract class AbstractIncrementalCache<ClassName>(
|
||||
|
||||
private val subtypesMap = registerMap(SubtypesMap(SUBTYPES.storageFile))
|
||||
private val supertypesMap = registerMap(SupertypesMap(SUPERTYPES.storageFile))
|
||||
protected val classFqNameToSourceMap = registerMap(ClassFqNameToSourceMap(CLASS_FQ_NAME_TO_SOURCE.storageFile, pathConverter))
|
||||
protected val classFqNameToSourceMap = registerMap(ClassFqNameToSourceMap(CLASS_FQ_NAME_TO_SOURCE.storageFile))
|
||||
internal abstract val sourceToClassesMap: AbstractSourceToOutputMap<ClassName>
|
||||
internal abstract val dirtyOutputClassesMap: AbstractDirtyClassesMap<ClassName>
|
||||
|
||||
/**
|
||||
* A file X is a complementary to a file Y if they contain corresponding expect/actual declarations.
|
||||
* Complementary files should be compiled together during IC so the compiler does not complain
|
||||
* about missing parts.
|
||||
* TODO: provide a better solution (maintain an index of expect/actual declarations akin to IncrementalPackagePartProvider)
|
||||
*/
|
||||
private val complementaryFilesMap = registerMap(ComplementarySourceFilesMap(COMPLEMENTARY_FILES.storageFile, pathConverter))
|
||||
private val complementaryFilesMap = registerMap(FilesMap(COMPLEMENTARY_FILES.storageFile))
|
||||
|
||||
override fun classesFqNamesBySources(files: Iterable<File>): Collection<FqName> =
|
||||
files.flatMapTo(HashSet()) { sourceToClassesMap.getFqNames(it) }
|
||||
@@ -155,17 +153,14 @@ abstract class AbstractIncrementalCache<ClassName>(
|
||||
removedFqNames.forEach { classFqNameToSourceMap.remove(it) }
|
||||
}
|
||||
|
||||
protected class ClassFqNameToSourceMap(
|
||||
storageFile: File,
|
||||
private val pathConverter: FileToPathConverter
|
||||
) :
|
||||
protected class ClassFqNameToSourceMap(storageFile: File) :
|
||||
BasicStringMap<String>(storageFile, EnumeratorStringDescriptor(), PathStringDescriptor) {
|
||||
operator fun set(fqName: FqName, sourceFile: File) {
|
||||
storage[fqName.asString()] = pathConverter.toPath(sourceFile)
|
||||
storage[fqName.asString()] = sourceFile.canonicalPath
|
||||
}
|
||||
|
||||
operator fun get(fqName: FqName): File? =
|
||||
storage[fqName.asString()]?.let(pathConverter::toFile)
|
||||
storage[fqName.asString()]?.let(::File)
|
||||
|
||||
fun remove(fqName: FqName) {
|
||||
storage.remove(fqName.asString())
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.incremental
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.incremental
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.incremental
|
||||
|
||||
@@ -19,7 +19,10 @@ package org.jetbrains.kotlin.incremental
|
||||
import com.intellij.util.io.DataExternalizer
|
||||
import org.jetbrains.kotlin.incremental.js.IncrementalResultsConsumerImpl
|
||||
import org.jetbrains.kotlin.incremental.js.TranslationResultValue
|
||||
import org.jetbrains.kotlin.incremental.storage.*
|
||||
import org.jetbrains.kotlin.incremental.storage.BasicStringMap
|
||||
import org.jetbrains.kotlin.incremental.storage.DirtyClassesFqNameMap
|
||||
import org.jetbrains.kotlin.incremental.storage.SourceToFqNameMap
|
||||
import org.jetbrains.kotlin.incremental.storage.StringToLongMapExternalizer
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.deserialization.NameResolverImpl
|
||||
import org.jetbrains.kotlin.metadata.deserialization.getExtensionOrNull
|
||||
@@ -33,22 +36,19 @@ import java.io.DataInput
|
||||
import java.io.DataOutput
|
||||
import java.io.File
|
||||
|
||||
open class IncrementalJsCache(
|
||||
cachesDir: File,
|
||||
pathConverter: FileToPathConverter
|
||||
) : AbstractIncrementalCache<FqName>(cachesDir, pathConverter) {
|
||||
open class IncrementalJsCache(cachesDir: File) : AbstractIncrementalCache<FqName>(cachesDir) {
|
||||
companion object {
|
||||
private const val TRANSLATION_RESULT_MAP = "translation-result"
|
||||
private const val INLINE_FUNCTIONS = "inline-functions"
|
||||
private const val HEADER_FILE_NAME = "header.meta"
|
||||
private val TRANSLATION_RESULT_MAP = "translation-result"
|
||||
private val INLINE_FUNCTIONS = "inline-functions"
|
||||
private val HEADER_FILE_NAME = "header.meta"
|
||||
|
||||
fun hasHeaderFile(cachesDir: File) = File(cachesDir, HEADER_FILE_NAME).exists()
|
||||
}
|
||||
|
||||
override val sourceToClassesMap = registerMap(SourceToFqNameMap(SOURCE_TO_CLASSES.storageFile, pathConverter))
|
||||
override val sourceToClassesMap = registerMap(SourceToFqNameMap(SOURCE_TO_CLASSES.storageFile))
|
||||
override val dirtyOutputClassesMap = registerMap(DirtyClassesFqNameMap(DIRTY_OUTPUT_CLASSES.storageFile))
|
||||
private val translationResults = registerMap(TranslationResultMap(TRANSLATION_RESULT_MAP.storageFile, pathConverter))
|
||||
private val inlineFunctions = registerMap(InlineFunctionsMap(INLINE_FUNCTIONS.storageFile, pathConverter))
|
||||
private val translationResults = registerMap(TranslationResultMap(TRANSLATION_RESULT_MAP.storageFile))
|
||||
private val inlineFunctions = registerMap(InlineFunctionsMap(INLINE_FUNCTIONS.storageFile))
|
||||
|
||||
private val dirtySources = hashSetOf<File>()
|
||||
|
||||
@@ -113,13 +113,14 @@ open class IncrementalJsCache(
|
||||
}
|
||||
|
||||
fun nonDirtyPackageParts(): Map<File, TranslationResultValue> =
|
||||
hashMapOf<File, TranslationResultValue>().apply {
|
||||
for (file in translationResults.keys()) {
|
||||
if (file !in dirtySources) {
|
||||
put(file, translationResults[file]!!)
|
||||
hashMapOf<File, TranslationResultValue>().apply {
|
||||
for (path in translationResults.keys()) {
|
||||
val file = File(path)
|
||||
if (file !in dirtySources) {
|
||||
put(file, translationResults[path]!!)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private object TranslationResultValueExternalizer : DataExternalizer<TranslationResultValue> {
|
||||
@@ -151,33 +152,31 @@ private object TranslationResultValueExternalizer : DataExternalizer<Translation
|
||||
}
|
||||
}
|
||||
|
||||
private class TranslationResultMap(
|
||||
storageFile: File,
|
||||
private val pathConverter: FileToPathConverter
|
||||
) : BasicStringMap<TranslationResultValue>(storageFile, TranslationResultValueExternalizer) {
|
||||
private class TranslationResultMap(storageFile: File) : BasicStringMap<TranslationResultValue>(storageFile, TranslationResultValueExternalizer) {
|
||||
override fun dumpValue(value: TranslationResultValue): String =
|
||||
"Metadata: ${value.metadata.md5()}, Binary AST: ${value.binaryAst.md5()}, InlineData: ${value.inlineData.md5()}"
|
||||
"Metadata: ${value.metadata.md5()}, Binary AST: ${value.binaryAst.md5()}, InlineData: ${value.inlineData.md5()}"
|
||||
|
||||
fun put(sourceFile: File, newMetadata: ByteArray, newBinaryAst: ByteArray, newInlineData: ByteArray) {
|
||||
storage[pathConverter.toPath(sourceFile)] =
|
||||
TranslationResultValue(metadata = newMetadata, binaryAst = newBinaryAst, inlineData = newInlineData)
|
||||
fun put(file: File, newMetadata: ByteArray, newBinaryAst: ByteArray, newInlineData: ByteArray) {
|
||||
storage[file.canonicalPath] = TranslationResultValue(metadata = newMetadata, binaryAst = newBinaryAst, inlineData = newInlineData)
|
||||
}
|
||||
|
||||
operator fun get(sourceFile: File): TranslationResultValue? =
|
||||
storage[pathConverter.toPath(sourceFile)]
|
||||
operator fun get(file: File): TranslationResultValue? =
|
||||
storage[file.canonicalPath]
|
||||
|
||||
fun keys(): Collection<File> =
|
||||
storage.keys.map { pathConverter.toFile(it) }
|
||||
operator fun get(key: String): TranslationResultValue? =
|
||||
storage[key]
|
||||
|
||||
fun remove(sourceFile: File, changesCollector: ChangesCollector) {
|
||||
val path = pathConverter.toPath(sourceFile)
|
||||
val protoBytes = storage[path]!!.metadata
|
||||
val protoMap = getProtoData(sourceFile, protoBytes)
|
||||
fun keys(): Collection<String> =
|
||||
storage.keys
|
||||
|
||||
fun remove(file: File, changesCollector: ChangesCollector) {
|
||||
val protoBytes = storage[file.canonicalPath]!!.metadata
|
||||
val protoMap = getProtoData(file, protoBytes)
|
||||
|
||||
for ((_, protoData) in protoMap) {
|
||||
changesCollector.collectProtoChanges(oldData = protoData, newData = null)
|
||||
}
|
||||
storage.remove(path)
|
||||
storage.remove(file.canonicalPath)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,17 +199,15 @@ fun getProtoData(sourceFile: File, metadata: ByteArray): Map<ClassId, ProtoData>
|
||||
return classes
|
||||
}
|
||||
|
||||
private class InlineFunctionsMap(
|
||||
storageFile: File,
|
||||
private val pathConverter: FileToPathConverter
|
||||
) : BasicStringMap<Map<String, Long>>(storageFile, StringToLongMapExternalizer) {
|
||||
private class InlineFunctionsMap(storageFile: File) : BasicStringMap<Map<String, Long>>(storageFile, StringToLongMapExternalizer) {
|
||||
fun process(srcFile: File, newMap: Map<String, Long>, changesCollector: ChangesCollector) {
|
||||
val key = pathConverter.toPath(srcFile)
|
||||
val key = srcFile.canonicalPath
|
||||
val oldMap = storage[key] ?: emptyMap()
|
||||
|
||||
if (newMap.isNotEmpty()) {
|
||||
storage[key] = newMap
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
storage.remove(key)
|
||||
}
|
||||
|
||||
@@ -222,9 +219,9 @@ private class InlineFunctionsMap(
|
||||
}
|
||||
|
||||
fun remove(sourceFile: File) {
|
||||
storage.remove(pathConverter.toPath(sourceFile))
|
||||
storage.remove(sourceFile.canonicalPath)
|
||||
}
|
||||
|
||||
override fun dumpValue(value: Map<String, Long>): String =
|
||||
value.dumpMap { java.lang.Long.toHexString(it) }
|
||||
value.dumpMap { java.lang.Long.toHexString(it) }
|
||||
}
|
||||
@@ -43,12 +43,8 @@ val KOTLIN_CACHE_DIRECTORY_NAME = "kotlin"
|
||||
|
||||
open class IncrementalJvmCache(
|
||||
private val targetDataRoot: File,
|
||||
targetOutputDir: File?,
|
||||
pathConverter: FileToPathConverter
|
||||
) : AbstractIncrementalCache<JvmClassName>(
|
||||
workingDir = File(targetDataRoot, KOTLIN_CACHE_DIRECTORY_NAME),
|
||||
pathConverter = pathConverter
|
||||
), IncrementalCache {
|
||||
targetOutputDir: File?
|
||||
) : AbstractIncrementalCache<JvmClassName>(File(targetDataRoot, KOTLIN_CACHE_DIRECTORY_NAME)), IncrementalCache {
|
||||
companion object {
|
||||
private val PROTO_MAP = "proto"
|
||||
private val CONSTANTS_MAP = "constants"
|
||||
@@ -62,7 +58,7 @@ open class IncrementalJvmCache(
|
||||
private val MODULE_MAPPING_FILE_NAME = "." + ModuleMapping.MAPPING_FILE_EXT
|
||||
}
|
||||
|
||||
override val sourceToClassesMap = registerMap(SourceToJvmNameMap(SOURCE_TO_CLASSES.storageFile, pathConverter))
|
||||
override val sourceToClassesMap = registerMap(SourceToJvmNameMap(SOURCE_TO_CLASSES.storageFile))
|
||||
override val dirtyOutputClassesMap = registerMap(DirtyClassesJvmNameMap(DIRTY_OUTPUT_CLASSES.storageFile))
|
||||
|
||||
private val protoMap = registerMap(ProtoMap(PROTO_MAP.storageFile))
|
||||
@@ -72,8 +68,7 @@ open class IncrementalJvmCache(
|
||||
private val partToMultifileFacade = registerMap(MultifileClassPartMap(MULTIFILE_CLASS_PARTS.storageFile))
|
||||
private val inlineFunctionsMap = registerMap(InlineFunctionsMap(INLINE_FUNCTIONS.storageFile))
|
||||
// todo: try to use internal names only?
|
||||
private val internalNameToSource = registerMap(InternalNameToSourcesMap(INTERNAL_NAME_TO_SOURCE.storageFile, pathConverter))
|
||||
// gradle only
|
||||
private val internalNameToSource = registerMap(InternalNameToSourcesMap(INTERNAL_NAME_TO_SOURCE.storageFile))
|
||||
private val javaSourcesProtoMap = registerMap(JavaSourcesProtoMap(JAVA_SOURCES_PROTO_MAP.storageFile))
|
||||
|
||||
private val outputDir by lazy(LazyThreadSafetyMode.NONE) { requireNotNull(targetOutputDir) { "Target is expected to have output directory" } }
|
||||
@@ -445,16 +440,14 @@ open class IncrementalJvmCache(
|
||||
override fun dumpValue(value: String): String = value
|
||||
}
|
||||
|
||||
inner class InternalNameToSourcesMap(
|
||||
storageFile: File,
|
||||
private val pathConverter: FileToPathConverter
|
||||
) : BasicStringMap<Collection<String>>(storageFile, EnumeratorStringDescriptor(), PathCollectionExternalizer) {
|
||||
operator fun set(internalName: String, sourceFiles: Collection<File>) {
|
||||
storage[internalName] = pathConverter.toPaths(sourceFiles)
|
||||
inner class InternalNameToSourcesMap(storageFile: File) :
|
||||
BasicStringMap<Collection<String>>(storageFile, EnumeratorStringDescriptor(), PathCollectionExternalizer) {
|
||||
operator fun set(internalName: String, sourceFiles: Iterable<File>) {
|
||||
storage[internalName] = sourceFiles.map { it.canonicalPath }
|
||||
}
|
||||
|
||||
operator fun get(internalName: String): Collection<File> =
|
||||
pathConverter.toFiles(storage[internalName] ?: emptyList())
|
||||
(storage[internalName] ?: emptyList()).map(::File)
|
||||
|
||||
fun remove(internalName: String) {
|
||||
storage.remove(internalName)
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.incremental
|
||||
|
||||
import java.io.File
|
||||
import java.io.Serializable
|
||||
|
||||
data class IncrementalModuleEntry(
|
||||
private val projectPath: String,
|
||||
val name: String,
|
||||
val buildDir: File,
|
||||
val buildHistoryFile: File
|
||||
) : Serializable {
|
||||
companion object {
|
||||
private const val serialVersionUID = 0L
|
||||
}
|
||||
}
|
||||
|
||||
class IncrementalModuleInfo(
|
||||
val projectRoot: File,
|
||||
val dirToModule: Map<File, IncrementalModuleEntry>,
|
||||
val nameToModules: Map<String, Set<IncrementalModuleEntry>>,
|
||||
val jarToClassListFile: Map<File, File>,
|
||||
// only for js and mpp
|
||||
val jarToModule: Map<File, IncrementalModuleEntry>
|
||||
) : Serializable {
|
||||
companion object {
|
||||
private const val serialVersionUID = 0L
|
||||
}
|
||||
}
|
||||
@@ -71,7 +71,7 @@ class JavaClassesSerializerExtension : KotlinSerializerExtensionBase(BuiltInSeri
|
||||
override fun serializeProperty(
|
||||
descriptor: PropertyDescriptor,
|
||||
proto: ProtoBuf.Property.Builder,
|
||||
versionRequirementTable: MutableVersionRequirementTable?,
|
||||
versionRequirementTable: MutableVersionRequirementTable,
|
||||
childSerializer: DescriptorSerializer
|
||||
) {
|
||||
super.serializeProperty(descriptor, proto, versionRequirementTable, childSerializer)
|
||||
|
||||
@@ -30,18 +30,15 @@ import java.io.IOException
|
||||
import java.util.*
|
||||
|
||||
|
||||
open class LookupStorage(
|
||||
targetDataDir: File,
|
||||
pathConverter: FileToPathConverter
|
||||
) : BasicMapsOwner(targetDataDir) {
|
||||
open class LookupStorage(targetDataDir: File) : BasicMapsOwner(targetDataDir) {
|
||||
companion object {
|
||||
private val DELETED_TO_SIZE_TRESHOLD = 0.5
|
||||
private val MINIMUM_GARBAGE_COLLECTIBLE_SIZE = 10000
|
||||
}
|
||||
|
||||
private val countersFile = "counters".storageFile
|
||||
private val idToFile = registerMap(IdToFileMap("id-to-file".storageFile, pathConverter))
|
||||
private val fileToId = registerMap(FileToIdMap("file-to-id".storageFile, pathConverter))
|
||||
private val idToFile = registerMap(IdToFileMap("id-to-file".storageFile))
|
||||
private val fileToId = registerMap(FileToIdMap("file-to-id".storageFile))
|
||||
private val lookupMap = registerMap(LookupMap("lookups".storageFile))
|
||||
|
||||
@Volatile
|
||||
@@ -155,7 +152,7 @@ open class LookupStorage(
|
||||
size = 0
|
||||
deletedCount = 0
|
||||
|
||||
for ((file, oldId) in oldFileToId.entries.sortedBy { it.key.path }) {
|
||||
for ((file, oldId) in oldFileToId.entries) {
|
||||
val newId = addFileIfNeeded(file)
|
||||
oldIdToNewId[oldId] = newId
|
||||
}
|
||||
@@ -177,19 +174,11 @@ open class LookupStorage(
|
||||
flush(false)
|
||||
}
|
||||
|
||||
@TestOnly
|
||||
fun dump(lookupSymbols: Set<LookupSymbol>): String {
|
||||
@TestOnly fun dump(lookupSymbols: Set<LookupSymbol>, basePath: File? = null): String {
|
||||
flush(false)
|
||||
|
||||
val sb = StringBuilder()
|
||||
val p = Printer(sb)
|
||||
|
||||
p.println("====== File to id map")
|
||||
p.println(fileToId.dump())
|
||||
|
||||
p.println("====== Id to file map")
|
||||
p.println(idToFile.dump())
|
||||
|
||||
val lookupsStrings = lookupSymbols.groupBy { LookupSymbolKey(it.name, it.scope) }
|
||||
|
||||
for (lookup in lookupMap.keys.sorted()) {
|
||||
@@ -197,11 +186,12 @@ open class LookupStorage(
|
||||
|
||||
val key = if (lookup in lookupsStrings) {
|
||||
lookupsStrings[lookup]!!.map { "${it.scope}#${it.name}" }.sorted().joinToString(", ")
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
lookup.toString()
|
||||
}
|
||||
|
||||
val value = fileIds.map { it.toString() }.sorted().joinToString(", ")
|
||||
val value = fileIds.map { idToFile[it]?.let { if (basePath == null) it.absolutePath else it.toRelativeString(basePath) } ?: it.toString() }.sorted().joinToString(", ")
|
||||
p.println("$key -> $value")
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.incremental
|
||||
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.openapi.util.text.StringUtil
|
||||
import org.jetbrains.kotlin.build.GeneratedFile
|
||||
import org.jetbrains.kotlin.build.GeneratedJvmClass
|
||||
import org.jetbrains.kotlin.build.JvmSourceRoot
|
||||
@@ -65,23 +67,11 @@ fun makeModuleFile(
|
||||
friendDirs
|
||||
)
|
||||
|
||||
val scriptFile = File.createTempFile("kjps", sanitizeJavaIdentifier(name) + ".script.xml")
|
||||
scriptFile.writeText(builder.asText().toString())
|
||||
val scriptFile = File.createTempFile("kjps", StringUtil.sanitizeJavaIdentifier(name) + ".script.xml")
|
||||
FileUtil.writeToFile(scriptFile, builder.asText().toString())
|
||||
return scriptFile
|
||||
}
|
||||
|
||||
private fun sanitizeJavaIdentifier(string: String) =
|
||||
buildString {
|
||||
for (char in string) {
|
||||
if (char.isJavaIdentifierPart()) {
|
||||
if (length == 0 && !char.isJavaIdentifierStart()) {
|
||||
append('_')
|
||||
}
|
||||
append(char)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun makeCompileServices(
|
||||
incrementalCaches: Map<TargetId, IncrementalCache>,
|
||||
lookupTracker: LookupTracker,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.incremental.js
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.incremental.storage
|
||||
|
||||
import org.jetbrains.kotlin.incremental.dumpCollection
|
||||
import java.io.File
|
||||
|
||||
class ComplementarySourceFilesMap(
|
||||
storageFile: File,
|
||||
private val pathConverter: FileToPathConverter
|
||||
) : BasicStringMap<Collection<String>>(storageFile, PathStringDescriptor, StringCollectionExternalizer) {
|
||||
|
||||
operator fun set(sourceFile: File, complementaryFiles: Collection<File>) {
|
||||
storage[pathConverter.toPath(sourceFile)] = pathConverter.toPaths(complementaryFiles)
|
||||
}
|
||||
|
||||
operator fun get(sourceFile: File): Collection<File> {
|
||||
val paths = storage[pathConverter.toPath(sourceFile)].orEmpty()
|
||||
return pathConverter.toFiles(paths)
|
||||
}
|
||||
|
||||
override fun dumpValue(value: Collection<String>) =
|
||||
value.dumpCollection()
|
||||
|
||||
fun remove(file: File): Collection<File> =
|
||||
get(file).also { storage.remove(pathConverter.toPath(file)) }
|
||||
}
|
||||
@@ -18,27 +18,26 @@ package org.jetbrains.kotlin.incremental.storage
|
||||
|
||||
import java.io.File
|
||||
|
||||
internal class FileToIdMap(
|
||||
file: File,
|
||||
private val pathConverter: FileToPathConverter
|
||||
) : BasicStringMap<Int>(file, IntExternalizer) {
|
||||
internal class FileToIdMap(file: File) : BasicMap<File, Int>(file, FileKeyDescriptor, IntExternalizer) {
|
||||
override fun dumpKey(key: File): String = key.toString()
|
||||
|
||||
override fun dumpValue(value: Int): String = value.toString()
|
||||
|
||||
operator fun get(file: File): Int? = storage[pathConverter.toPath(file)]
|
||||
operator fun get(file: File): Int? = storage[file]
|
||||
|
||||
operator fun set(file: File, id: Int) {
|
||||
storage[pathConverter.toPath(file)] = id
|
||||
storage[file] = id
|
||||
}
|
||||
|
||||
fun remove(file: File) {
|
||||
storage.remove(pathConverter.toPath(file))
|
||||
storage.remove(file)
|
||||
}
|
||||
|
||||
fun toMap(): Map<File, Int> {
|
||||
val result = HashMap<File, Int>()
|
||||
for (key in storage.keys) {
|
||||
val value = storage[key] ?: continue
|
||||
result[pathConverter.toFile(key)] = value
|
||||
result[key] = value
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.incremental.storage
|
||||
|
||||
import java.io.File
|
||||
|
||||
interface FileToPathConverter {
|
||||
fun toPath(file: File): String
|
||||
fun toFile(path: String): File
|
||||
}
|
||||
|
||||
fun FileToPathConverter.toPaths(files: Collection<File>): List<String> =
|
||||
files.map { toPath(it) }
|
||||
|
||||
fun FileToPathConverter.toFiles(paths: Collection<String>): List<File> =
|
||||
paths.map { toFile(it) }
|
||||
|
||||
object FileToCanonicalPathConverter : FileToPathConverter {
|
||||
override fun toPath(file: File): String = file.canonicalPath
|
||||
|
||||
override fun toFile(path: String): File = File(path)
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.incremental.storage
|
||||
|
||||
import org.jetbrains.kotlin.incremental.dumpCollection
|
||||
import java.io.File
|
||||
|
||||
class FilesMap(storageFile: File)
|
||||
: BasicStringMap<Collection<String>>(storageFile, PathStringDescriptor, StringCollectionExternalizer) {
|
||||
|
||||
operator fun set(sourceFile: File, outputFiles: Collection<File>) {
|
||||
storage[sourceFile.absolutePath] = outputFiles.map { it.absolutePath }
|
||||
}
|
||||
|
||||
operator fun get(sourceFile: File): Collection<File> =
|
||||
storage[sourceFile.absolutePath].orEmpty().map(::File)
|
||||
|
||||
override fun dumpValue(value: Collection<String>) =
|
||||
value.dumpCollection()
|
||||
|
||||
fun remove(file: File): Collection<File> =
|
||||
get(file).also { storage.remove(file.absolutePath) }
|
||||
}
|
||||
@@ -16,24 +16,20 @@
|
||||
|
||||
package org.jetbrains.kotlin.incremental.storage
|
||||
|
||||
import com.intellij.util.io.EnumeratorStringDescriptor
|
||||
import com.intellij.util.io.ExternalIntegerKeyDescriptor
|
||||
import java.io.File
|
||||
|
||||
internal class IdToFileMap(
|
||||
file: File,
|
||||
private val pathConverter: FileToPathConverter
|
||||
) : BasicMap<Int, String>(file, ExternalIntegerKeyDescriptor(), EnumeratorStringDescriptor.INSTANCE) {
|
||||
internal class IdToFileMap(file: File) : BasicMap<Int, File>(file, ExternalIntegerKeyDescriptor(), FileKeyDescriptor) {
|
||||
override fun dumpKey(key: Int): String = key.toString()
|
||||
|
||||
override fun dumpValue(value: String): String = value
|
||||
override fun dumpValue(value: File): String = value.toString()
|
||||
|
||||
operator fun get(id: Int): File? = storage[id]?.let { pathConverter.toFile(it) }
|
||||
operator fun get(id: Int): File? = storage[id]
|
||||
|
||||
operator fun contains(id: Int): Boolean = id in storage
|
||||
|
||||
operator fun set(id: Int, file: File) {
|
||||
storage[id] = pathConverter.toPath(file)
|
||||
storage[id] = file
|
||||
}
|
||||
|
||||
fun remove(id: Int) {
|
||||
|
||||
@@ -21,40 +21,32 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||
import java.io.File
|
||||
|
||||
internal class SourceToJvmNameMap(
|
||||
storageFile: File,
|
||||
pathConverter: FileToPathConverter
|
||||
) : AbstractSourceToOutputMap<JvmClassName>(JvmClassNameTransformer, storageFile, pathConverter)
|
||||
|
||||
internal class SourceToFqNameMap(
|
||||
storageFile: File,
|
||||
pathConverter: FileToPathConverter
|
||||
) : AbstractSourceToOutputMap<FqName>(FqNameTransformer, storageFile, pathConverter)
|
||||
internal class SourceToJvmNameMap(storageFile: File) : AbstractSourceToOutputMap<JvmClassName>(JvmClassNameTransformer, storageFile)
|
||||
internal class SourceToFqNameMap(storageFile: File) : AbstractSourceToOutputMap<FqName>(FqNameTransformer, storageFile)
|
||||
|
||||
internal abstract class AbstractSourceToOutputMap<Name>(
|
||||
private val nameTransformer: NameTransformer<Name>,
|
||||
storageFile: File,
|
||||
private val pathConverter: FileToPathConverter
|
||||
private val nameTransformer: NameTransformer<Name>,
|
||||
storageFile: File
|
||||
) : BasicStringMap<Collection<String>>(storageFile, PathStringDescriptor, StringCollectionExternalizer) {
|
||||
fun clearOutputsForSource(sourceFile: File) {
|
||||
remove(pathConverter.toPath(sourceFile))
|
||||
remove(sourceFile.absolutePath)
|
||||
}
|
||||
|
||||
fun add(sourceFile: File, className: Name) {
|
||||
storage.append(pathConverter.toPath(sourceFile), nameTransformer.asString(className))
|
||||
storage.append(sourceFile.absolutePath, nameTransformer.asString(className))
|
||||
}
|
||||
|
||||
fun contains(sourceFile: File): Boolean =
|
||||
pathConverter.toPath(sourceFile) in storage
|
||||
sourceFile.absolutePath in storage
|
||||
|
||||
operator fun get(sourceFile: File): Collection<Name> =
|
||||
storage[pathConverter.toPath(sourceFile)].orEmpty().map(nameTransformer::asName)
|
||||
storage[sourceFile.absolutePath].orEmpty().map(nameTransformer::asName)
|
||||
|
||||
fun getFqNames(sourceFile: File): Collection<FqName> =
|
||||
storage[pathConverter.toPath(sourceFile)].orEmpty().map(nameTransformer::asFqName)
|
||||
storage[sourceFile.absolutePath].orEmpty().map(nameTransformer::asFqName)
|
||||
|
||||
override fun dumpValue(value: Collection<String>) =
|
||||
value.dumpCollection()
|
||||
value.dumpCollection()
|
||||
|
||||
private fun remove(path: String) {
|
||||
storage.remove(path)
|
||||
|
||||
@@ -177,6 +177,20 @@ object PathStringDescriptor : EnumeratorStringDescriptor() {
|
||||
override fun isEqual(val1: String, val2: String?) = FileUtil.pathsEqual(val1, val2)
|
||||
}
|
||||
|
||||
object FileKeyDescriptor : KeyDescriptor<File> {
|
||||
override fun read(input: DataInput): File = File(input.readUTF())
|
||||
|
||||
override fun save(output: DataOutput, value: File) {
|
||||
output.writeUTF(value.canonicalPath)
|
||||
}
|
||||
|
||||
override fun getHashCode(value: File?): Int =
|
||||
FileUtil.FILE_HASHING_STRATEGY.computeHashCode(value)
|
||||
|
||||
override fun isEqual(val1: File?, val2: File?): Boolean =
|
||||
FileUtil.FILE_HASHING_STRATEGY.equals(val1, val2)
|
||||
}
|
||||
|
||||
open class CollectionExternalizer<T>(
|
||||
private val elementExternalizer: DataExternalizer<T>,
|
||||
private val newCollection: () -> MutableCollection<T>
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.modules
|
||||
|
||||
import com.intellij.openapi.util.io.FileUtil.toSystemIndependentName
|
||||
import com.intellij.openapi.util.text.StringUtil.escapeXml
|
||||
import org.jetbrains.kotlin.build.JvmSourceRoot
|
||||
import org.jetbrains.kotlin.cli.common.modules.ModuleXmlParser.*
|
||||
import org.jetbrains.kotlin.config.IncrementalCompilation
|
||||
@@ -135,13 +137,6 @@ class KotlinModuleXmlBuilder {
|
||||
}
|
||||
|
||||
private fun getEscapedPath(sourceFile: File): String {
|
||||
return escapeXml(sourceFile.invariantSeparatorsPath)
|
||||
}
|
||||
|
||||
private companion object {
|
||||
private val xmlEscapeReplacement = mapOf("<" to "<", ">" to ">", "&" to "&", "'" to "'", "\"" to """)
|
||||
private val xmlEscapeRegex = Regex(xmlEscapeReplacement.keys.joinToString("|", "(?:", ")") { Regex.escape(it) })
|
||||
|
||||
private fun escapeXml(string: String) = string.replace(xmlEscapeRegex) { xmlEscapeReplacement.getValue(it.value) }
|
||||
return escapeXml(toSystemIndependentName(sourceFile.path))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.incremental.testingUtils
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
import kotlin.math.max
|
||||
|
||||
private val COMMANDS = listOf("new", "touch", "delete")
|
||||
private val COMMANDS_AS_REGEX_PART = COMMANDS.joinToString("|")
|
||||
@@ -167,7 +166,7 @@ class TouchFile(path: String, private val touchPolicy: TouchPolicy) : Modificati
|
||||
TouchPolicy.TIMESTAMP -> {
|
||||
val oldLastModified = file.lastModified()
|
||||
//Mac OS and some versions of Linux truncate timestamp to nearest second
|
||||
file.setLastModified(max(System.currentTimeMillis(), oldLastModified + 1000))
|
||||
file.setLastModified(Math.max(System.currentTimeMillis(), oldLastModified + 1000))
|
||||
}
|
||||
TouchPolicy.CHECKSUM -> {
|
||||
file.appendText(" ")
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2643,9 +2643,7 @@ public final class DebugProtoBuf {
|
||||
* - Array<String>::class, if array_dimension_count = 1
|
||||
* - Array<Array<String>>::class, if array_dimension_count = 2
|
||||
* - etc.
|
||||
* Since it's very difficult to represent Kotlin-specific type aspects (nullability, type projections) of array arguments
|
||||
* in class literals on JVM, we don't bother to do represent this in our format as well.
|
||||
* So, for example, values `Array<Array<in B?>>::class` and `Array<out Array<B>>?>::class` will be represented exactly the same here.
|
||||
* Other forms of array class literals are not supported by this format, see KT-26568
|
||||
* </pre>
|
||||
*/
|
||||
boolean hasArrayDimensionCount();
|
||||
@@ -2659,9 +2657,7 @@ public final class DebugProtoBuf {
|
||||
* - Array<String>::class, if array_dimension_count = 1
|
||||
* - Array<Array<String>>::class, if array_dimension_count = 2
|
||||
* - etc.
|
||||
* Since it's very difficult to represent Kotlin-specific type aspects (nullability, type projections) of array arguments
|
||||
* in class literals on JVM, we don't bother to do represent this in our format as well.
|
||||
* So, for example, values `Array<Array<in B?>>::class` and `Array<out Array<B>>?>::class` will be represented exactly the same here.
|
||||
* Other forms of array class literals are not supported by this format, see KT-26568
|
||||
* </pre>
|
||||
*/
|
||||
int getArrayDimensionCount();
|
||||
@@ -3224,9 +3220,7 @@ public final class DebugProtoBuf {
|
||||
* - Array<String>::class, if array_dimension_count = 1
|
||||
* - Array<Array<String>>::class, if array_dimension_count = 2
|
||||
* - etc.
|
||||
* Since it's very difficult to represent Kotlin-specific type aspects (nullability, type projections) of array arguments
|
||||
* in class literals on JVM, we don't bother to do represent this in our format as well.
|
||||
* So, for example, values `Array<Array<in B?>>::class` and `Array<out Array<B>>?>::class` will be represented exactly the same here.
|
||||
* Other forms of array class literals are not supported by this format, see KT-26568
|
||||
* </pre>
|
||||
*/
|
||||
public boolean hasArrayDimensionCount() {
|
||||
@@ -3242,9 +3236,7 @@ public final class DebugProtoBuf {
|
||||
* - Array<String>::class, if array_dimension_count = 1
|
||||
* - Array<Array<String>>::class, if array_dimension_count = 2
|
||||
* - etc.
|
||||
* Since it's very difficult to represent Kotlin-specific type aspects (nullability, type projections) of array arguments
|
||||
* in class literals on JVM, we don't bother to do represent this in our format as well.
|
||||
* So, for example, values `Array<Array<in B?>>::class` and `Array<out Array<B>>?>::class` will be represented exactly the same here.
|
||||
* Other forms of array class literals are not supported by this format, see KT-26568
|
||||
* </pre>
|
||||
*/
|
||||
public int getArrayDimensionCount() {
|
||||
@@ -4373,9 +4365,7 @@ public final class DebugProtoBuf {
|
||||
* - Array<String>::class, if array_dimension_count = 1
|
||||
* - Array<Array<String>>::class, if array_dimension_count = 2
|
||||
* - etc.
|
||||
* Since it's very difficult to represent Kotlin-specific type aspects (nullability, type projections) of array arguments
|
||||
* in class literals on JVM, we don't bother to do represent this in our format as well.
|
||||
* So, for example, values `Array<Array<in B?>>::class` and `Array<out Array<B>>?>::class` will be represented exactly the same here.
|
||||
* Other forms of array class literals are not supported by this format, see KT-26568
|
||||
* </pre>
|
||||
*/
|
||||
public boolean hasArrayDimensionCount() {
|
||||
@@ -4391,9 +4381,7 @@ public final class DebugProtoBuf {
|
||||
* - Array<String>::class, if array_dimension_count = 1
|
||||
* - Array<Array<String>>::class, if array_dimension_count = 2
|
||||
* - etc.
|
||||
* Since it's very difficult to represent Kotlin-specific type aspects (nullability, type projections) of array arguments
|
||||
* in class literals on JVM, we don't bother to do represent this in our format as well.
|
||||
* So, for example, values `Array<Array<in B?>>::class` and `Array<out Array<B>>?>::class` will be represented exactly the same here.
|
||||
* Other forms of array class literals are not supported by this format, see KT-26568
|
||||
* </pre>
|
||||
*/
|
||||
public int getArrayDimensionCount() {
|
||||
@@ -4409,9 +4397,7 @@ public final class DebugProtoBuf {
|
||||
* - Array<String>::class, if array_dimension_count = 1
|
||||
* - Array<Array<String>>::class, if array_dimension_count = 2
|
||||
* - etc.
|
||||
* Since it's very difficult to represent Kotlin-specific type aspects (nullability, type projections) of array arguments
|
||||
* in class literals on JVM, we don't bother to do represent this in our format as well.
|
||||
* So, for example, values `Array<Array<in B?>>::class` and `Array<out Array<B>>?>::class` will be represented exactly the same here.
|
||||
* Other forms of array class literals are not supported by this format, see KT-26568
|
||||
* </pre>
|
||||
*/
|
||||
public Builder setArrayDimensionCount(int value) {
|
||||
@@ -4430,9 +4416,7 @@ public final class DebugProtoBuf {
|
||||
* - Array<String>::class, if array_dimension_count = 1
|
||||
* - Array<Array<String>>::class, if array_dimension_count = 2
|
||||
* - etc.
|
||||
* Since it's very difficult to represent Kotlin-specific type aspects (nullability, type projections) of array arguments
|
||||
* in class literals on JVM, we don't bother to do represent this in our format as well.
|
||||
* So, for example, values `Array<Array<in B?>>::class` and `Array<out Array<B>>?>::class` will be represented exactly the same here.
|
||||
* Other forms of array class literals are not supported by this format, see KT-26568
|
||||
* </pre>
|
||||
*/
|
||||
public Builder clearArrayDimensionCount() {
|
||||
@@ -34443,7 +34427,7 @@ public final class DebugProtoBuf {
|
||||
"tbrains.kotlin.metadata.VersionRequireme" +
|
||||
"nt.Level:\005ERROR\022\022\n\nerror_code\030\004 \001(\005\022\025\n\007m" +
|
||||
"essage\030\005 \001(\005B\004\230\265\030\001\022e\n\014version_kind\030\006 \001(\016" +
|
||||
"2=.org.jetbrains.kotlin.metadata.version" +
|
||||
"2=.org.jetbrains.kotlin.metadata.Version" +
|
||||
"Requirement.VersionKind:\020LANGUAGE_VERSIO" +
|
||||
"N\"+\n\005Level\022\013\n\007WARNING\020\000\022\t\n\005ERROR\020\001\022\n\n\006HI" +
|
||||
"DDEN\020\002\"J\n\013VersionKind\022\024\n\020LANGUAGE_VERSIO" +
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
371
build.gradle.kts
371
build.gradle.kts
@@ -1,5 +1,7 @@
|
||||
|
||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
||||
import org.gradle.plugins.ide.idea.model.IdeaModel
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
import proguard.gradle.ProGuardTask
|
||||
@@ -8,13 +10,11 @@ import org.gradle.kotlin.dsl.*
|
||||
buildscript {
|
||||
extra["defaultSnapshotVersion"] = "1.3-SNAPSHOT"
|
||||
|
||||
// when updating please also update JPS artifacts configuration: https://jetbrains.quip.com/zzGUAYSJ6gv3/JPS-Build-update-bootstrap
|
||||
kotlinBootstrapFrom(BootstrapOption.TeamCity("1.3.50-dev-397", onlySuccessBootstrap = false))
|
||||
kotlinBootstrapFrom(BootstrapOption.TeamCity("1.3.30-eap-28", projectExtId = "Kotlin_1330_Compiler", onlySuccessBootstrap = false))
|
||||
|
||||
repositories.withRedirector(project) {
|
||||
bootstrapKotlinRepo?.let(::maven)
|
||||
maven("https://plugins.gradle.org/m2")
|
||||
maven("https://dl.bintray.com/kotlin/ktor")
|
||||
}
|
||||
|
||||
// a workaround for kotlin compiler classpath in kotlin project: sometimes gradle substitutes
|
||||
@@ -27,16 +27,12 @@ buildscript {
|
||||
|
||||
classpath("com.gradle.publish:plugin-publish-plugin:0.9.7")
|
||||
classpath(kotlin("gradle-plugin", bootstrapKotlinVersion))
|
||||
classpath("net.sf.proguard:proguard-gradle:6.1.0")
|
||||
classpath("net.sf.proguard:proguard-gradle:6.0.3")
|
||||
classpath("org.jetbrains.dokka:dokka-gradle-plugin:0.9.17")
|
||||
|
||||
// a workaround to add another one buildSrc with Cidr-specific tools to Gradle classpath
|
||||
val kotlinUltimateBuildSrcDep = "org.jetbrains.kotlin.ultimate:buildSrc:1.0"
|
||||
if (findProperty("cidrPluginsEnabled")?.toString()?.toBoolean() == true) {
|
||||
logger.info("Adding buildscript classpath dependency \"$kotlinUltimateBuildSrcDep\" in build.gradle.kts")
|
||||
classpath(kotlinUltimateBuildSrcDep)
|
||||
} else {
|
||||
logger.info("NOT adding buildscript classpath dependency \"$kotlinUltimateBuildSrcDep\" in build.gradle.kts")
|
||||
classpath("org.jetbrains.kotlin.ultimate:buildSrc:1.0")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -63,11 +59,11 @@ buildScan {
|
||||
}
|
||||
|
||||
val configuredJdks: List<JdkId> =
|
||||
getConfiguredJdks().also {
|
||||
it.forEach { jdkId ->
|
||||
logger.info("Using ${jdkId.majorVersion} home: ${jdkId.homeDir}")
|
||||
getConfiguredJdks().also {
|
||||
it.forEach {
|
||||
logger.info("Using ${it.majorVersion} home: ${it.homeDir}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val defaultSnapshotVersion: String by extra
|
||||
val buildNumber by extra(findProperty("build.number")?.toString() ?: defaultSnapshotVersion)
|
||||
@@ -95,17 +91,6 @@ val artifactsDir = "$distDir/artifacts"
|
||||
val ideaPluginDir = "$artifactsDir/ideaPlugin/Kotlin"
|
||||
val ideaUltimatePluginDir = "$artifactsDir/ideaUltimatePlugin/Kotlin"
|
||||
|
||||
extra["ktorExcludesForDaemon"] = listOf(
|
||||
"org.jetbrains.kotlin" to "kotlin-reflect",
|
||||
"org.jetbrains.kotlin" to "kotlin-stdlib",
|
||||
"org.jetbrains.kotlin" to "kotlin-stdlib-common",
|
||||
"org.jetbrains.kotlin" to "kotlin-stdlib-jdk8",
|
||||
"org.jetbrains.kotlin" to "kotlin-stdlib-jdk7",
|
||||
"org.jetbrains.kotlinx" to "kotlinx-coroutines-jdk8",
|
||||
"org.jetbrains.kotlinx" to "kotlinx-coroutines-core",
|
||||
"org.jetbrains.kotlinx" to "kotlinx-coroutines-core-common"
|
||||
)
|
||||
|
||||
// TODO: use "by extra()" syntax where possible
|
||||
extra["distLibDir"] = project.file(distLibDir)
|
||||
extra["libsDir"] = project.file(distLibDir)
|
||||
@@ -135,20 +120,10 @@ fun checkJDK() {
|
||||
if (jdkChecked) {
|
||||
return
|
||||
}
|
||||
|
||||
val unpresentJdks = JdkMajorVersion.values()
|
||||
.filter { it.isMandatory() }
|
||||
.map { it.name }
|
||||
.filter { extra[it] == jdkNotFoundConst }
|
||||
.toList()
|
||||
|
||||
if (unpresentJdks.isNotEmpty()) {
|
||||
throw GradleException("Please set environment variable" +
|
||||
(if (unpresentJdks.size > 1) "s" else "") +
|
||||
": " + unpresentJdks.joinToString() +
|
||||
" to point to corresponding JDK installation.")
|
||||
var unpresentJdks = JdkMajorVersion.values().filter { it.isMandatory() }.map { it -> it.name }.filter { it == null || extra[it] == jdkNotFoundConst }.toList()
|
||||
if (!unpresentJdks.isEmpty()) {
|
||||
throw GradleException("Please set environment variable${if (unpresentJdks.size > 1) "s" else ""}: ${unpresentJdks.joinToString()} to point to corresponding JDK installation.")
|
||||
}
|
||||
|
||||
jdkChecked = true
|
||||
}
|
||||
|
||||
@@ -170,8 +145,8 @@ extra["versions.junit"] = "4.12"
|
||||
extra["versions.javaslang"] = "2.0.6"
|
||||
extra["versions.ant"] = "1.8.2"
|
||||
extra["versions.android"] = "2.3.1"
|
||||
extra["versions.kotlinx-coroutines-core"] = "1.1.1"
|
||||
extra["versions.kotlinx-coroutines-jdk8"] = "1.1.1"
|
||||
extra["versions.kotlinx-coroutines-core"] = "1.0.1"
|
||||
extra["versions.kotlinx-coroutines-jdk8"] = "1.0.1"
|
||||
extra["versions.json"] = "20160807"
|
||||
extra["versions.native-platform"] = "0.14"
|
||||
extra["versions.ant-launcher"] = "1.8.0"
|
||||
@@ -180,14 +155,6 @@ extra["versions.org.springframework"] = "4.2.0.RELEASE"
|
||||
extra["versions.jflex"] = "1.7.0"
|
||||
extra["versions.markdown"] = "0.1.25"
|
||||
extra["versions.trove4j"] = "1.0.20181211"
|
||||
extra["versions.kotlin-native-shared"] = "1.0-dev-73"
|
||||
|
||||
// NOTE: please, also change KTOR_NAME in pathUtil.kt and all versions in corresponding jar names in daemon tests.
|
||||
extra["versions.ktor-network"] = "1.0.1"
|
||||
|
||||
if (!project.hasProperty("versions.kotlin-native")) {
|
||||
extra["versions.kotlin-native"] = "1.3-dev-9780"
|
||||
}
|
||||
|
||||
val isTeamcityBuild = project.hasProperty("teamcity") || System.getenv("TEAMCITY_VERSION") != null
|
||||
val intellijUltimateEnabled = project.getBooleanProperty("intellijUltimateEnabled") ?: isTeamcityBuild
|
||||
@@ -200,95 +167,93 @@ extra["intellijUltimateEnabled"] = intellijUltimateEnabled
|
||||
extra["intellijSeparateSdks"] = intellijSeparateSdks
|
||||
|
||||
extra["IntellijCoreDependencies"] =
|
||||
listOf(
|
||||
if (Platform[191].orHigher()) "asm-all-7.0.1" else "asm-all",
|
||||
"guava",
|
||||
"jdom",
|
||||
"jna",
|
||||
"log4j",
|
||||
"picocontainer",
|
||||
"snappy-in-java",
|
||||
"streamex",
|
||||
"trove4j"
|
||||
)
|
||||
listOf(if (Platform[191].orHigher()) "asm-all-7.0" else "asm-all",
|
||||
"guava",
|
||||
"jdom",
|
||||
"jna",
|
||||
"log4j",
|
||||
"picocontainer",
|
||||
"snappy-in-java",
|
||||
"streamex",
|
||||
"trove4j")
|
||||
|
||||
|
||||
extra["compilerModules"] = arrayOf(
|
||||
":compiler:util",
|
||||
":compiler:container",
|
||||
":compiler:resolution",
|
||||
":compiler:serialization",
|
||||
":compiler:psi",
|
||||
":compiler:frontend",
|
||||
":compiler:frontend.common",
|
||||
":compiler:frontend.java",
|
||||
":compiler:cli-common",
|
||||
":compiler:ir.tree",
|
||||
":compiler:ir.psi2ir",
|
||||
":compiler:ir.backend.common",
|
||||
":compiler:backend.jvm",
|
||||
":compiler:backend.js",
|
||||
":compiler:ir.serialization.common",
|
||||
":compiler:ir.serialization.js",
|
||||
":compiler:backend-common",
|
||||
":compiler:backend",
|
||||
":compiler:plugin-api",
|
||||
":compiler:light-classes",
|
||||
":compiler:cli",
|
||||
":compiler:cli-js",
|
||||
":compiler:incremental-compilation-impl",
|
||||
":js:js.ast",
|
||||
":js:js.serializer",
|
||||
":js:js.parser",
|
||||
":js:js.frontend",
|
||||
":js:js.translator",
|
||||
":js:js.dce",
|
||||
":compiler",
|
||||
":kotlin-build-common",
|
||||
":core:metadata",
|
||||
":core:metadata.jvm",
|
||||
":core:descriptors",
|
||||
":core:descriptors.jvm",
|
||||
":core:deserialization",
|
||||
":core:util.runtime",
|
||||
":core:type-system",
|
||||
":compiler:fir:cones",
|
||||
":compiler:fir:resolve",
|
||||
":compiler:fir:tree",
|
||||
":compiler:fir:psi2fir",
|
||||
":compiler:fir:fir2ir",
|
||||
":compiler:fir:java"
|
||||
":compiler:util",
|
||||
":compiler:container",
|
||||
":compiler:resolution",
|
||||
":compiler:serialization",
|
||||
":compiler:psi",
|
||||
*if (project.findProperty("fir.enabled") == "true") {
|
||||
arrayOf(
|
||||
":compiler:fir:cones",
|
||||
":compiler:fir:resolve",
|
||||
":compiler:fir:tree",
|
||||
":compiler:fir:psi2fir"
|
||||
)
|
||||
} else {
|
||||
emptyArray()
|
||||
},
|
||||
":compiler:frontend",
|
||||
":compiler:frontend.common",
|
||||
":compiler:frontend.java",
|
||||
":compiler:frontend.script",
|
||||
":compiler:cli-common",
|
||||
":compiler:daemon-common",
|
||||
":compiler:daemon",
|
||||
":compiler:ir.tree",
|
||||
":compiler:ir.psi2ir",
|
||||
":compiler:ir.backend.common",
|
||||
":compiler:backend.jvm",
|
||||
":compiler:backend.js",
|
||||
":compiler:backend-common",
|
||||
":compiler:backend",
|
||||
":compiler:plugin-api",
|
||||
":compiler:light-classes",
|
||||
":compiler:cli",
|
||||
":compiler:incremental-compilation-impl",
|
||||
":js:js.ast",
|
||||
":js:js.serializer",
|
||||
":js:js.parser",
|
||||
":js:js.frontend",
|
||||
":js:js.translator",
|
||||
":js:js.dce",
|
||||
":compiler",
|
||||
":kotlin-build-common",
|
||||
":core:metadata",
|
||||
":core:metadata.jvm",
|
||||
":core:descriptors",
|
||||
":core:descriptors.jvm",
|
||||
":core:deserialization",
|
||||
":core:util.runtime"
|
||||
)
|
||||
|
||||
val coreLibProjects = listOfNotNull(
|
||||
":kotlin-stdlib",
|
||||
":kotlin-stdlib-common",
|
||||
":kotlin-stdlib-js",
|
||||
// Local builds are disabled at the request of the lib team
|
||||
// TODO: Enable when tests are fixed
|
||||
":kotlin-stdlib-js-ir".takeIf { isTeamcityBuild },
|
||||
":kotlin-stdlib-jdk7",
|
||||
":kotlin-stdlib-jdk8",
|
||||
":kotlin-test:kotlin-test-common",
|
||||
":kotlin-test:kotlin-test-jvm",
|
||||
":kotlin-test:kotlin-test-junit",
|
||||
":kotlin-test:kotlin-test-junit5",
|
||||
":kotlin-test:kotlin-test-testng",
|
||||
":kotlin-test:kotlin-test-js",
|
||||
":kotlin-reflect"
|
||||
val coreLibProjects = listOf(
|
||||
":kotlin-stdlib",
|
||||
":kotlin-stdlib-common",
|
||||
":kotlin-stdlib-js",
|
||||
":kotlin-stdlib-jdk7",
|
||||
":kotlin-stdlib-jdk8",
|
||||
":kotlin-test:kotlin-test-common",
|
||||
":kotlin-test:kotlin-test-jvm",
|
||||
":kotlin-test:kotlin-test-junit",
|
||||
":kotlin-test:kotlin-test-junit5",
|
||||
":kotlin-test:kotlin-test-testng",
|
||||
":kotlin-test:kotlin-test-js",
|
||||
":kotlin-reflect"
|
||||
)
|
||||
|
||||
val gradlePluginProjects = listOf(
|
||||
":kotlin-gradle-plugin",
|
||||
":kotlin-gradle-plugin:plugin-marker",
|
||||
":kotlin-gradle-plugin-api",
|
||||
":kotlin-gradle-plugin",
|
||||
":kotlin-gradle-plugin:plugin-marker",
|
||||
":kotlin-gradle-plugin-api",
|
||||
// ":kotlin-gradle-plugin-integration-tests", // TODO: build fails
|
||||
":kotlin-allopen",
|
||||
":kotlin-allopen:plugin-marker",
|
||||
":kotlin-annotation-processing-gradle",
|
||||
":kotlin-noarg",
|
||||
":kotlin-noarg:plugin-marker",
|
||||
":kotlin-sam-with-receiver"
|
||||
":kotlin-allopen",
|
||||
":kotlin-allopen:plugin-marker",
|
||||
":kotlin-annotation-processing-gradle",
|
||||
":kotlin-noarg",
|
||||
":kotlin-noarg:plugin-marker",
|
||||
":kotlin-sam-with-receiver"
|
||||
)
|
||||
|
||||
apply {
|
||||
@@ -317,29 +282,29 @@ val ignoreTestFailures by extra(project.findProperty("ignoreTestFailures")?.toSt
|
||||
|
||||
allprojects {
|
||||
|
||||
configurations.maybeCreate("embedded")
|
||||
|
||||
jvmTarget = defaultJvmTarget
|
||||
javaHome = defaultJavaHome
|
||||
if (defaultJavaHome != null) {
|
||||
javaHome = defaultJavaHome
|
||||
} else {
|
||||
logger.error("Could not find default java home. Please set environment variable JDK_${defaultJavaHome} to point to JDK ${defaultJavaHome} installation.")
|
||||
}
|
||||
|
||||
|
||||
// There are problems with common build dir:
|
||||
// - some tests (in particular js and binary-compatibility-validator depend on the fixed (default) location
|
||||
// - idea seems unable to exclude common buildDir from indexing
|
||||
// - idea seems unable to exclude common builddir from indexing
|
||||
// therefore it is disabled by default
|
||||
// buildDir = File(commonBuildDir, project.name)
|
||||
|
||||
val mirrorRepo: String? = findProperty("maven.repository.mirror")?.toString()
|
||||
|
||||
repositories {
|
||||
kotlinBuildLocalRepo(project)
|
||||
intellijSdkRepo(project)
|
||||
androidDxJarRepo(project)
|
||||
mirrorRepo?.let(::maven)
|
||||
bootstrapKotlinRepo?.let(::maven)
|
||||
jcenter()
|
||||
maven(protobufRepo)
|
||||
maven(intellijRepo)
|
||||
maven(bootstrapKotlinRepo!!.replace("artifacts/content/maven/", "artifacts/content/internal/repo"))
|
||||
maven(kotlinNativeRepo)
|
||||
maven("https://dl.bintray.com/kotlin/ktor")
|
||||
}
|
||||
|
||||
configureJvmProject(javaHome!!, jvmTarget!!)
|
||||
@@ -392,30 +357,21 @@ allprojects {
|
||||
fun File.toProjectRootRelativePathOrSelf() = (relativeToOrNull(rootDir)?.takeUnless { it.startsWith("..") } ?: this).path
|
||||
|
||||
fun FileCollection.printClassPath(role: String) =
|
||||
println("${project.path} $role classpath:\n ${joinToString("\n ") { it.toProjectRootRelativePathOrSelf() }}")
|
||||
println("${project.path} $role classpath:\n ${joinToString("\n ") { it.toProjectRootRelativePathOrSelf() } }")
|
||||
|
||||
try {
|
||||
javaPluginConvention()
|
||||
} catch (_: UnknownDomainObjectException) {
|
||||
null
|
||||
}?.let { javaConvention ->
|
||||
try { javaPluginConvention() } catch (_: UnknownDomainObjectException) { null }?.let { javaConvention ->
|
||||
task("printCompileClasspath") { doFirst { javaConvention.sourceSets["main"].compileClasspath.printClassPath("compile") } }
|
||||
task("printRuntimeClasspath") { doFirst { javaConvention.sourceSets["main"].runtimeClasspath.printClassPath("runtime") } }
|
||||
task("printTestCompileClasspath") { doFirst { javaConvention.sourceSets["test"].compileClasspath.printClassPath("test compile") } }
|
||||
task("printTestRuntimeClasspath") { doFirst { javaConvention.sourceSets["test"].runtimeClasspath.printClassPath("test runtime") } }
|
||||
}
|
||||
|
||||
run configureCompilerClasspath@{
|
||||
run configureCompilerClasspath@ {
|
||||
val bootstrapCompilerClasspath by rootProject.buildscript.configurations
|
||||
configurations.findByName("kotlinCompilerClasspath")?.let {
|
||||
dependencies.add(it.name, files(bootstrapCompilerClasspath))
|
||||
}
|
||||
}
|
||||
|
||||
if (cacheRedirectorEnabled()) {
|
||||
logger.info("Redirecting repositories for $displayName")
|
||||
repositories.redirect()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -457,7 +413,8 @@ val copyCompilerToIdeaPlugin by task<Copy> {
|
||||
|
||||
val ideaPlugin by task<Task> {
|
||||
dependsOn(copyCompilerToIdeaPlugin)
|
||||
dependsOn(":prepare:idea-plugin:ideaPlugin")
|
||||
val childIdeaPluginTasks = getTasksByName("ideaPlugin", true) - this@task
|
||||
dependsOn(childIdeaPluginTasks)
|
||||
}
|
||||
|
||||
tasks {
|
||||
@@ -482,18 +439,18 @@ tasks {
|
||||
|
||||
create("coreLibsTest") {
|
||||
(coreLibProjects + listOf(
|
||||
":kotlin-stdlib:samples",
|
||||
":kotlin-test:kotlin-test-js:kotlin-test-js-it",
|
||||
":kotlinx-metadata-jvm",
|
||||
":tools:binary-compatibility-validator"
|
||||
":kotlin-stdlib:samples",
|
||||
":kotlin-test:kotlin-test-js:kotlin-test-js-it",
|
||||
":kotlinx-metadata-jvm",
|
||||
":tools:binary-compatibility-validator"
|
||||
)).forEach {
|
||||
dependsOn("$it:check")
|
||||
dependsOn(it + ":check")
|
||||
}
|
||||
}
|
||||
|
||||
create("gradlePluginTest") {
|
||||
gradlePluginProjects.forEach {
|
||||
dependsOn("$it:check")
|
||||
dependsOn(it + ":check")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -503,12 +460,10 @@ tasks {
|
||||
|
||||
create("jvmCompilerTest") {
|
||||
dependsOn("dist")
|
||||
dependsOn(
|
||||
":compiler:test",
|
||||
":compiler:container:test",
|
||||
":compiler:tests-java8:test",
|
||||
":compiler:tests-spec:remoteRunTests"
|
||||
)
|
||||
dependsOn(":compiler:test",
|
||||
":compiler:container:test",
|
||||
":compiler:tests-java8:test",
|
||||
":compiler:tests-spec:remoteRunTests")
|
||||
dependsOn(":plugins:jvm-abi-gen:test")
|
||||
}
|
||||
|
||||
@@ -517,12 +472,6 @@ tasks {
|
||||
dependsOn(":js:js.tests:runMocha")
|
||||
}
|
||||
|
||||
create("firCompilerTest") {
|
||||
dependsOn(":compiler:fir:psi2fir:test")
|
||||
dependsOn(":compiler:fir:resolve:test")
|
||||
dependsOn(":compiler:fir:fir2ir:test")
|
||||
}
|
||||
|
||||
create("scriptingTest") {
|
||||
dependsOn("dist")
|
||||
dependsOn(":kotlin-script-util:test")
|
||||
@@ -532,7 +481,6 @@ tasks {
|
||||
create("compilerTest") {
|
||||
dependsOn("jvmCompilerTest")
|
||||
dependsOn("jsCompilerTest")
|
||||
dependsOn("firCompilerTest")
|
||||
|
||||
dependsOn("scriptingTest")
|
||||
dependsOn(":kotlin-build-common:test")
|
||||
@@ -579,55 +527,46 @@ tasks {
|
||||
|
||||
create("idea-plugin-additional-tests") {
|
||||
dependsOn("dist")
|
||||
dependsOn(
|
||||
":idea:idea-gradle:test",
|
||||
":idea:idea-gradle-native:test",
|
||||
":idea:idea-maven:test",
|
||||
":j2k:test",
|
||||
":nj2k:test",
|
||||
":idea:eval4j:test"
|
||||
)
|
||||
dependsOn(":idea:idea-gradle:test",
|
||||
":idea:idea-gradle-native:test",
|
||||
":idea:idea-maven:test",
|
||||
":j2k:test",
|
||||
":eval4j:test")
|
||||
}
|
||||
|
||||
create("idea-plugin-tests") {
|
||||
dependsOn("dist")
|
||||
dependsOn(
|
||||
"idea-plugin-main-tests",
|
||||
"idea-plugin-additional-tests"
|
||||
)
|
||||
dependsOn("idea-plugin-main-tests",
|
||||
"idea-plugin-additional-tests")
|
||||
}
|
||||
|
||||
create("android-ide-tests") {
|
||||
dependsOn("dist")
|
||||
dependsOn(
|
||||
":plugins:android-extensions-ide:test",
|
||||
":idea:idea-android:test",
|
||||
":kotlin-annotation-processing:test"
|
||||
)
|
||||
dependsOn(":plugins:android-extensions-ide:test",
|
||||
":idea:idea-android:test",
|
||||
":kotlin-annotation-processing:test")
|
||||
}
|
||||
|
||||
create("plugins-tests") {
|
||||
dependsOn("dist")
|
||||
dependsOn(
|
||||
":kotlin-annotation-processing:test",
|
||||
":kotlin-source-sections-compiler-plugin:test",
|
||||
":kotlin-allopen-compiler-plugin:test",
|
||||
":kotlin-noarg-compiler-plugin:test",
|
||||
":kotlin-sam-with-receiver-compiler-plugin:test",
|
||||
":plugins:uast-kotlin:test",
|
||||
":kotlin-annotation-processing-gradle:test",
|
||||
":kotlinx-serialization-ide-plugin:test"
|
||||
)
|
||||
dependsOn(":kotlin-annotation-processing:test",
|
||||
":kotlin-source-sections-compiler-plugin:test",
|
||||
":kotlin-allopen-compiler-plugin:test",
|
||||
":kotlin-noarg-compiler-plugin:test",
|
||||
":kotlin-sam-with-receiver-compiler-plugin:test",
|
||||
":plugins:uast-kotlin:test",
|
||||
":kotlin-annotation-processing-gradle:test",
|
||||
":kotlinx-serialization-ide-plugin:test")
|
||||
}
|
||||
|
||||
|
||||
create("ideaPluginTest") {
|
||||
dependsOn(
|
||||
"idea-plugin-tests",
|
||||
"jps-tests",
|
||||
"plugins-tests",
|
||||
"android-ide-tests",
|
||||
":generators:test"
|
||||
"idea-plugin-tests",
|
||||
"jps-tests",
|
||||
"plugins-tests",
|
||||
"android-ide-tests",
|
||||
":generators:test"
|
||||
)
|
||||
}
|
||||
|
||||
@@ -662,18 +601,7 @@ val zipCompiler by task<Zip> {
|
||||
}
|
||||
}
|
||||
|
||||
val zipStdlibTests by task<Zip> {
|
||||
destinationDirectory.set(file(distDir))
|
||||
archiveFileName.set("kotlin-stdlib-tests.zip")
|
||||
from("libraries/stdlib/common/test") { into("common") }
|
||||
from("libraries/stdlib/test") { into("test") }
|
||||
doLast {
|
||||
logger.lifecycle("Stdlib tests are packed to ${archiveFile.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
val zipTestData by task<Zip> {
|
||||
dependsOn(zipStdlibTests)
|
||||
destinationDir = file(distDir)
|
||||
archiveName = "kotlin-test-data.zip"
|
||||
from("compiler/testData") { into("compiler") }
|
||||
@@ -713,11 +641,11 @@ val zipPlugin by task<Zip> {
|
||||
configure<IdeaModel> {
|
||||
module {
|
||||
excludeDirs = files(
|
||||
project.buildDir,
|
||||
commonLocalDataDir,
|
||||
".gradle",
|
||||
"dependencies",
|
||||
"dist"
|
||||
project.buildDir,
|
||||
commonLocalDataDir,
|
||||
".gradle",
|
||||
"dependencies",
|
||||
"dist"
|
||||
).toSet()
|
||||
}
|
||||
}
|
||||
@@ -725,7 +653,7 @@ configure<IdeaModel> {
|
||||
fun jdkPath(version: String): String {
|
||||
val jdkName = "JDK_${version.replace(".", "")}"
|
||||
val jdkMajorVersion = JdkMajorVersion.valueOf(jdkName)
|
||||
return configuredJdks.find { it.majorVersion == jdkMajorVersion }?.homeDir?.canonicalPath ?: jdkNotFoundConst
|
||||
return configuredJdks.find { it.majorVersion == jdkMajorVersion }?.homeDir?.canonicalPath?:jdkNotFoundConst
|
||||
}
|
||||
|
||||
|
||||
@@ -787,3 +715,12 @@ tasks.create("findShadowJarsInClasspath").doLast {
|
||||
project.checkConfig("testCompileClasspath")
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
afterEvaluate {
|
||||
if (cacheRedirectorEnabled()) {
|
||||
logger.info("Redirecting repositories for $displayName")
|
||||
repositories.redirect()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -65,7 +65,6 @@ rootProject.apply {
|
||||
val isTeamcityBuild = project.hasProperty("teamcity") || System.getenv("TEAMCITY_VERSION") != null
|
||||
val intellijUltimateEnabled by extra(project.getBooleanProperty("intellijUltimateEnabled") ?: isTeamcityBuild)
|
||||
val intellijSeparateSdks by extra(project.getBooleanProperty("intellijSeparateSdks") ?: false)
|
||||
val verifyDependencyOutput by extra( getBooleanProperty("kotlin.build.dependency.output.verification") ?: isTeamcityBuild)
|
||||
|
||||
extra["intellijReleaseType"] = if (extra["versions.intellijSdk"]?.toString()?.endsWith("SNAPSHOT") == true)
|
||||
"snapshots"
|
||||
@@ -74,7 +73,7 @@ else
|
||||
|
||||
extra["versions.androidDxSources"] = "5.0.0_r2"
|
||||
|
||||
extra["customDepsOrg"] = "kotlin.build"
|
||||
extra["customDepsOrg"] = "kotlin.build.custom.deps"
|
||||
|
||||
repositories {
|
||||
if (cacheRedirectorEnabled) {
|
||||
@@ -92,16 +91,15 @@ repositories {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile(kotlin("stdlib", embeddedKotlinVersion))
|
||||
compile("net.rubygrapefruit:native-platform:${property("versions.native-platform")}")
|
||||
compile("net.rubygrapefruit:native-platform-windows-amd64:${property("versions.native-platform")}")
|
||||
compile("net.rubygrapefruit:native-platform-windows-i386:${property("versions.native-platform")}")
|
||||
compile("com.jakewharton.dex:dex-method-list:3.0.0")
|
||||
|
||||
compile("com.github.jengelman.gradle.plugins:shadow:${property("versions.shadow")}")
|
||||
compile("org.jetbrains.intellij.deps:asm-all:7.0.1")
|
||||
compile("org.jetbrains.intellij.deps:asm-all:7.0")
|
||||
|
||||
compile("gradle.plugin.org.jetbrains.gradle.plugin.idea-ext:gradle-idea-ext:0.5")
|
||||
compile("gradle.plugin.org.jetbrains.gradle.plugin.idea-ext:gradle-idea-ext:0.4.2")
|
||||
}
|
||||
|
||||
samWithReceiver {
|
||||
@@ -111,4 +109,4 @@ samWithReceiver {
|
||||
fun Project.`samWithReceiver`(configure: org.jetbrains.kotlin.samWithReceiver.gradle.SamWithReceiverExtension.() -> Unit): Unit =
|
||||
extensions.configure("samWithReceiver", configure)
|
||||
|
||||
tasks["build"].dependsOn(":prepare-deps:build")
|
||||
tasks["build"].dependsOn(":prepare-deps:android-dx:build", ":prepare-deps:intellij-sdk:build")
|
||||
|
||||
124
buildSrc/prepare-deps/android-dx/build.gradle.kts
Normal file
124
buildSrc/prepare-deps/android-dx/build.gradle.kts
Normal file
@@ -0,0 +1,124 @@
|
||||
|
||||
import org.gradle.api.publish.ivy.internal.artifact.FileBasedIvyArtifact
|
||||
import org.gradle.api.publish.ivy.internal.publication.DefaultIvyConfiguration
|
||||
import org.gradle.api.publish.ivy.internal.publication.DefaultIvyPublicationIdentity
|
||||
import org.gradle.api.publish.ivy.internal.publisher.IvyDescriptorFileGenerator
|
||||
import java.io.File
|
||||
import org.gradle.internal.os.OperatingSystem
|
||||
import org.gradle.jvm.tasks.Jar
|
||||
|
||||
val toolsOs by lazy {
|
||||
when {
|
||||
OperatingSystem.current().isWindows -> "windows"
|
||||
OperatingSystem.current().isMacOsX -> "macosx"
|
||||
OperatingSystem.current().isLinux -> "linux"
|
||||
else -> {
|
||||
logger.error("Unknown operating system for android tools: ${OperatingSystem.current().name}")
|
||||
""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val buildToolsVersion = rootProject.extra["versions.androidBuildTools"] as String
|
||||
val dxSourcesVersion = rootProject.extra["versions.androidDxSources"] as String
|
||||
|
||||
repositories {
|
||||
ivy {
|
||||
artifactPattern("https://dl.google.com/android/repository/[artifact]_[revision](-[classifier]).[ext]")
|
||||
artifactPattern("https://android.googlesource.com/platform/dalvik/+archive/android-$dxSourcesVersion/[artifact].[ext]")
|
||||
metadataSources {
|
||||
artifact()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val customDepsRepoDir = File(buildDir, "repo")
|
||||
val customDepsOrg: String by rootProject.extra
|
||||
val dxModuleName = "android-dx"
|
||||
val dxRevision = buildToolsVersion
|
||||
val dxRepoModuleDir = File(customDepsRepoDir, "$customDepsOrg/$dxModuleName/$dxRevision")
|
||||
|
||||
val buildToolsZip by configurations.creating
|
||||
val dxSourcesTar by configurations.creating
|
||||
|
||||
dependencies {
|
||||
buildToolsZip("google:build-tools:$buildToolsVersion:$toolsOs@zip")
|
||||
dxSourcesTar("google:dx:0@tar.gz")
|
||||
}
|
||||
|
||||
val unzipDxJar by tasks.creating {
|
||||
dependsOn(buildToolsZip)
|
||||
inputs.files(buildToolsZip)
|
||||
outputs.files(File(dxRepoModuleDir, "dx.jar"))
|
||||
doFirst {
|
||||
project.copy {
|
||||
from(zipTree(buildToolsZip.singleFile).files)
|
||||
include("**/dx.jar")
|
||||
into(dxRepoModuleDir)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val dxSourcesTargetDir = File(buildDir, "dx_src")
|
||||
|
||||
val untarDxSources by tasks.creating {
|
||||
dependsOn(dxSourcesTar)
|
||||
inputs.files(dxSourcesTar)
|
||||
outputs.dir(dxSourcesTargetDir)
|
||||
doFirst {
|
||||
project.copy {
|
||||
from(tarTree(dxSourcesTar.singleFile))
|
||||
include("src/**")
|
||||
includeEmptyDirs = false
|
||||
into(dxSourcesTargetDir)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val prepareDxSourcesJar by tasks.creating(Jar::class) {
|
||||
dependsOn(untarDxSources)
|
||||
from("$dxSourcesTargetDir/src")
|
||||
destinationDir = dxRepoModuleDir
|
||||
baseName = "dx"
|
||||
classifier = "sources"
|
||||
}
|
||||
|
||||
val prepareIvyXml by tasks.creating {
|
||||
dependsOn(unzipDxJar, prepareDxSourcesJar)
|
||||
inputs.files(unzipDxJar, prepareDxSourcesJar)
|
||||
val ivyFile = File(dxRepoModuleDir, "$dxModuleName.ivy.xml")
|
||||
outputs.file(ivyFile)
|
||||
doLast {
|
||||
with(IvyDescriptorFileGenerator(DefaultIvyPublicationIdentity(customDepsOrg, dxModuleName, dxRevision))) {
|
||||
addConfiguration(DefaultIvyConfiguration("default"))
|
||||
addConfiguration(DefaultIvyConfiguration("sources"))
|
||||
addArtifact(
|
||||
FileBasedIvyArtifact(
|
||||
File(dxRepoModuleDir, "dx.jar"),
|
||||
DefaultIvyPublicationIdentity(customDepsOrg, "dx", dxRevision)
|
||||
).also {
|
||||
it.conf = "default"
|
||||
})
|
||||
|
||||
addArtifact(
|
||||
FileBasedIvyArtifact(
|
||||
File(dxRepoModuleDir, "dx-sources.jar"),
|
||||
DefaultIvyPublicationIdentity(customDepsOrg, "dx", dxRevision)
|
||||
).also {
|
||||
it.conf = "sources"
|
||||
it.classifier = "sources"
|
||||
})
|
||||
|
||||
writeTo(ivyFile)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val build by tasks.creating {
|
||||
dependsOn(unzipDxJar, prepareDxSourcesJar, prepareIvyXml)
|
||||
}
|
||||
|
||||
val clean by tasks.creating(Delete::class) {
|
||||
delete(dxRepoModuleDir)
|
||||
delete(buildDir)
|
||||
}
|
||||
@@ -1,440 +0,0 @@
|
||||
@file:Suppress("PropertyName")
|
||||
|
||||
import org.gradle.api.publish.ivy.internal.artifact.FileBasedIvyArtifact
|
||||
import org.gradle.api.publish.ivy.internal.publication.DefaultIvyConfiguration
|
||||
import org.gradle.api.publish.ivy.internal.publication.DefaultIvyPublicationIdentity
|
||||
import org.gradle.api.publish.ivy.internal.publisher.IvyDescriptorFileGenerator
|
||||
import org.gradle.internal.os.OperatingSystem
|
||||
|
||||
val cacheRedirectorEnabled = findProperty("cacheRedirectorEnabled")?.toString()?.toBoolean() == true
|
||||
val verifyDependencyOutput: Boolean by rootProject.extra
|
||||
val intellijUltimateEnabled: Boolean by rootProject.extra
|
||||
val intellijReleaseType: String by rootProject.extra
|
||||
val intellijVersion = rootProject.extra["versions.intellijSdk"] as String
|
||||
val asmVersion = rootProject.findProperty("versions.jar.asm-all") as String?
|
||||
val androidStudioRelease = rootProject.findProperty("versions.androidStudioRelease") as String?
|
||||
val androidStudioBuild = rootProject.findProperty("versions.androidStudioBuild") as String?
|
||||
val intellijSeparateSdks: Boolean by rootProject.extra
|
||||
val installIntellijCommunity = !intellijUltimateEnabled || intellijSeparateSdks
|
||||
val installIntellijUltimate = intellijUltimateEnabled
|
||||
|
||||
val androidBuildToolsVersion = rootProject.extra["versions.androidBuildTools"] as String
|
||||
val androidDxSourcesVersion = rootProject.extra["versions.androidDxSources"] as String
|
||||
|
||||
val intellijVersionDelimiterIndex = intellijVersion.indexOfAny(charArrayOf('.', '-'))
|
||||
if (intellijVersionDelimiterIndex == -1) {
|
||||
error("Invalid IDEA version $intellijVersion")
|
||||
}
|
||||
|
||||
val platformBaseVersion = intellijVersion.substring(0, intellijVersionDelimiterIndex)
|
||||
|
||||
logger.info("verifyDependencyOutput: $verifyDependencyOutput")
|
||||
logger.info("intellijUltimateEnabled: $intellijUltimateEnabled")
|
||||
logger.info("intellijVersion: $intellijVersion")
|
||||
logger.info("androidStudioRelease: $androidStudioRelease")
|
||||
logger.info("androidStudioBuild: $androidStudioBuild")
|
||||
logger.info("intellijSeparateSdks: $intellijSeparateSdks")
|
||||
logger.info("installIntellijCommunity: $installIntellijCommunity")
|
||||
logger.info("installIntellijUltimate: $installIntellijUltimate")
|
||||
|
||||
val androidStudioOs by lazy {
|
||||
when {
|
||||
OperatingSystem.current().isWindows -> "windows"
|
||||
OperatingSystem.current().isMacOsX -> "mac"
|
||||
OperatingSystem.current().isLinux -> "linux"
|
||||
else -> {
|
||||
logger.error("Unknown operating system for android tools: ${OperatingSystem.current().name}")
|
||||
""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val androidToolsOs by lazy {
|
||||
when {
|
||||
OperatingSystem.current().isWindows -> "windows"
|
||||
OperatingSystem.current().isMacOsX -> "macosx"
|
||||
OperatingSystem.current().isLinux -> "linux"
|
||||
else -> {
|
||||
logger.error("Unknown operating system for android tools: ${OperatingSystem.current().name}")
|
||||
""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
repositories {
|
||||
if (androidStudioRelease != null) {
|
||||
ivy {
|
||||
if (cacheRedirectorEnabled) {
|
||||
artifactPattern("https://cache-redirector.jetbrains.com/dl.google.com/dl/android/studio/ide-zips/$androidStudioRelease/[artifact]-[revision]-$androidStudioOs.[ext]")
|
||||
}
|
||||
|
||||
artifactPattern("https://dl.google.com/dl/android/studio/ide-zips/$androidStudioRelease/[artifact]-[revision]-$androidStudioOs.[ext]")
|
||||
metadataSources {
|
||||
artifact()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ivy {
|
||||
artifactPattern("https://dl.google.com/android/repository/[artifact]_[revision](-[classifier]).[ext]")
|
||||
artifactPattern("https://android.googlesource.com/platform/dalvik/+archive/android-$androidDxSourcesVersion/[artifact].[ext]")
|
||||
metadataSources {
|
||||
artifact()
|
||||
}
|
||||
}
|
||||
|
||||
if (cacheRedirectorEnabled) {
|
||||
maven("https://cache-redirector.jetbrains.com/www.jetbrains.com/intellij-repository/$intellijReleaseType")
|
||||
maven("https://cache-redirector.jetbrains.com/plugins.jetbrains.com/maven")
|
||||
maven("https://cache-redirector.jetbrains.com/jetbrains.bintray.com/intellij-third-party-dependencies/")
|
||||
}
|
||||
|
||||
maven("https://www.jetbrains.com/intellij-repository/$intellijReleaseType")
|
||||
maven("https://plugins.jetbrains.com/maven")
|
||||
maven("https://jetbrains.bintray.com/intellij-third-party-dependencies/")
|
||||
}
|
||||
|
||||
val intellij by configurations.creating
|
||||
val intellijUltimate by configurations.creating
|
||||
val androidStudio by configurations.creating
|
||||
val sources by configurations.creating
|
||||
val jpsStandalone by configurations.creating
|
||||
val intellijCore by configurations.creating
|
||||
val nodeJSPlugin by configurations.creating
|
||||
val androidBuildTools by configurations.creating
|
||||
val androidDxSources by configurations.creating
|
||||
|
||||
/**
|
||||
* Special repository for annotations.jar required for idea runtime only.
|
||||
*
|
||||
* See IntellijDependenciesKt.intellijRuntimeAnnotations for more details.
|
||||
*/
|
||||
val intellijRuntimeAnnotations = "intellij-runtime-annotations"
|
||||
|
||||
val customDepsRepoDir = rootProject.rootDir.parentFile.resolve("dependencies/repo")
|
||||
val customDepsOrg: String by rootProject.extra
|
||||
val customDepsRevision = intellijVersion
|
||||
val repoDir = File(customDepsRepoDir, customDepsOrg)
|
||||
|
||||
val androidDxModuleName = "android-dx"
|
||||
val androidDxRevision = androidBuildToolsVersion
|
||||
val androidDxRepoModuleDir = File(repoDir, "$androidDxModuleName/$androidDxRevision")
|
||||
|
||||
dependencies {
|
||||
if (androidStudioRelease != null) {
|
||||
val extension = if (androidStudioOs == "linux" && androidStudioRelease.startsWith("3.5"))
|
||||
"tar.gz"
|
||||
else
|
||||
"zip"
|
||||
|
||||
androidStudio("google:android-studio-ide:$androidStudioBuild@$extension")
|
||||
} else {
|
||||
if (installIntellijCommunity) {
|
||||
intellij("com.jetbrains.intellij.idea:ideaIC:$intellijVersion")
|
||||
}
|
||||
if (installIntellijUltimate) {
|
||||
intellijUltimate("com.jetbrains.intellij.idea:ideaIU:$intellijVersion")
|
||||
}
|
||||
}
|
||||
|
||||
if (asmVersion != null) {
|
||||
sources("org.jetbrains.intellij.deps:asm-all:$asmVersion:sources@jar")
|
||||
}
|
||||
|
||||
sources("com.jetbrains.intellij.idea:ideaIC:$intellijVersion:sources@jar")
|
||||
jpsStandalone("com.jetbrains.intellij.idea:jps-standalone:$intellijVersion")
|
||||
intellijCore("com.jetbrains.intellij.idea:intellij-core:$intellijVersion")
|
||||
if (intellijUltimateEnabled) {
|
||||
nodeJSPlugin("com.jetbrains.plugins:NodeJS:${rootProject.extra["versions.idea.NodeJS"]}@zip")
|
||||
}
|
||||
|
||||
androidBuildTools("google:build-tools:$androidBuildToolsVersion:$androidToolsOs@zip")
|
||||
androidDxSources("google:dx:0@tar.gz")
|
||||
}
|
||||
|
||||
val dxSourcesTargetDir = File(buildDir, "dx_src")
|
||||
|
||||
val untarDxSources by tasks.creating {
|
||||
dependsOn(androidDxSources)
|
||||
inputs.files(androidDxSources)
|
||||
outputs.dir(dxSourcesTargetDir)
|
||||
doFirst {
|
||||
project.copy {
|
||||
from(tarTree(androidDxSources.singleFile))
|
||||
include("src/**")
|
||||
includeEmptyDirs = false
|
||||
into(dxSourcesTargetDir)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val prepareDxSourcesJar by tasks.creating(Jar::class) {
|
||||
dependsOn(untarDxSources)
|
||||
from("$dxSourcesTargetDir/src")
|
||||
destinationDir = File(repoDir, sources.name)
|
||||
baseName = androidDxModuleName
|
||||
classifier = "sources"
|
||||
version = androidBuildToolsVersion
|
||||
}
|
||||
|
||||
val unzipDxJar by tasks.creating {
|
||||
dependsOn(androidBuildTools)
|
||||
inputs.files(androidBuildTools)
|
||||
outputs.files(File(androidDxRepoModuleDir, "dx.jar"))
|
||||
doFirst {
|
||||
project.copy {
|
||||
from(zipTree(androidBuildTools.singleFile).files)
|
||||
include("**/dx.jar")
|
||||
into(androidDxRepoModuleDir)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val buildIvyRepoForAndroidDx by tasks.creating {
|
||||
dependsOn(unzipDxJar, prepareDxSourcesJar)
|
||||
inputs.files(unzipDxJar, prepareDxSourcesJar)
|
||||
outputs.file(File(androidDxRepoModuleDir, "$androidDxModuleName.ivy.xml"))
|
||||
|
||||
doLast {
|
||||
writeIvyXml(
|
||||
customDepsOrg,
|
||||
androidDxModuleName,
|
||||
androidBuildToolsVersion,
|
||||
androidDxModuleName,
|
||||
androidDxRepoModuleDir,
|
||||
androidDxRepoModuleDir,
|
||||
androidDxRepoModuleDir,
|
||||
prepareDxSourcesJar.outputs.files.singleFile
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
val makeIntellijCore = buildIvyRepositoryTask(intellijCore, customDepsOrg, customDepsRepoDir)
|
||||
|
||||
val makeIntellijAnnotations by tasks.creating(Copy::class.java) {
|
||||
dependsOn(makeIntellijCore)
|
||||
|
||||
from(repoDir.resolve("intellij-core/$intellijVersion/artifacts/annotations.jar"))
|
||||
|
||||
val targetDir = File(repoDir, "$intellijRuntimeAnnotations/$intellijVersion")
|
||||
into(targetDir)
|
||||
|
||||
val ivyFile = File(targetDir, "$intellijRuntimeAnnotations.ivy.xml")
|
||||
outputs.files(ivyFile)
|
||||
|
||||
doLast {
|
||||
writeIvyXml(
|
||||
customDepsOrg,
|
||||
intellijRuntimeAnnotations,
|
||||
intellijVersion,
|
||||
intellijRuntimeAnnotations,
|
||||
targetDir,
|
||||
targetDir,
|
||||
targetDir,
|
||||
allowAnnotations = true
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
val mergeSources by tasks.creating(Jar::class.java) {
|
||||
dependsOn(sources)
|
||||
from(provider { sources.map(::zipTree) })
|
||||
destinationDir = File(repoDir, sources.name)
|
||||
baseName = "intellij"
|
||||
classifier = "sources"
|
||||
version = intellijVersion
|
||||
}
|
||||
|
||||
val sourcesFile = mergeSources.outputs.files.singleFile
|
||||
|
||||
val makeIde = if (androidStudioBuild != null) {
|
||||
buildIvyRepositoryTask(
|
||||
androidStudio,
|
||||
customDepsOrg,
|
||||
customDepsRepoDir,
|
||||
if (androidStudioOs == "mac")
|
||||
::skipContentsDirectory
|
||||
else
|
||||
::skipToplevelDirectory
|
||||
)
|
||||
} else {
|
||||
val task = if (installIntellijUltimate) {
|
||||
buildIvyRepositoryTask(intellijUltimate, customDepsOrg, customDepsRepoDir, null, sourcesFile)
|
||||
} else {
|
||||
buildIvyRepositoryTask(intellij, customDepsOrg, customDepsRepoDir, null, sourcesFile)
|
||||
}
|
||||
|
||||
task.configure {
|
||||
dependsOn(mergeSources)
|
||||
}
|
||||
|
||||
task
|
||||
}
|
||||
|
||||
val build by tasks.creating {
|
||||
dependsOn(
|
||||
makeIntellijCore,
|
||||
makeIde,
|
||||
buildIvyRepositoryTask(jpsStandalone, customDepsOrg, customDepsRepoDir, null, sourcesFile),
|
||||
makeIntellijAnnotations,
|
||||
buildIvyRepoForAndroidDx
|
||||
)
|
||||
|
||||
if (installIntellijUltimate) {
|
||||
dependsOn(
|
||||
buildIvyRepositoryTask(nodeJSPlugin, customDepsOrg, customDepsRepoDir, ::skipToplevelDirectory, sourcesFile)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Task to delete legacy repo locations
|
||||
tasks.create("cleanLegacy", Delete::class.java) {
|
||||
delete("$projectDir/android-dx")
|
||||
delete("$projectDir/intellij-sdk")
|
||||
}
|
||||
|
||||
tasks.create("clean", Delete::class.java) {
|
||||
delete(customDepsRepoDir)
|
||||
}
|
||||
|
||||
fun buildIvyRepositoryTask(
|
||||
configuration: Configuration,
|
||||
organization: String,
|
||||
repoDirectory: File,
|
||||
pathRemap: ((String) -> String)? = null,
|
||||
sources: File? = null
|
||||
) = tasks.register("buildIvyRepositoryFor${configuration.name.capitalize()}") {
|
||||
|
||||
fun ResolvedArtifact.moduleDirectory(): File =
|
||||
File(repoDirectory, "$organization/${moduleVersion.id.name}/${moduleVersion.id.version}")
|
||||
|
||||
dependsOn(configuration)
|
||||
inputs.files(configuration)
|
||||
|
||||
if (verifyDependencyOutput) {
|
||||
outputs.dir(provider {
|
||||
configuration.resolvedConfiguration.resolvedArtifacts.single().moduleDirectory()
|
||||
})
|
||||
} else {
|
||||
outputs.upToDateWhen {
|
||||
configuration.resolvedConfiguration.resolvedArtifacts.single()
|
||||
.moduleDirectory()
|
||||
.exists()
|
||||
}
|
||||
}
|
||||
|
||||
doFirst {
|
||||
configuration.resolvedConfiguration.resolvedArtifacts.single().run {
|
||||
val moduleDirectory = moduleDirectory()
|
||||
val artifactsDirectory = File(moduleDirectory(), "artifacts")
|
||||
|
||||
logger.info("Unpacking ${file.name} into ${artifactsDirectory.absolutePath}")
|
||||
copy {
|
||||
val fileTree = when (extension) {
|
||||
"tar.gz" -> tarTree(file)
|
||||
"zip" -> zipTree(file)
|
||||
else -> error("Unsupported artifact extension: $extension")
|
||||
}
|
||||
|
||||
from(fileTree.matching {
|
||||
exclude("**/plugins/Kotlin/**")
|
||||
})
|
||||
|
||||
into(artifactsDirectory)
|
||||
|
||||
if (pathRemap != null) {
|
||||
eachFile {
|
||||
path = pathRemap(path)
|
||||
}
|
||||
}
|
||||
|
||||
includeEmptyDirs = false
|
||||
}
|
||||
|
||||
writeIvyXml(
|
||||
organization,
|
||||
moduleVersion.id.name,
|
||||
moduleVersion.id.version,
|
||||
moduleVersion.id.name,
|
||||
File(artifactsDirectory, "lib"),
|
||||
File(artifactsDirectory, "lib"),
|
||||
File(moduleDirectory, "ivy"),
|
||||
*listOfNotNull(sources).toTypedArray()
|
||||
)
|
||||
|
||||
val pluginsDirectory = File(artifactsDirectory, "plugins")
|
||||
if (pluginsDirectory.exists()) {
|
||||
file(File(artifactsDirectory, "plugins"))
|
||||
.listFiles { file: File -> file.isDirectory }
|
||||
.forEach {
|
||||
writeIvyXml(
|
||||
organization,
|
||||
it.name,
|
||||
moduleVersion.id.version,
|
||||
it.name,
|
||||
File(it, "lib"),
|
||||
File(it, "lib"),
|
||||
File(moduleDirectory, "ivy"),
|
||||
*listOfNotNull(sources).toTypedArray()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun writeIvyXml(
|
||||
organization: String,
|
||||
moduleName: String,
|
||||
version: String,
|
||||
fileName: String,
|
||||
baseDir: File,
|
||||
artifactDir: File,
|
||||
targetDir: File,
|
||||
vararg sourcesJar: File,
|
||||
allowAnnotations: Boolean = false
|
||||
) {
|
||||
fun shouldIncludeIntellijJar(jar: File) =
|
||||
jar.isFile
|
||||
&& jar.extension == "jar"
|
||||
&& !jar.name.startsWith("kotlin-")
|
||||
&& (allowAnnotations || jar.name != "annotations.jar") // see comments for [intellijAnnotations] above
|
||||
|
||||
with(IvyDescriptorFileGenerator(DefaultIvyPublicationIdentity(organization, moduleName, version))) {
|
||||
addConfiguration(DefaultIvyConfiguration("default"))
|
||||
addConfiguration(DefaultIvyConfiguration("sources"))
|
||||
artifactDir.listFiles()?.forEach { jarFile ->
|
||||
if (shouldIncludeIntellijJar(jarFile)) {
|
||||
val relativeName = jarFile.toRelativeString(baseDir).removeSuffix(".jar")
|
||||
addArtifact(
|
||||
FileBasedIvyArtifact(
|
||||
jarFile,
|
||||
DefaultIvyPublicationIdentity(organization, relativeName, version)
|
||||
).also {
|
||||
it.conf = "default"
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
sourcesJar.forEach {
|
||||
val sourcesArtifactName = it.name.substringBeforeLast("-").substringBeforeLast("-")
|
||||
addArtifact(
|
||||
FileBasedIvyArtifact(
|
||||
it,
|
||||
DefaultIvyPublicationIdentity(organization, sourcesArtifactName, version)
|
||||
).also { artifact ->
|
||||
artifact.conf = "sources"
|
||||
artifact.classifier = "sources"
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
writeTo(File(targetDir, "$fileName.ivy.xml"))
|
||||
}
|
||||
}
|
||||
|
||||
fun skipToplevelDirectory(path: String) = path.substringAfter('/')
|
||||
|
||||
fun skipContentsDirectory(path: String) = path.substringAfter("Contents/")
|
||||
285
buildSrc/prepare-deps/intellij-sdk/build.gradle.kts
Normal file
285
buildSrc/prepare-deps/intellij-sdk/build.gradle.kts
Normal file
@@ -0,0 +1,285 @@
|
||||
@file:Suppress("PropertyName")
|
||||
|
||||
import org.gradle.api.publish.ivy.internal.artifact.FileBasedIvyArtifact
|
||||
import org.gradle.api.publish.ivy.internal.publication.DefaultIvyConfiguration
|
||||
import org.gradle.api.publish.ivy.internal.publication.DefaultIvyPublicationIdentity
|
||||
import org.gradle.api.publish.ivy.internal.publisher.IvyDescriptorFileGenerator
|
||||
import java.io.File
|
||||
import org.gradle.internal.os.OperatingSystem
|
||||
|
||||
val cacheRedirectorEnabled = findProperty("cacheRedirectorEnabled")?.toString()?.toBoolean() == true
|
||||
|
||||
val intellijUltimateEnabled: Boolean by rootProject.extra
|
||||
val intellijReleaseType: String by rootProject.extra
|
||||
val intellijVersion = rootProject.extra["versions.intellijSdk"] as String
|
||||
val asmVersion = rootProject.findProperty("versions.jar.asm-all") as String?
|
||||
val androidStudioRelease = rootProject.findProperty("versions.androidStudioRelease") as String?
|
||||
val androidStudioBuild = rootProject.findProperty("versions.androidStudioBuild") as String?
|
||||
val intellijSeparateSdks: Boolean by rootProject.extra
|
||||
val installIntellijCommunity = !intellijUltimateEnabled || intellijSeparateSdks
|
||||
val installIntellijUltimate = intellijUltimateEnabled
|
||||
|
||||
val intellijVersionDelimiterIndex = intellijVersion.indexOfAny(charArrayOf('.', '-'))
|
||||
if (intellijVersionDelimiterIndex == -1) {
|
||||
error("Invalid IDEA version $intellijVersion")
|
||||
}
|
||||
|
||||
val platformBaseVersion = intellijVersion.substring(0, intellijVersionDelimiterIndex)
|
||||
|
||||
logger.info("intellijUltimateEnabled: $intellijUltimateEnabled")
|
||||
|
||||
logger.info("intellijVersion: $intellijVersion")
|
||||
logger.info("androidStudioRelease: $androidStudioRelease")
|
||||
logger.info("androidStudioBuild: $androidStudioBuild")
|
||||
|
||||
logger.info("intellijSeparateSdks: $intellijSeparateSdks")
|
||||
logger.info("installIntellijCommunity: $installIntellijCommunity")
|
||||
logger.info("installIntellijUltimate: $installIntellijUltimate")
|
||||
|
||||
val studioOs by lazy {
|
||||
when {
|
||||
OperatingSystem.current().isWindows -> "windows"
|
||||
OperatingSystem.current().isMacOsX -> "mac"
|
||||
OperatingSystem.current().isLinux -> "linux"
|
||||
else -> {
|
||||
logger.error("Unknown operating system for android tools: ${OperatingSystem.current().name}")
|
||||
""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
if (androidStudioRelease != null) {
|
||||
ivy {
|
||||
if (cacheRedirectorEnabled) {
|
||||
artifactPattern("https://cache-redirector.jetbrains.com/dl.google.com/dl/android/studio/ide-zips/$androidStudioRelease/[artifact]-[revision]-$studioOs.zip")
|
||||
}
|
||||
|
||||
artifactPattern("https://dl.google.com/dl/android/studio/ide-zips/$androidStudioRelease/[artifact]-[revision]-$studioOs.zip")
|
||||
metadataSources {
|
||||
artifact()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (cacheRedirectorEnabled) {
|
||||
maven("https://cache-redirector.jetbrains.com/www.jetbrains.com/intellij-repository/$intellijReleaseType")
|
||||
maven("https://cache-redirector.jetbrains.com/plugins.jetbrains.com/maven")
|
||||
maven("https://cache-redirector.jetbrains.com/jetbrains.bintray.com/intellij-third-party-dependencies/")
|
||||
}
|
||||
|
||||
maven("https://www.jetbrains.com/intellij-repository/$intellijReleaseType")
|
||||
maven("https://plugins.jetbrains.com/maven")
|
||||
maven("https://jetbrains.bintray.com/intellij-third-party-dependencies/")
|
||||
}
|
||||
|
||||
val intellij by configurations.creating
|
||||
val intellijUltimate by configurations.creating
|
||||
val sources by configurations.creating
|
||||
val `jps-standalone` by configurations.creating
|
||||
val `jps-build-test` by configurations.creating
|
||||
val `intellij-core` by configurations.creating
|
||||
val `plugins-NodeJS` by configurations.creating
|
||||
|
||||
val customDepsRepoDir = File(buildDir, "repo")
|
||||
val customDepsOrg: String by rootProject.extra
|
||||
val customDepsRevision = intellijVersion
|
||||
val customDepsRepoModulesDir = File(customDepsRepoDir, "$customDepsOrg/$customDepsRevision")
|
||||
val repoDir = customDepsRepoModulesDir
|
||||
|
||||
dependencies {
|
||||
if (androidStudioRelease != null) {
|
||||
intellij("google:android-studio-ide:$androidStudioBuild")
|
||||
} else {
|
||||
if (installIntellijCommunity) {
|
||||
intellij("com.jetbrains.intellij.idea:ideaIC:$intellijVersion")
|
||||
}
|
||||
if (installIntellijUltimate) {
|
||||
intellijUltimate("com.jetbrains.intellij.idea:ideaIU:$intellijVersion")
|
||||
}
|
||||
}
|
||||
|
||||
if (asmVersion != null) {
|
||||
sources("org.jetbrains.intellij.deps:asm-all:$asmVersion:sources@jar")
|
||||
}
|
||||
|
||||
sources("com.jetbrains.intellij.idea:ideaIC:$intellijVersion:sources@jar")
|
||||
`jps-standalone`("com.jetbrains.intellij.idea:jps-standalone:$intellijVersion")
|
||||
`jps-build-test`("com.jetbrains.intellij.idea:jps-build-test:$intellijVersion")
|
||||
`intellij-core`("com.jetbrains.intellij.idea:intellij-core:$intellijVersion")
|
||||
if (intellijUltimateEnabled) {
|
||||
`plugins-NodeJS`("com.jetbrains.plugins:NodeJS:${rootProject.extra["versions.idea.NodeJS"]}@zip")
|
||||
}
|
||||
}
|
||||
|
||||
fun Task.configureExtractFromConfigurationTask(sourceConfig: Configuration,
|
||||
pathRemap: (String) -> String = { it },
|
||||
extractor: (Configuration) -> Any) {
|
||||
dependsOn(sourceConfig)
|
||||
inputs.files(sourceConfig)
|
||||
val targetDir = File(repoDir, sourceConfig.name)
|
||||
outputs.dirs(targetDir)
|
||||
doFirst {
|
||||
project.copy {
|
||||
from(extractor(sourceConfig))
|
||||
into(targetDir)
|
||||
eachFile {
|
||||
path = pathRemap(path)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun removePathPrefix(path: String): String {
|
||||
if (androidStudioRelease == null) return path
|
||||
val slashes = if (studioOs == "mac") 2 else 1
|
||||
var result = path
|
||||
repeat(slashes) {
|
||||
result = result.substringAfter('/')
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
val unzipIntellijSdk by tasks.creating {
|
||||
configureExtractFromConfigurationTask(intellij, pathRemap = { removePathPrefix(it) }) {
|
||||
zipTree(it.singleFile).matching {
|
||||
exclude("**/plugins/Kotlin/**")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val unzipIntellijUltimateSdk by tasks.creating {
|
||||
configureExtractFromConfigurationTask(intellijUltimate) {
|
||||
zipTree(it.singleFile).matching {
|
||||
exclude("plugins/Kotlin/**")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val unzipIntellijCore by tasks.creating { configureExtractFromConfigurationTask(`intellij-core`) { zipTree(it.singleFile) } }
|
||||
|
||||
val unzipJpsStandalone by tasks.creating { configureExtractFromConfigurationTask(`jps-standalone`) { zipTree(it.singleFile) } }
|
||||
|
||||
val mergeSources by tasks.creating(Jar::class.java) {
|
||||
dependsOn(sources)
|
||||
from(provider { sources.map(::zipTree) })
|
||||
destinationDir = File(repoDir, sources.name)
|
||||
baseName = "intellij"
|
||||
classifier = "sources"
|
||||
version = intellijVersion
|
||||
}
|
||||
|
||||
val copyJpsBuildTest by tasks.creating { configureExtractFromConfigurationTask(`jps-build-test`) { it.singleFile } }
|
||||
|
||||
val unzipNodeJSPlugin by tasks.creating { configureExtractFromConfigurationTask(`plugins-NodeJS`) { zipTree(it.singleFile) } }
|
||||
|
||||
fun writeIvyXml(moduleName: String, fileName: String, jarFiles: FileCollection, baseDir: File, vararg sourcesJar: File) {
|
||||
with(IvyDescriptorFileGenerator(DefaultIvyPublicationIdentity(customDepsOrg, moduleName, intellijVersion))) {
|
||||
addConfiguration(DefaultIvyConfiguration("default"))
|
||||
addConfiguration(DefaultIvyConfiguration("sources"))
|
||||
jarFiles.asFileTree.files.forEach { jarFile ->
|
||||
if (jarFile.isFile && jarFile.extension == "jar") {
|
||||
val relativeName = jarFile.toRelativeString(baseDir).removeSuffix(".jar")
|
||||
addArtifact(
|
||||
FileBasedIvyArtifact(jarFile, DefaultIvyPublicationIdentity(customDepsOrg, relativeName, intellijVersion)).also {
|
||||
it.conf = "default"
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
sourcesJar.forEach {
|
||||
val sourcesArtifactName = it.name.substringBeforeLast("-").substringBeforeLast("-")
|
||||
addArtifact(
|
||||
FileBasedIvyArtifact(it, DefaultIvyPublicationIdentity(customDepsOrg, sourcesArtifactName, intellijVersion)).also { artifact ->
|
||||
artifact.conf = "sources"
|
||||
artifact.classifier = "sources"
|
||||
}
|
||||
)
|
||||
}
|
||||
writeTo(File(customDepsRepoModulesDir, "$fileName.ivy.xml"))
|
||||
}
|
||||
}
|
||||
|
||||
val prepareIvyXmls by tasks.creating {
|
||||
dependsOn(unzipIntellijCore, unzipJpsStandalone, mergeSources, copyJpsBuildTest)
|
||||
|
||||
val intellijSdkDir = File(repoDir, intellij.name)
|
||||
val intellijUltimateSdkDir = File(repoDir, intellijUltimate.name)
|
||||
|
||||
if (installIntellijCommunity) {
|
||||
dependsOn(unzipIntellijSdk)
|
||||
inputs.dir(intellijSdkDir)
|
||||
outputs.file(File(repoDir, "${intellij.name}.ivy.xml"))
|
||||
}
|
||||
|
||||
if (installIntellijUltimate) {
|
||||
dependsOn(unzipIntellijUltimateSdk)
|
||||
inputs.dir(intellijUltimateSdkDir)
|
||||
outputs.file(File(repoDir, "${intellijUltimate.name}.ivy.xml"))
|
||||
}
|
||||
|
||||
val flatDeps = listOf(`intellij-core`, `jps-standalone`, `jps-build-test`)
|
||||
flatDeps.forEach {
|
||||
inputs.dir(File(repoDir, it.name))
|
||||
outputs.file(File(repoDir, "${it.name}.ivy.xml"))
|
||||
}
|
||||
inputs.dir(File(repoDir, sources.name))
|
||||
|
||||
if (intellijUltimateEnabled) {
|
||||
dependsOn(unzipNodeJSPlugin)
|
||||
inputs.dir(File(repoDir, `plugins-NodeJS`.name))
|
||||
outputs.file(File(repoDir, "${`plugins-NodeJS`.name}.ivy.xml"))
|
||||
}
|
||||
|
||||
doFirst {
|
||||
val sources = File(repoDir, sources.name).listFiles()
|
||||
|
||||
if (installIntellijCommunity) {
|
||||
val libDir = File(intellijSdkDir, "lib")
|
||||
writeIvyXml(intellij.name,
|
||||
intellij.name,
|
||||
fileTree(libDir).filter {
|
||||
it.parentFile == libDir && !it.name.startsWith("kotlin-")
|
||||
},
|
||||
libDir,
|
||||
*sources)
|
||||
|
||||
File(intellijSdkDir, "plugins").listFiles { file: File -> file.isDirectory }.forEach {
|
||||
writeIvyXml(it.name, "intellij.plugin.${it.name}", files("$it/lib/"), File(it, "lib"), *sources)
|
||||
}
|
||||
}
|
||||
|
||||
if (installIntellijUltimate) {
|
||||
val libDir = File(intellijUltimateSdkDir, "lib")
|
||||
writeIvyXml(intellij.name, // important! the module name should be "intellij"
|
||||
intellijUltimate.name,
|
||||
fileTree(libDir).filter {
|
||||
it.parentFile == libDir && !it.name.startsWith("kotlin-")
|
||||
},
|
||||
libDir,
|
||||
*sources)
|
||||
|
||||
File(intellijUltimateSdkDir, "plugins").listFiles { it: File -> it.isDirectory }.forEach {
|
||||
writeIvyXml(it.name, "intellijUltimate.plugin.${it.name}", files("$it/lib/"), File(it, "lib"), *sources)
|
||||
}
|
||||
}
|
||||
|
||||
flatDeps.forEach {
|
||||
writeIvyXml(it.name, it.name, files("$repoDir/${it.name}"), File(repoDir, it.name), *sources)
|
||||
}
|
||||
|
||||
if (intellijUltimateEnabled) {
|
||||
val nodeJsBaseDir = "${`plugins-NodeJS`.name}/NodeJS/lib"
|
||||
writeIvyXml("NodeJS", `plugins-NodeJS`.name, files("$repoDir/$nodeJsBaseDir"), File(repoDir, nodeJsBaseDir), *sources)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val build by tasks.creating {
|
||||
dependsOn(prepareIvyXmls)
|
||||
}
|
||||
|
||||
val clean by tasks.creating(Delete::class) {
|
||||
delete(customDepsRepoModulesDir)
|
||||
delete(buildDir)
|
||||
}
|
||||
@@ -11,4 +11,5 @@ pluginManagement {
|
||||
}
|
||||
}
|
||||
|
||||
include "prepare-deps"
|
||||
include "prepare-deps:android-dx",
|
||||
"prepare-deps:intellij-sdk"
|
||||
|
||||
15
buildSrc/src/main/kotlin/AndroidSdkDependencies.kt
Normal file
15
buildSrc/src/main/kotlin/AndroidSdkDependencies.kt
Normal file
@@ -0,0 +1,15 @@
|
||||
@file:Suppress("unused") // usages in build scripts are not tracked properly
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.dsl.RepositoryHandler
|
||||
import org.gradle.api.artifacts.repositories.IvyArtifactRepository
|
||||
import org.gradle.kotlin.dsl.extra
|
||||
import java.io.File
|
||||
|
||||
fun RepositoryHandler.androidDxJarRepo(project: Project): IvyArtifactRepository = ivy {
|
||||
val baseDir = File("${project.rootDir}/buildSrc/prepare-deps/android-dx/build/repo")
|
||||
ivyPattern("${baseDir.canonicalPath}/[organisation]/[module]/[revision]/[module].ivy.xml")
|
||||
artifactPattern("${baseDir.canonicalPath}/[organisation]/[module]/[revision]/[artifact](-[classifier]).jar")
|
||||
}
|
||||
|
||||
fun Project.androidDxJar() = "kotlin.build.custom.deps:android-dx:${rootProject.extra["versions.androidBuildTools"]}"
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
import org.gradle.api.Project
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
import org.gradle.api.tasks.JavaExec
|
||||
|
||||
@@ -4,17 +4,13 @@ import org.gradle.jvm.tasks.Jar
|
||||
import org.gradle.kotlin.dsl.task
|
||||
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
fun Project.smartJavaExec(configure: JavaExec.() -> Unit) = task<JavaExec> {
|
||||
fun Project.smartJavaExec(configure: JavaExec.() -> Unit) = task<JavaExec> javaExec@{
|
||||
configure()
|
||||
passClasspathInJar()
|
||||
}
|
||||
|
||||
// Moves the classpath into a jar metadata, to shorten the command line length and to avoid hitting the limit on Windows
|
||||
fun JavaExec.passClasspathInJar() {
|
||||
val jarTask = project.task("${name}WriteClassPath", Jar::class) {
|
||||
val classpath = classpath
|
||||
val main = main
|
||||
@@ -32,16 +28,21 @@ fun JavaExec.passClasspathInJar() {
|
||||
)
|
||||
}
|
||||
}
|
||||
archiveName = "$main.${this@passClasspathInJar.name}.classpath.container.$extension"
|
||||
archiveName = "$main.${this@javaExec.name}.classpath.container.$extension"
|
||||
destinationDir = temporaryDir
|
||||
}
|
||||
|
||||
|
||||
|
||||
dependsOn(jarTask)
|
||||
|
||||
doFirst {
|
||||
main = "-jar"
|
||||
|
||||
classpath = project.files()
|
||||
args = listOf(jarTask.outputs.files.singleFile.path) + args.orEmpty()
|
||||
val copyArgs = args.orEmpty().toList()
|
||||
args(jarTask.outputs.files.singleFile)
|
||||
args(copyArgs)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,12 +73,6 @@ fun <T : Jar> Project.runtimeJar(task: T, body: T.() -> Unit = {}): T {
|
||||
removeArtifacts(configurations.getOrCreate("archives"), defaultJarTask)
|
||||
}
|
||||
return task.apply {
|
||||
configurations.findByName("embedded")?.let { embedded ->
|
||||
dependsOn(embedded)
|
||||
from {
|
||||
embedded.map(::zipTree)
|
||||
}
|
||||
}
|
||||
setupPublicJar(project.the<BasePluginConvention>().archivesBaseName)
|
||||
setDuplicatesStrategy(DuplicatesStrategy.EXCLUDE)
|
||||
body()
|
||||
@@ -127,7 +121,7 @@ fun Project.publish(body: Upload.() -> Unit = {}): Upload {
|
||||
apply<plugins.PublishedKotlinModule>()
|
||||
|
||||
if (artifactsRemovedDiagnosticFlag) {
|
||||
error("`publish()` should be called before removing artifacts typically done in `noDefaultJar()` or `runtimeJar()` call")
|
||||
error("`publish()` should be called before removing artifacts typically done in `noDefaultJar()` of `runtimeJar()` calls")
|
||||
}
|
||||
|
||||
afterEvaluate {
|
||||
@@ -140,6 +134,27 @@ fun Project.publish(body: Upload.() -> Unit = {}): Upload {
|
||||
}
|
||||
}
|
||||
|
||||
fun Project.ideaPlugin(subdir: String = "lib", body: AbstractCopyTask.() -> Unit): Copy {
|
||||
val thisProject = this
|
||||
val pluginTask = task<Copy>("ideaPlugin") {
|
||||
body()
|
||||
into(File(rootProject.extra["ideaPluginDir"].toString(), subdir).path)
|
||||
rename("-${java.util.regex.Pattern.quote(thisProject.version.toString())}", "")
|
||||
}
|
||||
|
||||
task("idea-plugin") {
|
||||
dependsOn(pluginTask)
|
||||
}
|
||||
|
||||
return pluginTask
|
||||
}
|
||||
|
||||
fun Project.ideaPlugin(subdir: String = "lib"): Copy = ideaPlugin(subdir) {
|
||||
runtimeJarTaskIfExists()?.let {
|
||||
from(it)
|
||||
}
|
||||
}
|
||||
|
||||
fun Project.dist(
|
||||
targetDir: File? = null,
|
||||
targetName: String? = null,
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.initialization.Settings
|
||||
import org.gradle.api.internal.DynamicObjectAware
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
interface PropertiesProvider {
|
||||
val rootProjectDir: File
|
||||
fun getProperty(key: String): Any?
|
||||
}
|
||||
|
||||
class KotlinBuildProperties(
|
||||
private val propertiesProvider: PropertiesProvider
|
||||
) {
|
||||
private val localProperties: Properties = Properties()
|
||||
|
||||
init {
|
||||
val localPropertiesFile = propertiesProvider.rootProjectDir.resolve("local.properties")
|
||||
if (localPropertiesFile.isFile) {
|
||||
localPropertiesFile.reader().use(localProperties::load)
|
||||
}
|
||||
}
|
||||
|
||||
private operator fun get(key: String): Any? = localProperties.getProperty(key) ?: propertiesProvider.getProperty(key)
|
||||
|
||||
private fun getBoolean(key: String): Boolean = this[key]?.toString() == "true"
|
||||
|
||||
val isJpsBuildEnabled: Boolean = getBoolean("jpsBuild")
|
||||
|
||||
val isInIdeaSync: Boolean = run {
|
||||
// "idea.sync.active" was introduced in 2019.1
|
||||
System.getProperty("idea.sync.active")?.toBoolean() == true || let {
|
||||
// before 2019.1 there is "idea.active" that was true only on sync,
|
||||
// but since 2019.1 "idea.active" present in task execution too.
|
||||
// So let's check Idea version
|
||||
val majorIdeaVersion = System.getProperty("idea.version")
|
||||
?.split(".")
|
||||
?.getOrNull(0)
|
||||
val isBeforeIdea2019 = majorIdeaVersion == null || majorIdeaVersion.toInt() < 2019
|
||||
|
||||
isBeforeIdea2019 && System.getProperty("idea.active")?.toBoolean() == true
|
||||
}
|
||||
}
|
||||
|
||||
val isInJpsBuildIdeaSync: Boolean
|
||||
get() = isJpsBuildEnabled && isInIdeaSync
|
||||
|
||||
val includeJava9: Boolean
|
||||
get() = !isInJpsBuildIdeaSync
|
||||
|
||||
val useBootstrapStdlib: Boolean
|
||||
get() = isInJpsBuildIdeaSync
|
||||
}
|
||||
|
||||
private const val extensionName = "kotlinBuildFlags"
|
||||
|
||||
class ProjectProperties(val project: Project): PropertiesProvider {
|
||||
override val rootProjectDir: File
|
||||
get() = project.projectDir
|
||||
|
||||
override fun getProperty(key: String): Any? = project.findProperty(key)
|
||||
}
|
||||
|
||||
val Project.kotlinBuildProperties: KotlinBuildProperties
|
||||
get() = rootProject.extensions.findByName(extensionName) as KotlinBuildProperties?
|
||||
?: KotlinBuildProperties(ProjectProperties(rootProject)).also {
|
||||
rootProject.extensions.add(extensionName, it)
|
||||
}
|
||||
|
||||
class SettingsProperties(val settings: Settings): PropertiesProvider {
|
||||
override val rootProjectDir: File
|
||||
get() = settings.rootDir
|
||||
|
||||
override fun getProperty(key: String): Any? {
|
||||
val obj = (settings as DynamicObjectAware).asDynamicObject
|
||||
return if (obj.hasProperty(key)) obj.getProperty(key) else null
|
||||
}
|
||||
}
|
||||
|
||||
fun getKotlinBuildPropertiesForSettings(settings: Any) = (settings as Settings).kotlinBuildProperties
|
||||
|
||||
val Settings.kotlinBuildProperties: KotlinBuildProperties
|
||||
get() = extensions.findByName(extensionName) as KotlinBuildProperties?
|
||||
?: KotlinBuildProperties(SettingsProperties(this)).also {
|
||||
extensions.add(extensionName, it)
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.NamedDomainObjectContainer
|
||||
import org.gradle.api.NamedDomainObjectProvider
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.artifacts.Dependency
|
||||
import org.gradle.api.artifacts.ExternalModuleDependency
|
||||
import org.gradle.api.artifacts.ModuleDependency
|
||||
import org.gradle.api.artifacts.dsl.DependencyHandler
|
||||
import org.gradle.kotlin.dsl.accessors.runtime.addDependencyTo
|
||||
import org.gradle.kotlin.dsl.accessors.runtime.addExternalModuleDependencyTo
|
||||
import org.gradle.kotlin.dsl.add
|
||||
|
||||
val NamedDomainObjectContainer<Configuration>.embedded: NamedDomainObjectProvider<Configuration> get() = named("embedded")
|
||||
|
||||
fun DependencyHandler.embedded(dependencyNotation: Any): Dependency? =
|
||||
add("embedded", dependencyNotation)
|
||||
|
||||
fun DependencyHandler.embedded(
|
||||
dependencyNotation: String,
|
||||
dependencyConfiguration: Action<ExternalModuleDependency>
|
||||
): ExternalModuleDependency =
|
||||
addDependencyTo(this, "embedded", dependencyNotation, dependencyConfiguration)
|
||||
|
||||
fun DependencyHandler.embedded(
|
||||
group: String,
|
||||
name: String,
|
||||
version: String? = null,
|
||||
configuration: String? = null,
|
||||
classifier: String? = null,
|
||||
ext: String? = null,
|
||||
dependencyConfiguration: Action<ExternalModuleDependency>? = null
|
||||
): ExternalModuleDependency = addExternalModuleDependencyTo(
|
||||
this, "embedded", group, name, version, configuration, classifier, ext, dependencyConfiguration
|
||||
)
|
||||
|
||||
fun <T : ModuleDependency> DependencyHandler.embedded(
|
||||
dependency: T,
|
||||
dependencyConfiguration: T.() -> Unit
|
||||
): T = add("embedded", dependency, dependencyConfiguration)
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package tasks
|
||||
|
||||
@@ -1,21 +1,16 @@
|
||||
@file:Suppress("unused")
|
||||
@file:Suppress("unused") // usages in build scripts are not tracked properly
|
||||
|
||||
// usages in build scripts are not tracked properly
|
||||
|
||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
||||
import org.gradle.api.GradleException
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.ProjectDependency
|
||||
import org.gradle.api.artifacts.dsl.DependencyHandler
|
||||
import org.gradle.api.file.ConfigurableFileCollection
|
||||
import org.gradle.api.tasks.AbstractCopyTask
|
||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
||||
import org.gradle.kotlin.dsl.extra
|
||||
import org.gradle.kotlin.dsl.project
|
||||
import java.io.File
|
||||
|
||||
val Project.isSnapshotIntellij get() = rootProject.extra["versions.intellijSdk"].toString().endsWith("SNAPSHOT")
|
||||
|
||||
val Project.intellijRepo get() = "https://www.jetbrains.com/intellij-repository/" + if (isSnapshotIntellij) "snapshots" else "releases"
|
||||
|
||||
fun Project.commonDep(coord: String): String {
|
||||
val parts = coord.split(':')
|
||||
@@ -75,17 +70,16 @@ fun Project.ideaUltimatePreloadedDeps(vararg artifactBaseNames: String, subdir:
|
||||
|
||||
fun Project.kotlinDep(artifactBaseName: String, version: String): String = "org.jetbrains.kotlin:kotlin-$artifactBaseName:$version"
|
||||
|
||||
val Project.useBootstrapStdlib: Boolean get() =
|
||||
findProperty("jpsBuild")?.toString() == "true"
|
||||
|
||||
fun Project.kotlinStdlib(suffix: String? = null): Any {
|
||||
return if (kotlinBuildProperties.useBootstrapStdlib)
|
||||
return if (useBootstrapStdlib)
|
||||
kotlinDep(listOfNotNull("stdlib", suffix).joinToString("-"), bootstrapKotlinVersion)
|
||||
else
|
||||
dependencies.project(listOfNotNull(":kotlin-stdlib", suffix).joinToString("-"))
|
||||
}
|
||||
|
||||
fun Project.kotlinBuiltins(): Any =
|
||||
if (kotlinBuildProperties.useBootstrapStdlib) "org.jetbrains.kotlin:builtins:$bootstrapKotlinVersion"
|
||||
else dependencies.project(":core:builtins")
|
||||
|
||||
fun DependencyHandler.projectTests(name: String): ProjectDependency = project(name, configuration = "tests-jar")
|
||||
fun DependencyHandler.projectRuntimeJar(name: String): ProjectDependency = project(name, configuration = "runtimeJar")
|
||||
fun DependencyHandler.projectArchives(name: String): ProjectDependency = project(name, configuration = "archives")
|
||||
@@ -99,12 +93,6 @@ val Project.protobufRepo: String
|
||||
fun Project.protobufLite(): String = "org.jetbrains.kotlin:protobuf-lite:$protobufVersion"
|
||||
fun Project.protobufFull(): String = "org.jetbrains.kotlin:protobuf-relocated:$protobufVersion"
|
||||
|
||||
val Project.kotlinNativeRepo: String
|
||||
get() = "https://jetbrains.bintray.com/kotlin-native-dependencies"
|
||||
|
||||
val Project.kotlinNativeVersion: String get() = property("versions.kotlin-native") as String
|
||||
val Project.kotlinNativeSharedVersion: String get() = property("versions.kotlin-native-shared") as String
|
||||
|
||||
fun File.matchMaybeVersionedArtifact(baseName: String) = name.matches(baseName.toMaybeVersionedJarRegex())
|
||||
|
||||
private val wildcardsRe = """[^*?]+|(\*)|(\?)""".toRegex()
|
||||
@@ -125,6 +113,7 @@ private fun String.toMaybeVersionedJarRegex(): Regex {
|
||||
return Regex(if (hasJarExtension) escaped else "$escaped(-\\d.*)?\\.jar") // TODO: consider more precise version part of the regex
|
||||
}
|
||||
|
||||
|
||||
fun Project.firstFromJavaHomeThatExists(vararg paths: String, jdkHome: File = File(this.property("JDK_18") as String)): File? =
|
||||
paths.map { File(jdkHome, it) }.firstOrNull { it.exists() }.also {
|
||||
if (it == null)
|
||||
@@ -138,5 +127,22 @@ val compilerManifestClassPath
|
||||
get() = "annotations-13.0.jar kotlin-stdlib.jar kotlin-reflect.jar kotlin-script-runtime.jar trove4j.jar"
|
||||
|
||||
object EmbeddedComponents {
|
||||
val CONFIGURATION_NAME = "embedded"
|
||||
val CONFIGURATION_NAME = "embeddedComponents"
|
||||
}
|
||||
|
||||
fun AbstractCopyTask.fromEmbeddedComponents() {
|
||||
val embeddedComponents = project.configurations.getByName(EmbeddedComponents.CONFIGURATION_NAME)
|
||||
if (this is ShadowJar) {
|
||||
from(embeddedComponents)
|
||||
} else {
|
||||
dependsOn(embeddedComponents)
|
||||
from {
|
||||
embeddedComponents.map { file ->
|
||||
if (file.isDirectory)
|
||||
project.files(file)
|
||||
else
|
||||
project.zipTree(file)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package idea
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.buildUtils.idea
|
||||
@@ -75,9 +75,9 @@ open class DistModelBuilder(val rootProject: Project, pw: PrintWriter) {
|
||||
val rootSpec = copy.rootSpec
|
||||
|
||||
when (copy) {
|
||||
is Copy -> copy.destinationDir?.also { context.setDest(it.path) }
|
||||
is Sync -> copy.destinationDir?.also { context.setDest(it.path) }
|
||||
is AbstractArchiveTask -> copy.archivePath?.also { context.setDest(it.path) }
|
||||
is Copy -> context.setDest(copy.destinationDir.path)
|
||||
is Sync -> context.setDest(copy.destinationDir.path)
|
||||
is AbstractArchiveTask -> context.setDest(copy.archivePath.path)
|
||||
}
|
||||
|
||||
when (copy) {
|
||||
@@ -100,17 +100,15 @@ open class DistModelBuilder(val rootProject: Project, pw: PrintWriter) {
|
||||
processCopySpec(it, newCtx)
|
||||
}
|
||||
is DefaultCopySpec -> ctx.child("DEFAULT COPY SPEC") { newCtx ->
|
||||
if (ctx.destination != null) {
|
||||
val buildRootResolver = it.buildRootResolver()
|
||||
ctx.addCopyActions(buildRootResolver.allCopyActions)
|
||||
newCtx.setDest(buildRootResolver.destPath.getFile(ctx.destination!!.file).path)
|
||||
processCopySpec(it, newCtx)
|
||||
it.includes
|
||||
val buildRootResolver = it.buildRootResolver()
|
||||
ctx.addCopyActions(buildRootResolver.allCopyActions)
|
||||
newCtx.setDest(buildRootResolver.destPath.getFile(ctx.destination!!.file).path)
|
||||
processCopySpec(it, newCtx)
|
||||
it.includes
|
||||
|
||||
newCtx.child("SINGE PARENT COPY SPEC") { child ->
|
||||
it.sourcePaths.forEach {
|
||||
processSourcePath(it, child)
|
||||
}
|
||||
newCtx.child("SINGE PARENT COPY SPEC") { child ->
|
||||
it.sourcePaths.forEach {
|
||||
processSourcePath(it, child)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.buildUtils.idea
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.buildUtils.idea
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.buildUtils.idea
|
||||
|
||||
@@ -8,8 +8,8 @@ import org.gradle.plugins.ide.idea.model.IdeaProject
|
||||
import org.jetbrains.gradle.ext.*
|
||||
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
fun org.gradle.api.Project.idea(configure: org.gradle.plugins.ide.idea.model.IdeaModel.() -> Unit): Unit =
|
||||
|
||||
195
buildSrc/src/main/kotlin/instrument.kt.181
Normal file
195
buildSrc/src/main/kotlin/instrument.kt.181
Normal file
@@ -0,0 +1,195 @@
|
||||
@file:Suppress("unused")
|
||||
|
||||
/*
|
||||
* Copyright 2010-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.artifacts.ProjectDependency
|
||||
import org.gradle.api.file.ConfigurableFileCollection
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.gradle.api.internal.ConventionTask
|
||||
import org.gradle.api.plugins.ExtensionAware
|
||||
import org.gradle.api.tasks.*
|
||||
import org.gradle.api.tasks.compile.AbstractCompile
|
||||
import org.gradle.kotlin.dsl.*
|
||||
import java.io.File
|
||||
|
||||
fun Project.configureFormInstrumentation() {
|
||||
plugins.matching { it::class.java.canonicalName.startsWith("org.jetbrains.kotlin.gradle.plugin") }.all {
|
||||
// When we change the output classes directory, Gradle will automatically configure
|
||||
// the test compile tasks to use the instrumented classes. Normally this is fine,
|
||||
// however, it causes problems for Kotlin projects:
|
||||
|
||||
// The "internal" modifier can be used to restrict access to the same module.
|
||||
// To make it possible to use internal methods from the main source set in test classes,
|
||||
// the Kotlin Gradle plugin adds the original output directory of the Java task
|
||||
// as "friendly directory" which makes it possible to access internal members
|
||||
// of the main module. Also this directory should be available on classpath during compilation
|
||||
|
||||
// This fails when we change the classes dir. The easiest fix is to prepend the
|
||||
// classes from the "friendly directory" to the compile classpath.
|
||||
val testCompile = tasks.findByName("compileTestKotlin") as AbstractCompile?
|
||||
testCompile?.doFirst {
|
||||
testCompile.classpath = (testCompile.classpath
|
||||
- mainSourceSet.output.classesDirs
|
||||
+ files((mainSourceSet as ExtensionAware).extra.get("classesDirsCopy")))
|
||||
}
|
||||
}
|
||||
|
||||
val instrumentationClasspathCfg = configurations.create("instrumentationClasspath")
|
||||
|
||||
dependencies {
|
||||
instrumentationClasspathCfg(intellijDep()) { includeJars("javac2", "jdom", "asm-all", "jgoodies-forms", rootProject = rootProject) }
|
||||
}
|
||||
|
||||
afterEvaluate {
|
||||
sourceSets.all { sourceSetParam ->
|
||||
// This copy will ignore filters, but they are unlikely to be used.
|
||||
val classesDirs = (sourceSetParam.output.classesDirs as ConfigurableFileCollection).from as Collection<Any>
|
||||
|
||||
val classesDirsCopy = project.files(classesDirs.toTypedArray()).filter { it.exists() }
|
||||
(sourceSetParam as ExtensionAware).extra.set("classesDirsCopy", classesDirsCopy)
|
||||
|
||||
logger.info("Saving old sources dir for project ${project.name}")
|
||||
val instrumentedClassesDir = File(project.buildDir, "classes/${sourceSetParam.name}-instrumented")
|
||||
(sourceSetParam.output.classesDirs as ConfigurableFileCollection).setFrom(instrumentedClassesDir)
|
||||
val instrumentTask =
|
||||
project.tasks.create(sourceSetParam.getTaskName("instrument", "classes"), IntelliJInstrumentCodeTask::class.java)
|
||||
instrumentTask.apply {
|
||||
dependsOn(sourceSetParam.classesTaskName).onlyIf { !classesDirsCopy.isEmpty }
|
||||
sourceSet = sourceSetParam
|
||||
instrumentationClasspath = instrumentationClasspathCfg
|
||||
originalClassesDirs = classesDirsCopy
|
||||
output = instrumentedClassesDir
|
||||
}
|
||||
|
||||
instrumentTask.outputs.dir(instrumentedClassesDir)
|
||||
// Ensure that our task is invoked when the source set is built
|
||||
sourceSetParam.compiledBy(instrumentTask)
|
||||
@Suppress("UNUSED_EXPRESSION")
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@CacheableTask
|
||||
open class IntelliJInstrumentCodeTask : ConventionTask() {
|
||||
companion object {
|
||||
private const val FILTER_ANNOTATION_REGEXP_CLASS = "com.intellij.ant.ClassFilterAnnotationRegexp"
|
||||
private const val LOADER_REF = "java2.loader"
|
||||
}
|
||||
|
||||
var sourceSet: SourceSet? = null
|
||||
|
||||
var instrumentationClasspath: Configuration? = null
|
||||
|
||||
@Input
|
||||
var originalClassesDirs: FileCollection? = null
|
||||
|
||||
@get:Input
|
||||
var instrumentNotNull: Boolean = false
|
||||
|
||||
@get:InputFiles
|
||||
val sourceDirs: FileCollection
|
||||
get() = project.files(sourceSet!!.allSource.srcDirs.filter { !sourceSet!!.resources.contains(it) && it.exists() })
|
||||
|
||||
@get:OutputDirectory
|
||||
lateinit var output: File
|
||||
|
||||
@TaskAction
|
||||
fun instrumentClasses() {
|
||||
logger.info(
|
||||
"input files are: ${originalClassesDirs?.joinToString(
|
||||
"; ",
|
||||
transform = { "'${it.name}'${if (it.exists()) "" else " (does not exists)"}" })}"
|
||||
)
|
||||
output.deleteRecursively()
|
||||
copyOriginalClasses()
|
||||
|
||||
val classpath = instrumentationClasspath!!
|
||||
|
||||
ant.withGroovyBuilder {
|
||||
"taskdef"(
|
||||
"name" to "instrumentIdeaExtensions",
|
||||
"classpath" to classpath.asPath,
|
||||
"loaderref" to LOADER_REF,
|
||||
"classname" to "com.intellij.ant.InstrumentIdeaExtensions"
|
||||
)
|
||||
}
|
||||
|
||||
logger.info("Compiling forms and instrumenting code with nullability preconditions")
|
||||
if (instrumentNotNull) {
|
||||
prepareNotNullInstrumenting(classpath.asPath)
|
||||
}
|
||||
|
||||
instrumentCode(sourceDirs, instrumentNotNull)
|
||||
}
|
||||
|
||||
private fun copyOriginalClasses() {
|
||||
project.copy {
|
||||
from(originalClassesDirs)
|
||||
into(output)
|
||||
}
|
||||
}
|
||||
|
||||
private fun prepareNotNullInstrumenting(classpath: String) {
|
||||
ant.withGroovyBuilder {
|
||||
"typedef"(
|
||||
"name" to "skip",
|
||||
"classpath" to classpath,
|
||||
"loaderref" to LOADER_REF,
|
||||
"classname" to FILTER_ANNOTATION_REGEXP_CLASS
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun instrumentCode(srcDirs: FileCollection, instrumentNotNull: Boolean) {
|
||||
val headlessOldValue = System.setProperty("java.awt.headless", "true")
|
||||
|
||||
// Instrumentation needs to have access to sources of forms for inclusion
|
||||
val depSourceDirectorySets = project.configurations["compile"].dependencies.withType(ProjectDependency::class.java)
|
||||
.map { p -> p.dependencyProject.mainSourceSet.allSource.sourceDirectories }
|
||||
val instrumentationClasspath =
|
||||
depSourceDirectorySets.fold(sourceSet!!.compileClasspath) { acc, v -> acc + v }.asPath.also {
|
||||
logger.info("Using following dependency source dirs: $it")
|
||||
}
|
||||
|
||||
logger.info("Running instrumentIdeaExtensions with srcdir=${srcDirs.asPath}}, destdir=$output and classpath=$instrumentationClasspath")
|
||||
|
||||
ant.withGroovyBuilder {
|
||||
"instrumentIdeaExtensions"(
|
||||
"srcdir" to srcDirs.asPath,
|
||||
"destdir" to output,
|
||||
"classpath" to instrumentationClasspath,
|
||||
"includeantruntime" to false,
|
||||
"instrumentNotNull" to instrumentNotNull
|
||||
) {
|
||||
if (instrumentNotNull) {
|
||||
ant.withGroovyBuilder {
|
||||
"skip"("pattern" to "kotlin/Metadata")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (headlessOldValue != null) {
|
||||
System.setProperty("java.awt.headless", headlessOldValue)
|
||||
} else {
|
||||
System.clearProperty("java.awt.headless")
|
||||
}
|
||||
}
|
||||
}
|
||||
173
buildSrc/src/main/kotlin/intellijDependencies.kt
Normal file
173
buildSrc/src/main/kotlin/intellijDependencies.kt
Normal file
@@ -0,0 +1,173 @@
|
||||
/*
|
||||
* Copyright 2010-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
@file:Suppress("unused") // usages in build scripts are not tracked properly
|
||||
|
||||
import org.gradle.api.GradleException
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.ModuleDependency
|
||||
import org.gradle.api.artifacts.dsl.RepositoryHandler
|
||||
import org.gradle.api.artifacts.repositories.IvyArtifactRepository
|
||||
import org.gradle.api.plugins.JavaPluginConvention
|
||||
import org.gradle.api.tasks.JavaExec
|
||||
import org.gradle.kotlin.dsl.*
|
||||
import java.io.File
|
||||
|
||||
private fun Project.intellijRepoDir() = File("${project.rootDir.absoluteFile}/buildSrc/prepare-deps/intellij-sdk/build/repo")
|
||||
|
||||
fun RepositoryHandler.intellijSdkRepo(project: Project): IvyArtifactRepository = ivy {
|
||||
val baseDir = project.intellijRepoDir()
|
||||
val intellijEnforceCommunitySdk = project.getBooleanProperty("intellijEnforceCommunitySdk") == true
|
||||
|
||||
setUrl(baseDir)
|
||||
|
||||
if (!intellijEnforceCommunitySdk) {
|
||||
ivyPattern("${baseDir.canonicalPath}/[organisation]/[revision]/[module]Ultimate.ivy.xml")
|
||||
ivyPattern("${baseDir.canonicalPath}/[organisation]/[revision]/intellijUltimate.plugin.[module].ivy.xml")
|
||||
artifactPattern("${baseDir.canonicalPath}/[organisation]/[revision]/[module]Ultimate/lib/[artifact](-[classifier]).jar")
|
||||
artifactPattern("${baseDir.canonicalPath}/[organisation]/[revision]/intellijUltimate/plugins/[module]/lib/[artifact](-[classifier]).jar")
|
||||
}
|
||||
|
||||
ivyPattern("${baseDir.canonicalPath}/[organisation]/[revision]/[module].ivy.xml")
|
||||
ivyPattern("${baseDir.canonicalPath}/[organisation]/[revision]/intellij.plugin.[module].ivy.xml")
|
||||
ivyPattern("${baseDir.canonicalPath}/[organisation]/[revision]/plugins-[module].ivy.xml")
|
||||
artifactPattern("${baseDir.canonicalPath}/[organisation]/[revision]/[module]/lib/[artifact](-[classifier]).jar")
|
||||
artifactPattern("${baseDir.canonicalPath}/[organisation]/[revision]/intellij/plugins/[module]/lib/[artifact](-[classifier]).jar")
|
||||
artifactPattern("${baseDir.canonicalPath}/[organisation]/[revision]/plugins-[module]/[module]/lib/[artifact](-[classifier]).jar")
|
||||
artifactPattern("${baseDir.canonicalPath}/[organisation]/[revision]/[module]/[artifact].jar")
|
||||
artifactPattern("${baseDir.canonicalPath}/[organisation]/[revision]/[module]/[artifact](-[revision])(-[classifier]).jar")
|
||||
artifactPattern("${baseDir.canonicalPath}/[organisation]/[revision]/sources/[artifact]-[revision]-[classifier].[ext]")
|
||||
|
||||
metadataSources {
|
||||
ivyDescriptor()
|
||||
}
|
||||
}
|
||||
|
||||
fun Project.intellijDep(module: String = "intellij") = "kotlin.build.custom.deps:$module:${rootProject.extra["versions.intellijSdk"]}"
|
||||
|
||||
fun Project.intellijCoreDep() = intellijDep("intellij-core")
|
||||
|
||||
fun Project.intellijPluginDep(plugin: String) = intellijDep(plugin)
|
||||
|
||||
fun Project.intellijUltimateDep() = intellijDep("intellij")
|
||||
|
||||
fun Project.intellijUltimatePluginDep(plugin: String) = intellijDep(plugin)
|
||||
|
||||
fun ModuleDependency.includeJars(vararg names: String, rootProject: Project? = null) {
|
||||
names.forEach {
|
||||
var baseName = it.removeSuffix(".jar")
|
||||
if (baseName == "annotations") {
|
||||
error("Don't use anntations.jar from intellij. Kotlin stdlib already has this annotations.")
|
||||
}
|
||||
if (rootProject != null && rootProject.extra.has("ignore.jar.$baseName")) {
|
||||
return@forEach
|
||||
}
|
||||
if (rootProject != null && rootProject.extra.has("versions.jar.$baseName")) {
|
||||
baseName += "-${rootProject.extra["versions.jar.$baseName"]}"
|
||||
}
|
||||
artifact {
|
||||
name = baseName
|
||||
type = "jar"
|
||||
extension = "jar"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Workaround. Top-level Kotlin function in a default package can't be called from a non-default package
|
||||
object IntellijRootUtils {
|
||||
fun getRepositoryRootDir(project: Project): File = with (project.rootProject) {
|
||||
return File(intellijRepoDir(), "kotlin.build.custom.deps/${extra["versions.intellijSdk"]}")
|
||||
}
|
||||
|
||||
fun getIntellijRootDir(project: Project): File = with (project.rootProject) {
|
||||
return File(getRepositoryRootDir(this), "intellij${if (isIntellijCommunityAvailable()) "" else "Ultimate"}")
|
||||
}
|
||||
}
|
||||
|
||||
fun ModuleDependency.includeIntellijCoreJarDependencies(project: Project) =
|
||||
includeJars(*(project.rootProject.extra["IntellijCoreDependencies"] as List<String>).toTypedArray(), rootProject = project.rootProject)
|
||||
|
||||
fun ModuleDependency.includeIntellijCoreJarDependencies(project: Project, jarsFilterPredicate: (String) -> Boolean) =
|
||||
includeJars(*(project.rootProject.extra["IntellijCoreDependencies"] as List<String>).filter { jarsFilterPredicate(it) }.toTypedArray(), rootProject = project.rootProject)
|
||||
|
||||
fun Project.isIntellijCommunityAvailable() = !(rootProject.extra["intellijUltimateEnabled"] as Boolean) || rootProject.extra["intellijSeparateSdks"] as Boolean
|
||||
|
||||
fun Project.isIntellijUltimateSdkAvailable() = (rootProject.extra["intellijUltimateEnabled"] as Boolean)
|
||||
|
||||
fun Project.intellijRootDir() = IntellijRootUtils.getIntellijRootDir(project)
|
||||
|
||||
fun Project.intellijUltimateRootDir() =
|
||||
if (isIntellijUltimateSdkAvailable())
|
||||
File(intellijRepoDir(), "kotlin.build.custom.deps/${rootProject.extra["versions.intellijSdk"]}/intellijUltimate")
|
||||
else
|
||||
throw GradleException("intellij ultimate SDK is not available")
|
||||
|
||||
fun DependencyHandlerScope.excludeInAndroidStudio(rootProject: Project, block: DependencyHandlerScope.() -> Unit) {
|
||||
if (!rootProject.extra.has("versions.androidStudioRelease")) {
|
||||
block()
|
||||
}
|
||||
}
|
||||
|
||||
fun Project.runIdeTask(name: String, ideaPluginDir: File, ideaSandboxDir: File, body: JavaExec.() -> Unit): JavaExec {
|
||||
|
||||
return task<JavaExec>(name) {
|
||||
val ideaSandboxConfigDir = File(ideaSandboxDir, "config")
|
||||
|
||||
classpath = mainSourceSet.runtimeClasspath
|
||||
|
||||
main = "com.intellij.idea.Main"
|
||||
|
||||
workingDir = File(intellijRootDir(), "bin")
|
||||
|
||||
jvmArgs(
|
||||
"-Xmx1250m",
|
||||
"-XX:ReservedCodeCacheSize=240m",
|
||||
"-XX:+HeapDumpOnOutOfMemoryError",
|
||||
"-ea",
|
||||
"-Didea.is.internal=true",
|
||||
"-Didea.debug.mode=true",
|
||||
"-Didea.system.path=$ideaSandboxDir",
|
||||
"-Didea.config.path=$ideaSandboxConfigDir",
|
||||
"-Dapple.laf.useScreenMenuBar=true",
|
||||
"-Dapple.awt.graphics.UseQuartz=true",
|
||||
"-Dsun.io.useCanonCaches=false",
|
||||
"-Dplugin.path=${ideaPluginDir.absolutePath}"
|
||||
)
|
||||
|
||||
if (rootProject.findProperty("versions.androidStudioRelease") != null) {
|
||||
jvmArgs("-Didea.platform.prefix=AndroidStudio")
|
||||
}
|
||||
|
||||
if (project.hasProperty("noPCE")) {
|
||||
jvmArgs("-Didea.ProcessCanceledException=disabled")
|
||||
}
|
||||
|
||||
args()
|
||||
|
||||
doFirst {
|
||||
val disabledPluginsFile = File(ideaSandboxConfigDir, "disabled_plugins.txt")
|
||||
val disabledPluginsContents = disabledPluginsFile.takeIf { it.isFile }?.readLines()
|
||||
val filteredContents = disabledPluginsContents?.filterNot { it.contains("org.jetbrains.kotlin") }
|
||||
if (filteredContents != null && filteredContents.size != disabledPluginsContents.size) {
|
||||
with(disabledPluginsFile.printWriter()) {
|
||||
filteredContents.forEach(this::println)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
body()
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
import org.gradle.api.Project
|
||||
|
||||
@@ -1,206 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// usages in build scripts are not tracked properly
|
||||
@file:Suppress("unused")
|
||||
|
||||
import org.gradle.api.GradleException
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.ModuleDependency
|
||||
import org.gradle.api.artifacts.dsl.RepositoryHandler
|
||||
import org.gradle.api.artifacts.repositories.IvyArtifactRepository
|
||||
import org.gradle.api.tasks.JavaExec
|
||||
import org.gradle.kotlin.dsl.*
|
||||
import java.io.File
|
||||
|
||||
private fun Project.kotlinBuildLocalRepoDir() = File("${project.rootDir.absoluteFile}/dependencies/repo")
|
||||
|
||||
private fun Project.ideModuleName() = when (IdeVersionConfigurator.currentIde.kind) {
|
||||
Ide.Kind.AndroidStudio -> "android-studio-ide"
|
||||
Ide.Kind.IntelliJ -> {
|
||||
if (getBooleanProperty("intellijUltimateEnabled") == true) "ideaIU" else "ideaIC"
|
||||
}
|
||||
}
|
||||
|
||||
private fun Project.ideModuleVersion() = when (IdeVersionConfigurator.currentIde.kind) {
|
||||
Ide.Kind.AndroidStudio -> rootProject.findProperty("versions.androidStudioBuild")
|
||||
Ide.Kind.IntelliJ -> rootProject.findProperty("versions.intellijSdk")
|
||||
}
|
||||
|
||||
fun RepositoryHandler.kotlinBuildLocalRepo(project: Project): IvyArtifactRepository = ivy {
|
||||
val baseDir = project.kotlinBuildLocalRepoDir()
|
||||
setUrl(baseDir)
|
||||
|
||||
ivyPattern("${baseDir.canonicalPath}/[organisation]/[module]/[revision]/[module].ivy.xml")
|
||||
ivyPattern("${baseDir.canonicalPath}/[organisation]/[module]/[revision]/ivy/[module].ivy.xml")
|
||||
ivyPattern("${baseDir.canonicalPath}/[organisation]/${project.ideModuleName()}/[revision]/ivy/[module].ivy.xml") // bundled plugins
|
||||
|
||||
artifactPattern("${baseDir.canonicalPath}/[organisation]/[module]/[revision]/artifacts/lib/[artifact](-[classifier]).[ext]")
|
||||
artifactPattern("${baseDir.canonicalPath}/[organisation]/[module]/[revision]/artifacts/[artifact](-[classifier]).[ext]")
|
||||
artifactPattern("${baseDir.canonicalPath}/[organisation]/${project.ideModuleName()}/[revision]/artifacts/plugins/[module]/lib/[artifact](-[classifier]).[ext]") // bundled plugins
|
||||
artifactPattern("${baseDir.canonicalPath}/[organisation]/sources/[artifact]-[revision](-[classifier]).[ext]")
|
||||
artifactPattern("${baseDir.canonicalPath}/[organisation]/[module]/[revision]/[artifact](-[classifier]).[ext]")
|
||||
|
||||
metadataSources {
|
||||
ivyDescriptor()
|
||||
}
|
||||
}
|
||||
|
||||
fun Project.intellijDep(module: String? = null) = "kotlin.build:${module ?: ideModuleName()}:${ideModuleVersion()}"
|
||||
|
||||
fun Project.intellijCoreDep() = "kotlin.build:intellij-core:${rootProject.extra["versions.intellijSdk"]}"
|
||||
|
||||
fun Project.jpsStandalone() = "kotlin.build:jps-standalone:${rootProject.extra["versions.intellijSdk"]}"
|
||||
|
||||
fun Project.nodeJSPlugin() = "kotlin.build:NodeJS:${rootProject.extra["versions.idea.NodeJS"]}"
|
||||
|
||||
fun Project.androidDxJar() = "kotlin.build:android-dx:${rootProject.extra["versions.androidBuildTools"]}"
|
||||
|
||||
fun Project.jpsBuildTest() = "com.jetbrains.intellij.idea:jps-build-test:${rootProject.extra["versions.intellijSdk"]}"
|
||||
|
||||
/**
|
||||
* Runtime version of annotations that are already in Kotlin stdlib (historically Kotlin has older version of this one).
|
||||
*
|
||||
* SHOULD NOT BE USED IN COMPILE CLASSPATH!
|
||||
*
|
||||
* `@NonNull`, `@Nullabe` from `idea/annotations.jar` has `TYPE` target which leads to different types treatment in Kotlin compiler.
|
||||
* On the other hand, `idea/annotations.jar` contains org/jetbrains/annotations/Async annations which is required for IDEA debugger.
|
||||
*
|
||||
* So, we are excluding `annotaions.jar` from all other `kotlin.build` and using this one for runtime only
|
||||
* to avoid accidentally including `annotations.jar` by calling `intellijDep()`.
|
||||
*/
|
||||
fun Project.intellijRuntimeAnnotations() = "kotlin.build:intellij-runtime-annotations:${rootProject.extra["versions.intellijSdk"]}"
|
||||
|
||||
fun Project.intellijPluginDep(plugin: String) = intellijDep(plugin)
|
||||
|
||||
fun Project.intellijUltimateDep() = intellijDep("ideaIU")
|
||||
|
||||
fun Project.intellijUltimatePluginDep(plugin: String) = intellijDep(plugin)
|
||||
|
||||
fun ModuleDependency.includeJars(vararg names: String, rootProject: Project? = null) {
|
||||
names.forEach {
|
||||
var baseName = it.removeSuffix(".jar")
|
||||
if (rootProject != null && rootProject.extra.has("ignore.jar.$baseName")) {
|
||||
return@forEach
|
||||
}
|
||||
if (rootProject != null && rootProject.extra.has("versions.jar.$baseName")) {
|
||||
baseName += "-${rootProject.extra["versions.jar.$baseName"]}"
|
||||
}
|
||||
artifact {
|
||||
name = baseName
|
||||
type = "jar"
|
||||
extension = "jar"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Workaround. Top-level Kotlin function in a default package can't be called from a non-default package
|
||||
object IntellijRootUtils {
|
||||
fun getRepositoryRootDir(project: Project): File = with(project.rootProject) {
|
||||
return File(kotlinBuildLocalRepoDir(), "kotlin.build")
|
||||
}
|
||||
|
||||
fun getIntellijRootDir(project: Project): File = with(project.rootProject) {
|
||||
return File(
|
||||
getRepositoryRootDir(this),
|
||||
"${ideModuleName()}/${ideModuleVersion()}/artifacts"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun ModuleDependency.includeIntellijCoreJarDependencies(project: Project) =
|
||||
includeJars(*(project.rootProject.extra["IntellijCoreDependencies"] as List<String>).toTypedArray(), rootProject = project.rootProject)
|
||||
|
||||
fun ModuleDependency.includeIntellijCoreJarDependencies(project: Project, jarsFilterPredicate: (String) -> Boolean) =
|
||||
includeJars(
|
||||
*(project.rootProject.extra["IntellijCoreDependencies"] as List<String>).filter { jarsFilterPredicate(it) }.toTypedArray(),
|
||||
rootProject = project.rootProject
|
||||
)
|
||||
|
||||
fun Project.isIntellijCommunityAvailable() =
|
||||
!(rootProject.extra["intellijUltimateEnabled"] as Boolean) || rootProject.extra["intellijSeparateSdks"] as Boolean
|
||||
|
||||
fun Project.isIntellijUltimateSdkAvailable() = (rootProject.extra["intellijUltimateEnabled"] as Boolean)
|
||||
|
||||
fun Project.intellijRootDir() = IntellijRootUtils.getIntellijRootDir(project)
|
||||
|
||||
fun Project.intellijUltimateRootDir() =
|
||||
if (isIntellijUltimateSdkAvailable())
|
||||
File(kotlinBuildLocalRepoDir(), "kotlin.build/ideaIU/${rootProject.extra["versions.intellijSdk"]}/artifacts")
|
||||
else
|
||||
throw GradleException("intellij ultimate SDK is not available")
|
||||
|
||||
fun DependencyHandlerScope.excludeInAndroidStudio(rootProject: Project, block: DependencyHandlerScope.() -> Unit) {
|
||||
if (!rootProject.extra.has("versions.androidStudioRelease")) {
|
||||
block()
|
||||
}
|
||||
}
|
||||
|
||||
fun Project.runIdeTask(name: String, ideaPluginDir: File, ideaSandboxDir: File, body: JavaExec.() -> Unit): JavaExec {
|
||||
|
||||
return task<JavaExec>(name) {
|
||||
val ideaSandboxConfigDir = File(ideaSandboxDir, "config")
|
||||
|
||||
classpath = mainSourceSet.runtimeClasspath
|
||||
|
||||
main = "com.intellij.idea.Main"
|
||||
|
||||
workingDir = File(intellijRootDir(), "bin")
|
||||
|
||||
jvmArgs(
|
||||
"-Xmx1250m",
|
||||
"-XX:ReservedCodeCacheSize=240m",
|
||||
"-XX:+HeapDumpOnOutOfMemoryError",
|
||||
"-ea",
|
||||
"-Didea.debug.mode=true",
|
||||
"-Didea.system.path=$ideaSandboxDir",
|
||||
"-Didea.config.path=$ideaSandboxConfigDir",
|
||||
"-Dapple.laf.useScreenMenuBar=true",
|
||||
"-Dapple.awt.graphics.UseQuartz=true",
|
||||
"-Dsun.io.useCanonCaches=false",
|
||||
"-Dplugin.path=${ideaPluginDir.absolutePath}"
|
||||
)
|
||||
|
||||
if (rootProject.findProperty("versions.androidStudioRelease") != null) {
|
||||
jvmArgs("-Didea.platform.prefix=AndroidStudio")
|
||||
}
|
||||
|
||||
if (project.hasProperty("noPCE")) {
|
||||
jvmArgs("-Didea.ProcessCanceledException=disabled")
|
||||
}
|
||||
|
||||
jvmArgs("-Didea.is.internal=${project.findProperty("idea.is.internal") ?: true}")
|
||||
|
||||
project.findProperty("idea.args")?.let { arguments ->
|
||||
jvmArgs(arguments.toString().split(" "))
|
||||
}
|
||||
|
||||
args()
|
||||
|
||||
doFirst {
|
||||
val disabledPluginsFile = File(ideaSandboxConfigDir, "disabled_plugins.txt")
|
||||
val disabledPluginsContents = disabledPluginsFile.takeIf { it.isFile }?.readLines()
|
||||
val filteredContents = disabledPluginsContents?.filterNot { it.contains("org.jetbrains.kotlin") }
|
||||
if (filteredContents != null && filteredContents.size != disabledPluginsContents.size) {
|
||||
with(disabledPluginsFile.printWriter()) {
|
||||
filteredContents.forEach(this::println)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
body()
|
||||
}
|
||||
}
|
||||
@@ -2,30 +2,27 @@
|
||||
package org.jetbrains.kotlin.pill
|
||||
|
||||
import org.gradle.api.artifacts.*
|
||||
import org.gradle.api.artifacts.component.*
|
||||
|
||||
class DependencyMapper(val predicate: (ResolvedArtifact) -> Boolean, val mapping: (ResolvedArtifact) -> MappedDependency?) {
|
||||
companion object {
|
||||
fun forProject(path: String, mapping: (ResolvedArtifact) -> MappedDependency?): DependencyMapper {
|
||||
return DependencyMapper(
|
||||
predicate = { artifact ->
|
||||
val identifier = artifact.id.componentIdentifier as? ProjectComponentIdentifier
|
||||
identifier?.projectPath == path
|
||||
},
|
||||
mapping = mapping
|
||||
)
|
||||
}
|
||||
|
||||
fun forModule(group: String, module: String, version: String?, mapping: (ResolvedArtifact) -> MappedDependency?): DependencyMapper {
|
||||
return DependencyMapper(
|
||||
predicate = { artifact ->
|
||||
val identifier = artifact.id.componentIdentifier as? ModuleComponentIdentifier
|
||||
identifier?.group == group && identifier?.module == module && (version == null || identifier?.version == version)
|
||||
},
|
||||
mapping = mapping
|
||||
)
|
||||
}
|
||||
}
|
||||
class DependencyMapper(
|
||||
val predicate: (ResolvedDependency) -> Boolean,
|
||||
vararg val configurations: String,
|
||||
val mapping: (ResolvedDependency) -> MappedDependency?
|
||||
) {
|
||||
constructor(
|
||||
group: String,
|
||||
module: String,
|
||||
vararg configurations: String,
|
||||
version: String? = null,
|
||||
mapping: (ResolvedDependency) -> MappedDependency?
|
||||
) : this(
|
||||
{ dep ->
|
||||
dep.moduleGroup == group
|
||||
&& dep.moduleName == module
|
||||
&& (version == null || dep.moduleVersion == version)
|
||||
},
|
||||
configurations = *configurations,
|
||||
mapping = mapping
|
||||
)
|
||||
}
|
||||
|
||||
class MappedDependency(val main: PDependency?, val deferred: List<PDependency> = emptyList())
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@file:Suppress("PackageDirectoryMismatch")
|
||||
package org.jetbrains.kotlin.pill
|
||||
|
||||
import java.io.File
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.tasks.SourceSet
|
||||
import org.gradle.api.artifacts.*
|
||||
import org.gradle.api.artifacts.component.*
|
||||
|
||||
data class PDependencies(val main: List<PDependency>, val deferred: List<PDependency>) {
|
||||
fun join(): List<PDependency> {
|
||||
return main + deferred
|
||||
}
|
||||
}
|
||||
|
||||
fun Project.resolveDependencies(
|
||||
configuration: Configuration,
|
||||
forTests: Boolean,
|
||||
dependencyMappers: List<DependencyMapper>,
|
||||
withEmbedded: Boolean = false
|
||||
): PDependencies {
|
||||
val dependencies = mutableListOf<PDependency>()
|
||||
val deferred = mutableListOf<PDependency>()
|
||||
|
||||
nextArtifact@ for (artifact in configuration.resolvedConfiguration.resolvedArtifacts) {
|
||||
val identifier = artifact.id.componentIdentifier
|
||||
|
||||
for (mapper in dependencyMappers) {
|
||||
if (mapper.predicate(artifact)) {
|
||||
val mapped = mapper.mapping(artifact)
|
||||
|
||||
if (mapped != null) {
|
||||
mapped.main?.let { dependencies += it }
|
||||
deferred += mapped.deferred
|
||||
}
|
||||
|
||||
continue@nextArtifact
|
||||
}
|
||||
}
|
||||
|
||||
fun addProjectDependency(projectPath: String) {
|
||||
val project = rootProject.findProject(projectPath) ?: error("Cannot find project $projectPath")
|
||||
|
||||
fun addSourceSet(name: String, suffix: String): Boolean {
|
||||
val sourceSet = project.sourceSets?.findByName(name)?.takeIf { !it.allSource.isEmpty() } ?: return false
|
||||
dependencies += PDependency.Module(project.pillModuleName + '.' + suffix)
|
||||
return true
|
||||
}
|
||||
|
||||
if (forTests && artifact.classifier == "tests") {
|
||||
addSourceSet(SourceSet.TEST_SOURCE_SET_NAME, "test") || addSourceSet(SourceSet.MAIN_SOURCE_SET_NAME, "src")
|
||||
} else {
|
||||
addSourceSet(SourceSet.MAIN_SOURCE_SET_NAME, "src")
|
||||
}
|
||||
|
||||
if (withEmbedded) {
|
||||
val embeddedConfiguration = project.configurations.findByName(EmbeddedComponents.CONFIGURATION_NAME)
|
||||
if (embeddedConfiguration != null) {
|
||||
dependencies += resolveDependencies(embeddedConfiguration, forTests, dependencyMappers, withEmbedded).join()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
when (identifier) {
|
||||
is ProjectComponentIdentifier -> addProjectDependency(identifier.projectPath)
|
||||
is LibraryBinaryIdentifier -> addProjectDependency(identifier.projectPath)
|
||||
is ModuleComponentIdentifier -> {
|
||||
val file = artifact.file
|
||||
val library = PLibrary(file.name, classes = listOf(file))
|
||||
dependencies += PDependency.ModuleLibrary(library)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val existingFiles = mutableSetOf<File>()
|
||||
|
||||
for (dependency in configuration.dependencies) {
|
||||
if (dependency !is SelfResolvingDependency) {
|
||||
continue
|
||||
}
|
||||
|
||||
val files = dependency.resolve().filter { it !in existingFiles }.takeIf { it.isNotEmpty() } ?: continue
|
||||
existingFiles.addAll(files)
|
||||
val library = PLibrary(dependency.name, classes = files.toList())
|
||||
deferred += PDependency.ModuleLibrary(library)
|
||||
}
|
||||
|
||||
return PDependencies(dependencies, deferred)
|
||||
}
|
||||
@@ -5,7 +5,6 @@ package org.jetbrains.kotlin.pill
|
||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.artifacts.ProjectDependency
|
||||
import org.gradle.api.internal.file.copy.SingleParentCopySpec
|
||||
import org.gradle.api.plugins.JavaPlugin
|
||||
import org.gradle.api.tasks.Copy
|
||||
@@ -35,10 +34,6 @@ sealed class ArtifactElement {
|
||||
myChildren += child
|
||||
}
|
||||
|
||||
fun add(children: List<ArtifactElement>) {
|
||||
myChildren += children
|
||||
}
|
||||
|
||||
abstract fun render(context: PathContext): xml
|
||||
|
||||
fun renderRecursively(context: PathContext): xml {
|
||||
@@ -107,37 +102,99 @@ sealed class ArtifactElement {
|
||||
}
|
||||
}
|
||||
|
||||
fun generateKotlinPluginArtifactFile(rootProject: Project, dependencyMappers: List<DependencyMapper>): PFile {
|
||||
fun generateKotlinPluginArtifactFile(rootProject: Project): PFile {
|
||||
val mainIdeaPluginTask = rootProject.tasks.getByName("ideaPlugin")
|
||||
val gradleArtifactDir = File(rootProject.extra["ideaPluginDir"] as File, "lib")
|
||||
|
||||
val ideaPluginTasks = mainIdeaPluginTask.taskDependencies
|
||||
.getDependencies(mainIdeaPluginTask)
|
||||
.filter { it.name == "ideaPlugin" }
|
||||
.filterIsInstance<Copy>()
|
||||
|
||||
val root = Root()
|
||||
|
||||
fun Project.getProject(name: String) = findProject(name) ?: error("Cannot find project $name")
|
||||
|
||||
val prepareIdeaPluginProject = rootProject.getProject(":prepare:idea-plugin")
|
||||
|
||||
// Copy kotlinc directory
|
||||
root.add(Directory("kotlinc").apply {
|
||||
val kotlincDirectory = rootProject.extra["distKotlinHomeDir"].toString()
|
||||
add(DirectoryCopy(File(kotlincDirectory)))
|
||||
})
|
||||
|
||||
root.add(Directory("lib").apply {
|
||||
val librariesConfiguration = prepareIdeaPluginProject.configurations.getByName("libraries")
|
||||
add(getArtifactElements(rootProject, librariesConfiguration, dependencyMappers, false))
|
||||
for (task in ideaPluginTasks) {
|
||||
val spec = task.rootSpec.children.filterIsInstance<SingleParentCopySpec>().singleOrNull()
|
||||
?: error("Copy spec is not unique in ${rootProject.name}. Available specs: ${task.rootSpec.children}")
|
||||
|
||||
add(Directory("jps").apply {
|
||||
val prepareJpsPluginProject = rootProject.getProject(":kotlin-jps-plugin")
|
||||
add(Archive(prepareJpsPluginProject.name + ".jar").apply {
|
||||
val jpsPluginConfiguration = prepareIdeaPluginProject.configurations.getByName("jpsPlugin")
|
||||
add(getArtifactElements(rootProject, jpsPluginConfiguration, dependencyMappers, true))
|
||||
})
|
||||
})
|
||||
val sourcePaths = spec.sourcePaths
|
||||
for (sourcePath in sourcePaths) {
|
||||
if (sourcePath is ShadowJar) {
|
||||
if (sourcePath.project.path == ":prepare:idea-plugin") {
|
||||
val kotlinPluginJar = Archive(sourcePath.archiveName).also { root.getDirectory("lib").add(it) }
|
||||
|
||||
add(Archive("kotlin-plugin.jar").apply {
|
||||
add(FileCopy(File(rootProject.projectDir, "resources/kotlinManifest.properties")))
|
||||
kotlinPluginJar.add(FileCopy(File(rootProject.projectDir, "resources/kotlinManifest.properties")))
|
||||
|
||||
val embeddedConfiguration = prepareIdeaPluginProject.configurations.getByName(EmbeddedComponents.CONFIGURATION_NAME)
|
||||
add(getArtifactElements(rootProject, embeddedConfiguration, dependencyMappers, true))
|
||||
})
|
||||
})
|
||||
for (jarFile in sourcePath.project.configurations.getByName("packedJars").resolve()) {
|
||||
kotlinPluginJar.add(ExtractedDirectory(jarFile))
|
||||
}
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
for (projectPath in sourcePath.project.extra["projectsToShadow"] as List<String>) {
|
||||
val jpsModuleName = rootProject.findProject(projectPath)!!.name + ".src"
|
||||
kotlinPluginJar.add(ModuleOutput(jpsModuleName))
|
||||
}
|
||||
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
fun fileCopySnapshotAware(file: File): FileCopy {
|
||||
val SHAPSHOT_JAR_SUFFIX = "-SNAPSHOT.jar"
|
||||
if (file.name.endsWith(SHAPSHOT_JAR_SUFFIX)) {
|
||||
return FileCopy(file, file.name.dropLast(SHAPSHOT_JAR_SUFFIX.length).substringBeforeLast("-") + ".jar")
|
||||
}
|
||||
|
||||
return FileCopy(file)
|
||||
}
|
||||
|
||||
when (sourcePath) {
|
||||
is Jar -> {
|
||||
val targetDir = ("lib/" + task.destinationDir.toRelativeString(gradleArtifactDir)).withoutSlash()
|
||||
|
||||
val archiveForJar = Archive(sourcePath.project.name + ".jar").apply {
|
||||
if (task.project.plugins.hasPlugin(JavaPlugin::class.java)) {
|
||||
add(ModuleOutput(sourcePath.project.name + ".src"))
|
||||
}
|
||||
root.getDirectory(targetDir).add(this)
|
||||
}
|
||||
|
||||
val embeddedComponents = sourcePath.project.configurations
|
||||
.findByName(EmbeddedComponents.CONFIGURATION_NAME)?.resolvedConfiguration
|
||||
|
||||
if (embeddedComponents != null) {
|
||||
val configuration = CollectedConfiguration(embeddedComponents, Scope.COMPILE)
|
||||
for (dependencyInfo in listOf(configuration).collectDependencies()) {
|
||||
val dependency = (dependencyInfo as? DependencyInfo.ResolvedDependencyInfo)?.dependency ?: continue
|
||||
|
||||
if (dependency.isModuleDependency) {
|
||||
archiveForJar.add(ModuleOutput(dependency.moduleName + ".src"))
|
||||
} else if (dependency.configuration == "tests-jar" || dependency.configuration == "jpsTest") {
|
||||
error("Test configurations are not allowed here")
|
||||
} else {
|
||||
for (file in dependency.moduleArtifacts.map { it.file }) {
|
||||
archiveForJar.add(ExtractedDirectory(file))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
is Configuration -> {
|
||||
require(sourcePath.name == "sideJars") { "Configurations other than 'sideJars' are not supported" }
|
||||
for (file in sourcePath.resolve()) {
|
||||
root.getDirectory("lib").add(fileCopySnapshotAware(file))
|
||||
}
|
||||
}
|
||||
else -> error("${task.name} Unexpected task type ${task.javaClass.name}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val artifact = PArtifact("KotlinPlugin", File(rootProject.projectDir, "out/artifacts/Kotlin"), root)
|
||||
return PFile(
|
||||
@@ -146,36 +203,3 @@ fun generateKotlinPluginArtifactFile(rootProject: Project, dependencyMappers: Li
|
||||
)
|
||||
}
|
||||
|
||||
private fun getArtifactElements(
|
||||
rootProject: Project,
|
||||
configuration: Configuration,
|
||||
dependencyMappers: List<DependencyMapper>,
|
||||
extractDependencies: Boolean
|
||||
): List<ArtifactElement> {
|
||||
val dependencies = rootProject.resolveDependencies(configuration, false, dependencyMappers, withEmbedded = true).join()
|
||||
|
||||
val artifacts = mutableListOf<ArtifactElement>()
|
||||
|
||||
for (dependency in dependencies) {
|
||||
when (dependency) {
|
||||
is PDependency.Module -> {
|
||||
val moduleOutput = ModuleOutput(dependency.name)
|
||||
|
||||
if (extractDependencies) {
|
||||
artifacts += moduleOutput
|
||||
} else {
|
||||
artifacts += Archive(dependency.name + ".jar").apply {
|
||||
add(moduleOutput)
|
||||
}
|
||||
}
|
||||
}
|
||||
is PDependency.Library -> artifacts += ProjectLibrary(dependency.name)
|
||||
is PDependency.ModuleLibrary -> {
|
||||
val files = dependency.library.classes
|
||||
artifacts += files.map(if (extractDependencies) ::ExtractedDirectory else ::FileCopy)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return artifacts
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@file:Suppress("PackageDirectoryMismatch")
|
||||
@@ -33,11 +33,13 @@ data class PProject(
|
||||
|
||||
data class PModule(
|
||||
val name: String,
|
||||
val bundleName: String,
|
||||
val rootDirectory: File,
|
||||
val moduleFile: File,
|
||||
val contentRoots: List<PContentRoot>,
|
||||
val orderRoots: List<POrderRoot>,
|
||||
val moduleForProductionSources: PModule? = null
|
||||
val moduleForProductionSources: PModule? = null,
|
||||
val group: String? = null
|
||||
)
|
||||
|
||||
data class PContentRoot(
|
||||
@@ -62,6 +64,8 @@ data class PSourceRootKotlinOptions(
|
||||
val apiVersion: String?,
|
||||
val languageVersion: String?,
|
||||
val jvmTarget: String?,
|
||||
val addCompilerBuiltIns: Boolean?,
|
||||
val loadBuiltInsFromDependencies: Boolean?,
|
||||
val extraArguments: List<String>
|
||||
) {
|
||||
fun intersect(other: PSourceRootKotlinOptions) = PSourceRootKotlinOptions(
|
||||
@@ -71,6 +75,8 @@ data class PSourceRootKotlinOptions(
|
||||
if (apiVersion == other.apiVersion) apiVersion else null,
|
||||
if (languageVersion == other.languageVersion) languageVersion else null,
|
||||
if (jvmTarget == other.jvmTarget) jvmTarget else null,
|
||||
if (addCompilerBuiltIns == other.addCompilerBuiltIns) addCompilerBuiltIns else null,
|
||||
if (loadBuiltInsFromDependencies == other.loadBuiltInsFromDependencies) loadBuiltInsFromDependencies else null,
|
||||
extraArguments.intersect(other.extraArguments).toList()
|
||||
)
|
||||
}
|
||||
@@ -96,8 +102,7 @@ data class PLibrary(
|
||||
val javadoc: List<File> = emptyList(),
|
||||
val sources: List<File> = emptyList(),
|
||||
val annotations: List<File> = emptyList(),
|
||||
val dependencies: List<PLibrary> = emptyList(),
|
||||
val originalName: String = name
|
||||
val dependencies: List<PLibrary> = emptyList()
|
||||
) {
|
||||
fun attachSource(file: File): PLibrary {
|
||||
return this.copy(sources = this.sources + listOf(file))
|
||||
@@ -130,7 +135,7 @@ fun parse(project: Project, libraries: List<PLibrary>, context: ParserContext):
|
||||
*/
|
||||
private val CONFIGURATION_MAPPING = mapOf(
|
||||
listOf("runtime") to Scope.RUNTIME,
|
||||
listOf("compile", "embedded") to Scope.COMPILE,
|
||||
listOf("compile") to Scope.COMPILE,
|
||||
listOf("compileOnly") to Scope.PROVIDED
|
||||
)
|
||||
|
||||
@@ -157,7 +162,7 @@ private fun ParserContext.parseModules(project: Project, excludedProjects: List<
|
||||
var productionSourcesModule: PModule? = null
|
||||
|
||||
fun getModuleFile(suffix: String = ""): File {
|
||||
val relativePath = File(project.projectDir, project.pillModuleName + suffix + ".iml")
|
||||
val relativePath = File(project.projectDir, project.name + suffix + ".iml")
|
||||
.toRelativeString(project.rootProject.projectDir)
|
||||
|
||||
return File(project.rootProject.projectDir, ".idea/modules/$relativePath")
|
||||
@@ -172,12 +177,13 @@ private fun ParserContext.parseModules(project: Project, excludedProjects: List<
|
||||
|
||||
var dependencies = parseDependencies(project, mainRoot.forTests)
|
||||
if (productionContentRoots.isNotEmpty() && mainRoot.forTests) {
|
||||
val productionModuleDependency = PDependency.Module(project.pillModuleName + ".src")
|
||||
val productionModuleDependency = PDependency.Module(project.name + ".src")
|
||||
dependencies += POrderRoot(productionModuleDependency, Scope.COMPILE, true)
|
||||
}
|
||||
|
||||
val module = PModule(
|
||||
project.pillModuleName + nameSuffix,
|
||||
project.name + nameSuffix,
|
||||
project.name,
|
||||
mainRoot.path,
|
||||
getModuleFile(nameSuffix),
|
||||
roots,
|
||||
@@ -193,12 +199,13 @@ private fun ParserContext.parseModules(project: Project, excludedProjects: List<
|
||||
}
|
||||
|
||||
val mainModuleFileRelativePath = when (project) {
|
||||
project.rootProject -> File(project.rootProject.projectDir, project.rootProject.name + ".iml")
|
||||
project.rootProject -> File(project.rootProject.projectDir, project.name + ".iml")
|
||||
else -> getModuleFile()
|
||||
}
|
||||
|
||||
modules += PModule(
|
||||
project.pillModuleName,
|
||||
project.name,
|
||||
project.name,
|
||||
project.projectDir,
|
||||
mainModuleFileRelativePath,
|
||||
listOf(PContentRoot(project.projectDir, false, emptyList(), allExcludedDirs)),
|
||||
@@ -235,9 +242,9 @@ private fun parseSourceRoots(project: Project): List<PSourceRoot> {
|
||||
|
||||
val sourceRoots = mutableListOf<PSourceRoot>()
|
||||
|
||||
for (sourceSet in (project.sourceSets ?: emptyList())) {
|
||||
for (sourceSet in project.sourceSets) {
|
||||
val kotlinCompileTask = kotlinTasksBySourceSet[sourceSet.name]
|
||||
val kind = if (sourceSet.isTestSourceSet) Kind.TEST else Kind.PRODUCTION
|
||||
val kind = if (sourceSet.name == SourceSet.TEST_SOURCE_SET_NAME) Kind.TEST else Kind.PRODUCTION
|
||||
|
||||
fun Any.getKotlin(): SourceDirectorySet {
|
||||
val kotlinMethod = javaClass.getMethod("getKotlin")
|
||||
@@ -291,8 +298,9 @@ private fun parseSourceRoots(project: Project): List<PSourceRoot> {
|
||||
|
||||
private fun parseResourceRootsProcessedByProcessResourcesTask(project: Project, sourceSet: SourceSet): List<PSourceRoot> {
|
||||
val isMainSourceSet = sourceSet.name == SourceSet.MAIN_SOURCE_SET_NAME
|
||||
val isTestSourceSet = sourceSet.name == SourceSet.TEST_SOURCE_SET_NAME
|
||||
|
||||
val resourceRootKind = if (sourceSet.isTestSourceSet) PSourceRoot.Kind.TEST_RESOURCES else PSourceRoot.Kind.RESOURCES
|
||||
val resourceRootKind = if (isTestSourceSet) PSourceRoot.Kind.TEST_RESOURCES else PSourceRoot.Kind.RESOURCES
|
||||
val taskNameBase = "processResources"
|
||||
val taskName = if (isMainSourceSet) taskNameBase else sourceSet.name + taskNameBase.capitalize()
|
||||
val task = project.tasks.findByName(taskName) as? ProcessResources ?: return emptyList()
|
||||
@@ -311,26 +319,20 @@ private fun parseResourceRootsProcessedByProcessResourcesTask(project: Project,
|
||||
return roots.map { PSourceRoot(it, resourceRootKind, null) }
|
||||
}
|
||||
|
||||
private val SourceSet.isTestSourceSet: Boolean
|
||||
get() = name == SourceSet.TEST_SOURCE_SET_NAME
|
||||
|| name.endsWith("Test")
|
||||
|| name.endsWith("Tests")
|
||||
|
||||
private fun getKotlinOptions(kotlinCompileTask: Any): PSourceRootKotlinOptions? {
|
||||
val compileArguments = run {
|
||||
val method = kotlinCompileTask::class.java.getMethod("getSerializedCompilerArguments")
|
||||
method.isAccessible = true
|
||||
method.invoke(kotlinCompileTask) as List<String>
|
||||
}
|
||||
|
||||
val compileArguments = kotlinCompileTask.invokeInternal("getSerializedCompilerArguments") as List<String>
|
||||
fun parseBoolean(name: String) = compileArguments.contains("-$name")
|
||||
fun parseString(name: String) = compileArguments.dropWhile { it != "-$name" }.drop(1).firstOrNull()
|
||||
|
||||
val addCompilerBuiltins = "Xadd-compiler-builtins"
|
||||
val loadBuiltinsFromDependencies = "Xload-builtins-from-dependencies"
|
||||
|
||||
fun isOptionForScriptingCompilerPlugin(option: String)
|
||||
= option.startsWith("-Xplugin=") && option.contains("kotlin-scripting-compiler")
|
||||
|
||||
val extraArguments = compileArguments.filter {
|
||||
it.startsWith("-X") && !isOptionForScriptingCompilerPlugin(it)
|
||||
&& it != "-$addCompilerBuiltins" && it != "-$loadBuiltinsFromDependencies"
|
||||
}
|
||||
|
||||
return PSourceRootKotlinOptions(
|
||||
@@ -340,6 +342,8 @@ private fun getKotlinOptions(kotlinCompileTask: Any): PSourceRootKotlinOptions?
|
||||
parseString("api-version"),
|
||||
parseString("language-version"),
|
||||
parseString("jvm-target"),
|
||||
parseBoolean(addCompilerBuiltins),
|
||||
parseBoolean(loadBuiltinsFromDependencies),
|
||||
extraArguments
|
||||
)
|
||||
}
|
||||
@@ -357,25 +361,93 @@ private fun Any.invokeInternal(name: String, instance: Any = this): Any? {
|
||||
}
|
||||
|
||||
private fun ParserContext.parseDependencies(project: Project, forTests: Boolean): List<POrderRoot> {
|
||||
val configurations = project.configurations
|
||||
val configurationMapping = if (forTests) TEST_CONFIGURATION_MAPPING else CONFIGURATION_MAPPING
|
||||
|
||||
val mainRoots = mutableListOf<POrderRoot>()
|
||||
val deferredRoots = mutableListOf<POrderRoot>()
|
||||
with(project.configurations) {
|
||||
val mainRoots = mutableListOf<POrderRoot>()
|
||||
val deferredRoots = mutableListOf<POrderRoot>()
|
||||
|
||||
for ((configurationNames, scope) in configurationMapping) {
|
||||
for (configurationName in configurationNames) {
|
||||
val configuration = configurations.findByName(configurationName) ?: continue
|
||||
val (main, deferred) = project.resolveDependencies(configuration, forTests, dependencyMappers)
|
||||
mainRoots += main.map { POrderRoot(it, scope) }
|
||||
deferredRoots += deferred.map { POrderRoot(it, scope) }
|
||||
fun collectConfigurations(): List<CollectedConfiguration> {
|
||||
val configurations = mutableListOf<CollectedConfiguration>()
|
||||
|
||||
for ((configurationNames, scope) in configurationMapping) {
|
||||
for (configurationName in configurationNames) {
|
||||
val configuration = findByName(configurationName)?.also { it.resolve() } ?: continue
|
||||
|
||||
val extraDependencies = resolveExtraDependencies(configuration)
|
||||
configurations += CollectedConfiguration(configuration.resolvedConfiguration, scope, extraDependencies)
|
||||
}
|
||||
}
|
||||
|
||||
return configurations
|
||||
}
|
||||
}
|
||||
|
||||
return removeDuplicates(mainRoots + deferredRoots)
|
||||
nextDependency@ for (dependencyInfo in collectConfigurations().collectDependencies()) {
|
||||
val scope = dependencyInfo.scope
|
||||
|
||||
if (dependencyInfo is DependencyInfo.CustomDependencyInfo) {
|
||||
val files = dependencyInfo.files
|
||||
val library = PLibrary(files.firstOrNull()?.nameWithoutExtension ?: "unnamed", classes = files)
|
||||
|
||||
mainRoots += POrderRoot(PDependency.ModuleLibrary(library), scope)
|
||||
continue
|
||||
}
|
||||
|
||||
val dependency = (dependencyInfo as DependencyInfo.ResolvedDependencyInfo).dependency
|
||||
|
||||
for (mapper in dependencyMappers) {
|
||||
if (dependency.configuration in mapper.configurations && mapper.predicate(dependency)) {
|
||||
val mappedDependency = mapper.mapping(dependency)
|
||||
|
||||
if (mappedDependency != null) {
|
||||
val mainDependency = mappedDependency.main
|
||||
if (mainDependency != null) {
|
||||
mainRoots += POrderRoot(mainDependency, scope)
|
||||
}
|
||||
|
||||
for (deferredDep in mappedDependency.deferred) {
|
||||
deferredRoots += POrderRoot(deferredDep, scope)
|
||||
}
|
||||
}
|
||||
|
||||
continue@nextDependency
|
||||
}
|
||||
}
|
||||
|
||||
mainRoots += if (dependency.isModuleDependency && scope != Scope.TEST) {
|
||||
POrderRoot(PDependency.Module(dependency.moduleName + ".src"), scope)
|
||||
} else if (dependency.configuration == "tests-jar" || dependency.configuration == "jpsTest") {
|
||||
POrderRoot(
|
||||
PDependency.Module(dependency.moduleName + ".test"),
|
||||
scope,
|
||||
isProductionOnTestDependency = true
|
||||
)
|
||||
} else {
|
||||
val classes = dependency.moduleArtifacts.map { it.file }
|
||||
val library = PLibrary(dependency.moduleName, classes)
|
||||
POrderRoot(PDependency.ModuleLibrary(library), scope)
|
||||
}
|
||||
}
|
||||
|
||||
return removeDuplicates(mainRoots + deferredRoots)
|
||||
}
|
||||
}
|
||||
|
||||
fun removeDuplicates(roots: List<POrderRoot>): List<POrderRoot> {
|
||||
private fun resolveExtraDependencies(configuration: Configuration): List<File> {
|
||||
return configuration.dependencies
|
||||
.filterIsInstance<SelfResolvingDependency>()
|
||||
.map { it.resolve() }
|
||||
.filter { isGradleApiDependency(it) }
|
||||
.flatMap { it }
|
||||
}
|
||||
|
||||
private fun isGradleApiDependency(files: Iterable<File>): Boolean {
|
||||
return listOf("gradle-api", "groovy-all").all { dep ->
|
||||
files.any { it.extension == "jar" && it.name.startsWith("$dep-") }
|
||||
}
|
||||
}
|
||||
|
||||
private fun removeDuplicates(roots: List<POrderRoot>): List<POrderRoot> {
|
||||
val dependenciesByScope = roots.groupBy { it.scope }.mapValues { it.value.mapTo(mutableSetOf()) { it.dependency } }
|
||||
fun dependenciesFor(scope: Scope) = dependenciesByScope[scope] ?: emptySet<PDependency>()
|
||||
|
||||
@@ -408,11 +480,59 @@ fun removeDuplicates(roots: List<POrderRoot>): List<POrderRoot> {
|
||||
return result.toList()
|
||||
}
|
||||
|
||||
val Project.pillModuleName: String
|
||||
get() = path.removePrefix(":").replace(':', '.')
|
||||
data class CollectedConfiguration(
|
||||
val configuration: ResolvedConfiguration,
|
||||
val scope: Scope,
|
||||
val extraDependencies: List<File> = emptyList())
|
||||
|
||||
val Project.sourceSets: SourceSetContainer?
|
||||
get() {
|
||||
val convention = project.convention.findPlugin(JavaPluginConvention::class.java) ?: return null
|
||||
return convention.sourceSets
|
||||
sealed class DependencyInfo(val scope: Scope) {
|
||||
class ResolvedDependencyInfo(scope: Scope, val dependency: ResolvedDependency) : DependencyInfo(scope)
|
||||
class CustomDependencyInfo(scope: Scope, val files: List<File>) : DependencyInfo(scope)
|
||||
}
|
||||
|
||||
val ResolvedDependency.isModuleDependency
|
||||
get() = configuration in JpsCompatiblePlugin.MODULE_CONFIGURATIONS
|
||||
|
||||
fun List<CollectedConfiguration>.collectDependencies(): List<DependencyInfo> {
|
||||
val dependencies = mutableListOf<DependencyInfo>()
|
||||
|
||||
val unprocessed = LinkedList<DependencyInfo>()
|
||||
val existing = mutableSetOf<Pair<Scope, ResolvedDependency>>()
|
||||
|
||||
for ((configuration, scope, extraDependencies) in this) {
|
||||
for (dependency in configuration.firstLevelModuleDependencies) {
|
||||
unprocessed += DependencyInfo.ResolvedDependencyInfo(scope, dependency)
|
||||
}
|
||||
|
||||
if (!extraDependencies.isEmpty()) {
|
||||
unprocessed += DependencyInfo.CustomDependencyInfo(scope, extraDependencies)
|
||||
}
|
||||
}
|
||||
|
||||
while (unprocessed.isNotEmpty()) {
|
||||
val info = unprocessed.removeAt(0)
|
||||
dependencies += info
|
||||
|
||||
info as? DependencyInfo.ResolvedDependencyInfo ?: continue
|
||||
|
||||
val data = Pair(info.scope, info.dependency)
|
||||
existing += data
|
||||
|
||||
for (child in info.dependency.children) {
|
||||
if (Pair(info.scope, child) in existing) {
|
||||
continue
|
||||
}
|
||||
|
||||
unprocessed += DependencyInfo.ResolvedDependencyInfo(info.scope, child)
|
||||
}
|
||||
}
|
||||
|
||||
return dependencies
|
||||
}
|
||||
|
||||
private val Project.sourceSets: SourceSetContainer
|
||||
get() {
|
||||
lateinit var result: SourceSetContainer
|
||||
project.configure<JavaPluginConvention> { result = sourceSets }
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -13,37 +13,51 @@ import java.io.File
|
||||
|
||||
class PillConfigurablePlugin : Plugin<Project> {
|
||||
override fun apply(project: Project) {
|
||||
project.configurations.maybeCreate(EmbeddedComponents.CONFIGURATION_NAME)
|
||||
project.configurations.create(EmbeddedComponents.CONFIGURATION_NAME)
|
||||
project.extensions.create("pill", PillExtension::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
class JpsCompatiblePlugin : Plugin<Project> {
|
||||
companion object {
|
||||
val MODULE_CONFIGURATIONS = arrayOf("apiElements", "runtimeElements")
|
||||
|
||||
private fun mapper(module: String, vararg configurations: String): DependencyMapper {
|
||||
return DependencyMapper("org.jetbrains.kotlin", module, *configurations) { MappedDependency(PDependency.Library(module)) }
|
||||
}
|
||||
|
||||
private fun getDependencyMappers(projectLibraries: List<PLibrary>): List<DependencyMapper> {
|
||||
val mappersForKotlinLibrariesExeptStdlib = projectLibraries
|
||||
.filter { it.name != "kotlin-stdlib" }
|
||||
.map { DependencyMapper.forProject(it.originalName) { MappedDependency(PDependency.Library(it.name)) } }
|
||||
.mapTo(mutableListOf()) { mapper(it.name, "default", "distJar", *MODULE_CONFIGURATIONS) }
|
||||
|
||||
val disabledModuleMappers = listOf(
|
||||
":kotlin-stdlib-common",
|
||||
":core:builtins",
|
||||
":kotlin-compiler",
|
||||
":kotlin-compiler-embeddable",
|
||||
":kotlin-test:kotlin-test-common",
|
||||
":kotlin-test:kotlin-test-annotations-common"
|
||||
).map { DependencyMapper.forProject(it) { null } }
|
||||
|
||||
return listOf(
|
||||
DependencyMapper.forProject(":kotlin-stdlib") {
|
||||
return mappersForKotlinLibrariesExeptStdlib + listOf(
|
||||
DependencyMapper("org.jetbrains.kotlin", "kotlin-stdlib", "distJar", *MODULE_CONFIGURATIONS) {
|
||||
MappedDependency(
|
||||
PDependency.Library("kotlin-stdlib"),
|
||||
listOf(PDependency.Library("annotations-13.0"))
|
||||
)
|
||||
},
|
||||
DependencyMapper.forProject(":kotlin-test:kotlin-test-jvm") { MappedDependency(PDependency.Library("kotlin-test-jvm")) },
|
||||
DependencyMapper.forProject(":kotlin-reflect-api") { MappedDependency(PDependency.Library("kotlin-reflect")) }
|
||||
) + mappersForKotlinLibrariesExeptStdlib + disabledModuleMappers
|
||||
DependencyMapper("org.jetbrains", "annotations", "default", "runtime", version = "13.0") {
|
||||
MappedDependency(
|
||||
null,
|
||||
listOf(PDependency.Library("annotations-13.0"))
|
||||
)
|
||||
},
|
||||
DependencyMapper("org.jetbrains.kotlin", "kotlin-reflect-api", *MODULE_CONFIGURATIONS) {
|
||||
MappedDependency(PDependency.Library("kotlin-reflect"))
|
||||
},
|
||||
DependencyMapper("org.jetbrains.kotlin", "kotlin-compiler-embeddable", "runtimeJar") { null },
|
||||
DependencyMapper("org.jetbrains.kotlin", "kotlin-stdlib-js", "distJar") { null },
|
||||
DependencyMapper("org.jetbrains.kotlin", "kotlin-compiler", "runtimeJar") { null },
|
||||
DependencyMapper("org.jetbrains.kotlin", "compiler", *MODULE_CONFIGURATIONS) { null },
|
||||
DependencyMapper("kotlin.build.custom.deps", "android", "default") { dep ->
|
||||
val (sdkCommon, otherJars) = dep.moduleArtifacts.map { it.file }.partition { it.name == "sdk-common.jar" }
|
||||
val mainLibrary = PDependency.ModuleLibrary(PLibrary(dep.moduleName, otherJars))
|
||||
val deferredLibrary = PDependency.ModuleLibrary(PLibrary(dep.moduleName + "-deferred", sdkCommon))
|
||||
MappedDependency(mainLibrary, listOf(deferredLibrary))
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getProjectLibraries(rootProject: Project): List<PLibrary> {
|
||||
@@ -64,8 +78,7 @@ class JpsCompatiblePlugin : Plugin<Project> {
|
||||
PLibrary(
|
||||
library.name,
|
||||
classes = listOf(File(libraryPath, "$archivesBaseName.jar")).filterExisting(),
|
||||
sources = listOf(File(libraryPath, "$archivesBaseName-sources.jar")).filterExisting(),
|
||||
originalName = library.path
|
||||
sources = listOf(File(libraryPath, "$archivesBaseName-sources.jar")).filterExisting()
|
||||
)
|
||||
}
|
||||
|
||||
@@ -128,9 +141,7 @@ class JpsCompatiblePlugin : Plugin<Project> {
|
||||
}
|
||||
|
||||
val projectLibraries = getProjectLibraries(rootProject)
|
||||
val dependencyMappers = getDependencyMappers(projectLibraries)
|
||||
|
||||
val parserContext = ParserContext(dependencyMappers, variant)
|
||||
val parserContext = ParserContext(getDependencyMappers(projectLibraries), variant)
|
||||
|
||||
val jpsProject = parse(rootProject, projectLibraries, parserContext)
|
||||
.mapLibraries(this::attachPlatformSources, this::attachAsmSources)
|
||||
@@ -141,7 +152,7 @@ class JpsCompatiblePlugin : Plugin<Project> {
|
||||
removeJpsAndPillRunConfigurations()
|
||||
removeAllArtifactConfigurations()
|
||||
|
||||
generateKotlinPluginArtifactFile(rootProject, dependencyMappers).write()
|
||||
generateKotlinPluginArtifactFile(rootProject).write()
|
||||
|
||||
copyRunConfigurations()
|
||||
setOptionsForDefaultJunitRunConfiguration(rootProject)
|
||||
@@ -262,7 +273,6 @@ class JpsCompatiblePlugin : Plugin<Project> {
|
||||
addOrReplaceOptionValue("ideaSdk.androidPlugin.path", platformDirProjectRelative + "/plugins/android/lib")
|
||||
addOrReplaceOptionValue("robolectric.classpath", robolectricClasspath)
|
||||
addOrReplaceOptionValue("use.jps", "true")
|
||||
addOrReplaceOptionValue("kotlinVersion", project.rootProject.extra["kotlinVersion"].toString())
|
||||
|
||||
val isAndroidStudioBunch = project.findProperty("versions.androidStudioRelease") != null
|
||||
addOrReplaceOptionValue("idea.platform.prefix", if (isAndroidStudioBunch) "AndroidStudio" else null)
|
||||
@@ -298,7 +308,7 @@ class JpsCompatiblePlugin : Plugin<Project> {
|
||||
}
|
||||
|
||||
private fun attachPlatformSources(library: PLibrary): PLibrary {
|
||||
val platformSourcesJar = File(platformDir, "../../../sources/intellij-$platformVersion-sources.jar")
|
||||
val platformSourcesJar = File(platformDir, "../sources/ideaIC-$platformVersion-sources.jar")
|
||||
|
||||
if (library.classes.any { it.startsWith(platformDir) }) {
|
||||
return library.attachSource(platformSourcesJar)
|
||||
|
||||
@@ -31,7 +31,12 @@ private fun renderModulesFile(project: PProject) = PFile(
|
||||
|
||||
for (module in project.modules) {
|
||||
val moduleFilePath = pathContext(module.moduleFile)
|
||||
xml("module", "fileurl" to "file://$moduleFilePath", "filepath" to moduleFilePath)
|
||||
|
||||
if (module.group != null) {
|
||||
xml("module", "fileurl" to "file://$moduleFilePath", "filepath" to moduleFilePath, "group" to module.group)
|
||||
} else {
|
||||
xml("module", "fileurl" to "file://$moduleFilePath", "filepath" to moduleFilePath)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -80,8 +85,10 @@ private fun renderModule(project: PProject, module: PModule) = PFile(
|
||||
|
||||
kotlinCompileOptions.noStdlib.option("noStdlib")
|
||||
kotlinCompileOptions.noReflect.option("noReflect")
|
||||
module.name.option("moduleName")
|
||||
kotlinCompileOptions.moduleName.option("moduleName")
|
||||
xml("option", "name" to "jvmTarget", "value" to platformVersion)
|
||||
kotlinCompileOptions.addCompilerBuiltIns.option("addCompilerBuiltIns")
|
||||
kotlinCompileOptions.loadBuiltInsFromDependencies.option("loadBuiltInsFromDependencies")
|
||||
kotlinCompileOptions.languageVersion.option("languageVersion")
|
||||
kotlinCompileOptions.apiVersion.option("apiVersion")
|
||||
|
||||
@@ -197,4 +204,4 @@ private fun renderLibraryToXml(library: PLibrary, pathContext: PathContext, name
|
||||
}
|
||||
}
|
||||
|
||||
fun PLibrary.renderName() = name.takeIf { it != "unspecified" } ?: classes.first().nameWithoutExtension
|
||||
fun PLibrary.renderName() = name?.takeIf { it != "unspecified" } ?: classes.first().nameWithoutExtension
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
import com.jakewharton.dex.*
|
||||
|
||||
@@ -1,8 +1,15 @@
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.tasks.SourceSet
|
||||
import org.gradle.api.tasks.SourceSetContainer
|
||||
@file:Suppress("unused") // usages in build scripts are not tracked properly
|
||||
|
||||
inline fun Project.sourceSets(crossinline body: SourceSetsBuilder.() -> Unit) = SourceSetsBuilder(this).body()
|
||||
import org.gradle.api.*
|
||||
import org.gradle.api.plugins.JavaPluginConvention
|
||||
import org.gradle.api.tasks.*
|
||||
import org.gradle.kotlin.dsl.*
|
||||
import org.gradle.language.jvm.tasks.ProcessResources
|
||||
|
||||
//import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
|
||||
inline fun Project.sourceSets(crossinline body: SourceSetsBuilder.() -> Unit) =
|
||||
SourceSetsBuilder(this).body()
|
||||
|
||||
class SourceSetsBuilder(val project: Project) {
|
||||
|
||||
@@ -33,6 +40,23 @@ val SourceSet.projectDefault: Project.() -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: adding KotlinSourceSet dep to the plugin breaks the build unexpectedly, resolve and uncomment
|
||||
//val SourceSet.kotlin: SourceDirectorySet
|
||||
// get() =
|
||||
// (this as HasConvention)
|
||||
// .convention
|
||||
// .getPlugin(KotlinSourceSet::class.java)
|
||||
// .kotlin
|
||||
//
|
||||
//
|
||||
//fun SourceSet.kotlin(action: SourceDirectorySet.() -> Unit) =
|
||||
// kotlin.action()
|
||||
|
||||
fun Project.getSourceSetsFrom(projectPath: String): SourceSetContainer {
|
||||
evaluationDependsOn(projectPath)
|
||||
return project(projectPath).sourceSets
|
||||
}
|
||||
|
||||
val Project.sourceSets: SourceSetContainer
|
||||
get() = javaPluginConvention().sourceSets
|
||||
|
||||
|
||||
@@ -25,13 +25,10 @@ import org.gradle.api.tasks.testing.Test
|
||||
import org.gradle.kotlin.dsl.extra
|
||||
import org.gradle.kotlin.dsl.project
|
||||
import org.gradle.kotlin.dsl.task
|
||||
import java.io.File
|
||||
import java.lang.Character.isLowerCase
|
||||
import java.lang.Character.isUpperCase
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Path
|
||||
|
||||
fun Project.projectTest(taskName: String = "test", parallel: Boolean = false, body: Test.() -> Unit = {}): Test = getOrCreateTask(taskName) {
|
||||
fun Project.projectTest(taskName: String = "test", body: Test.() -> Unit = {}): Test = getOrCreateTask(taskName) {
|
||||
doFirst {
|
||||
val commandLineIncludePatterns = (filter as? DefaultTestFilter)?.commandLineIncludePatterns ?: emptySet()
|
||||
val patterns = filter.includePatterns + commandLineIncludePatterns
|
||||
@@ -101,34 +98,6 @@ fun Project.projectTest(taskName: String = "test", parallel: Boolean = false, bo
|
||||
environment("PROJECT_BUILD_DIR", buildDir)
|
||||
systemProperty("jps.kotlin.home", rootProject.extra["distKotlinHomeDir"]!!)
|
||||
systemProperty("kotlin.ni", if (rootProject.hasProperty("newInferenceTests")) "true" else "false")
|
||||
|
||||
var subProjectTempRoot: Path? = null
|
||||
doFirst {
|
||||
val teamcity = rootProject.findProperty("teamcity") as? Map<*, *>
|
||||
val systemTempRoot =
|
||||
// TC by default doesn't switch `teamcity.build.tempDir` to 'java.io.tmpdir' so it could cause to wasted disk space
|
||||
// Should be fixed soon on Teamcity side
|
||||
(teamcity?.get("teamcity.build.tempDir") as? String)
|
||||
?: System.getProperty("java.io.tmpdir")
|
||||
systemTempRoot.let {
|
||||
subProjectTempRoot = Files.createTempDirectory(File(systemTempRoot).toPath(), project.name + "Project_" + taskName + "_")
|
||||
systemProperty("java.io.tmpdir", subProjectTempRoot.toString())
|
||||
}
|
||||
}
|
||||
|
||||
doLast {
|
||||
subProjectTempRoot?.let {
|
||||
try {
|
||||
delete(it)
|
||||
} catch (e: Exception) {
|
||||
project.logger.warn("Can't delete test temp root folder $it", e.printStackTrace())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (parallel) {
|
||||
maxParallelForks = Math.max(Runtime.getRuntime().availableProcessors() / 2, 1)
|
||||
}
|
||||
body()
|
||||
}
|
||||
|
||||
@@ -153,7 +122,7 @@ private fun Task.useAndroidConfiguration(systemPropertyName: String, configName:
|
||||
.also {
|
||||
dependencies.add(
|
||||
configName,
|
||||
dependencies.project(":dependencies:android-sdk", configuration = configName)
|
||||
dependencies.project(":custom-dependencies:android-sdk", configuration = configName)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="[Pill] Generate All Tests" type="Application" factoryName="Application">
|
||||
<option name="MAIN_CLASS_NAME" value="org.jetbrains.kotlin.pill.generateAllTests.Main" />
|
||||
<module name="pill.generate-all-tests.test" />
|
||||
<module name="generate-all-tests.test" />
|
||||
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
|
||||
<method />
|
||||
</configuration>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="[Pill] JS Backend Tests" type="JUnit" factoryName="JUnit">
|
||||
<module name="js.js.tests.test" />
|
||||
<module name="js.tests.test" />
|
||||
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
||||
<option name="ALTERNATIVE_JRE_PATH" />
|
||||
<option name="PACKAGE_NAME" value="org.jetbrains.kotlin.js.test" />
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="[Pill] Java 8 Tests" type="JUnit" factoryName="JUnit">
|
||||
<module name="compiler.tests-java8.test" />
|
||||
<module name="tests-java8.test" />
|
||||
<extension name="coverage">
|
||||
<pattern>
|
||||
<option name="PATTERN" value="org.jetbrains.kotlin.*" />
|
||||
|
||||
@@ -24,8 +24,8 @@ dependencies {
|
||||
testCompile(projectTests(":jps-plugin"))
|
||||
testCompile(commonDep("junit:junit"))
|
||||
testCompile(intellijDep()) { includeJars("openapi", "idea", "idea_rt", "groovy-all", "jps-builders", rootProject = rootProject) }
|
||||
testCompile(jpsStandalone()) { includeJars("jps-model") }
|
||||
testCompile(jpsBuildTest())
|
||||
testCompile(intellijDep("jps-standalone")) { includeJars("jps-model") }
|
||||
testCompile(intellijDep("jps-build-test"))
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
@@ -38,14 +38,5 @@ projectTest {
|
||||
doFirst {
|
||||
environment("kotlin.tests.android.timeout", "45")
|
||||
}
|
||||
|
||||
if (project.hasProperty("teamcity") || project.hasProperty("kotlin.test.android.teamcity")) {
|
||||
systemProperty("kotlin.test.android.teamcity", true)
|
||||
}
|
||||
|
||||
project.findProperty("kotlin.test.android.path.filter")?.let {
|
||||
systemProperty("kotlin.test.android.path.filter", it.toString())
|
||||
}
|
||||
|
||||
workingDir = rootDir
|
||||
}
|
||||
|
||||
@@ -33,16 +33,11 @@ import javax.xml.parsers.ParserConfigurationException
|
||||
|
||||
class CodegenTestsOnAndroidRunner private constructor(private val pathManager: PathManager) {
|
||||
|
||||
private val isTeamcity = System.getProperty("kotlin.test.android.teamcity") != null || System.getenv("TEAMCITY_VERSION") != null
|
||||
|
||||
private fun runTestsInEmulator(): TestSuite {
|
||||
val rootSuite = TestSuite("Root")
|
||||
|
||||
downloadDependencies()
|
||||
|
||||
val emulatorType = if (isTeamcity) Emulator.ARM else Emulator.X86
|
||||
println("Using $emulatorType emulator!")
|
||||
val emulator = Emulator(pathManager, emulatorType)
|
||||
val emulator = Emulator(pathManager, Emulator.ARM)
|
||||
emulator.createEmulator()
|
||||
|
||||
val gradleRunner = GradleRunner(pathManager)
|
||||
|
||||
@@ -34,8 +34,8 @@ public class PathManager {
|
||||
return getAndroidSdkRoot() + "/platforms";
|
||||
}
|
||||
|
||||
public String getAndroidAvdRoot() {
|
||||
String androidEmulatorRoot = getAndroidSdkRoot() + "/emulatoravd";
|
||||
public String getAndroidEmulatorRoot() {
|
||||
String androidEmulatorRoot = getAndroidSdkRoot() + "/emulator";
|
||||
new File(androidEmulatorRoot).mkdirs();
|
||||
return androidEmulatorRoot;
|
||||
}
|
||||
@@ -48,10 +48,6 @@ public class PathManager {
|
||||
return getAndroidSdkRoot() + "/tools";
|
||||
}
|
||||
|
||||
public String getEmulatorFolderInAndroidSdk() {
|
||||
return getAndroidSdkRoot() + "/emulator";
|
||||
}
|
||||
|
||||
public String getBuildToolsFolderInAndroidSdk() {
|
||||
return getAndroidSdkRoot() + "/build-tools";
|
||||
}
|
||||
|
||||
@@ -35,16 +35,14 @@ public class SDKDownloader {
|
||||
private final String skdToolsZipPath;
|
||||
private final String buildToolsZipPath;
|
||||
private final String gradleZipPath;
|
||||
private final String emulatorZipPath;
|
||||
|
||||
private final PathManager pathManager;
|
||||
|
||||
private static final String PLATFORM_TOOLS = "28.0.1";
|
||||
private static final String SDK_TOOLS = "4333796"; //"26.1.1";
|
||||
private static final String SDK_TOOLS = "25.2.5";
|
||||
public static final String BUILD_TOOLS = "28.0.3";
|
||||
private static final int ANDROID_VERSION = 19;
|
||||
public static final String GRADLE_VERSION = "4.6";
|
||||
public static final String EMULATOR_TOOLS_VERSION = "5264690"; //"28.0.23";
|
||||
|
||||
|
||||
public SDKDownloader(PathManager pathManager) {
|
||||
@@ -53,10 +51,9 @@ public class SDKDownloader {
|
||||
armImage = pathManager.getRootForDownload() + "/arm-image.zip";
|
||||
x86Image = pathManager.getRootForDownload() + "/x86-image.zip";
|
||||
platformToolsZipPath = pathManager.getRootForDownload() + "/platform-tools" + PLATFORM_TOOLS + ".zip";
|
||||
skdToolsZipPath = pathManager.getRootForDownload() + "/sdk-tools" + SDK_TOOLS + ".zip";
|
||||
skdToolsZipPath = pathManager.getRootForDownload() + "/tools" + SDK_TOOLS + ".zip";
|
||||
buildToolsZipPath = pathManager.getRootForDownload() + "/build-tools" + BUILD_TOOLS + ".zip";
|
||||
gradleZipPath = pathManager.getRootForDownload() + "/gradle" + GRADLE_VERSION + ".zip";
|
||||
emulatorZipPath = pathManager.getRootForDownload() + "/emulator" + EMULATOR_TOOLS_VERSION + ".zip";
|
||||
}
|
||||
|
||||
public void downloadPlatform() {
|
||||
@@ -73,17 +70,12 @@ public class SDKDownloader {
|
||||
}
|
||||
|
||||
public void downloadSdkTools() {
|
||||
download("https://dl.google.com/android/repository/sdk-tools-" + getPlatformName() + "-" + SDK_TOOLS + ".zip",
|
||||
skdToolsZipPath);
|
||||
download(getDownloadUrl("https://dl.google.com/android/repository/tools_r" + SDK_TOOLS), skdToolsZipPath);
|
||||
}
|
||||
|
||||
public void downloadBuildTools() {
|
||||
download(getDownloadUrl("https://dl.google.com/android/repository/build-tools_r" + BUILD_TOOLS), buildToolsZipPath);
|
||||
}
|
||||
public void downloadEmulator() {
|
||||
download("https://dl.google.com/android/repository/emulator-" + getPlatformName() + "-" + EMULATOR_TOOLS_VERSION + ".zip",
|
||||
emulatorZipPath);
|
||||
}
|
||||
|
||||
public void downloadGradle() {
|
||||
download("https://services.gradle.org/distributions/gradle-" + GRADLE_VERSION + "-bin.zip", gradleZipPath);
|
||||
@@ -101,27 +93,11 @@ public class SDKDownloader {
|
||||
suffix = "-linux.zip";
|
||||
}
|
||||
else {
|
||||
throw new IllegalStateException("Your operating system isn't supported yet.");
|
||||
throw new IllegalStateException("Your operating system doesn't supported yet.");
|
||||
}
|
||||
return prefix + suffix;
|
||||
}
|
||||
|
||||
|
||||
private static String getPlatformName() {
|
||||
if (SystemInfo.isWindows) {
|
||||
return "windows";
|
||||
}
|
||||
else if (SystemInfo.isMac) {
|
||||
return "darwin";
|
||||
}
|
||||
else if (SystemInfo.isUnix) {
|
||||
return "linux";
|
||||
}
|
||||
else {
|
||||
throw new IllegalStateException("Your operating system isn't supported yet.");
|
||||
}
|
||||
}
|
||||
|
||||
public void downloadAll() {
|
||||
downloadSdkTools();
|
||||
downloadAbi();
|
||||
@@ -129,7 +105,6 @@ public class SDKDownloader {
|
||||
downloadPlatformTools();
|
||||
downloadBuildTools();
|
||||
downloadGradle();
|
||||
downloadEmulator();
|
||||
}
|
||||
|
||||
|
||||
@@ -148,9 +123,10 @@ public class SDKDownloader {
|
||||
|
||||
//BUILD TOOLS
|
||||
String buildTools = androidSdkRoot + "/build-tools/";
|
||||
String buildToolsFolder = buildTools + BUILD_TOOLS + "/";
|
||||
new File(buildToolsFolder).delete();
|
||||
unzip(buildToolsZipPath, buildTools);
|
||||
|
||||
unzip(emulatorZipPath, androidSdkRoot);
|
||||
new File(buildTools + "/android-9").renameTo(new File(buildToolsFolder));
|
||||
}
|
||||
|
||||
public void deleteAll() {
|
||||
|
||||
@@ -34,12 +34,11 @@ public class Emulator {
|
||||
|
||||
public static final String ARM = "arm";
|
||||
public static final String X86 = "x86";
|
||||
private static final String AVD_NAME = "kotlin_box_test_avd";
|
||||
|
||||
private final static Pattern EMULATOR_PATTERN = Pattern.compile("emulator-([0-9])*");
|
||||
|
||||
private final PathManager pathManager;
|
||||
private final String platform;
|
||||
private String platform;
|
||||
|
||||
public Emulator(PathManager pathManager, String platform) {
|
||||
this.pathManager = pathManager;
|
||||
@@ -54,36 +53,47 @@ public class Emulator {
|
||||
commandLine.addParameter("avd");
|
||||
commandLine.addParameter("--force");
|
||||
commandLine.addParameter("-n");
|
||||
commandLine.addParameter(AVD_NAME);
|
||||
commandLine.addParameter("my_avd");
|
||||
commandLine.addParameter("-p");
|
||||
commandLine.addParameter(pathManager.getAndroidAvdRoot());
|
||||
commandLine.addParameter("-k");
|
||||
if (platform == X86) {
|
||||
commandLine.addParameter("system-images;android-19;default;x86");
|
||||
} else {
|
||||
commandLine.addParameter("system-images;android-19;default;armeabi-v7a");
|
||||
}
|
||||
commandLine.addParameter(pathManager.getAndroidEmulatorRoot());
|
||||
commandLine.addParameter("-t");
|
||||
commandLine.addParameter("1");
|
||||
|
||||
commandLine.addParameter("-b");
|
||||
commandLine.addParameter(getEmulatorAbi());
|
||||
return commandLine;
|
||||
}
|
||||
|
||||
private String getEmulatorAbi(){
|
||||
return platform == X86 ? "x86" : "armeabi-v7a";
|
||||
}
|
||||
|
||||
private GeneralCommandLine getStartCommand() {
|
||||
GeneralCommandLine commandLine = new GeneralCommandLine();
|
||||
commandLine.setExePath(pathManager.getEmulatorFolderInAndroidSdk() + "/" + "emulator");
|
||||
String emulatorCmdName = SystemInfo.isWindows ? "emulator.exe" : "emulator";
|
||||
commandLine.setExePath(pathManager.getToolsFolderInAndroidSdk() + "/" + emulatorCmdName);
|
||||
commandLine.addParameter("-avd");
|
||||
commandLine.addParameter(AVD_NAME);
|
||||
commandLine.addParameter("-no-audio");
|
||||
commandLine.addParameter("my_avd");
|
||||
if (platform != X86) {
|
||||
//problem with qemu options
|
||||
commandLine.addParameter("-no-audio");
|
||||
}
|
||||
commandLine.addParameter("-no-window");
|
||||
return commandLine;
|
||||
}
|
||||
|
||||
private GeneralCommandLine getWaitCommand() {
|
||||
GeneralCommandLine commandLine = createAdbCommand();
|
||||
GeneralCommandLine commandLine = new GeneralCommandLine();
|
||||
String adbCmdName = SystemInfo.isWindows ? "adb.exe" : "adb";
|
||||
commandLine.setExePath(pathManager.getPlatformToolsFolderInAndroidSdk() + "/" + adbCmdName);
|
||||
commandLine.addParameter("wait-for-device");
|
||||
return commandLine;
|
||||
}
|
||||
|
||||
private GeneralCommandLine getStopCommandForAdb() {
|
||||
GeneralCommandLine commandLine = createAdbCommand();
|
||||
GeneralCommandLine commandLine = new GeneralCommandLine();
|
||||
String adbCmdName = SystemInfo.isWindows ? "adb.exe" : "adb";
|
||||
commandLine.setExePath(pathManager.getPlatformToolsFolderInAndroidSdk() + "/" + adbCmdName);
|
||||
commandLine.addParameter("kill-server");
|
||||
return commandLine;
|
||||
}
|
||||
@@ -108,7 +118,8 @@ public class Emulator {
|
||||
|
||||
private GeneralCommandLine createAdbCommand() {
|
||||
GeneralCommandLine commandLine = new GeneralCommandLine();
|
||||
commandLine.setExePath(pathManager.getPlatformToolsFolderInAndroidSdk() + "/" + "adb");
|
||||
String adbCmdName = SystemInfo.isWindows ? "adb.exe" : "adb";
|
||||
commandLine.setExePath(pathManager.getPlatformToolsFolderInAndroidSdk() + "/" + adbCmdName);
|
||||
return commandLine;
|
||||
}
|
||||
|
||||
@@ -175,6 +186,11 @@ public class Emulator {
|
||||
command.addParameter("kill");
|
||||
RunUtils.execute(command);
|
||||
|
||||
if (SystemInfo.isWindows) {
|
||||
//TODO check that command above works on windows and remove this
|
||||
OutputUtils.checkResult(RunUtils.execute(getStopCommand()));
|
||||
}
|
||||
|
||||
finishProcess("emulator64-" + platform);
|
||||
finishProcess("emulator-" + platform);
|
||||
}
|
||||
|
||||
@@ -30,15 +30,10 @@ public class PermissionManager {
|
||||
public static void setPermissions(PathManager pathManager) {
|
||||
if (!SystemInfo.isWindows) {
|
||||
setExecPermissionForSimpleNamedFiles(new File(pathManager.getToolsFolderInAndroidSdk()));
|
||||
setExecPermissionForSimpleNamedFiles(new File(pathManager.getToolsFolderInAndroidSdk() + "/bin64"));
|
||||
setExecPermissionForSimpleNamedFiles(new File(pathManager.getBuildToolsFolderInAndroidSdk() + "/" + SDKDownloader.BUILD_TOOLS));
|
||||
setExecPermissionForSimpleNamedFiles(new File(pathManager.getPlatformToolsFolderInAndroidSdk()));
|
||||
setExecPermissionForSimpleNamedFiles(new File(pathManager.getToolsFolderInAndroidSdk() +"/bin"));
|
||||
setExecPermissionForSimpleNamedFiles(new File(pathManager.getEmulatorFolderInAndroidSdk()));
|
||||
setExecPermissionForSimpleNamedFiles(new File(pathManager.getEmulatorFolderInAndroidSdk() +"/bin"));
|
||||
setExecPermissionForSimpleNamedFiles(new File(pathManager.getEmulatorFolderInAndroidSdk() +"/bin64"));
|
||||
setExecPermissionForSimpleNamedFiles(new File(pathManager.getEmulatorFolderInAndroidSdk() +"/qemu/linux-x86_64"));
|
||||
setExecPermissionForSimpleNamedFiles(new File(pathManager.getAndroidSdkRoot() + "/system-images/android-19/default/armeabi-v7a/"));
|
||||
|
||||
setExecPermissionForSimpleNamedFiles(new File(pathManager.getToolsFolderInAndroidSdk() +"/qemu/linux-x86_64"));
|
||||
RunUtils.execute(generateChmodCmd(pathManager.getGradleBinFolder() + "/gradle"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.android.tests
|
||||
@@ -41,8 +41,6 @@ class CodegenTestsOnAndroidGenerator private constructor(private val pathManager
|
||||
|
||||
private val generatedTestNames = Lists.newArrayList<String>()
|
||||
|
||||
private val pathFilter: String? = System.getProperties().getProperty("kotlin.test.android.path.filter")
|
||||
|
||||
private fun generateOutputFiles() {
|
||||
prepareAndroidModule()
|
||||
generateAndSave()
|
||||
@@ -82,6 +80,7 @@ class CodegenTestsOnAndroidGenerator private constructor(private val pathManager
|
||||
|
||||
FileWriter(File(testSourceFilePath).also { it.parentFile.mkdirs() }).use {
|
||||
val p = Printer(it)
|
||||
p.print(FileUtil.loadFile(File("license/LICENSE.txt")))
|
||||
p.println(
|
||||
"""package $testClassPackage;
|
||||
|
|
||||
@@ -196,10 +195,6 @@ class CodegenTestsOnAndroidGenerator private constructor(private val pathManager
|
||||
} else if (FileUtilRt.getExtension(file.name) != KotlinFileType.EXTENSION) {
|
||||
// skip non kotlin files
|
||||
} else {
|
||||
if (pathFilter != null && !file.path.contains(pathFilter)) {
|
||||
continue
|
||||
}
|
||||
|
||||
if (!InTextDirectivesUtils.isPassingTarget(TargetBackend.JVM, file)) {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -42,7 +42,6 @@ public class SpecialFiles {
|
||||
|
||||
//Test with no reflection at runtime
|
||||
excludedFiles.add("noReflectAtRuntime");
|
||||
excludedFiles.add("noReflect");
|
||||
excludedFiles.add("functionNtoStringNoReflect.kt");
|
||||
excludedFiles.add("getDelegateWithoutReflection.kt");
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ plugins {
|
||||
|
||||
dependencies {
|
||||
compile(project(":core:descriptors"))
|
||||
compile(project(":core:descriptors.jvm"))
|
||||
compile(project(":compiler:util"))
|
||||
compile(project(":compiler:frontend"))
|
||||
compile(project(":compiler:ir.tree"))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.backend.common
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user