Commit Graph

1335 Commits

Author SHA1 Message Date
Alexey Tsvetkov a1881a7251 Avoid catching exceptions from workers in GradleKotlinCompilerRunner
Exceptions were catched in `KotlinCompilerRunner.runCompiler`.
When the method from superclass is not used in
`GradleKotlinCompilerRunner`, the superclass does not make much sense
anymore, so I turned it into util object.

Original commit: a41c2d759a
2018-11-14 11:41:43 +03:00
Alexey Tsvetkov 554e2bb7ad Use Workers API for NMPP tasks
This change enables parallel execution of compile tasks in NMPP projects
within a subproject.

    #KT-28155 In Progress

Original commit: 37dfe2b608
2018-11-14 11:41:43 +03:00
Anton Bannykh a783bf14cb JS: report inline suspend functions to IC
* Also inline suspend lambda'a
* Also use correct JsName's in exported suspend inline fun's
* Also use less unused imports

Original commit: 59009430e5
2018-11-07 12:11:01 +03:00
Sergey Rostov 2fedf572f9 JPS: Don't catch BuildDataCorruptedException as internal error.
BuildDataCorruptedException should be thrown up to `IncProjectBuilder`
to be handled by TeamCity.

#KT-27037 Fixed

Original commit: cce125b982
2018-10-27 16:08:38 +03:00
Sergey Rostov 12822fd468 JPS: Fix initialization order for case when all kotlin rebuild.
#KT-27792 Fixed

Original commit: 0b8d94a6b1
2018-10-27 16:08:16 +03:00
Vyacheslav Gerasimov 65de209e6f as34: Apply changes from AS 3.3
Original commit: 4076923a26
2018-10-26 18:25:20 +03:00
Alexey Sedunov 0d75fe186c MPP: Implement directory selection UI supporting non-JVM roots
#KT-27291 Fixed
 #KT-26696 Fixed

Original commit: 839d936918
2018-10-22 19:18:32 +03:00
Nikolay Krasko ab5e07f8e4 191: asm-all has 7.0-beta version in Intellij 191
Pass project to fetch extra parameters for asm-all work

Original commit: 17421ed14d
2018-10-19 19:16:21 +03:00
Sergey Rostov 7801d0e106 IC: move CacheVersionManager from build_common to jps plugin, tests
Original commit: bde6d841c1
2018-10-16 13:33:24 +03:00
Sergey Rostov 84ec60ba3e JPS, CacheAttributesManager: remove unused methods
Original commit: 0d1f7965d4
2018-10-16 12:29:58 +03:00
Sergey Rostov 085dbb537a IC: move CacheVersionManager from build_common to jps plugin
Original commit: d91f6f8c43
2018-10-16 12:29:58 +03:00
Sergey Rostov fe93ea2132 JPS: Fix updating cache format version for rebuilt targets by removing i/o optimization
Problem: previously, format-version.txt file was deleted while cleaning
target output on rebuild. Since directory was deleted, cache
attributesDiff stored in memory was not updated. This causes that on
saveExpectedStateIfNeeded does nothing.

The right way to fix it is move cache version format diff into
AbstractIncrementalCache, and override `clean()` method. But this is
hard to do for lookup storage, since used compilers set (jvm/js) will
known only after context init. This can be done by moving `expected`
attributes out of manager, but this is huge change for small benefit.

So, the optimal way for now is to write version for each build, even if
it is not changed.

#KT-27044 Fixed

Original commit: 5232f080d6
2018-10-16 12:29:58 +03:00
Mikhail Zarechenskiy 1803d2bed4 Use mutable lists before deserialization of project structure
The problem is that we perform xml deserialization using intellij
 mechanism which tries to clear target object if it isn't unmodifiable
 (see CollectionBinding.isMutableCollection). This check fails for
 kotlin.EmptyList (emptyList()) which then cause exception

 #KT-27321 Fixed

