Commit Graph

3055 Commits

Author SHA1 Message Date
Mikhail Glukhikh ad0d0ca47f Drop redundant Suppress("RemoveExplicitTypeArguments") 2022-01-26 12:19:55 +00:00
Dmitriy Novozhilov d1fb8338ef [FIR] Infer type of elvis from lhs if rhs is Nothing
^KT-50875 Fixed
2022-01-23 08:22:07 +03:00
Ivan Kochurkin defb0cf611 [FIR] Fix ambiguity between Sequence.forEach and Iterable.forEach (with @HidesMembers) ^KT-50776 Fixed 2022-01-21 19:34:10 +03:00
Mikhail Glukhikh 756ff6cf43 Minor performance improvements in tryToCompleteWithBuilderInference 2022-01-20 23:46:40 +03:00
Mikhail Glukhikh 98cdc95cd0 FIR DFA: exit delegate expression only after accessor completion
This commit fixes DFA problem (see test) when we accidentally try
to merge incoming flows from member property (val ... by cached ...) and
the following function. While completing lambda of buildList { ... }
inside by cached we accidentally assume that delegate is already left
and add the lambda into exitsFromCompletedPostponedAnonymousFunction.
This commit fixes the problem by exiting delegate later, after completion.
2022-01-20 23:46:39 +03:00
Mikhail Glukhikh c324bbfc37 FIR: fold two last getOrderedAllTypeVariables calls into one (stage 7,8)
This commit saves us some performance and fixes test for KT-35684.
FIR-based constraint completer at this moment can't extract type
variables from already completed calls.
Folding allows us to extract ordered type variables before completion.
2022-01-20 23:46:38 +03:00
Mikhail Glukhikh 7f62d1bc5a FIR: move down inference session handling in PostponedArgumentsAnalyzer
After this commit the handling of inference session in similar for
FIR and FE 1.0
2022-01-20 23:46:37 +03:00
Mikhail Glukhikh bd6fef7841 FIR: don't add partially resolved call in builder inference mode 2022-01-20 23:46:37 +03:00
Mikhail Glukhikh e8be9d4861 FIR: support don't use builder inference if possible
In this commit we upgrade FIR builder inference logic from
the compiler version to 1.7. FIR-based compiler now works with
"don't use builder inference" flag always ON and supports switching
the flag "use builder inference only if needed". To do it,
ContraintSystemCompleter (FIR) and KotlinConstraintSystemCompleter (FE 1.0)
are made similar with extracting some common parts into
ConstraintSystemCompletionContext.

Test status: one BB test fails after this commit (KT-49285).
Also we have a crush in DFA logic in FIR bootstrap test and somehow
questionable behavior in FIR diagnostic test. However,
two BB tests were fixed, the 3rd case from KT-49925 were also fixed.

#KT-49925 Fixed
2022-01-20 23:46:36 +03:00
Ilya Kirillov 0eda3d6cd5 LL API: fix unresolved class supertype from importing scope 2022-01-20 23:26:29 +03:00
Dmitriy Novozhilov cd578e9d13 [FIR] Fix inference in presence of Unit expected type 2022-01-20 11:25:47 +03:00
Dmitriy Novozhilov 8624d97f29 [FIR] Extract adding of constraints from expected type to separate method 2022-01-20 11:25:47 +03:00
Dmitriy Novozhilov def799cc4e [FIR] Fix inference of postponed lambdas if containg call has explicit type arguments 2022-01-20 11:25:46 +03:00
Dmitriy Novozhilov 7d8a8d543f [FIR] Fix processing calls on unstable smartcasts with check not null call 2022-01-20 11:25:45 +03:00
Dmitriy Novozhilov c80cfb0fdb [FIR] Replace single supertype scope with list of scopes of supertypes in use site scopes
This big refactoring is needed to cleanup building of overrides
  mappings and prevent creating redundant intersection overrides in
  cases when there is no need in them:

```kotlin
interface A {
    fun foo()
}

interface B {
    fun foo()
}

interface C : A, B {
    override fun foo()
}
```

Before this refactoring there was next override tree:
C.foo
  intersection override (A.foo, B.foo)
    A.foo
    B.foo

Also this commit fixes special mapping of overrides in jvm scopes
  for declarations which have kotlin builtins in supertypes with
  special java mapping rules (collections, for example)
2022-01-19 15:24:43 +03:00
Dmitriy Novozhilov 8daf7774ba [FIR] Properly handle when subject expression in DFA of equality calls
^KT-50785 Fixed
2022-01-17 17:59:23 +03:00
Mikhail Glukhikh 37c0cad827 Minor code cleanup: resolveSupertypesByMembers 2022-01-14 22:20:21 +03:00
Mikhail Glukhikh 390fa682b9 Forbid calls of Any functions via super if they are overridden as abstract
#KT-38078 Fixed
2022-01-14 22:20:21 +03:00
Roman Golyshev 4418d76a0d FIR: Replace fir.bounds with resolvedBounds where it is appropriate
If there is a `coneType` call immediately after the `fir.bounds` call,
it means that the fully resolved type is expected, hence
`resolvedBounds` should be used
2022-01-14 01:04:24 +03:00
Roman Golyshev 54cca88279 KT-50728 Enforce receiver type resolve
When stdlib is represented as a source dependency (which seems to be the
case in the `kotlin` project), it will be resolved lazily for the IDE.
Same thing can happen if someone decides to "extend" the stdlib
by declaring their declaration in the `kotlin` package

In both of those cases, we need to make sure that receiver type is fully
resolved before trying to get a `coneType` from it

