Commit Graph

102286 Commits

Author SHA1 Message Date
Yan Zhulanow 91c3ebac27 [LL API] Replace whole-session invalidation with granular FIR guards
^KT-59297 Fixed

'ProcessCancelledException's are commonly thrown during code analysis,
yet not every place is ready for them. As a FIR tree is a mutable data
structure with no transaction support, sporadic halts during its
mutation might easily leave it in an inconsistent state.

Before this change, whole module sessions (with all dependents) were
invalidated if an exception occurred during their analysis. Not only it
was very ineffective, it also resulted into a concurrency problem.

'ProcessCancelledException's are thrown when an underlying progress
indicator is invalidated. As analysis in each thread might have its own
progress indicator, invalidation in one thread should not stop
analysis in others. However, it is impossible in the current state,
as all threads share the same FIR tree structure.

The change introduces 'FIR guards' – a set of instructions defining
preservation and restoration rules for individual state items. As each
resolution phase is supposed to modify only a (sort of) known subset
of tree elements, restoration of potentially changed state on a failure
effectively returns the tree consistency.

Note that guards are not defined for certain phase transformers. The
reason is that the transformers already update the tree content safely.
E.g., the type reference is updated once it is resolved, and already
resolved type references are either resolved the same way again, or
just skipped on consequent phase runs.
2023-06-30 14:26:43 +00:00
Yan Zhulanow d386dd1f7b [LL API] Minor, prettify naming in 'LLFirBodyLazyResolver' 2023-06-30 14:26:43 +00:00
Yan Zhulanow 2aaf589ef2 [LL API] Minor, simplify call sites in 'transformAnnotations()' 2023-06-30 14:26:43 +00:00
Yan Zhulanow c7c49fd267 [LL API] Minor, clean up 'handleExceptionFromResolve()' 2023-06-30 14:26:42 +00:00
Yan Zhulanow 89797815a4 [FE] Implement safe publishing in ARGUMENTS_OF_ANNOTATIONS 2023-06-30 14:26:42 +00:00
Yan Zhulanow 90977f6a8c [FE] Extract special access patching logic in ARGUMENTS_OF_ANNOTATIONS 2023-06-30 14:26:42 +00:00
Yahor Berdnikau 89f7053437 [Gradle] Add comment why nagFreeCompilerArgsModification message is not shown
Gradle 8.0 suppresses such messages produced by `kotlin-dsl` plugin

^KT-59587 Fixed
2023-06-30 14:18:06 +00:00
Yahor Berdnikau 447c849b29 [Gradle] Fix jvm target validation test on Gradle 8
^KT-59587 In Progress
2023-06-30 14:18:06 +00:00
Yahor Berdnikau 6a80cd596a [Gradle] Fix kapt jvm target validation test on Gradle 8
^KT-59587 In Progress
2023-06-30 14:18:06 +00:00
Yahor Berdnikau 9453deb840 [Gradle] Update jvm validation test tags
Annotation each test separately, so each test should run on CI.

^KT-59587 In Progress
2023-06-30 14:18:05 +00:00
Yahor Berdnikau 6cf35c74af [Gradle] Update toolchain tests to run on Gradle 8+
^KT-59587 In Progress
2023-06-30 14:18:05 +00:00
Yahor Berdnikau 36f748cbcc [Gradle] Fix Jvm Toolchain Android tests are not running on CI
JUnit5 combines tags and then applies to this combined list filters from
 the test task. If this list contains any excluded tag - test will be
 ignored.

