Commit Graph

16211 Commits

Author SHA1 Message Date
Dmitriy Novozhilov 2fd8bf9153 [FIR] Don't analyze lambda twice inside delegate inference
This is a workaround for ^KT-54767
2022-11-03 08:30:09 +00:00
Dmitriy Novozhilov 7af43176ce [FIR] Add optin on API of updating type of receiver values. KT-54708 2022-11-03 08:30:09 +00:00
Dmitriy Novozhilov e6ce008415 [FIR] Ignore leaked internal types because of KT-54568 2022-11-03 08:30:09 +00:00
Dmitriy Novozhilov 089d907fd4 [FIR] Ignore leaked internal types because of KT-54517 2022-11-03 08:30:08 +00:00
Dmitriy Novozhilov 22c21ca4df [FIR] Replace uninferred type variables and stub types during delegate inference 2022-11-03 08:30:07 +00:00
Sergej Jaskiewicz ba7f5afebe [JS IR] Generate debug info for catch parameters
We will need it to generate original names for catch parameters in
sourcemaps.

Also, don't generate redundant debug info for compiler-generated
exception handling control flow operators.

See the doc comment to the MultipleCatchesLowering class

#KT-46276
2022-11-02 13:14:01 +00:00
Sergej Jaskiewicz 4ae03ea74a [JS IR] Improve debug info for if and when statements
#KT-46276
2022-11-02 13:14:01 +00:00
Sergej Jaskiewicz ccbb2a08a0 [JS IR] Improve debug info for functions with default parameters
Don't generate unnecessary mappings so that the user doesn't need to
step in many times to get where they want

#KT-46276
2022-11-02 13:14:00 +00:00
Sergej Jaskiewicz 512a2bfd7a [JS IR] Improve debug info for callable references and lambdas
#KT-46276
2022-11-02 13:13:59 +00:00
Sergej Jaskiewicz fe0e9db3aa [JS IR] Generate debug info for JS switch statements
#KT-46276
2022-11-02 13:13:59 +00:00
Sergej Jaskiewicz b2b7958b62 [JS IR] Generate debug info for secondary constructors
#KT-46276
2022-11-02 13:13:58 +00:00
Sergej Jaskiewicz ec18dce7cb [JS IR] Improve debug info for suspend functions
- Map generated explicit Unit returns to the closing brace of
  the original body
- Name the continuation parameter as `$completion` to match the JVM BE,
  and generate debug info for it (so that it appears in the 'names'
  array in sourcemaps)
- Don't generate debug info for coroutine instantiation ceremony
  (so that the user doesn't need to step in many times to get where they
  want)

#KT-46276
2022-11-02 13:13:58 +00:00
Xin Wang 4d9c2d3d14 Don't treat java constructor as 'hidden' one
Fix KT-54656
2022-11-02 12:56:38 +01:00
pyos 7787638737 FIR: fix substitution of anonymous type's supertype again
^KT-51418 Fixed
2022-11-01 15:28:41 +00:00
Igor Yakovlev 033e2c45f1 [WASM] Caching string literals in global pool 2022-11-01 13:15:09 +00:00
Denis.Zharkov f95bfccf59 K1: Prolong deprecation for KT-46727
The language committee ticket has not yet been prepared
2022-11-01 12:03:26 +00:00
Alexander Udalov 3d00c173f3 Fix binary compatibility for inlined local delegated properies
#KT-54650 Fixed
2022-11-01 12:34:33 +01:00
Alexander Udalov 54ab66cd4e Add regression test for KT-54707 2022-11-01 11:24:03 +01:00
Ilya Goncharov 372a512c91 [JS IR] Add case with bridge for method with default parameters 2022-10-31 16:08:24 +00:00
Denis.Zharkov 82100a414f FIR: Preserve K1 behavior for rawTypeValue ?: nothingTypedValue
It's been approximated to the non-raw version back then

