Commit Graph

520 Commits

Author SHA1 Message Date
Vladimir Dolzhenko d092e99ae8 Drop KtStubElementTypes#FILE
It has been marked as deprecated for a while and targeted to be deleted in 1.9.0

#KT-53781
2023-10-16 10:44:08 +00:00
Marco Pennekamp 9ac639e0d3 [PSI] Add forEachDescendantOfTypeInPreorder
- `forEachDescendantOfTypeInPreorder` is a preorder variant of
  `forEachDescendantOfType`, which operates in postorder.
2023-10-09 19:46:51 +00:00
Dmitriy Novozhilov 9e5ee3afa0 [FE] Add isLocal name to ClassId constructor calls where it needed 2023-09-21 12:40:44 +00:00
Dmitrii Gridin bd10ee10fe [psi] avoid usage of SAFE_IDENTIFIER_FOR_NO_NAME
This name leads to inconsistency between FqName from stub and
FqName from ClassId.
The first one is `no_name_in_PSI_3d19d79d_1ba9_4cd0_b7f5_b46aa3cd5d40`
but the second one is `<no name provided>`.
We can't just replace SAFE_IDENTIFIER_FOR_NO_NAME to NO_NAME_PROVIDED
due to many places with unsafe logic inside type mapping.

^KTIJ-26848 Fixed
2023-09-05 12:58:50 +00:00
Dmitrii Gridin ae02d78aff [PSI] ClassIdCalculator: cleanup code
^KTIJ-26848
^KTIJ-26896
2023-09-05 12:58:50 +00:00
Dmitrii Gridin 0701da6c59 [stub] simplify ClassId creation
We can create nested ClassId just from the parent stub instead of calculation by tree.
This commit simplified the complexity of ClassId building to liner.
Example:
```kotlin
package one
class A {
  class B {
    class C {
      class D
    }
  }
}
```
Previously, we had to create ClassId by traverse parents for each class.
Now we will visit each class only once.
It should improve performance and memory consumption during indexing.

^KTIJ-26848
2023-09-05 12:58:50 +00:00
Ilya Kirillov 9ea344fe76 [decompiler] fix ambiguities to builtin members resolve in K2 IDE
If a user has multiple kotlin-stdlib libraries in a project, all those stdlib libraries will contain builtins
which will result in resolution ambiguities.

To prevent such kind of ambiguities inside LLFirDependenciesSymbolProvider,
callables are grouped by facade class name.
Only matching callables from the first facade are used.

Facade is a Kotlin/JVM-term so right now it works only for JVM targets.
Builtins are also used in JVM, so the current solution is to have a Facade name also for builtins.

^KTIJ-26760
2023-08-30 14:45:14 +00:00
Bogdan Mukvich 7b00323b89 [Build] Update guava
Fix some reports from "Show Vulnerable Dependencies"

^KTI-1342
2023-08-25 14:10:37 +00:00
Dmitrii Gridin 3d52ba3bca [psi] KtFile: add hasImportAlias with caching
We have hotspots in UAST due to aliases, so we can reduce the time
significantly by caching `hasImportAlias` property

^KTIJ-26688
2023-08-21 13:57:10 +00:00
Alexey Merkulov 73b2ccff76 [Stubs] Refactoring: reduce member visibility in KotlinStubOrigin 2023-08-17 12:35:19 +00:00
Alexey Merkulov 60d5de56cb [Stubs] Fix writing/reading multi file facades
The fixed error leaded to the invalid resolve of methods during
evaluation, e.g. kotlinx.coroutines#runBlocking should be called from
facade BuildersKt instead of BuildersKt__BuildersKt
2023-08-17 12:35:19 +00:00
Anna Kozlova 788fa5d545 [psi] skip absent parameter names in function type presentation
KTIJ-26566
2023-08-09 16:29:37 +00:00
Ilya Chernikov 1d88c307ea K2 Scripting: fix locality of script declarations
the script declarations are considered public, at least because they
can be reused from another script then used with the `importedScripts`
configuration property. It also improves the compatibility with K1
scripting.
2023-07-26 08:49:27 +00:00
Ilya Kirillov 24db4e62f5 Migrate some FIR/Analysis API KotlinExceptionWithAttachment usages to buildErrorWithAttachment API 2023-07-18 11:49:21 +00:00
Ilya Kirillov 52c065b08a Extract a base class from KotlinExceptionWithAttachments 2023-07-18 11:49:20 +00:00
Yan Zhulanow 6156609617 [PSI] Increment modification stamp on adding imports to 'KtCodeFragment'
LL API incremental analysis depends on modification stamps for files and
declarations. Adding an import directive would modify a modification
stamp of an ordinary KtFile. The same should apply to a KtCodeFragment.
2023-07-05 16:55:38 +00:00
Yan Zhulanow df28bd1d79 [Stubs] Pass proper container source to stub-based FIR declarations
Backend, which is used by the expression evaluator, relies on the class
name in 'FacadeClassSource'. To pass the correct JVM class name,
stubs for top-level functions and properties got the 'origin'.
2023-07-04 11:17:39 +00:00
Egor Kulikov 19fb6e7458 [FIR] Don't resolve parameters in function types in invalid code
^KTIJ-25653 fixed

