Commit Graph

623 Commits

Author SHA1 Message Date
Pavel Kirpichenkov 572dee6835 Revert "Only create descriptors for candidates with lambda args"
This reverts commits:
349d07ad43
2249c223fe

Revert due to differences in test data with NI enabled
^KT-36247 Open
2020-02-12 20:52:30 +03:00
Mikhail Zarechenskiy 0d310c0fa4 [NI] Support signed-unsigned conversions for K/Native
#KT-34545 Fixed
2020-02-12 10:36:45 +03:00
Ilya Chernikov 2249c223fe Only create descriptors for candidates with lambda args
#KT-36247 fixed
2020-02-10 14:21:02 +01:00
Victor Petukhov ae39d748e4 NI: Try to solve constraint system with another flexibility from a type variable if couldn't solve
^KT-36254 Fixed
2020-02-10 12:31:42 +03:00
Pavel Kirpichenkov 517688e163 [NI] Revise variance calculation method for completion mode
Before fix only one level of type arguments was used to determine variance of type variable to find out direction requirements.
This incorrect in general case, because outer variance affects subtyping deductions, for example:
Inv<Out<A>> <: Inv<Out<B>> => A <: B; B <: A, despite A and B are in covariant position if only one level is considered

^KT-36233 Fixed
2020-01-31 17:59:11 +03:00
Pavel Kirpichenkov 736f5e365c [NI] Create error type for CST of error types
KT-36092 Fixed
2020-01-30 15:24:42 +03:00
Pavel Kirpichenkov 832064305f [NI] Set correct applicability for unknown lambda parameter diagnostic
Unknown lambda parameter should not change resolve.
So the new diagnostic should not have error status; othrewise candidates with lower priority but more specific expected type may be chosen.

KT-34335 Fixed
See also KT-36264
2020-01-30 13:52:18 +03:00
Pavel Kirpichenkov eec039f5a2 [NI] Report error about unknown parameter type of lambda argument
KT-34335
2020-01-30 13:52:12 +03:00
Pavel Kirpichenkov 9fb8579252 [minor] Refactor KotlinCallCompleter
Move completion mode logic to CompletionModeCalculator.
2020-01-30 12:48:20 +03:00
Mikhail Zarechenskiy e42f16c95c [NI] Fix construction of common system for builder inference 2020-01-29 11:43:15 +03:00
Mikhail Zarechenskiy e3b6104489 [NI] Map vararg to Array if it's resolved against type variable
While this behavior is questionable, it's consistent with OI and can
 be changed in future

 #KT-36201 Fixed
2020-01-29 11:43:14 +03:00
Mikhail Zarechenskiy 35f6810b58 [NI] Do not incorporate constraints that are needed only for nullability 2020-01-29 11:43:13 +03:00
Dmitry Petrov 2d3a142786 Commonize 'fun interface' handling as much as possible
TODO decide something about SamType.createByValueParameter in case of
out-projected types.
2020-01-28 11:40:14 +03:00
Dmitry Petrov ba1415d7d1 Minor: remove assertion in getCallableReferenceAdaptation 2020-01-27 12:30:59 +03:00
Mikhail Zarechenskiy 0530f9ed1c Refactoring: generify and remove duplicated code 2020-01-27 11:03:57 +03:00
Mikhail Zarechenskiy 4e3c27c4ec Refactoring: move SamConversionOracle to core 2020-01-27 11:03:57 +03:00
Mikhail Zarechenskiy 6c4f5ea9c9 Minor: generify check for sam conversions 2020-01-27 11:03:56 +03:00
Mikhail Zarechenskiy 02387e77dd Refactoring: rename SamConversionTransformer -> SamConversionOracle 2020-01-27 11:03:56 +03:00
Mikhail Zarechenskiy 08f80ba15a Refactoring: remove useless method 2020-01-27 11:03:55 +03:00
Mikhail Zarechenskiy 00469712d1 [NI] Don't use only platform specific checks for FIC in inference 2020-01-27 11:03:55 +03:00
Dmitry Petrov c5f14a29a4 PSI2IR: Generate adapted callable references
Callable reference is "adapted" if it requires some adaptation to an
expected function type - e.g., when a reference to
```
  fun foo(vararg xs: Int): Int
```
is used where `(Int, Int, Int) -> Int` is expected.

