Commit Graph

105920 Commits

Author SHA1 Message Date
Dmitriy Novozhilov bced604b57 [FIR2IR] Remove incorrect usages of Fir2IrDeclarationStorage.getOrCreateIrFunction
`getOrCreateXxx` methods have not very safe semantics: they sometimes
  create an IR declaration if it was missing in caches before. For all
  source declarations, this is not very good semantic, because we have
  strict rules in which order source declarations should be created,
  and usage of `getOrCreateXxx` may break this order.
So it's important to be able to track all invocations of such methods
  to ensure that it's appropriate in each case.
To achieve that, a new `@GetOrCreateSensitiveAPI ` opt-in is introduced
2023-11-07 13:00:41 +00:00
Dmitriy Novozhilov af6b71ca2d [FIR2IR] Slightly cleanup some fir2ir classes 2023-11-07 13:00:41 +00:00
Dmitriy Novozhilov 2ba7194467 [FIR2IR] Make most field-related functions of Fir2IrDeclarationStorage return symbols
This is a preparation to introducing unbound symbols in fir2ir conversion
2023-11-07 13:00:41 +00:00
Dmitriy Novozhilov 429010d70e [FIR2IR] Convert return expressions using symbols instead of IrFunction 2023-11-07 13:00:41 +00:00
Dmitriy Novozhilov a38d60b275 [FIR2IR] Make most functions of Fir2IrDeclarationStorage return symbols instead of IR elements
This is a preparation to introducing unbound symbols in fir2ir conversion
2023-11-07 13:00:41 +00:00
Dmitriy Novozhilov d08567c2c7 [FIR2IR] Approximate extension receiver type after type argument substitution
Frontend may leak captured types into type arguments, so they should be
  approximated before using them in fir2ir cast inserter to determine
 a specific type from smartcast

^KT-62863 Fixed
2023-11-07 12:37:19 +00:00
Alexander Udalov d2ebaf4e6c Minor, add regression test for K2 delegation issue
#KT-62120
2023-11-07 12:30:45 +00:00
Sebastian Sellmair 5506384cc9 [Gradle] Remove unused KotlinTargetConfigurator.configurePlatformSpecificModel
KT-61634
2023-11-07 12:29:31 +00:00
Sebastian Sellmair b347ff2c53 [Gradle] Migrate KotlinNativeTargetConfigurator.warnAboutIncorrectDependencies to KotlinGradleProjectChecker
KT-61634
2023-11-07 12:29:31 +00:00
Sebastian Sellmair faecd7f772 [Gradle] Implement KotlinNativeTargetConfigurator.registerEmbedAndSignAppleFrameworkTasks as EP as side effects
KT-61634
2023-11-07 12:29:31 +00:00
Sebastian Sellmair 9b47c98ce9 [Gradle] Implement KotlinNativeTargetConfigurator.createCInteropTasks as EP based side effects
KT-61634
2023-11-07 12:29:31 +00:00
Sebastian Sellmair 8651d67aeb [Gradle] Implement ConfigureFrameworkExportSideEffect
KT-61634
2023-11-07 12:29:31 +00:00
Johan Bay 3aeca1956e [K/N] Consolidate toolchain paths between platforms
The compiler had some code that looked for the same tools and files
in toolchains at different relative paths depending on the platform.

This commit improves that code by including `usr/` into the path to
the toolchain on macOS, which allows to unify the relative paths
inside the toolchains.

Co-authored-by: Johan Bay <jobay@google.com>
2023-11-07 12:10:14 +00:00
Pavel Punegov 0d8960088e [K/N] XCTest launcher for CompilerOutput's TEST_BUNDLE
This change adds a Native Obj-C launcher that implements XCTestCase
and overrides defaultTestSuite property to provide XCTest with generated
test suites and test cases.

The defaultTestSuite method is essentially a starting point with runtime
initialization. It requires a `Konan_create_testSuite()` method to be
implemented in a Kotlin library that returns a list of XCTestCases.

This launcher should be compiled as a TEST_BUNDLE to be used then with
XCTest.

This commit is a part of ^KT-58928


Co-authored-by: Alexander Shabalin <Alexander.Shabalin@jetbrains.com>

Merge-request: KT-MR-12841
Merged-by: Pavel Punegov <Pavel.Punegov@jetbrains.com>
2023-11-07 11:56:08 +00:00
Nikita Bobko d6acba1c33 Add regression tests for final expect classes overrides that change modality
KT-61840
Specifically see the comment:
https://youtrack.jetbrains.com/issue/KT-61840/K2-support-changes-in-overrides-of-fake-overrides-of-expect-declarations#focus=Comments-27-8077580.0-0

