Commit Graph

728 Commits

Author SHA1 Message Date
Dmitriy Novozhilov 1982f80bfb [NI] Leave candidates with annotation if there are no candidates without it 2020-05-29 09:36:33 +03:00
Dmitriy Novozhilov 2812ed0a02 [NI] Use types and systems from return arguments instead of return type of lambda 2020-05-29 09:36:33 +03:00
Dmitriy Novozhilov f76b57d260 [OI] Prefer candidate without @OverloadResolutionByLambdaReturnType 2020-05-29 09:36:33 +03:00
Dmitriy Novozhilov a604404bff [NI] Report warning if candidate was chosen using only @OverloadResolutionByLambdaReturnType 2020-05-29 09:36:33 +03:00
Ilya Gorbunov e9ef6dbc28 Discriminate OverloadResolutionByLambdaReturnType annotated overloads...
instead of preferring them in case of unsolvable ambiguity.
2020-05-29 09:36:32 +03:00
Dmitriy Novozhilov e1418a5540 [NI] Check for maximally specific candidate chosen with factory resolution 2020-05-29 09:36:32 +03:00
Dmitriy Novozhilov e7869bd9d4 [NI] Analyse lambda in factory pattern resolution in independent context 2020-05-29 09:36:32 +03:00
Ilya Gorbunov a0c7bece93 Overload resolution by lambda return type
Make compiler recognize new annotation enabling this feature.

Change overload selection algorithm to consider all overloads
with that annotation, not just the first one.

#KT-38480
#KT-11265
2020-05-29 09:36:32 +03:00
Dmitriy Novozhilov 1c32c62a87 [NI] Choose annotated candidate if call still ambiguous
#KT-11265
2020-05-29 09:36:31 +03:00
Dmitriy Novozhilov 8c524769b1 [NI] Add required FactoryPattern annotation for factory pattern resolve
#KT-11265
2020-05-29 09:36:31 +03:00
Dmitriy Novozhilov 865ddac07a [NI] Add feature for choosing candidate by lambda return type 2020-05-29 09:36:31 +03:00
Victor Petukhov e72f7d9a1d NI: return optimization for adding constraints in ConstraintInjector.kt 2020-05-28 14:58:15 +03:00
Victor Petukhov cadc5ad587 NI: remove deprecated TODO about doing investigation around producing unwanted Any? during incorporation (KT-39154) 2020-05-27 16:52:55 +03:00
Victor Petukhov 0bed055fca NI: small refactoring around TypeCheckerContext and adding new possible constraints 2020-05-27 16:39:31 +03:00
Victor Petukhov d7f52e8b67 NI: do explicit incorporation of type of fixing type variable into other constraints
^KT-37380 Fixed
2020-05-27 15:44:03 +03:00
Mikhail Zarechenskiy 4dbd4a56d5 Compose: adapt new API for intercepting candidates in call resolvers
Most part is made by @lelandrichardson
2020-05-27 01:42:48 +03:00
Victor Petukhov e70242f6f1 NI: some review fixes for improved postponed arguments analysis 2020-05-25 19:37:30 +03:00
Mikhail Zarechenskiy 2cee82a348 [NI] Resolve receiver of provideDelegate independently
#KT-38259 Fixed
2020-05-25 16:06:55 +03:00
Mikhail Zarechenskiy 59f027e3e9 [NI] Don't try performing any conversions on receivers 2020-05-25 16:06:55 +03:00
Victor Petukhov 379c6944a2 NI: extract diagnostics from partially resolved call instead of separately handling it including running all checks
^KT-37630 Fixed
^KT-35494 Fixed
2020-05-22 22:13:53 +03:00
Mikhail Zarechenskiy 2ff5b253ae [NI] Fix suspend conversions for subtypes of functional types
Fix for recently added tests:
  - testIntersectionTypeToSubtypeConversion
  - testSubtypeOfFunctionalTypeToSuspendConversion
2020-05-21 00:47:12 +03:00
Victor Petukhov 12db3d6e83 NI: remove separation of variable fixation order by constraint kind
The commit partially reverts ec4d9d2f1f

^KT-37914 Fixed
2020-05-20 22:37:30 +03:00
Mikhail Zarechenskiy fceaf65729 [NI] Don't compute conversions for definitely not SAM parameter 2020-05-20 15:30:14 +03:00
Mikhail Zarechenskiy 8bdc4d34f7 [NI] Commonize type-conversions (SAM/Suspend)
- Allow participating subtypes of functional types in conversions
 - Fix several subtle inconsistencies
 - Place logic about conversions at one place

 Now conversions operations have two stages: before usual subtyping
 check and after one. This is needed to support conversions of
 subtypes (of functional types, for example). First, the compiler
 checks if it possible to resolve an argument without conversion and
 only then it tries to perform conversion.
 Note that it'd be incorrect to perform conversion eagerly as it can
 change resolve (Runnable & () -> Unit <: KRunnable), plus we can't
 guess whether conversion is needed at all as it's important not to
 look into supertypes if resolution doesn't actually needed it

 #KT-36448 Fixed
 #KT-37574 Fixed
 #KT-38604 Fixed