^KT-59587 In Progress
2023-06-30 14:18:05 +00:00
Yahor Berdnikau 05ce873d2a [Gradle] Fix Android tests for Jvm Toolchain
^KT-59587 In Progress
2023-06-30 14:18:05 +00:00
Sergey Bogolepov d433d1eb3f KT-58862: Remove cinterop -mode option
metadata cinterop libraries perform pretty well for years,
so we can drop this flag.
2023-06-30 14:16:01 +00:00
Pavel Kargashinsky 807e7f1c28 [MPP][Tests] Bump AndroidAndJavaConsumeMppLibIT tests Gradle version to 7.6.
Tests will be failed if AGP >=7.1.0 or Gradle >= 8.0
See KT-57351 for details
2023-06-30 14:15:40 +00:00
Pavel Kargashinsky 816efc2def [MPP][Tests] Use max supported Gradle version for MPP old-dsl tests 2023-06-30 14:15:39 +00:00
Aleksei.Glushko 5618ee84f8 [K/N] try to reimplement safe points with a load-branch-call 2023-06-30 14:12:17 +00:00
Ilya Kirillov 5b4916a808 Introduce StandardNames.IMPLICIT_LAMBDA_PARAMETER_NAME
and use it instead of hardcoded constant
2023-06-30 13:43:31 +00:00
Ilya Kirillov 0a1f27e43a [LC] remove duplicating checkIsMangled function 2023-06-30 13:43:30 +00:00
Ilya Kirillov c4e8a6dee9 [SLC] implement isMangled for symbol light method
`isMangled` is needed for implementing rename refactoring

^KTIJ-25903
2023-06-30 13:43:30 +00:00
Ilya Kirillov 8b0eb0488f [Analysis API] add method for implicit companion object reference detection
Add a new method `isImplicitReferenceToCompanion` to determine
if the given reference is an implicit reference to a companion object.

The method is needed for the rename refactoring in IJ.

^KTIJ-25863
2023-06-30 13:43:30 +00:00
Alexander Udalov f5bbf2b4fe Reflection: create synthetic classes for Java lambdas
... as well as $SwitchMap and other synthetic classes generated by javac
or other JVM language compilers or runtimes.

Note that for Kotlin, all synthetic classes were already handled by the
subsequent check for `KotlinClassHeader.Kind.SYNTHETIC_CLASS`, but after
this change we won't call `ReflectKotlinClass.create` for those, which
is a minor optimization.

 #KT-41373 Fixed
2023-06-30 13:11:41 +00:00
Alexander Udalov 5dc882abf5 Reflection: create synthetic classes instead of throwing UOE
... for Kotlin-generated classes which do not correspond to a "class"
from the Kotlin language's point of view. For example, Kotlin lambdas,
file facade classes, multifile class facade/part classes, WhenMappings,
DefaultImpls. They can be distinguished from normal classes by the value
of `KotlinClassHeader.Kind` (which is the same as `Metadata.kind`).

Another theoretical option would be to throw exception at the point
where the `::class` expression is used, if the expression's type on the
left-hand side is a synthetic class. But we can't really do that since
it'll affect performance of most `<expression>::class` expressions.

So, construct a fake synthetic class instead, without any members except
equals/hashCode/toString, and without any non-trivial modifiers. It kind
of contradicts the general idea that kotlin-reflect presents anything
exactly the same as the compiler sees it, but arguably it's worth it to
avoid unexpected exceptions like in KT-41373.

In the newly added test, Java lambda check is muted but it should work
exactly the same as for Kotlin lambdas and other synthetic classes. It's
fixed in a subsequent commit.

 #KT-41373 In Progress
2023-06-30 13:11:41 +00:00
Alexander Udalov d833b732c9 Reflection: support Java anonymous/local classes
Local classes and anonymous objects are normal classes and
kotlin-reflect can load all declarations and modifiers from them, and
support calling members, exactly in the same way as it does for normal
non-local classes.

 #KT-41373 In Progress
2023-06-30 13:11:41 +00:00
Alexander Udalov 1e031d9fb8 Reflection: add test on introspection of local classes
kotlin-reflect works correctly already for Kotlin-generated local
classes and anonymous objects, but not for Java ones. This is fixed in a
subsequent commit.

 #KT-41373 In Progress
