Commit Graph

107186 Commits

Author SHA1 Message Date
Ilya Gorbunov d2aae67e03 Replace kotlin-test project dependencies in the project
Use dependency helper function that chooses whether to take them
from the bootstrap repository or from a configuration of kotlin-test

KT-61969
2023-12-13 15:40:25 +00:00
Ilya Gorbunov f07bf70aa7 Switch stdlib tests to KMP kotlin-test KT-61969 2023-12-13 15:40:25 +00:00
Ilya Gorbunov 7a4335b087 [kotlin-test] Enable explicit API mode KT-61969 2023-12-13 15:40:25 +00:00
Ilya Gorbunov 6c46d11d0a [kotlin-test] Post-process capabilities in leaf framework artifacts' .module files KT-61969
Gradle copies capabilities from the variants of the root artifacts
to the variants of leaf artifacts which leads to capability conflict
when both root and leaf artifacts are present in a configuration during
variant-based dependency resolution
2023-12-13 15:40:25 +00:00
Ilya Gorbunov b91e4e24c4 [kotlin-test] Custom publishing layout KT-61969 2023-12-13 15:40:25 +00:00
Ilya Gorbunov ffe54d3fc4 [kotlin-test] Alignment constraints for legacy artifacts KT-61969 2023-12-13 15:40:25 +00:00
Ilya Gorbunov 446cd1eec9 [kotlin-test] kpsm.json patching KT-61969
Adds source set relationships for additional variants
and also slightly stretches common source sets included into jvm variant
2023-12-13 15:40:25 +00:00
Ilya Gorbunov 5c4f0a70e0 [kotlin-test] Unit tests for additional compilations KT-61969 2023-12-13 15:40:25 +00:00
Ilya Gorbunov 2db2b18910 [kotlin-test] Additional framework jars and outgoing configurations KT-61969 2023-12-13 15:40:25 +00:00
Ilya Gorbunov 008a961913 [kotlin-test] Add module-info compilations KT-61969 2023-12-13 15:40:25 +00:00
Ilya Gorbunov 977da5c9b1 Support multiple java9 compilations in a project
Required for KT-61969
2023-12-13 15:40:25 +00:00
Ilya Gorbunov 1d1645fd2d [kotlin-test] Setup KMP project for kotlin-test, targets and source sets KT-61969 2023-12-13 15:40:25 +00:00
Ilya Gorbunov f3240757ed Extract custom publishing dsl to buildsrc-compat
It will be used also in kotlin-test KT-61969
2023-12-13 15:40:25 +00:00
Ilya Gorbunov 38ed3216fd [kotlin-test] Exclude kotlin-test project from GE test splitting
Not supported for kotlin-multiplatform tests

KT-61969
2023-12-13 15:40:25 +00:00
Ilya Gorbunov 6d62119659 Introduce expects in common wasm sources actualized in wasmJs and wasmWasi 2023-12-13 15:40:25 +00:00
Ilya Gorbunov 943c11d239 [Gradle] Support multiple variants of a module resolved when determining visible common source sets
With capabilities in variants it is possible to depend on multiple variants of
an artifact in the same target compilation. These variants can implement
different common source sets which all should be visible from that target.

Instead of intersecting single variant source sets visible from different
targets, first union source sets from all target variant dependencies
and only then intersect these union results from different targets.
2023-12-13 15:40:25 +00:00
Nikita Nazarov 251fdb21c9 [FIR] Generate spread element for unsigned arrays
Previously when unsigned arrays were passed as vararg in a named form the necessary spread element wasn't generated, which resulted in a compilation error.

^KT-63514 fixed
2023-12-13 15:30:27 +00:00
Mikhail Glukhikh dbca7358af K2: add explicit cast to Any for Any function calls on stub types
This commit solves a stub type inconsistency problem.
As a part of KT-59369 fix we decided (see commit 299d2799),
that ConeStubTypeForChainInference has a scope of Any,
so we can safely resolve only to equals/hashCode/toString.
However, later we can replace a stub type with some inferred type,
which can have its own equals/hashCode/toString implementation,
while the call still refers Any member.
In this situation FIR2IR decides that we are calling a fake override,
which is not true, in fact we are calling an overriding method.
This leads to a crash in Native backend.