^KT-54526 Fixed
2022-10-31 14:28:56 +00:00
Denis.Zharkov 52eb535a7d FIR: Use platform specific overridability rules for platform members
^KT-54570 Fixed
2022-10-31 14:28:55 +00:00
Denis.Zharkov 1e368bcd86 FIR: Allow to skip specifying type arguments for members from raw type
^KT-54666 Fixed
^KT-54526 Related
2022-10-31 14:28:54 +00:00
Denis.Zharkov c0e0900344 FIR: Preserve K1 behavior for synthetic properties on raw type
^KT-54502 Fixed
2022-10-31 14:28:53 +00:00
Denis.Zharkov 7b15b28ee2 FIR: Properly support raw types in type parameter upper bounds
^KT-49345 Fixed
2022-10-31 14:28:52 +00:00
Denis.Zharkov 5cc31114cd FIR: Support special scope for raw types
^KT-46369 Fixed
^KT-41794 Fixed
^KT-49351 Fixed
2022-10-31 14:28:50 +00:00
Pavel Mikhailovskii 1215ae0fe7 KT-1436 Nicer compiler errors when the feature isn't supported 2022-10-31 13:49:57 +00:00
Alexey Belkov 2036b65b78 K1: render receiver DNN type as parenthesized
^KTIJ-20849
2022-10-28 12:52:22 +04:00
Jinseong Jeon 8d8d0d9922 SLC: add marker interface for collection inheritor 2022-10-27 14:41:24 +02:00
Sergej Jaskiewicz b429e2f34f Remove a test that doesn't make sense anymore 2022-10-27 11:28:01 +00:00
Sergej Jaskiewicz 6a40a7e471 [JS IR] Don't forget to enable lazy property initialization 2022-10-27 11:27:59 +00:00
Dmitriy Novozhilov 6bc952adff [Test] Add test for KT-54663 2022-10-27 11:08:56 +00:00
Dmitriy Novozhilov b7da00744b [FIR] Consider overridden getter for setter function for synthetic property
^KT-54662 Fixed
2022-10-27 11:08:55 +00:00
Dmitriy Novozhilov 1927369ae9 [Test] Add test for KT-54662 2022-10-27 11:08:55 +00:00
Dmitriy Novozhilov 027b1f861c [FIR] Update return type of delegated callables in ReturnTypeCalculator
^KT-54654 Fixed
2022-10-27 11:08:55 +00:00
Dmitriy Novozhilov f441151eab [FIR] Fix order of supertype scopes for supertypes of companion object
^KT-54645 Fixed
2022-10-27 11:08:54 +00:00
Dmitriy Novozhilov d54503e66c [Test] Add test for KT-54645 2022-10-27 11:08:54 +00:00
Nikolay Lunyak 7e323f8ac6 [FIR] KT-54692: Fix compiler crash on UInt.shl
Merge-request: KT-MR-7513
Merged-by: Nikolay Lunyak <Nikolay.Lunyak@jetbrains.com>
2022-10-27 10:40:06 +00:00
Sergej Jaskiewicz 0e3f48314a [JS IR] Improve stepping test executor
Don't search for box function in the generated code;
instead, stop the execution right before calling it.

This makes stepping tests more accurate.
2022-10-27 09:28:05 +00:00
Simon Ogorodnik 2cf8f75a90 KT-53255. Fix StackOverflow during IR verification from K2
In FIR we desugar when with multiple conditions leading to same block
as tree of OR expressions

Given
```
when(some) {
  "a", "b", "c" -> {}
  else -> {}
}
```

actually desugared into
```
when(val <subj> = some) {
  <subj> == "a" || <subj> == "b" || <subj> == "c" -> {}
  else -> {}
}
```

There is a multiple ways of how we can organize such expressions in FIR
Previously it was just nesting-chain of OR expressions

While the most efficient way in terms of required stack depth is
a balanced tree

KT-53255
2022-10-26 17:44:46 +00:00
Simon Ogorodnik ac8cae16ba KT-53255. Extend test for long when expression 2022-10-26 17:44:46 +00:00
Ilya Goncharov fd5fba6f09 [JS IR] Fix case with bridge with nested classes
^KT-54686 fixed
2022-10-26 12:56:03 +00:00
Mikhail Glukhikh 50cd560d09 K1: add more tests for BI assignment checker, fix corner cases
Related to KT-54004
2022-10-26 09:21:49 +00:00
Mikhail Glukhikh 8e48636b29 K1: don't report assignment TYPE_MISMATCH in BI under feature ON
Related to KT-54004
2022-10-26 09:21:48 +00:00
pyos 6c6d653e85 FE: don't lose annotations on Java primitive arrays
but only use them to enhance for warnings for now.

