Commit Graph

713 Commits

Author SHA1 Message Date
Kirill Rakhman b4413776ab [Raw FIR] Build if - else if - else as two nested whens
This is necessary for inference to work like in K1 because we only
add equality constraints from expected types on top-level `when`, not
on nested ones.

#KT-65882
2024-03-05 17:38:59 +00:00
Dmitrii Gridin 17c128adf2 [FIR] get rid of FirFileAnnotationsContainer
This element has been introduced to simplify resolution logic in LL FIR,
but now this element is redundant and only complicates the code as after
KT-56683 `FirFile` has real phases

^KT-65876 Fixed
2024-03-01 19:19:00 +00:00
Ilya Chernikov 9ea775cbed K2 scripting: fix containing decl for last script expression
Generally the wrapping anonymous initializer can be used as a
"containing declaration" for some elements, but since the initialiser
for the last script expression could be dropped (the expression could
be converted to the result property), this may lead to the surprises,
e.g. as described in KT-65984
This fix marks the last initialiser as local, preventing it from being
referenced as "containing declaration".

#KT-65984
2024-02-23 22:03:44 +00:00
Evgeniy.Zhelenskiy 931f2eab58 [FIR] Remove implicit coercion of ifs and whens to Unit
The rule of thumb is the following:
If the `if` and `when` can be successfully replaced with `while`,
then it is used as a statement, otherwise, it is used as an expression.

#KT-59883
2024-02-21 15:04:03 +00:00
Ivan Kochurkin 9a86b83a0c [FIR] Fix crash on assignment expression with incorrect lvalue with LT mode
^KT-65241 Fixed
2024-02-20 20:09:08 +00:00
Dmitrii Gridin 072d191306 [compiler] replace Enum values() with entries
To fix warnings. Also, use of `Enum.entries` may improve the performance

^KT-48872
2024-02-20 17:56:46 +00:00
Ivan Kochurkin 55159694df [FIR] Use Operator origin for ITERATOR and HAS_NEXT function calls instead of Regular
It automatically fixes KT-62356 since iterators now are operators

^KT-62356 Fixed
2024-02-20 13:30:47 +00:00
Dmitriy Novozhilov acf2296590 [Test] Regenerate tests after two previous commits 2024-02-16 12:48:24 +00:00
Dmitrii Gridin 3962f26583 [FIR] PsiRawFirBuilder: drop obsolete LL FIR parts 2024-02-15 10:50:47 +00:00
Dmitrii Gridin 312feb3dca [FIR] make script destructuring declaration entry initializer lazy expression
This change is required to properly support such declarations in lazy
resolution mode as we usually replaced initializers with lazy
expressions during the body calculation phase

^KT-62840
2024-02-14 16:16:01 +00:00
Dmitrii Gridin c0f4f7fefd [LL FIR] AbstractFirLazyBodiesCalculatorTest: add ability to suppress test
We have inconsistency in lazy body calculator, but only tests are
affected, because in the production we recreated bodies anyway

^KT-62840
2024-02-14 16:16:01 +00:00
Dmitrii Gridin 9ca0bdcb80 [FIR] make script destructuring declaration initializer lazy expression
This change is required to properly support such declarations in lazy
resolution mode as we usually replaced initializers with lazy
expressions during the body calculation phase

^KT-62840
2024-02-14 16:16:01 +00:00
Dmitrii Gridin 6135a98e4e [LL FIR] do not rebuild entire script for lazy calculation of result$$ property
After the previous commit, it is possible to rebuild initializer for
`result$$` property without a full script creation.
Also, this commit fixes anchor symbol for annotations
inside script statements

^KT-65344
2024-02-13 14:58:31 +00:00
Dmitrii Gridin 0e16788b0a [FIR] value parameters from data class copy should be marked as resolved
^KT-65763 Fixed
2024-02-13 11:54:04 +00:00
Egor Kulikov 926c0a9136 [FIR] Fix naming for light tree delegate and expression conversion 2024-02-08 11:54:00 +00:00
Nikolay Lunyak 9688865953 [FIR] Check the presence of delegated constructor call via stubs
After `4b8b7aaa` external classes' secondary
constructors should not have a delegated call, so we
don't create a call if there's no explicit call.
But we need to check if there is.

The failing tests were muted in
`8fcf91d8`, and are now unmuted
back. Those are the ones in the
`testData/rawBuilder/declarations`
folder. These tests fail because they supply
PSI stubs for the secondary constructors,
so arbitrary operations (like reading .text of
the delegated constructor call) are not allowed
for them. This commit modifies secondary
constructor stubs to include the
required information.

^KT-65268 Fixed