Original commit: e74469fdfc
2018-10-01 19:43:03 +03:00
Yan Zhulanow b147abbf53 MPP: Fix JPS tests
Move back the application check as only the class presence check is not sufficient.

Original commit: bbc73ec0e5
2018-09-27 21:31:30 +03:00
Nikolay Krasko f6530a4811 Update dictionary: +infos, -kompiler
Original commit: 07e305e5f4
2018-09-25 15:52:21 +03:00
Yan Zhulanow f46071e0f4 MPP: Rewrite work-around for JPS in a more safe way
Original commit: ff0b051a64
2018-09-24 17:54:24 +03:00
Yan Zhulanow dcf8eac781 Fix compatibility with JPS-standalone (KT-26777)
Original commit: 373ddcf55d
2018-09-17 20:08:27 +03:00
Alexey Sedunov 79e3b31ffc MPP: Allow 'implements' relation only within the same Gradle project
Also allow COMMON modules on the "implementer" side

Original commit: 619e2bc0db
2018-09-14 17:33:59 +03:00
Sergey Rostov 51ec98794b JPS, Tests: Encapsulate libraries root paths used in JPS tests
Original commit: 5fc2267665
2018-09-14 10:34:30 +03:00
Sergey Rostov 0a406e70eb JPS: code cleanup
Original commit: f1b97bb9be
2018-09-14 10:34:30 +03:00
Sergey Rostov 1424bd16d0 JPS: fix daemon RPC serialization
#KT-26809 Fixed

Original commit: 39c76c7b11
2018-09-14 10:34:30 +03:00
Ilya Chernikov cbc602a1f7 Implement support for non-kts scripts in gradle
#KT-26784 fixed

Original commit: a03bfb3561
2018-09-13 20:47:21 +02:00
Sergey Rostov 378cfbf442 JPS, Tests: migrate to master
Original commit: 9ae478e4fc
2018-09-13 20:40:21 +03:00
Sergey Rostov 3a7f2ff5c5 JPS, minor: rename KotlinModuleBuildTarget.updateSourcesList to computeSourcesList
Original commit: 81cf3fbc28
2018-09-13 20:30:35 +03:00
Sergey Rostov e47d796bd7 JPS, native: skip and report native modules as not supported
#KT-26648 Fixed

Original commit: 9e6d6ad9da
2018-09-13 20:30:35 +03:00
Dmitriy Dolovov bc766111a6 Move NativeIdePlatformKind to idea-jps-common
Issue #KT-26714 Fixed

Original commit: 0c94aefb87
2018-09-13 20:30:34 +03:00
Sergey Rostov 4cc52c1dff JPS, -Xcommon-sources: write tests
Original commit: c8351c3da0
2018-09-13 20:30:34 +03:00
Sergey Rostov ac5fbd4080 JPS tests: support _dependencies.txt and _steps.txt for better files sorting
Original commit: 313c27859a
2018-09-13 20:30:34 +03:00
Sergey Rostov 461df40078 JPS tests: support custom mpp multi module tests, rearrange test data files for more consistency, configure js modules with facet (not with stdlib dependency which should be deprecated), temporary mute some complex mpp tests
Original commit: 1b93f07a76
2018-09-13 20:30:33 +03:00
Sergey Rostov c85464d2ae JPS, -Xcommon-sources: don't iterate on all sources, use root info from DirtySourceFilesHolder. Cleanup code.
Also:
- Pass `-Xcommon-sources` argument to JS compiler.
- Calculate all sources list only when needed (after change it is not required to calculate common-sources)
- Remove `chunk: ModuleChunk` parameter from some `KotlinModuleBuildTarget` functions.

Original commit: 8cd3b46f05
2018-09-13 20:30:33 +03:00
Sergey Rostov d015b8b8a1 JPS MPP tests: Don't do anything for common modules, enable js ic, fix test data
Original commit: 359909dcff
2018-09-13 20:30:33 +03:00
Sergey Rostov 2b967e571c JPS tests: restore MPP tests runner, support new MPP model
Original commit: 4975ef7db5
2018-09-13 20:30:32 +03:00
Sergey Rostov 0eef15508f JPS tests: switch to new dependencies.txt parser
Order of modules changed because new parser preserve order, while previously modules are accidentally sorted by hashCode().