2020-05-20 15:30:14 +03:00
Mikhail Zarechenskiy f702da5c51 [NI] Small refactoring around type conversions 2020-05-20 15:30:13 +03:00
Mikhail Zarechenskiy d3d162f9c8 Refactoring: start commonization of type-conversions 2020-05-20 15:30:13 +03:00
Mikhail Zarechenskiy cce9646c7d Refactoring: extract method about SAM conversions out 2020-05-20 15:30:13 +03:00
Mikhail Zarechenskiy 372f378edc [NI] Support nested transactions inside constraint system 2020-05-20 15:30:13 +03:00
Victor Petukhov 73dec25eb1 NI: intersect DFI types before capturing
^KT-37887 Fixed
2020-05-14 19:54:59 +03:00
Victor Petukhov 11d05c1abd NI: propagate isNullabilityConstraint flag into constraint injector and inherit it
^KT-37510 Fixed
2020-05-12 16:15:07 +03:00
Pavel Kirpichenkov 003ba1c8f5 [NI] CST: add preemptive recursion detection
For single super type constructor create star projection argument when types for that argument are equal to the original types.
Captured star projections are replaced with their corresponding supertypes during this check.
Skip check for `in` parameters, for which recursive cst calculation does not happen.
Adjust constant in fallback recursion condition.

^KT-38544 Fixed
2020-05-12 11:13:43 +03:00
Victor Petukhov b49dc46e6c NI: improve reporting errors about mismatch number of anonymous function parameters 2020-05-09 12:34:08 +03:00
Victor Petukhov 585e98a835 NI: support inferring lambda receiver type by explicit receiver of anonymous function (which is another postponed argument) 2020-05-09 12:34:06 +03:00
Ilya Chernikov 7e3dfb245b Avoid skipping lambda argument processing in case of explicit type param
#KT-38691 fixed
2020-05-07 18:39:57 +02:00
Victor Petukhov 260683c20e NI: Improve postponed arguments analysis
Introduce seven stages:
1) Analyze postponed arguments with fixed parameter types
2) Collect parameter types from constraints and lambda parameters' declaration
3) Fix not postponed variables for parameter types of all postponed arguments
4) Create atoms with revised expected types if needed
5) Analyze the first ready postponed argument and rerun stages if it has been analyzed
6) Force fixation remaining type variables: fix if possible or report not enough information
7) Force analysis remaining not analyzed postponed arguments and rerun stages if there are

^KT-37952 Fixed
^KT-32156 Fixed
^KT-37249 Fixed
^KT-37341 Fixed
2020-05-07 11:42:00 +03:00
Mikhail Zarechenskiy fa50d66afe [NI] Fix SAM conversion for projected-out members
#KT-25290 Fixed
2020-04-29 14:15:25 +03:00
Ilya Chernikov 45ac81c585 Do not check type depth for constrains generated on subtyping
#KT-38143 fixed
2020-04-29 11:12:21 +02:00
Pavel Kirpichenkov 36a57973b5 [NI] CST: remove max depth offset from recursion detection
Recursive type with several recursive anscestors can create a number of identical
common supertype calculations, growing exponentially on every step of recursion.
Previously the number of calculations was limited by D + 3, where D is a type depth.
Since the limit is dynamic, it seems that extra +3 offset can be dropped thus
reducing the number of recursions. The proper solution is to detect such a recursion
and fold recursive type preemtively, but for now this may improve performance in some use cases.

^KT-38544 In progress
2020-04-28 12:53:09 +03:00
Dmitriy Dolovov 90e888a1b6 Discriminate overloading expect MemberDescriptors
Issue #KT-38298
2020-04-28 13:16:18 +07:00
Mikhail Zarechenskiy ac642cf175 Support suspend conversion in callable reference adaptation
#KT-15917 In Progress
2020-04-22 16:10:45 +03:00
Mikhail Zarechenskiy 537a59d6ca Introduce basic suspend conversion in FE
#KT-15917 In Progress
2020-04-22 16:10:44 +03:00
Dmitriy Novozhilov ba272101f2 Check for ESReceiver for contracts with is check 2020-04-15 11:12:56 +03:00
Mikhail Zarechenskiy 54497d11ac Move SyntheticMemberDescriptor.kt to core
This is a first part of unification SAM constructors for all platforms
2020-04-15 02:06:32 +03:00
Ilya Chernikov acc5633811 [NI] Fix inference of lambda with receiver when wrapped...
in when/if or another lambda.
#KT-37419 fixed
2020-04-13 14:50:49 +02:00
Mikhail Zarechenskiy a7b959b88b Fix delegated property resolve with intermediate ID provideDelegate
#KT-37406 Fixed
2020-04-09 13:34:29 +03:00
Dmitry Petrov d1c5a42124 KT-36024 Generate adapted callable references as lambdas
Make sure both JVM and JVM_IR use the same information to determine
whether a callable reference requires argument adaptation.
2020-04-08 19:02:33 +02:00
Victor Petukhov 164f25937f NI: take into account an extension function annotation during CST calculation 2020-04-02 15:28:35 +03:00
Victor Petukhov f8d72f5dd9 NI: improve lambdas completion – look at all postponed arguments during resolution lambdas by additional conditions
^KT-36819 Fixed
^KT-36069 Fixed
2020-04-02 15:28:11 +03:00
Pavel Kirpichenkov a416fde814 [NI] Move abstract class instantiation check to call checkers
This way the check works for callable reference arguments.
Also candidate applicability during resolution does not change compared to the old inference.
^KT-37530 Fixed
2020-03-31 12:04:01 +03:00
Alexander Udalov 92534eadaa Remove dependency of 'resolution' on 'deserialization'
Replace it with a dependency on 'descriptors'.

Move the existing marker interface ContractProvider to 'descriptors',
and create a new marker interface DeserializedDescriptor.
2020-03-28 21:30:07 +01:00