Merge-request: KT-MR-13982
Merged-by: Nikolay Lunyak <Nikolay.Lunyak@jetbrains.com>
2024-02-02 08:15:54 +00:00
vladislav.grechko d27adf6677 [FIR] Forbid multiple labels per statement
^KT-53629: Fixed
2024-01-30 19:58:53 +00:00
vladislav.grechko 9aa8fb80e7 Set correct IR origins for inc/dec operations
NB: in order to produce correct IR origins, the source element kinds for
some FIR elements has been changed. As a side effect, mapping PSI to FIR
slightly changed: namely, for `a[b]++`, `a[b]` used to be mapped on
`set` call or callable reference, but now it is mapped on `get` call.

^KT-61891: Fixed
^KT-64387: Fixed
2024-01-30 14:26:10 +00:00
Yan Zhulanow 7298289e4e [FIR] Support type code fragments in 'PsiRawFirBuilder'
For type code fragments, which essentially contain a single type
reference, we add a single statement 'null is Type'.

^KT-61332 Fixed
2024-01-30 11:41:26 +00:00
Roman Efremov d22cc01638 [LightTree] Stop reporting NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER on
...local properties to make it similar to PSI.

See this logic in `org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder.Visitor.toFirProperty`

^KT-62704
2024-01-29 14:09:59 +00:00
Anastasia.Nekrasova 1d817e2ace [K2]: Missing error and miscompilation in destructuring declaration delegation
In convertDestructingDeclaration, property delegates are mistakenly
treated as valid expressions for destructuring, but they should be
ignored.

#KT-65021 Fixed
2024-01-29 07:56:43 +00:00
Simon Ogorodnik 53e89a9722 K2. Minor. Rename FirConstExpression to FirLiteralExpression
FirConstExpression is usually confused with "constant" calculations,
while in fact, it just denotes a simple literal expression
and `1 + 1` isn't represented by a FirConstExpression.

^KT-64314 Fixed
2024-01-25 23:05:15 +00:00
Dmitriy Novozhilov 36958d585f [FIR] Move reference-related utils from :fir:tree to :fir:semantics
This is needed to gain access to providers functionality in those
  utilities, which is important for support of FirDeserializedEnumAccessExpression
  node (see later commits)

^KT-64975
2024-01-25 15:55:19 +00:00
Nikolay Lunyak 8fcf91d8ef [FIR] Mute tests related to KT-65268
They have been muted on TC for some time
already, and Nikolay Krasko asked to
mute them through code.

^KT-65268
^KT-64548
2024-01-24 22:29:51 +00:00
Nikolay Lunyak 9b786d35f8 [FIR] Fix NO_RECEIVER_ALLOWED
If we do create an implicit invoke call, and
then put the receiver into the argument list,
we should mark it.
2024-01-24 12:49:56 +00:00
Nikolay Lunyak 3a36a786d4 [FIR] Properly generate implicit invoke calls for a.(b)()
^KT-64891 Fixed
2024-01-24 12:49:55 +00:00
Nikolay Lunyak fa47950491 [FIR JS] Fix testPeculiarNames for LT
Before this change there's was
`NOT_A_LOOP_LABEL` for "break@`!`"
in `FirLightTreeJsBoxTestGenerated`
2024-01-12 13:42:23 +00:00
Nikolay Lunyak 4b8b7aaa54 [FIR JS] Don't create secondary constructor calls for externals
The change in PSI consistency test is needed, because
we may sometimes observe empty
`KtConstructorDelegationCall`s, and we don't want
to build delegation calls for constructors of `external`
classes with such calls.

^KT-64548 Fixed
2024-01-12 13:42:23 +00:00
Dmitrii Gridin e60a436068 [PSI2FIR] add test on primary constructor without constructor keyword
^KT-64900
2024-01-12 12:19:54 +00:00
Dmitrii Gridin 2c0cf9cad8 [PSI2FIR] split AbstractRawFirBuilderLazyBodiesTestCase on ast and stub versions
This commit explicitly splits raw fir builder in lazy mode on
AST and stubs.
By default, in tests we have an AST tree loaded, so all our
`disallowTreeLoading` is useless in unit tests mode

^KT-64646 Fixed
^KT-64898
^KT-64899
^KT-64900
^KT-64901
2024-01-12 12:19:54 +00:00
Denis.Zharkov f8fd46a5b8 K2: Rename delegateProvider in node for delegate and refine its type 2024-01-09 18:03:05 +00:00
Nikolay Lunyak e4781d8508 [FIR] Fix FP UNRESOLVED_REFERENCE on implicit invoke() after a safe call
`invoke()` function of functional types is always defined
in such a way that its explicit receiver comes as the first
value parameter. Extension-function types contain the very
same `invoke` function, they just additionally have the
`@ExtensionFunctionType` annotation.