Review: https://jetbrains.team/p/kt/reviews/12147/timeline
2023-11-07 10:24:35 +00:00
Egor Kulikov 408e2f109f [FIR] Correctly process slash in class name in ClassId
^KTIJ-27358 fixed


Merge-request: KT-MR-12673
Merged-by: Egor Kulikov <Egor.Kulikov@jetbrains.com>
2023-11-07 09:47:05 +00:00
Dmitrii Gridin 1173cc46e2 [Analysis API] add constructorSymbol to API of KtAnnotationApplicationWithArgumentsInfo
This is required for some checks on call site, and it seems that
this symbol can cover all cases.
One of the examples why this API was introduced is a request to
distinguish which vararg parameter is missed in arguments
of an annotation call from symbol light classes

^KT-62560
2023-11-07 09:06:00 +00:00
Ilya Goncharov 3a6cdc83cf [Gradle, JS] Use KotlinJsIrCompilation with deprecated KotlinJsCompilation
^KT-41382 fixed
2023-11-07 08:48:50 +00:00
Alexander Shabalin 4c36538646 [K/N] Add signposts to safepoints ^KT-62689
Disabled by default.

Merge-request: KT-MR-12679
Merged-by: Alexander Shabalin <Alexander.Shabalin@jetbrains.com>
2023-11-06 23:10:08 +00:00
Brian Norman b309786353 [FIR] RHS assignment during equality comparison should invalidate DFA
If the right-hand side of an equality comparison contains an assignment
to the variable used in the left-hand side, then implications about the
equality comparison within data-flow analysis cannot be applied, as the
value of the variable will be different after the comparison.

^KT-55096 Fixed
2023-11-06 22:12:22 +00:00
Ilya Chernikov 879f0eff71 Fir: Print origin of the generated diagnostics
similar to other generated entities by now.
2023-11-06 21:21:16 +00:00
Ilya Chernikov 1ad4f19181 Fix default positioning strategy handling
that causes flaky tests because the default positioning strategy
was dependent on the order of the reported messages.
The code led to it was introduced in an attempt to extract common
PSI-independent strategy because PSI is leaking into the abstract
diagnostic infrastructure. The approach is definitely problematic,
but to fix it now, the leaking dependency to the psi-based module
is introduced. This should be fixed in the future by introducing
better abstractions.
Fixes flaky tests touched in the commit.
#KT-63002 fixed
2023-11-06 21:21:16 +00:00
Dmitriy Dolovov 0de04f934e [Commonizer] Switch from trove4j to fastutil
^KT-63159
2023-11-06 19:56:17 +00:00
Dmitriy Dolovov 7658b818ac [Commonizer] Add a performance test (muted by default)
This test can be used to make small performance measurements of
the core commonizer on occasional basis. This test is not intended
for regular execution, e.g. at the CI server.

^KT-63159
2023-11-06 19:56:17 +00:00
Evgenii Mazhukin 20af98c776 [Tests] Re-enable K1 IC tests for expect-actual
^KT-60831 fixed
^KT-60831 next step KT-63183


Merge-request: KT-MR-12855
Merged-by: Evgenii Mazhukin <evgenii.mazhukin@jetbrains.com>
2023-11-06 19:46:43 +00:00
Nikita Bobko 4050285fef Drop unnecessary suppress from stdlib
^KT-62785 Fixed
Review: https://jetbrains.team/p/kt/reviews/12858/files
2023-11-06 19:00:35 +00:00
Dmitrii Krasnov aad19ab844 [Gradle, Native] Override equals and hashCode in KonanTarget
"data objects" is only available since language version 1.9. But we should not use LV 1.9, because it is used in the Gradle build classpath and would be incompatible with Gradle Kotlin runtime.
Then only manually override equals/toString/ works here.

#KT-61657 Fixed


Merge-request: KT-MR-12759
Merged-by: Dmitrii Krasnov <Dmitrii.Krasnov@jetbrains.com>
2023-11-06 18:55:40 +00:00
Dmitrii Krasnov f8507d5220 [Gradle, Native] Switched downloading k/n to from Maven Central in KGP
#KT-62907 Fixed
2023-11-06 16:50:43 +00:00
Dmitriy Novozhilov c5d1c4e816 [Test] Add test for KT-62137 2023-11-06 15:24:39 +00:00
Marco Pennekamp fd1c885c5b [FIR] Allow "missing from dependencies" severity names in opt-in usage checker
- KT-62397 occurs in the IDE because enum entry symbols from libraries
  are deserialized from stubs, which currently produce
  `FirFromMissingDependenciesNamedReference`.
- During opt-in usage checks, the compiler only considered resolved
  references when getting the severity name, but we can just take the
  name from the `FirFromMissingDependenciesNamedReference`.

