10317 Commits

Author SHA1 Message Date
Mikhail Zarechenskiy 1a26d2e157 Fix exception during resolution of incorrect fun interface
#KT-37541 Fixed
2020-04-29 14:15:25 +03:00
Mikhail Zarechenskiy 780bc1f607 Fix fun interfaces with extension receivers
#KT-37712 Fixed
2020-04-29 14:15:25 +03:00
Alexander Udalov 9fa8e009c6 Support equals/hashCode for fun interfaces in JVM and JVM_IR
#KT-33455 Fixed
2020-04-29 12:15:50 +02:00
Alexander Udalov b77e5a21ec Report error if fun interface method has JVM name getFunctionDelegate
This is needed so that it wouldn't clash with the corresponding member
from the kotlin/jvm/internal/FunctionAdapter interface, which all fun
interface wrappers will implement to get proper equals/hashCode. The
workaround is to rename the fun interface method.

 #KT-33455
2020-04-29 12:15:50 +02:00
Ilya Chernikov 4a0d1b0b9d Use precalculated intersection type in JVM backend
also test all backends for the problem in the issue
#KT-37715 fixed
2020-04-29 11:12:22 +02: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
Denis Zharkov 0f9718bf0d Add test on kotlin.native.Throws ambiguity
KT-35468
2020-04-29 09:17:55 +03:00
Denis Zharkov c6ae423816 Add tests for KT-35468
^KT-35468 Fixed
2020-04-29 09:17:54 +03:00
Steven Schäfer 905a8ca0d0 Reflect: Handle methods with inline class default parameters 2020-04-28 19:49:35 +02:00
Dmitry Petrov 878e838f0b JVM: Suspend converted references inherit AdaptedFunctionReference 2020-04-28 18:56:37 +03:00
pyos deecb6a28e JVM: move synthetic line number generation to the inliner
This makes the behavior of JVM and JVM_IR the same without having to
deal with PSI nodes.
2020-04-28 17:21:07 +02:00
Steven Schäfer b6b8dd1eab JVM IR: Avoid unnecessary CHECKCASTs in enum classes 2020-04-28 16:31:13 +02:00
Steven Schäfer cb3a4727cf JVM IR: Optimize field initializers in secondary constructors 2020-04-28 16:27:54 +02:00
Alexander Udalov 098a935aa7 Fix exponential string table size of anonymous classes during inlining
When we inline an anonymous object which captures something such as
crossinline values or reified parameters, we copy and transform its
metadata in `AnonymousObjectTransformer.transformMetadata`. Basically we
read the metadata of the original class, add a minor protobuf extension
and write it to the new class.

This also includes copying the string table. We read the string table
into `JvmNameResolver` (a representation of string table used in
deserialization), then construct a `JvmStringTable` (a representation
used in _serialization_) and then write it back.

There's a few optimizations in the string table representation in JVM
metadata which allow to store less strings and thus take less space. See
`StringTableTypes.Record` in `jvm_metadata.proto` for more information.
One of the optimizations `Record.range` allows to avoid storing the same
record many times in a sequence. For example, if we have N different
strings in the string table but none of them require any operation (such
as substring, char replacement, etc.), then we only store the record
with all default values (no operation, no predefined string, etc.) and
set its `range` to N. Upon reading such optimized record list in
`JvmNameResolver`, we "expand" it back to normal, so that we could index
it quickly and figure out what operation needs to be performed on each
string from the string table.

The problem was that when we expanded this list, we didn't set the range
of the expanded record entry to 1. So each record in
`JvmNameResolver.records` still has its original range. It doesn't cause
any problems most of the time because the range in this expanded list is
almost unused. However, when copying/transforming metadata for anonymous
objects, we mistakenly passed this expanded list with incorrect ranges
to `JvmStringTable`. So the metadata in the copied anonymous object
ended up being incorrect: each record now was present the number of
times equal to its range. Copying such metadata once again led to
another multiplication of the record list size. Multiple copies resulted
in exponential increase in memory consumption and quickly led to OOM.

For the fix, we now take the original, unexpanded list of records when
creating `JvmStringTable` out of `JvmNameResolver` for transformation of
anonymous object metadata.

Note that another possible fix would be to make range for each record in
`JvmNameResolver.records` equal to 1. This is undesirable though, since
then we'd need to copy each `JvmProtoBuf.StringTableTypes.Record`
instance, of which there could be many, and use some memory for no
apparent gain (since ranges in that expanded list are now not used at
all).

 #KT-38197 Fixed
2020-04-28 12:59:52 +02:00
Dmitry Petrov 802372ceff PSI2IR: suspend conversion on arbitrary arguments 2020-04-28 12:41:56 +03:00
Dmitry Petrov 000757c75b JVM: Add suspend conversion bit for function references equals/hashCode 2020-04-27 21:02:37 +03:00
Dmitry Petrov c7a96810bf JVM: Suspend conversion for function references 2020-04-27 21:02:37 +03:00
Dmitry Petrov 6b9a7464f5 PSI2IR: Support suspend conversion for function references 2020-04-27 21:02:37 +03:00
Mikhail Zarechenskiy 11390d9de3 Add test for obsolete issue
#KT-38420 Obsolete
2020-04-27 01:55:39 +03:00
Georgy Bronnikov 565874b3a0 Pass along type in IfNullExpressionFusionLowering 2020-04-23 18:18:34 +03:00
Alexander Udalov 025d1ca64d psi2ir: rework representation of bound adapted function references
This fixes the problem in JVM IR backend which didn't pass bound
receiver value of an adapted function reference to the superclass
(kotlin/jvm/internal/AdaptedFunctionReference), which caused equals to
work incorrectly on such references (see changes in box tests).