To solve this situation, we provide an explicit cast of a dispatch
receiver with a stub type (ConeStubTypeForChainInference) to Any,
thus confirming directly we are calling Any method and nothing else.

#KT-63932 Fixed
2023-12-13 14:56:58 +00:00
Mikhail Glukhikh a0deaea8fe Add FIR_DUMP for KT-36220 / KT-63932 situations
In the second lambda, we should either have it of type Any,
or resolve toString() call to Int.toString()
2023-12-13 14:56:58 +00:00
Bogdan Mukvich 3616adbe1b Replace single artifacts-test with test factory
* Add the ability to fix all tests locally in one run

^KTI-1515
2023-12-13 14:50:57 +00:00
Marco Pennekamp c92396069a [LL] Implement LLFirResolveExtensionToolDeclarationProvider.computePackageNames
^KT-62553
2023-12-13 14:40:10 +00:00
Marco Pennekamp 04f4d39877 [LL] StubBasedBuiltInsSymbolProvider: Support synthetic function types in symbol names provider
- The symbol provider may additionally provide function types, so we
  have to compose its symbol names provider with the synthetic function
  type symbol names provider.
2023-12-13 14:40:10 +00:00
Marco Pennekamp ab805321e4 [FIR] FirNullSymbolNamesProvider: Fix mayHaveSyntheticFunctionType
- The null symbol names provider knows nothing about the names provided
  by its symbol provider, so it also has to assume that the symbol
  provider can provide a synthetic function type.
- This inconsistency has not caused an issue so far because
  `mayHaveTopLevelClassifier` is also overridden, and
  `mayHaveSyntheticFunctionType` is not used outside that context.
2023-12-13 14:40:10 +00:00
Marco Pennekamp 07c5f6fd22 [FIR] FirSymbolNamesProvider: Add missing get to mayHaveSyntheticFunctionTypes 2023-12-13 14:40:10 +00:00
Marco Pennekamp 6474ff88fa [FIR] FirSymbolNamesProvider: Implement classifier package name sets
- Previously, only callable package name sets were implemented, because
  the compiler cannot economically compute classifier package sets for
  libraries. This has not changed. However, the K2 IntelliJ plugin and
  standalone Analysis API can very easily compute classifier package
  sets. Hence, this commit adds support to `FirSymbolNamesProvider` for
  such sets.
- Similar to callable package sets, classifier package sets (1) improve
  the memory usage of symbol names providers and (2) improve the
  performance of `mayHaveTopLevelClassifier`, which is a significant
  bottleneck in the IDE.
- In many cases, the package sets for callables and classifiers are the
  same. For example, the IDE Kotlin declaration provider computes the
  set of packages that contain any classifier and/or callable, for the
  following reasons: (1) indexing package names without filtering for
  declarations is much faster, (2) computing separate sets is not free
  both in time and memory, and (3) the performance impact of having a
  more narrow set for callables is expected to be negligible. For this
  reason, `FirSymbolNamesProvider.getPackageNames` exists to provide a
  shared package set.
- The `hasSpecific*PackageNamesComputation` properties are required to
  avoid caching the same package set in cached symbol names providers
  twice. Because these properties are constant, they can be checked very
  quickly, and no time has to be wasted trying a specific package set
  computation to find out whether it's supported.

### IDE Performance Results

Package set construction performance improved in the IDE in multiple
benchmarks. This improves the performance of symbol providers overall,
which has a direct impact on completion, code analysis, and Find Usages.

In a local manual run of the `intellij_commit/setUp` Find Usages
performance test, the total time spent in `getClassLikeSymbolByClassId`
improved from ~18.7s to ~11.2s. Due to parallel resolve, this does not
translate to a wall clock improvement of 7 seconds, but rather of a few
seconds.