For such callable references we generate the following IR (in
pseudo-Kotlin):
```
  {
    fun foo'(p0: Int, p1: Int, p2: Int): Int {
      return [| foo(p0, p1, p2) |]
    }
    ::foo'
  }
```

where `[| foo(p0, p1, p2) |]` is calling function `foo` with arguments
`p0`, `p1`, and `p2`, as they were mapped by callable reference
resolution.
2020-01-24 11:21:25 +03:00
Dmitry Petrov 89c832b5a0 FE: provide argument mapping info for adapted callable reference 2020-01-24 11:21:25 +03:00
Pavel Kirpichenkov 78c9bbcc0d [NI] Soften restictions on using Nothing as proper constraint for full call completion
Consider lower `Nothing` constraint non-proper only if there is a dependant not analyzed postponed atom.
Early completion to `Nothing` provides data flow info for smart casts.

KT-35668 Fixed
2020-01-23 19:12:01 +03:00
Mikhail Zarechenskiy 7bd7db839d [NI] Fix adapting arguments for callable references with receivers
#KT-35912 Fixed
2020-01-23 18:56:00 +03:00
Dmitriy Novozhilov 14cf7a3d16 [NI] Add collecting forgotten type variables from callable references
#KT-35959 Fixed
2020-01-23 14:30:28 +03:00
Pavel Kirpichenkov c5893913f3 [NI] Remove lambda coersion to Unit in case of error return type(s)
Coersion to Unit from error type leads to misleading type mismatches:
"expected <expected lambda return type> found Unit", despite no user-provided Unit / empty lambda.
These diagnostics were collected, but not reported before, and that had been disguising the issue for a while.

KT-34729 Fixed
2020-01-23 13:18:50 +03:00
Pavel Kirpichenkov 3a98c84105 [NI] Make behaviour of anonymous functions consistent with lambdas
Fix completion of anonymous functions with expression body without expected type.
Premature completion led to losing type info from outer calls.
Also report type mismatches on empty lambda expressions.

KT-34729 In progress
2020-01-23 13:18:49 +03:00
Pavel Kirpichenkov cb0b44273d [NI] Check stub types in result type
An uninferred parameter stub may leak through calculation of CST(Inv<Uninferred Stub>, Nothing) into a result type.
A stub type in the result type means a type error. So we can afford recalculating
CST with stub-containing types filtered out, since its an error anyway.
This prevents stub types leakages and helps with reporting type error diagnostics.

KT-35914 Fixed
KT-35943 Fixed
2020-01-20 11:11:31 +03:00
Victor Petukhov 437a26684d NI: Prefer nullable lower bound to flexible one when substitution of type variable is performed and remember flexibility of type parameters based on flexibility of its upper bounds
^KT-32435 Fixed
2020-01-17 19:16:09 +03:00
Mikhail Zarechenskiy 4f74515508 [NI] Fix CST calculation for covariant type projections 2020-01-16 17:18:20 +03:00
Pavel Kirpichenkov fd1305c369 [NI] Refactor OnlyInputType annotation check
Hold position consumed during incorporation in Constraint instead of ConstraintPosition.
2020-01-16 12:01:07 +03:00
Pavel Kirpichenkov 0d393e3fd7 [NI] Update filtering of constraints with equal types
Make check for synthetic nullability constraint status before skipping
new constraint with nonunique type.
2020-01-16 12:01:06 +03:00
Pavel Kirpichenkov 2896642f94 [NI] Consider synthetic lower nullability constraint non-proper 2020-01-16 12:01:06 +03:00
Denis Zharkov 676c99b933 NI: Fix exception during callable references overload resolution
^KT-35847 Fixed
2020-01-16 10:49:49 +03:00
Dmitriy Novozhilov a3037a081e [NI] Fix resolve of lambdas with expected function type with receiver
#KT-30245
2020-01-15 22:12:29 +03:00
Dmitriy Novozhilov 04ce10b6c1 [NI] Improve completing callable references with type variable as expected type
#KT-32462 Fixed
2020-01-15 22:12:28 +03:00
Denis Zharkov c48539feb3 NI: Fix callable references resolution when LHS is generic nested class
In case of null qualifier, we should not look into any static scope
NB: factory::createCallableProcessor returns NoExplicitReceiver processor
in case of null-receiver, that makes resolving the call in the test as
`property(::key)` that matches to the property itself, thus leading to
overload resolution ambiguity