Previously, bound adapted function reference was represented as
IrFunctionExpression to an adapter function which calls the callee. The
value of the bound receiver in that case could only be found in the body
of that adapter function. This is not very convenient, so this change
makes psi2ir produce a block of the adapter function + reference to it.
The bound receiver value is then found in the reference. This is
basically similar to what ProvisionalFunctionExpressionLowering is doing
for all function expressions. And since this IR structure is already
supported in FunctionReferenceLowering, the problem in the JVM IR is
fixed without any additional modifications.

However, inliners do not support this IR structure yet, see KT-38535 and
KT-38536.
2020-04-23 16:47:23 +02:00
pyos 456469eb3b JVM: fix remapping of new T inside regenerated copies of T
In general, `InliningContext.findAnonymousTransformationInfo` was not
reliable because it mapped each type to *some* info for that type,
preferring ones with `shouldRegenerate == true` if those exist. Thus, it
returned incorrect results if one type was regenerated multiple times,
e.g. in a nested inlining context or because of a `finally` (which
duplicates anonymous objects). The solution is to avoid a global map and
attach the current transformation info directly to the current inlining
context.
2020-04-23 14:20:54 +02:00
Mikhail Zarechenskiy cb975bde7c Add test for questionable chained fun -> suspend conversion 2020-04-22 16:10:45 +03: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
Georgy Bronnikov 3bb32941a0 IR: bugfix in KotlinNothingValueExceptionLowering 2020-04-21 21:00:16 +03:00
Ilya Chernikov ec64869d39 Extract daemon tests to separate module 2020-04-21 16:49:11 +02:00
Dmitry Petrov 318d4d17ba KT-38337 Fix inline class value coercion in delegated members 2020-04-21 13:21:58 +03:00
Ilmir Usmanov f13d31c7bd Cleanup process in LauncherScriptTest
Remove the hack.
2020-04-20 13:48:19 +02:00
Pavel Kirpichenkov b91cf13259 [NI] Fix expicit super receiver check
^KT-37497 Fixed
2020-04-20 10:56:13 +03:00
Mikhail Zarechenskiy befa1e114c Add tests for obsolete issues
#KT-38092 Obsolete
 #KT-38179 Obsolete
 #KT-35105 Obsolete
 #KT-36696 Obsolete
 #KT-36947 Obsolete
 #KT-37337 Obsolete
 #KT-37309 Obsolete
 #KT-37727 Obsolete
 #KT-37735 Obsolete
 #KT-37853 Obsolete
 #KT-37920 Obsolete
 #KT-37709 Obsolete
 #KT-37706 Obsolete
2020-04-20 04:10:37 +03:00
Georgy Bronnikov 2c4fcebfec IR: handle adapted bound references 2020-04-18 20:31:57 +03:00
Ilmir Usmanov 5ab55fbb57 Support -J<jvm-param> and "-Dname=value" in windows runner script
Otherwise, -J-ea has no effect on windows, which breaks assert tests.
Wrap parameters with delimeters in quotes.
 #KT-30211 Fixed
2020-04-16 21:11:50 +02:00
Ilya Kirillov 1535873c07 Do not try to lazy parse a block without opening bracket
It can consume the whole file in such case
which will result PsiBuilder going crazy

#KT-36191 fixed
2020-04-16 15:40:21 +03:00
LepilkinaElena 4f9364f997 Native specific frontend checker for @ThreadLocal (#3293) 2020-04-16 15:23:06 +03:00
Georgy Bronnikov 41a28bde5c JVM_IR: repair synthetic accessors to fields 2020-04-16 15:08:11 +03:00
Mikhail Zarechenskiy 4ffcbc0c2f [NI] Properly support UnsafeVariance annotation
#KT-38134 Fixed
 #KT-34433 Fixed
 #KT-31823 Fixed
2020-04-16 13:55:47 +03:00
Georgy Bronnikov 611c4fe052 JVM_IR: repair super calls to methods of Any 2020-04-16 10:53:48 +03:00
Anton Bannykh 81798282b9 JS: support explicit SAM constructor invocation 2020-04-15 17:13:21 +03:00
Mikhail Bogdanov 1de0fbfc3a Add delegation tests for new default modes 2020-04-15 15:25:03 +02:00
Kristoffer Andersen 7ec4c9990a [JVM] Improve debug step behavior around lambdas.
- Add tests to clarify problematic behavior
- Avoid line numbers on return instructions of lambdas without explicit returns
2020-04-15 14:33:49 +02:00
Steven Schäfer fc7d667282 Psi2Ir: Bind unbound type parameters 2020-04-15 15:32:53 +03:00
Mikhail Zarechenskiy 9607739d30 Introduce synthetic scope for constructors of fun interfaces
#KT-37434 Fixed
2020-04-15 02:37:34 +03:00
Nikolay Krasko 0f7a9c44b4 Minor: sort excluded files and dirs in conformance test 2020-04-13 19:50:59 +03:00
Jinseong Jeon c370b86141 IR: consolidate generation of synthetic members for data class 2020-04-13 17:30:05 +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
Ilya Chernikov d863dc04e6 Move compiler scripting tests to scripting plugin, remove unused funs
also remove some tests that are covered in the scripting-compiler
tests now.
Part of the cleanup to rewrite scripting to the new infrastructure.
2020-04-13 13:49:34 +02:00
Georgy Bronnikov 9ccda31189 IR: deal with conflicting variances in computeSubstitutedSyntheticAccessor 2020-04-13 14:34:57 +03:00
Georgy Bronnikov 5700da2bae IR: type parameter context for return values in InsertImplicitCasts 2020-04-13 14:34:57 +03:00
Dmitry Petrov f42d9eefa1 KT-30330 Support KotlinNothingValueException in JVM 2020-04-10 08:47:03 +03:00