In the related test there is such an `invoke` function and
in the presented call its explicit receiver is the anonymous
function `fun Int.() = 1` itself. So the safe-checked `1`

^KT-60056
2024-01-09 10:47:13 +00:00
Dmitrii Gridin b6d373d8e5 Update copyright to 2024 2024-01-05 13:43:17 +00:00
Ivan Kochurkin 69b9bfc3e0 [FIR] Initialize public visibility for class-like declarations at FIR building phase if no modifier is presented
Java resolving subsystem requires calculated visibility for correct disambiguation of supertypes.
But visibility remains `Unknown` for Kotlin class-like declarations during supertypes resolving because `STATUS` resolve phase is performed after `SUPER_TYPES` phase.
To fix the problem, the visibility should be initialized to public at the FIR building phase if no modifier is presented.

^KT-64127 Fixed
2024-01-04 16:17:32 +00:00
Nikolay Lunyak 9c0ac27307 [FIR] Don't miss annotations on properties from primary constructors
^KT-64609 Fixed
2024-01-04 09:45:27 +00:00
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 Chernikov ff4f30ddc1 FIR: replace receiver in anon initializer with containing decl
This way the abstraction represents the intended use better and
doesn't stay on the way of using FirAnonymousInitializer in scripts
2023-12-12 09:58:19 +00:00
Ilya Chernikov a69eaa0ea3 K2 Scripting: fix testdata changed after script statements wrapping 2023-12-12 09:58:19 +00:00
Ilya Chernikov eeb723eb01 K2 Scripting: wrap script statements into blocks
(reuse anonymous initializers as block wrappers) so the top-level script
elements are all declarations now. Rename the property accordingly (
together with the previous commit).
It makes script more similar to the class and thus simplify e.g.
control flow analysis and resolve code.
2023-12-12 09:58:19 +00:00
Ilya Chernikov c9aee5bf09 minor: rename FirScript.statements do declarations...
to simplify the following commit that actually convert the types
and wrap statements into blocks.
2023-12-12 09:58:19 +00:00
Ilya Chernikov a29a7e6307 FIR: refactor destructuring declaration building helpers
rename them since they generate variables with initialization, rather
than arbitrary statements, and this fact is used in scripts
and also add initialization helper, used for scripting support too.
2023-12-12 09:58:19 +00:00
Ilya Chernikov b0f44e8f69 K2 Scripting: mark parameters and DD containers with dedicated origins
needed for properly processing script CFG
2023-12-12 09:58:19 +00:00
Dmitrii Gridin 061734d84b [FIR] do not transform type annotations from function parameter during implicit type phase
We shouldn't treat them as local and transform during the implicit type
phase as they are visible from outside the function

^KT-64164 Fixed
2023-12-08 17:17:36 +00:00
Dmitrii Gridin 3d43dff8b5 [LL/FIR] add tests on function parameter as implicit return type
^KT-64164
2023-12-08 17:17:36 +00:00
Kirill Rakhman daa02813c2 [FIR] Generate FIR diagnostics with explicit types
#KT-64147 Fixed
2023-12-07 18:29:28 +00:00
Dmitrii Gridin 5bd1a97632 [FIR] LT builder: extract convertAnnotationList from convertModifierList
To simplify the logic around `convertModifierList` as a combination of
annotations and modifiers doesn't work well

^KT-63042
2023-12-07 12:26:39 +00:00
Dmitrii Gridin c5cba4c053 [FIR] builder: provide containingDeclarationSymbol
We cannot use only non-local declarations as anchors due to the same
resolution logic between member declarations of local classes, so we
have to support such cases as well

^KT-63042
2023-12-07 12:26:39 +00:00
Dmitrii Gridin 1d5ab8c24f [FIR] builder: more tests for annotations
^KT-63042
2023-12-07 12:26:39 +00:00
Dmitrii Gridin e0c931f69d [LL FIR] rebind returnTarget for delegate accessors during psi2fir
It is safe to rebind returnTarget to the original declaration during
psi2fir as it doesn't affect the resolution. We already have the same
logic for regular functions/property accessors.
This change is crucial in the context of parallel implicit type
resolution because it affects CFG builder in a bad way in the case
of on-air resolution

^KT-56551
2023-12-06 12:59:55 +00:00
Dmitrii Gridin c59ea8bd2a [FIR] use delegate expression as source for FirWrappedDelegateExpressionBuilder
The previous implementation was not stable because `extractDelegateExpression`
has a source depending on extractDelegateExpression, and it led to
inconsistency in lazy and regular mode in the case of labeled expression
```kotlin
val a: String by l@ MyProperty()
```
In lazy mode the source is KtLabeledExpression, but in the regular one
is KtCallExpression

^KT-56551
2023-12-06 12:59:55 +00:00