Some performance tests improved markedly in warmup, with for example
`toolbox_enterprise/genUuid` Find Usages having an improvement in
`StubBasedFirDeserializedSymbolProvider.getClassLikeSymbolByClassId`
from 2.4s to 0.2s. This has a direct impact on the first-run performance
of the tested Find Usages command.

So far, classifier package sets in the IDE are only implemented for
libraries, and library sessions are cached after the first warmup.
Because the biggest impact of classifier package sets is avoiding
computation of "class names in package" sets, the impact of this
optimization is not accurately reflected in the timings reported by our
performance tests. `toolbox_enterprise/genUuid` above is a good example,
as the warmup timings are great, but after warmup,
`StubBasedFirDeserializedSymbolProvider.getClassLikeSymbolByClassId`
improved only from 150ms to 70ms.

`toolbox_enterprise/genUuid` is another example, as we can confidently
say that the first-run Find Usages performance has improved (which makes
a difference for the user), but it is unclear by how much, as warmup is
not measured in performance tests.

The same optimization for source sessions will be easier to measure, as
source sessions are invalidated after each performance test run. This
commit lays the groundwork for that as well, because source session
support only requires the requisite package set computation in the
IDE declaration provider to be implemented.

^KT-62553 fixed
2023-12-13 14:40:10 +00:00
Kirill Rakhman 6d1ca3d379 [FIR] Fix CCE in deserialization of suspend function type with star projection continuation
#KT-64148 Fixed
2023-12-13 14:36:01 +00:00
Sergey Bogolepov 01976990e8 [Swift Export] Use ExportedBridge instead of ExportForCppRuntime
ExportedBridge annotation actually does what we need in Swift Export.
Unlike ExportForCppRuntime, it prevents symbol from DCE.
2023-12-13 14:09:58 +00:00
Ilya Chernikov d83027720d minor: K2 IC tests: rename incremental FirIC tests for consistency 2023-12-13 13:40:44 +00:00
Ilya Chernikov a295a34d77 K2 IC tests: reenable incremental tests with PSI
#KT-64228 fixed
2023-12-13 13:40:44 +00:00
Ilya Chernikov ed820d6b57 K2 IC: fix lookup recording for a "red" companion object
#KT-63665 fixed
2023-12-13 13:40:44 +00:00
Ilya Chernikov 6dfcc927f4 IC tests: make exceptions from compiler more visible in tests
otherwise they are easily swallowed by the reporting logic.
This commit was needed to ensure that the problem described in
KT-63665 is reproducible in IC test
But some JS IC logic relies on handling compiler exceptions as a signal
for scope expansions, and the newly introduced exception logging
broke a few tests. To mitigate it, the directive was introduced
to disable exception logging for particular test.
2023-12-13 13:40:44 +00:00
Pavel Punegov 7398f9e4e0 [K/N][perf] Return doLast
This fixes failures in performance builds caused by the KT-MR-13291 "Update Gradle to 8.4"
doLast { } block here is necessary as soon as it should be run during the task execution, while without it is a configuration time. Performance builds invoke Gradle several times with different tasks and parameters. The change in the mentioned MR made one of the invocations remove the nativeReports.json file produced earlier.

Merge-request: KT-MR-13496
Merged-by: Pavel Punegov <Pavel.Punegov@jetbrains.com>
2023-12-13 13:35:53 +00:00
Svyatoslav Kuzmich 1a644c48b0 Regenerate compiler tests 2023-12-13 13:30:50 +00:00
Svyatoslav Kuzmich 76e132e758 [Wasm] Fix overloading virtual methods by vararg and array element type
Context:
- Kotlin allows functions overloaded with different array element types.
- Varargs are lowered to Array parameters.
- Before this commit, K/Wasm erased an array element type
  from the signature, similar to type argument erasure in other cases.

Fix:
Stop erasing type arguments in arrays when computing v-table signatures.