^KT-48861 Fixed
2022-10-26 09:33:40 +02:00
Mikhail Glukhikh 80fa765333 K1: introduce synthetic assignment checker with deprecation for KT-54305
#KT-54305 Fixed
Related to KT-54309
2022-10-25 12:33:09 +00:00
Mikhail Glukhikh 7bd512fbb3 FE: add test for KT-54305 2022-10-25 12:33:08 +00:00
Johan Bay 9f3d8130db Remove unnecessary deprecation annotation
Private members on private companion objects have proper visibility
so there is no need for the @Deprecated annotation.

^KT-54539 Fixed
2022-10-25 14:03:11 +02:00
Alexander Udalov b42a7be0de Psi2ir: keep nullability when substituting function type for SAM type
After we added "careful approximation of contravariant projections" in
584b70719e, some SAM conversions started to require an additional
implicit cast of the functional value before it is converted to the SAM
interface. The target type of this implicit cast was computed
incorrectly because it didn't contain nullability of the SAM type. This
could lead to a situation where a nullable value was incorrectly cast to
a non-null type, which caused a missing null check and NPE at runtime.

For example, let's consider the test `kt54600.kt`. SAM conversion
happens in the constructor call `J(filter)`. Before 584b70719e, the IR
for that argument was (irrelevant things are omitted for simplicity):

  TYPE_OP SAM_CONVERSION type=Condition<String!>!
    GET_VAR filter type=Function1<String, Boolean>?

After 584b70719e, the IR became:

  TYPE_OP SAM_CONVERSION type=Condition<Any?>!
    TYPE_OP IMPLICIT_CAST type=Function1<Any?, Boolean>
      GET_VAR filter type=Function1<String, Boolean>?

Note the two changes:
* The resulting SAM type changed from `Condition<String!>` to
  `Condition<Any?>`. This is exactly the point of the "careful
  approximation" change, because just erasing the "in" projection from
  the parameter type is incorrect, see the explanation for that change.
* The value is now implicitly cast to the _non-null_ function type
  before it is SAM-converted. The presence of the cast is fine, but the
  fact that it's to a non-null type is an oversight.

The target type for this cast is computed at
`KotlinType.getSubstitutedFunctionTypeForSamType` in psi2ir. Now it
extracts the nullability from the SAM type and retains it in the
resulting function type.

After this change, the IR for the argument becomes:

  TYPE_OP SAM_CONVERSION type=Condition<Any?>!
    TYPE_OP IMPLICIT_CAST type=Function1<Any?, Boolean>!
      GET_VAR filter type=Function1<String, Boolean>?

Note that the target type is now flexible, as the resulting SAM type.
Another option would be to make it nullable, as the type of the
functional value, but there doesn't seem to be any difference.

 #KT-54600 Fixed
2022-10-25 11:20:23 +00:00
Mikhail Glukhikh c0789b5207 PSI/FIR->IR translators: return to 1.7.10 behavior for field references
In 1.7.20 we used the nearest Java-based receiver for such field
references in backend. Now we are using use-site receiver again,
it can lead to accidental usage of derived class property backing field.

This is effectively a revert of KT-49507 fix, see commits:
- fa914f20
- b0a6508d

#KT-54393 Fixed
#KT-49507 Planned
#KT-52338 Planned
2022-10-25 08:36:01 +00:00
Vsevolod Tolstopyatov b29309478e Take into account 'KTypeImpl.classifier' in its hashCode and equals
Since KT-53308, we started to cache results of typeOf invocation
in reflection. The cache uses the origin 'KClassifier' as a key with
an optional list of 'KTypeProjection' in type argument position,
and computed result as a value.

Without classifier check, the caching produces incorrect execution in
a very specific classloaders usage which is leveraged
by IDEA source-tree:

* All Kotlin stdlib and reflect classes are always loaded by the same
  classloader
* Other classes that depend on Kotlin are loaded by separate
  classloaders

The reproducer:

* Attempt to use typeOf<kotlin.List<Foo>> from one classloader caches
  the resulting KType
* Attempt to use typeOf<kotlin.List<Foo>> from another classloader
  for the same 'Foo' that differs only in classloader reuses the
  computed KType, meaning that KType type argument classifier
  is simply incorrect and points to the 'Foo' from the first classloader

#KT-54611 Fixed
#KT-54629 Fixed

Merge-request: KT-MR-7470
Merged-by: Vsevolod Tolstopyatov <qwwdfsad@gmail.com>
2022-10-24 19:05:08 +00:00