Merge-request: KT-MR-10831
Merged-by: Egor Kulikov <Egor.Kulikov@jetbrains.com>
2023-07-03 16:30:14 +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
Anna Kozlova cc76bbd09d [psi] don't decompile to detect invalid code
in compiled code no error elements are possible

Merge-request: KT-MR-10407
Merged-by: Anna Kozlova <Anna.Kozlova@jetbrains.com>
2023-06-05 10:17:40 +00:00
Egor Kulikov 8ae5336f04 [FIR] Add top level invalid destructuring declarations in classes
Part of ^KTIJ-23263

Merge-request: KT-MR-10424
Merged-by: Egor Kulikov <Egor.Kulikov@jetbrains.com>
2023-06-02 14:05:00 +00:00
Anna Kozlova faedea6aea [psi] get type text based on provided stubs 2023-05-27 12:22:23 +00:00
Anna Kozlova 71844f81f4 [psi] decompiled code doesn't have function bodies
otherwise AST for decompiled code would be loaded by findChildByClass call

^ KTIJ-25047
2023-05-27 12:22:23 +00:00
Anna Kozlova 360e7d6156 [psi] decompiled code doesn't have documentation
otherwise AST for decompiled code would be loaded by allChildren call

^ KTIJ-25047
2023-05-27 12:22:23 +00:00
Vladimir Dolzhenko 984ab0a4b9 Revert "Drop KtStubElementTypes#FILE"
This reverts commit ae4b0c6fe1.
2023-05-26 15:13:25 +00:00
Kirill Rakhman 0ac02be534 [FIR] Generate annotations to data class copy method parameters
#KT-57003 Fixed
2023-05-26 11:29:13 +00:00
Kirill Rakhman aacdfb67c6 [Stubs] Bump stubs version
#KT-58786
2023-05-19 11:50:40 +00:00
Ilya Kirillov 04cb217791 Fix binary compatibility of KtPsiFactory.contextual
^KTIJ-25307 fixed
2023-05-17 13:09:45 +00:00
Vladimir Dolzhenko 37c493f593 Add missed DOT_DEFAULT_EXTENSION
#KTIJ-25470
2023-05-17 12:45:19 +00:00
Vladimir Dolzhenko ae4b0c6fe1 Drop KtStubElementTypes#FILE
It has been marked as deprecated for a while and targeted to be deleted in 1.9.0

#KT-53781

Merge-request: KT-MR-10082
Merged-by: Vladimir Dolzhenko <Vladimir.Dolzhenko@jetbrains.com>
2023-05-11 09:56:55 +00:00
Kirill Rakhman b07e4f26ef [LT, Parsing] Parse blocks and lambdas eagerly for Light Tree 2023-05-05 09:34:23 +00:00
Anna Kozlova 1102dc1d0e [psi] define common constant expressions types 2023-05-02 10:30:34 +00:00
Anna Kozlova 956294821b [psi] don't load text for compiled code
use stubs when possible, when stub doesn't contain anything,
decompiled text won't contain it either,
no sense to load
2023-05-02 10:30:34 +00:00
Andrei Klunnyi 1e0115aef8 KT-57468 Kotlin assignment plugin: operation name cannot be found
The problem results in broken import quick fix and import optimizer on
the IDE side [1].

`AssignResolutionAltererExtension` introduced a possibility to override
 resolution of assignment statements. The inconsistency though is
 that `KtSimpleNameReference.getResolvesByNames` doesn't return a name
 for the overridden `=`. Kotlin as a language doesn't support this [2].