^KT-62397 fixed
2023-11-06 15:20:49 +00:00
Yahor Berdnikau 570d9dbb19 [Gradle] Fix early buildDir capturing in kotlinTestRegistry
User may change build directory location in the script, and our
plugin should handle such situations correctly.

^KT-61295 Fixed
2023-11-06 14:42:52 +00:00
Nikita Bobko 5c8d55fba7 Update docs/fir/k2_kmp.md wrt KT-62590 2023-11-06 14:41:28 +00:00
Nikita Bobko 8f9b6a08fc [FIR] Cleanup ACTUAL_MISSING reporting
The cleanup became possible after KT-62590
Review: https://jetbrains.team/p/kt/reviews/12750/timeline

`matchingCompatibilityToMembersMap.allMismatches()` is equivalent to
`ExpectActualMatchingCompatibility.MatchedSuccessfully !in
matchingCompatibilityToMembersMap`
2023-11-06 14:41:28 +00:00
Nikita Bobko 5be8778b44 [FIR] Cleanup ClassScopes reporting
The cleanup became possible after KT-62590
Review: https://jetbrains.team/p/kt/reviews/12750/timeline

incompatibility.allMismatches() always returns true for
mismatchedMembers => hasSingleActualSuspect always returns false =>
filterNot doesn't have any effect

incompatibility.allMismatches() always returns false for
incompatibleMembers => incompatibility.allMismatches() is redundant
2023-11-06 14:41:27 +00:00
Nikita Bobko 0fc7ea6004 [IR] Workaround expectActualOverloads test failure
Under the hood this test was broken before my KT-62590 changes. KT-62926
demonstrates it
2023-11-06 14:41:27 +00:00
Nikita Bobko b7198c35b9 Update incompatibleClassScopesWithImplTypeAlias test
Caused by: KT-62590

Now we have the pipeline:
1. Match declarations
2. Run checkers on matched declarations

Since the constructors with empty parameters match we only report
"checking incompatibility" about their incompatible visibility

Before the pipeline introduction, we were running matching and checking
checks together
2023-11-06 14:41:26 +00:00
Nikita Bobko facdbfdc11 [FIR, IR] Cleanup: inline functions that have only one usage in matcher/checker
Review: https://jetbrains.team/p/kt/reviews/12750/timeline
2023-11-06 14:41:26 +00:00
Nikita Bobko 92850dcc84 [FIR, IR] Cleanup: convert vector of actuals to scalar of a single actual in AbstractExpectActualChecker
Review: https://jetbrains.team/p/kt/reviews/12750/timeline

`AbstractExpectActualChecker` works on pairs obtain from
`AbstractExpectActualMatcher` and the last one always returns single
actual for single expect. That's why handling of multiple actuals
doesn't make sense
2023-11-06 14:41:25 +00:00
Nikita Bobko fd39795f41 [FIR, IR] Cleanup: deduplicate common code in AbstractExpectActualMatcher & AbstractExpectActualChecker
Review: https://jetbrains.team/p/kt/reviews/12750/timeline
2023-11-06 14:41:25 +00:00
Nikita Bobko b331726c6e [FIR, IR] Cleanup: drop redundant enumConstructorsAreAlwaysCompatible
It's constantly true in FIR and IR (it was false in K1)

Also see: 8b9079d026

Review: https://jetbrains.team/p/kt/reviews/12750/timeline
2023-11-06 14:41:24 +00:00
Nikita Bobko 75a0442b61 [FIR] 2/2 Cleanup: drop no longer necessary FirActualCallableDeclarationChecker
It became possible to drop it after KT-62590. Now, on a frontend, the
return type check is part of a common AbstractExpectActualChecker logic

Change in nestedAnnotationClassViaActualTypealias.fir.kt aligns the
behaviour with K1. KT-61964

Review: https://jetbrains.team/p/kt/reviews/12750/timeline
2023-11-06 14:41:23 +00:00
Nikita Bobko a9583e4f9a [FIR, IR] 1/2 Align FirExpectActualMatchingContextImpl.areCompatibleExpectActualTypes with ExpectActualUtilsKt.areCompatibleExpectActualTypes
Those two functions are copy-paste of each other. They diverged since
the time they were copy-pasted. This commit makes
FirExpectActualMatchingContextImpl.areCompatibleExpectActualTypes
up-to-date.

I didn't update ExpectActualUtilsKt.areCompatibleExpectActualTypes
because I will drop it in the next commit.