2023-06-30 13:11:41 +00:00
Sergej Jaskiewicz 9fcdc10019 [IR] Reorder parameters in IrFactory#createValueParameter
This is to prepare for IrFactory auto-generation (KT-59308).
2023-06-30 12:41:02 +00:00
Kirill Rakhman 2cc588d6d8 [RAW FIR] Rename raw FIR builder types for clarity 2023-06-30 12:05:43 +00:00
Ilya Kirillov 26e9e9de11 [LL FIR] add regression tests for KTIJ-23090
^KTIJ-23090 obsolete
2023-06-30 11:13:47 +00:00
Ilya Kirillov 048ecdf981 [Analysis API] add regression tests for KTIJ-24163
^KTIJ-24114 obsolete
2023-06-30 11:13:46 +00:00
Sergej Jaskiewicz 3f6420c5b9 [IR] Move IrFactory#createExpressionBody overloads to extension methods
This is to prepare for IrFactory auto-generation (KT-59308).
2023-06-30 11:06:09 +00:00
Nataliya.Valtman ea8b482f4f Don't get BuildScanExtension when buildScan report is disabled
#KT-59589: Fixed
2023-06-30 09:59:09 +00:00
ksenia.sergeeva 5e7e1e6c92 add gradle integration tests for explicit api mode in android KT-59117 2023-06-30 09:52:17 +00:00
Sebastian Sellmair 24debfd9b7 [Gradle] ExternalTargetApi: Implement ExternalKotlinTargetSourcesJarUtils
This utils are intended to be used external target authors exclusively
and shall help to create sources.jar files using regular
Kotlin Multiplatform conventions.

^KT-58109 Verification Pending
2023-06-30 09:34:07 +00:00
Sebastian Sellmair 3f1faa26ac [Gradle] ExternalTargetApi: Add sourcesElements-published and add this configuration to the published component
^KT-58109 In Progress
2023-06-30 09:34:07 +00:00
Sergey Bogolepov aee9b7aae3 [K/N] Add a trivial test-case for KT-59167 2023-06-30 09:01:38 +00:00
Sergey Bogolepov 0ceadc5933 [K/N] Fix KT-59167 2023-06-30 09:01:37 +00:00
Bogdan Mukvich 45e56f9c14 Disable SBOM for Gradle plugins
Current implementation causes publishing to fail

^KTI-1282
2023-06-30 07:55:45 +00:00
vladislav.grechko a6e45f9b59 Find correct class owner for inlined local delegated properties
Note that call-site class has no metadata for inlined local delegated
properties. Thus, for an inlined local delegated property we should
obtain declaration-site class as owner - otherwise, the corresponding
`PropertyReference` will have an owner without property metadata.
2023-06-29 17:44:25 +02:00
Timofey Solonin d6d1ed6c35 [MPP] Fix NewMultiplatformIT and make it run on arm macOS
^KT-58822
2023-06-29 14:59:45 +00:00
Jinseong Jeon f467c970b2 Drop param name check in PSI-KtSymbol eq checker
Parameter names might not be available, e.g., header jar (ijar).
2023-06-29 14:44:41 +00:00
Ilya Goncharov 49b2ac1b10 [JS] Remove legacy js in maven 2023-06-29 14:25:45 +00:00
Ilya Goncharov 0ac0c51c23 [JS] Remove Ant js test 2023-06-29 14:25:45 +00:00
Ilya Goncharov b0b266b73d [JS] Fix test of Ir Stdlib api 2023-06-29 14:25:45 +00:00
Ilya Goncharov 8c014baa28 [JS] Fix JPS tests with js part 2023-06-29 14:25:45 +00:00
Ilya Goncharov a0f86d8dd6 [JS] Remove JS legacy lookup tracker tests 2023-06-29 14:25:45 +00:00
Artem Daugel-Dauge 6861591840 [Gradle] Migrate Xcode/CocoaPods warnings to the new diagnostics infra + elevate deprecation of useLibraries
^KT-59313 Verification Pending
^KT-58519 Verification Pending
2023-06-29 14:23:55 +00:00
Artem Daugel-Dauge 67c19b00e0 [Gradle] Excplictly pass locale to CocoaPods invocations
^KT-59522 Verification Pending
2023-06-29 14:23:30 +00:00
Sergej Jaskiewicz f14a713e49 [mangling] Remove the unused fqnString method from KotlinMangler 2023-06-29 13:04:25 +00:00
Anna Kozlova 11c4fcda5f [psi][AA] don't decompile code when stubs have enough information
^ KTIJ-25979
+ do not assert when there are no stubs (text is already computed)
2023-06-29 10:09:20 +00:00
aleksandrina-streltsova 4ccea40651 [AA] Provide API for obtaining array element type of KtType
KTIJ-23199
2023-06-29 09:41:40 +03:00