This commit eliminates the drawback above:
1. It fixes the name `assign` the `=` can be resolved to [3].
   This eliminates the need to search for the name, bypassing the
   plugins.
2. `KtSimpleNameReference.getResolvesByNames` returns `assign` among
   other names in case it deals with binary `=` and assignment is
   resolved.
3. `KtCompilerPluginsProvider` was extended to check plugins' presence.
   K1 implementation added.

----------------------------------------------------------------
[1]: https://youtrack.jetbrains.com/issue/KTIJ-24390
[2]: OperatorConventions.getNameForOperationSymbol
     https://kotlinlang.org/docs/operator-overloading.html#augmented-assignments
[3]: OperatorConventions#ASSIGN_METHOD + AssignmentPluginNames
2023-04-27 14:05:02 +00:00
Anna Kozlova a41f7dc25d [cls] save parameter name for functional types in stub
to make it available for deserialized Fir
2023-04-27 11:37:28 +00:00
Anna Kozlova d59d66e876 [AA, LL] use stubs to build deserialized Fir elements in IDE
^KTIJ-24638

Notice on `DebugSymbolRenderer`:
stub based deserializer sets source directly,
but it's available in IDE mode only.
Thus, standalone and IDE tests have different results.
In order to avoid this, sources for compiled code are explicitly ignored

Notice on distinct callables:
for a file which belong to multiple libraries, decompiled code would be build per library.
In order to avoid ambiguity errors for members in that file,
we need to distinct provided elements by origins
failed test from IJ repo:
 FirReferenceResolveWithCrossLibTestGenerated#testSetWithTypeParameters
2023-04-27 11:37:28 +00:00
Anna Kozlova 6ba4e37696 [psi] don't load ast for compiled code
deserialized parameters do not contain real default values anyway
2023-04-27 11:37:26 +00:00
Anna Kozlova 7ee648a4f5 [cls] include annotation arguments in cls stubs
^ KTIJ-24666
this would allow to build fir based on stubs,
do not keep ProtoBuf in memory and
search in decompiled code by stubs
2023-04-26 21:43:15 +02:00
Anna Kozlova f0af7c4228 [cls] include property constant initializer in stubs
^KTIJ-24667
this would allow building FirElements from stubs
2023-04-26 21:43:15 +02:00
Anna Kozlova 70ef87354f [psi] KtValueArgumentName: use stub when possible 2023-04-26 21:43:15 +02:00
Anna Kozlova 171e9db1f8 [psi] don't search for property initializer in decompiled code
it's not included in decompiled text, so can't be found anyway
2023-04-26 21:43:14 +02:00
Anna Kozlova 7021c079c6 [cls] include property accessors in cls stubs 2023-04-26 21:43:14 +02:00
Anna Kozlova 20661d1f95 [cls] more compact representation for contract stubs
distinguish boolean parameters
2023-04-25 10:34:33 +00:00
Anna Kozlova 4fe239375f [cls] write contracts information to cls stubs
^ KTIJ-24665
this information would be used to create resolved FirElements from stubs,
so no ProtoBuf would be kept in memory
2023-04-25 08:34:18 +00:00
Roman Golyshev d4cffb8a5a [213] Switch to 213 platform
KTI-1114
2023-04-21 13:19:04 +00:00
Egor Kulikov c46c922841 [ClsStubs] Add context receivers on function types 2023-04-20 18:57:51 +00:00
Anna Kozlova 04eb02085a [psi] bump stub version
missed from f810d435f4
2023-04-19 19:09:00 +02:00
Ilya Kirillov 2beb4c0017 [PSI] allow creating KtFiles with eventSystemEnabled = true in KtPsiFactory
so we have a VirtualFile for every KtFile created by it

^KT-57930
2023-04-19 16:08:59 +00:00
Mikhail Glukhikh 2ccad553e6 K1/K2: allow to apply suspend modifier to anonymous function
#KT-57991 Fixed
2023-04-17 18:05:44 +00:00
Anna Kozlova f810d435f4 [cls] write flexible type information to cls
^KTIJ-25172
this information would be used to create resolved FirElements from stubs,
so no ProtoBuf would be kept in memory
2023-04-14 18:12:48 +00:00