^KT-58852 Fixed
2023-12-13 13:30:50 +00:00
Svyatoslav Kuzmich b5def88ff4 [Wasm] NFC refactor: eraseGenerics -> toWasmSignatureType
Use a more concrete name, make it private,
and split out:

 IrSimpleType.toWasmSignatureSimpleType

This does not change the behavior,
but helps to set the stage for the following bugfix
 (KT-58852)
2023-12-13 13:30:50 +00:00
Artem Olkov 5fcdd4a9f6 KT-63748: Pack Swift Export Frontend into compiler plugin
Co-authored-by: Sergej Jaskiewicz <jaskiewiczs@icloud.com>


Merge-request: KT-MR-13351
Merged-by: Artem Olkov <artem.olkov@jetbrains.com>
2023-12-13 10:40:38 +00:00
Marco Pennekamp ae5a053025 [LL] Disable modifiable PSI tests due to application sharing issues
^KT-63650
2023-12-13 10:29:11 +00:00
Sergej Jaskiewicz f844a86057 [utils] Introduce the bind function and use it throughout 2023-12-13 10:04:45 +00:00
Dmitriy Novozhilov 93563d7c80 [FIR] Report PROPERTY_AS_OPERATOR for all operator conventions
^KT-62347 Fixed
^KT-59715 Fixed
2023-12-13 09:27:14 +00:00
Dmitriy Novozhilov 92c75fb7ab [Test] Reproduce KT-59715 2023-12-13 09:27:14 +00:00
Yahor Berdnikau 63e7749cfe [Gradle] Update AGP versions 2023-12-13 09:08:05 +00:00
Yahor Berdnikau da7ceb162b [Gradle] Cleanup max Gradle versions in the tests
As we are running now by default with Gradle 8.2 release our IT tests -
specifying this version explicitly does not make sense.
2023-12-13 09:08:05 +00:00
Tomas Husak 91465d7110 [FIR] KT-59421 add checker context receiver property backing field 2023-12-13 07:12:11 +00:00
Vyacheslav Gerasimov 6c3b740a05 Build: Remove -xmx for main Gradle daemon
In some cases a lot of memory consumed during IDEA import. To avoid OOMs
when working with IDEA we should limit heap size only for CI builds.
2023-12-12 21:26:35 +00:00
Ilya Goncharov 1d692ce6d1 [Gradle, JS] Fix devServer usage in KotlinWebpackConfig
^KT-64260 fixed
2023-12-12 19:24:13 +00:00
Yair Morgenstern 88e35fafd9 [Wasm] Use final Wasm structs for types without subtypes
A version of PR https://github.com/JetBrains/kotlin/pull/5175
 contributed by Yair Morgenstern, modified by Slava Kuzmich

^KT-60505 Fixed
2023-12-12 19:05:57 +00:00
Svyatoslav Kuzmich 2b4d1b0fb1 [Wasm] Bump SpiderMonkey jsshell version
Experimental flags --wasm-function-references --wasm-gc are removed.
GC is enabled by default with final subtype support.
2023-12-12 19:05:57 +00:00
Leonid Startsev af23706a9a Do not allow writing metadata versions that are too high
because a format may be incorrect for future compilers

#KT-64230 Fixed
2023-12-12 18:16:56 +00:00
Alexander.Likhachev 0d4dfbcf0c [IC] Revert the paths hashing introduced in 5562c95155
`File.hashCode()` behavior is OS-dependent. This can lead to the loss of mapping between a path and its related data in PersistentHashMap — for instance, when a map generated on Microsoft Windows is used on macOS. Notably, this can occur even though both systems use case-insensitive filesystems by default. This commit returns the hashing based on OS-independent path strings
^KT-64016 Verification Pending
2023-12-12 17:34:11 +00:00
Yan Zhulanow 0944e8fc36 [Analysis API] Keep the collected 'FirTowerDataContext' mutable
'ContextCollector' is used for computing context of 'FirCodeFragment's.
Code fragments themselves might contain additional smart cast operations
that modify the context receiver stack.

^KT-63056 Fixed
2023-12-12 17:31:52 +00:00