Original commit: 808e83a01e
2018-09-13 20:30:32 +03:00
Sergey Rostov d87777ae4d JPS tests: move MockJavaConstantSearch to separate file to got rid of AbstractIncrementalJpsTest.kt.173 bunch file
Original commit: 0b5a6f61bb
2018-09-13 20:30:32 +03:00
Sergey Rostov 22b71e0b8e JPS: support -Xcommon-sources for multiplatform projects
#KT-26489 Fixed

Original commit: b8c982bb72
2018-09-13 20:30:31 +03:00
Ilya Gorbunov 1d4ebded45 Add annotations-13.0 in classpath of those tests where the annotations from stdlib were used
Original commit: 3cc606577c
2018-09-13 02:41:19 +03:00
Ilya Gorbunov 3522140643 Remove projectDist dependency helper usages
Use default configuration dependencies instead of projectDist ones.

Original commit: a18770fbbb
2018-09-12 06:05:05 +03:00
Ilya Gorbunov 9cd0759e8d Update testData for incremental compilation tests
- enumMemberChanged, flagsAndMemberInSameClassChanged: added top level function results in a file class being generated
- companionObjectNameChanged: one more file is marked as dirty after the changes in build 1.2.70-dev-1439

Original commit: afb62ffc0c
2018-09-11 04:19:49 +03:00
Alexey Sedunov 8a5d392e8d MPP: Implement isTestModule flag (as required by JPS)
Original commit: 6206f1e419
2018-09-10 17:27:41 +03:00
Ilya Gorbunov 947a6399eb Replace hashCode usages in tests where it was supposed to fail on nullable receiver
Related to #KT-25039

Original commit: 903976d9af
2018-09-10 06:41:49 +03:00
Mikhail Glukhikh 8cf9c66b1b MPP: make platformByCompilerArguments a bit safer
Original commit: 5e3fd189a4
2018-09-07 20:55:30 +03:00
Dmitriy Dolovov 63b8d88249 MPP: extend IdePlatformKind EP & determine it by CommonCompilerArguments
Original commit: 5633d86cb2
2018-09-07 20:55:29 +03:00
Yan Zhulanow 57c71058b0 Use IdePlatform instead of IdePlatformKind in 'Kotlin Facet' project structure tab
Original commit: 2ec1a89fa1
2018-09-06 14:42:21 +03:00
Yan Zhulanow 438c370fec MPP: Fix compatibility issue with Android Studio 3.3 Canary 7
'TargetPlatformKind' is still used in AS 3.3 so we can't remove it entirely yet.

Original commit: f55a52b86e
2018-09-06 14:42:19 +03:00
Yan Zhulanow c5bce70edb Do not use ApplicationExtensionDescriptor in JPS (KT-26542)
The 'ExtensionPointName' class that ApplicationExtensionDescriptor uses is missing in the JPS classpath.
Now we don't use it unless the IDEA Application is properly initialized.

Original commit: 7398a8149d
2018-09-04 14:54:45 +03:00
Sergey Rostov aa1eb9795d JPS: Refactor cache compatibility checking and build targets loading/dependency analysis.
CacheVersion class refactoring:

Responsibilities of class CacheVersion are splitted into:
	- interface CacheAttributesManager<Attrs>, that should:
	    - load actual cache attribute values from FS
	    - provide expected attribute values (that is required for current build)
	    - checks when the existed cache (with actual attributes) values is suitable for current build (expected atribute values)
	    - write new values to FS for next build
	- CacheAttributesDiff is created by calling CacheAttributesManager.loadDiff extension method. This is just pair of actual and expected cache attributes values, with reference to manager. Result of loadDiff can be saved.