Change in `dynamicTypesEqualToAnything` doesn't change any logic (yet.
This change in logic will take effect in the next commit), because:
1. `dynamicTypesEqualToAnything` is only changed in
AbstractExpectActualChecker.getCallablesCheckingIncompatibility. But
AbstractExpectActualChecker.getCallablesCheckingIncompatibility doesn't
check return types on frontend (it only check return types on backend).
2. `dynamicTypesEqualToAnything` is ignored on IR backend

I have no idea what is the difference between `createTypeCheckerState()`
and `actualSession.typeContext`, but it aligns these copy-pasted
versions and makes the tests behave like in K1 (at least
'typeUsageWithUnresolvedReference' and 'kt57320' are affected)

This commit is mainly a preparation for the next commit.

Review: https://jetbrains.team/p/kt/reviews/12750/timeline
2023-11-06 14:41:23 +00:00
Nikita Bobko ddc1ae9ac6 [IR] Split INCOMPATIBLE_MATCHING to EXPECT_ACTUAL_MISMATCH & EXPECT_ACTUAL_INCOMPATIBILITY
KT-62590

Review: https://jetbrains.team/p/kt/reviews/12750/timeline
2023-11-06 14:41:22 +00:00
Nikita Bobko dab69e38c4 [FIR, IR] AbstractExpectActualChecker: drop redundant code
- getCallablesStrongIncompatibility is unused (because it moved to the
  "matcher" KT-62590)
- `checkClassScopesCompatibility` parameter is always `true` or unused

Review: https://jetbrains.team/p/kt/reviews/12750/timeline
2023-11-06 14:41:22 +00:00
Nikita Bobko 60e5a9c298 [IR] Update testData INCOMPATIBLE_MATCHING
^KT-62916 Fixed
(well, actually it got fixed in one of my previous commits, but it's
hard to track)

Review: https://jetbrains.team/p/kt/reviews/12750/timeline
2023-11-06 14:41:21 +00:00
Nikita Bobko 24e74487d6 [FIR] Fix DEFAULT_ARGUMENTS_IN_EXPECT_ACTUALIZED_BY_FAKE_OVERRIDE tests
This commit fixes the following tests:
    FirOldFrontendMPPDiagnosticsWithPsiTestGenerated
        DefaultArguments
            MethodDefaultArgsViaActualFakeOverride
                testIntersectionOverride
                testSimple
                testDelegation
                testSubstitutionOverride
                testSimpleIncompatible

Review: https://jetbrains.team/p/kt/reviews/12750/timeline
2023-11-06 14:41:21 +00:00
Nikita Bobko 76ffbcc67c [IR] Update testData ACTUAL_ANNOTATIONS_NOT_MATCH_EXPECT
After previous commits, IrExpectActualAnnotationMatchingChecker reports
errors even if the declaration is incompatible but matched

We had a duplicated diagnostic in other cases before my commits, anyway.
it will be fixed in
https://youtrack.jetbrains.com/issue/KT-62559/KMP-K2-prevent-reporting-ACTUALANNOTATIONSNOTMATCHEXPECT-twice-in-CLI#focus=Comments-27-8293687.0-0

Review: https://jetbrains.team/p/kt/reviews/12750/timeline
2023-11-06 14:41:20 +00:00
Nikita Bobko 8722e142f6 [IR] 2/2 Propogate expect-actual checker incompatibilities to IR backend
Review: https://jetbrains.team/p/kt/reviews/12750/timeline
2023-11-06 14:41:20 +00:00
Nikita Bobko eb0c8c00c3 [FIR, IR] 1/2 Minimize usages of ExpectActualCompatibility, MismatchOrIncompatible and MatchedOrCompatible
- Migrate ExpectActualCompatibility -> ExpectActualCheckingCompatibility
  where the "checker" is expect
- Migrate ExpectActualCompatibility -> ExpectActualMatchingCompatibility
  where the "matching" is expect

KT-62590 in progress. A lot of tests start to fail now. I will fix them
in next commits

Review: https://jetbrains.team/p/kt/reviews/12750/timeline
2023-11-06 14:41:19 +00:00
Nikita Bobko 664b9cc3ba [FIR, IR] ClassScopes incompatibility: split unfulfilled incompatibilities into "mismatchedMembers" and "incompatibleMembers"
KT-62590 is in progress

Unfortunatelly, ACTUAL_ANNOTATIONS_NOT_MATCH_EXPECT is now reported
twice in 'classScopeViaTypealiasIncompatible' test.

We had a duplicated diagnostic in other cases before my commits, anyway.
it will be fixed in
https://youtrack.jetbrains.com/issue/KT-62559/KMP-K2-prevent-reporting-ACTUALANNOTATIONSNOTMATCHEXPECT-twice-in-CLI#focus=Comments-27-8293687.0-0

Review: https://jetbrains.team/p/kt/reviews/12750/timeline
2023-11-06 14:41:19 +00:00