N.B. To make resolve tests work, I've added a separate folder
`withAllowedKotlinPackage` to the `testData`, because in the default
test setup it is not allowed to extend the `kotlin` package by user's
definitions

^KT-50728 Fixed
2022-01-11 22:23:57 +00:00
Denis.Zharkov 0da24ff4e2 FIR: Fix smartcast case after equals on class from different module
^KT-50534 Relates
2022-01-11 20:45:56 +03:00
Denis.Zharkov a33d9df0cd NI: Support forking inference with heuristics
Mostly, it only affects FIR

It partially allows to consider several variance of constraints like
A<Int> & A<T> <: A<X_var> that are mostly brought by smart casts

^KT-49542 Fixed
^KT-50489 Relates
2022-01-11 20:45:55 +03:00
Denis.Zharkov 62673c7e1b NI: Do not use asConstraintSystemCompleterContext before completion 2022-01-11 20:45:54 +03:00
Denis.Zharkov 1d258635a2 NI: Get rid of confusing asConstraintSystemCompletionContext
NB: there is a different asConstraintSystemCompleterContext that might have side effects
2022-01-11 20:45:53 +03:00
Denis.Zharkov 47d74a16f2 NI: Get rid of redundant asPostponedArgumentsAnalyzerContext calls 2022-01-11 20:45:53 +03:00
Mikhail Glukhikh f53cd22253 FIR: copy builder inference session when creating snapshot for locals
This commit fixes one builder inference case from KT-49925
2021-12-23 17:28:01 +03:00
Mikhail Glukhikh 2fc372413e AbstractMany...InferenceSession -> FirInferenceSessionForChainedResolve 2021-12-22 22:21:43 +03:00
Mikhail Glukhikh 6342eb96c0 FIR: replace constraint with NotFixedTypeToVariableSubstitutor properly
In this commit we add nullability to upper type of a substituted
constraint in the situation like (Stub<_L> <: SomeType),
where _L is fixed to nullable Stub<_L>?.
We have to change this constraint to L <: SomeType? and not to
L <: SomeType as before, otherwise nullability become broken
(direct substitution of Stub<_L> to L is illegal here).

#KT-50470 Fixed
2021-12-22 22:21:43 +03:00
Mikhail Glukhikh dafc6d849c FIR: code cleanup in integrateConstraintToSystem 2021-12-22 22:21:42 +03:00
Mikhail Glukhikh 6614e1f3af FIR: extract some inference-related type substitutors to classes 2021-12-22 22:21:41 +03:00
Mikhail Glukhikh 30ea1601d5 FIR: commonize builder & inference sessions 2021-12-22 22:21:39 +03:00
Ivan Kochurkin ee7e04b28e [FIR] Ignore smartcast for non-final members from Java, ^KT-50219 Fixed 2021-12-21 19:10:40 +03:00
Ivan Kochurkin 84927e10b0 [FIR] Consider Nothing? as null constant in DFA, ^KT-44561 Fixed 2021-12-21 19:10:40 +03:00
Ivan Kochurkin 68f3ab2622 [FIR] Refactor processing of equality operators in DFA 2021-12-21 19:10:39 +03:00
Ivan Kochurkin c5a03d0573 [FIR] Remove dependent data flow variables after receiver reassignment 2021-12-21 19:10:37 +03:00
Ivan Kochurkin 1f9ea50d1a [FIR] Rearrange arguments in VariableStorageImpl functions to make them consistent 2021-12-21 19:10:36 +03:00
Mikhail Glukhikh 1938438fa1 FIR: save/restore tower data contexts during resolve jumps
#KT-50278 Fixed
2021-12-21 10:45:36 +00:00
Mikhail Glukhikh f3f63a458b Make FirRegularTowerDataContexts immutable, SpecialTower.. just a storage 2021-12-21 10:45:35 +00:00
Mikhail Glukhikh 87e11c0f42 FirTowerDataContext parts: split into regular and special 2021-12-21 10:45:35 +00:00
Vyacheslav Gerasimov f7a9065b75 Build: Use intellij maven repo instead of downloaded IDEA
#KTI-82
2021-12-16 21:48:23 +03:00
Simon Ogorodnik 32a80bf38e FIR: Add fast-path for getOrderedAllTypeVariables if no synthetics 2021-12-15 22:23:16 +03:00
Simon Ogorodnik 8cf97127fe Add util for safe registration of type variables in constraint system 2021-12-15 22:23:16 +03:00
Simon Ogorodnik 1593dd2514 FIR: Remove recursive processAllContainingCallCandidates 2021-12-15 22:23:14 +03:00
Simon Ogorodnik bb13583862 FIR: Rename stub type for builder inference 2021-12-15 22:23:13 +03:00
Simon Ogorodnik 1a288fcdcd FIR: Lookup contained postponed atoms recursively in delegate inference 2021-12-15 22:23:13 +03:00
Simon Ogorodnik 951eebcd68 FIR: Do not invert order of synthetic variables 2021-12-15 22:23:11 +03:00
Simon Ogorodnik df9da371cb FIR: Fix synthetic type variables to independent stub types 2021-12-15 22:23:11 +03:00
Simon Ogorodnik 580410863f FIR: Allow to create synthetic variables during stub creation 2021-12-15 22:23:10 +03:00
Simon Ogorodnik c3c4404bc5 FIR: Use only successful calls for constraints in delegate inference 2021-12-15 22:23:10 +03:00
Simon Ogorodnik 64944a1247 FIR: Register type variables properly in builder inference 2021-12-15 22:23:09 +03:00