^KT-35887 Fixed
2020-01-15 16:10:34 +03:00
Dmitriy Novozhilov 3428a17759 [NI] Postpone calls with not enough information in builder inference 2020-01-15 14:01:25 +03:00
Denis Zharkov d6b01f1007 NI: In subtyping do not intersect arguments for non-covariant types
It partially reverts 7898922066
because it's not obvious that it's a safe operation
for invariant/contravariant types.

Also, there's a necessary fix in prepareReceiverRegardingCaptureTypes
to make types order stable
Otherwise test bareTypesWithStarProjections becomes flaky.

Also, the changes in bareTypesWithStarProjections.kt are also expected
because the type of the expression `coneSymbol` after the second "if" is
FirVariableSymbol<*> & FirPropertySymbol & AbstractFirBasedSymbol<*>
thus we fix D in the call `coneSymbol.phasedFir()` to FirVariableSymbol<*>
because it's the first type in the list
(see the next line after the last changed in AbstractTypeChecker)
2020-01-14 17:35:24 +03:00
Denis Zharkov 4202c9c1a4 NI: Fix regression for star-projections approximation
See the test added

^KT-35703 Fixed
2020-01-14 17:35:24 +03:00
Pavel Kirpichenkov 4a29de3716 [NI] discriminate Nothing for reified parameters
Related issues: KT-32836, KT-35728
2020-01-14 16:27:42 +03:00
Mikhail Zarechenskiy 6fe61c9056 [NI] Fix ambiguity when there are no applicable candidates
#KT-35064 Fixed
2020-01-14 14:30:01 +03:00
Ilya Chernikov caa677e6d2 [NI] Convert extension lambda to the non-extension one, if needed
#KT-30245 fixed
2020-01-09 08:08:45 +01:00
Pavel Kirpichenkov 2d21b82501 [NI] Remove hack for special functions
Treating special functions for `if`, `when`, `try`, `?:` as not accepting `Nothing` result type is incorrect.
Making so leads to cases with uninferred `Nothing` result type for inner calls and lost data flow info.
2019-12-27 18:40:42 +03:00
Dmitriy Novozhilov 5dfe100ae5 Allow use reference to reified type parameters in contracts since 1.4 2019-12-26 17:43:28 +03:00
Denis Zharkov 0b385cc532 NI: Approximate captured-for-star-projections to *
^KT-35602 Fixed
2019-12-26 12:35:32 +03:00
Dmitriy Novozhilov c8a1b876e8 [NI] Fix completion of error delegates with receiver with type parameters 2019-12-26 10:54:07 +03:00
Dmitriy Novozhilov 0c01499d98 [NI] Improve completing calls with multiple postponed arguments
#KT-27999 Fixed
#KT-30244 Fixed
#KT-31102 Fixed
2019-12-26 10:53:03 +03:00
Victor Petukhov 4309f53e11 NI: don't filter flexible types during CST calculation and force return as result the first of such types
^KT-35658 Fixed
2019-12-25 18:00:23 +03:00
Dmitriy Novozhilov 51424ec598 [NI] Add constraint K <: T from constraint K <: CapturedType(in T)
#KT-33263 Fixed
2019-12-25 16:19:19 +03:00