CacheAttributesDiff are designed to be used as facade of attributes operations: CacheAttributesDiff.status are calculated based on actual and expected attribute values. Based on that status system may perform required actions (i.e. rebuild something, clearing caches, etc...).

Methods of CacheAttributesManager other then loadDiff should be used only through CacheAttributesDiff.
Build system should work in this order:
    - get implementation of CacheAttributesManager for particular compiler and cache
    - call loadDiff __once__ and save it result
    - perform actions based on `diff.status`
    - save new cache attribute values by calling `diff.saveExpectedIfNeeded()`

There are 2 implementation of CacheAttributesManager:
    - CacheVersionManager that simple checks cache version number.
    - CompositeLookupsCacheAttributesManager - manager for global lookups cache that may contain lookups for several compilers (jvm, js).

Gradle:

Usages of CacheVersion in gradle are kept as is. For compatibility this methods are added: CacheAttributesManager.saveIfNeeded, CacheAttributesManager.clean. This methods should not be used in new code.

JPS:

All JPS logic that was responsible for cache version checking completely rewritten.

To write proper implementation for version checking, this things also changed:
	- KotlinCompileContext introduced. This context lives between first calling build of kotlin target until build finish. As of now all kotlin targets are loaded on KotlinCompileContext initialization. This is required to collect kotlin target types used in this build (jvm/js). Also all build-wide logic are moved from KotlinBuilder to KotlinCompileContext. Chunk dependency calculation also moved to build start which improves performance for big projects #KT-26113
	- Kotlin bindings to JPS build targets also stored in KotlinCompileContext, and binding is fixed. Previously it is stored in local Context and reacreated for each chunk, now they stored in KotlinCompileContext which is binded by GlobalContextKey with this exception: source roots are calculated for each round, since temporary source roots with groovy stubs are created at build time and visible only in local compile context.
	- KotlinChunk introduced. All chunk-wide logic are moved from KotlinModuleBuildTarget (i.e compiler, language, cache version checking and dependent cache loading)
	- Fix legacy MPP common dependent modules

Cache version checking logic now works as following:
- At first chunk building all targets are loaded and used platforms are collected. Lookups cache manger is created based on this set. Actual cache attributes are loaded from FS. Based on CacheAttributesDiff.status this actions are performed: if cache is invalid all kotlin will be rebuilt. If cache is not required anymore it will be cleaned.
- Before build of each chunk local chunk cache attributes will be checked. If cache is invalid, chunk will be rebuilt. If cache is not required anymore it will be cleaned.

#KT-26113 Fixed
#KT-26072 Fixed

Original commit: 437fc9d749
2018-08-31 11:13:18 +03:00
Yan Zhulanow dc022aef69 MPP: Refactoring, extract IDE platform kinds, allow to add custom platforms
Original commit: d00f5b335a
2018-08-31 05:14:15 +05:00
Dmitry Savvinov fd8083bb4b Always pass languageVersion explicitly to JPS compiler
When 'languageVersion' isn't passed explicitly, compiler will choose
'LATEST_STABLE'.

This may lead to spurious migration of a project to the next major
version after plugin update (e.g. when user had project of major
version X and then installed plugin of version X+1 -- in such case,
meaning of "no language version" suddenly changes).

So, we set it to RELEASED_VERSION, which is exactly the version
that is safe to use as the fallback.

Original commit: b23bf371cf
2018-08-30 16:21:43 +03:00
Alexander Podkhalyuzin f88c703b93 When version is not defined we need to fallback to released
There are few more such places. Better fix would be to avoid
situation, when we need to fallback. So in every project these
settings are defined. It means "Latest stable" setting is not good.

#KT-26364 Fixed

Original commit: 69a0fedd9f
2018-08-30 16:21:40 +03:00
Alexey Sedunov 63372baea9 Configuration: Do not auto-advance "Latest Stable" to pre-release version
#KT-25611 Fixed

Original commit: 5ac5a8d723
2018-08-30 14:57:39 +03:00