Commit Graph
100 Commits
Author SHA1 Message Date
Dmitrii Gridin 3ce3c50b92 [LL FIR] update low-level-api-fir.md doc 2024-02-21 20:16:15 +00:00
Dmitrii Gridin 71f9c101a1 [LL FIR] KDoc here and there 2024-02-21 20:16:15 +00:00
Dmitrii Gridin 8525a39579 [FIR] FirResolvePhase: update KDoc
- Add pseudocode
- Add information about loop breaks to the super type phase
2024-02-21 18:21:47 +01:00
Dmitrii Gridin 072d191306 [compiler] replace Enum values() with entries
To fix warnings. Also, use of `Enum.entries` may improve the performance

^KT-48872
2024-02-20 17:56:46 +00:00
Dmitrii Gridin d64fc9b777 [SLC] map kotlin.Unit type typealias into void return type
^KT-65843 Fixed
2024-02-19 21:24:42 +00:00
Dmitrii Gridin 8dd66c0810 [LC] add test on unit type actualization
^KT-65843
2024-02-19 21:24:42 +00:00
Dmitrii Gridin 68e5fc7344 [LL FIR] LLFirLazyResolver: drop LLFirLockProvider parameter
It can be inferred from `LLFirResolveTarget` inside
`LLFirTargetResolver`
2024-02-19 09:41:22 +00:00
Dmitrii Gridin efeffb45b7 [LL FIR] LLFirLazyResolver: drop ScopeSession parameter
It can be inferred from `LLFirResolveTarget` inside
`LLFirTargetResolver`
2024-02-19 09:41:22 +00:00
Dmitrii Gridin 7d672cd474 [LL FIR] drop ScopeSession parameter from LLFirModuleLazyDeclarationResolver
This parameter was required for on-air analysis
to avoid garbage in the original scope session.
Now we can drop it, and it will be less error-prone
2024-02-19 09:41:22 +00:00
Dmitrii Gridin 80b698ce32 [FIR] drop obsolete FirResolveContextCollector
This interface is unused
2024-02-19 09:41:22 +00:00
Dmitrii Gridin 2e17d8d524 [LL FIR] FileStructureElementDiagnosticRetriever: deduplicate code 2024-02-19 09:41:22 +00:00
Dmitrii Gridin 3f31bdb877 [LL FIR] merge DeclarationBaseStructureElement into FileStructureElement
To simplify the implementation
2024-02-19 09:41:22 +00:00
Dmitrii Gridin a9f7c153d2 [LL FIR] rename LLFirResolveMultiDesignationCollector to LLFirResolveDesignationCollector
As it is not "multi" after 77c850f0d0
2024-02-19 09:41:22 +00:00
Dmitrii Gridin 0ecb174720 [LL FIR] LLFirLazyResolver: deduplicate code 2024-02-19 09:41:22 +00:00
Dmitrii Gridin 84f3cc9f9c [Analysis API] drop obsolete code 2024-02-19 09:38:18 +00:00
Dmitrii Gridin 7a13023b14 [FIR] add KDoc for FirResolvePhase 2024-02-15 19:28:10 +00:00
Dmitrii Gridin c78d3edd24 [SLC] support type parameter annotations
^KT-65112 Fixed
2024-02-15 15:18:02 +00:00
Dmitrii Gridin ae8e9749c8 [SLC] AnnotationsBox: use PsiElement instead of PsiModifierList
Not only PsiModifierList can be the parent of an annotation,
so we should make the restrictions less aggressive.

^KT-65112
2024-02-15 15:18:02 +00:00
Dmitrii Gridin 717dd08fd4 [LC] PsiClassRenderer: render type parameter annotations
^KT-65112
2024-02-15 15:18:02 +00:00
Dmitrii Gridin 3e3c932bf6 [LC] add tests on type parameter annotations
^KT-65112
2024-02-15 15:18:02 +00:00
Dmitrii Gridin d5705af8b1 [SLC] AbstractSymbolLightClassesParentingTestBase: make aware of PsiTypeParameter
It can have annotations

^KT-65112
^IDEA-346155
2024-02-15 15:18:02 +00:00
Dmitrii Gridin 3962f26583 [FIR] PsiRawFirBuilder: drop obsolete LL FIR parts 2024-02-15 10:50:47 +00:00
Dmitrii Gridin 58a1662c02 [LL FIR] FirLazyBodiesCalculator: drop obsolete logic for compiler required annotations
We have custom logic on `LLFirCompilerRequiredAnnotationsTargetResolver`
side
2024-02-15 10:50:47 +00:00
Dmitrii Gridin f5f3b7fec0 [LL FIR] drop unused declarations 2024-02-15 10:50:47 +00:00
Dmitrii Gridin 8f83e2ab4d [LL FIR] drop RawFirUserTypeRefBuilder as obsolete 2024-02-15 10:50:47 +00:00
Dmitrii Gridin c1205bfba9 [LL FIR] drop RawFirFileAnnotationBuilder as obsolete 2024-02-15 10:50:47 +00:00
Dmitrii Gridin fd74de6ccf [LL FIR] drop RawFirReplacement as obsolete 2024-02-15 10:50:47 +00:00
Dmitrii Gridin ba947fbf04 [LL FIR] RawFirNonLocalDeclarationBuilder: drop redundant functions
They are obsolete as we dropped on-air resolution logic
2024-02-15 10:50:47 +00:00
Dmitrii Gridin 46d16dfb6c [LL FIR] PersistenceContextCollector: change designation path resolution order
We will process more specific declaration firstly to avoid contention.
As the next step of addbb713a5

^KT-65780
2024-02-14 17:53:31 +00:00
Dmitrii Gridin 78c394d4de [LL FIR] FirElementBuilder: search file header elements without body resolution
^KT-65780
2024-02-14 17:53:31 +00:00
Dmitrii Gridin 04a2d6b616 [LL FIR] FirElementBuilder: make getFirForNonBodyElement more abstract
This is required for the next step

^KT-65780
2024-02-14 17:53:31 +00:00
Dmitrii Gridin 38a3010ac8 [LL FIR] FirElementBuilder: search file annotations without body resolution
^KT-65780
2024-02-14 17:53:31 +00:00
Dmitrii Gridin cca58f5c2a [LL FIR] FirElementBuilder: accept KtAnnotated instead of KtDeclaration as annotation owner
^KT-65780
2024-02-14 17:53:31 +00:00
Dmitrii Gridin 7796ef43db [LL FIR] FileStructure: resolve FirFile to body phase as all other elements
This is the correct behavior as we have to resolve to body phase
to build CFG and run diagnostics collector correctly

^KT-65780 Fixed
2024-02-14 17:53:31 +00:00
Dmitrii Gridin 84b6d5d508 [LL FIR] add tests for getOrBuildFir for KtFileAnnotationList
^KT-65780
2024-02-14 17:53:31 +00:00
Dmitrii Gridin 5426cbc3df [LL FIR] tests for this with annotations as implicit return type
^KT-61175
^KT-64215
2024-02-14 17:46:47 +00:00
Dmitrii Gridin e02c28c88a [LL FIR] support lazy resolve of destructuring declaration entries
^KT-62840 Fixed
^KT-65727
2024-02-14 16:16:01 +00:00
Dmitrii Gridin 8c63e75f06 [LL FIR] update destructuringEntryScript testData
To reproduce getOrBuildFir for KtDestructuringDeclarationEntry

^KT-62840
2024-02-14 16:16:01 +00:00
Dmitrii Gridin 312feb3dca [FIR] make script destructuring declaration entry initializer lazy expression
This change is required to properly support such declarations in lazy
resolution mode as we usually replaced initializers with lazy
expressions during the body calculation phase

^KT-62840
2024-02-14 16:16:01 +00:00
Dmitrii Gridin c0f4f7fefd [LL FIR] AbstractFirLazyBodiesCalculatorTest: add ability to suppress test
We have inconsistency in lazy body calculator, but only tests are
affected, because in the production we recreated bodies anyway

^KT-62840
2024-02-14 16:16:01 +00:00
Dmitrii Gridin 256d83b005 [LL FIR] support lazy resolve of <destruct> script declaration
But support for entries still is not implemented yet

^KT-62840
2024-02-14 16:16:01 +00:00
Dmitrii Gridin 792af849df [LL FIR] add getOrBuildFir test on destructuring declaration annotation
It doesn't resolve the property as it is treated as a local one

^KT-62840
2024-02-14 16:16:01 +00:00
Dmitrii Gridin 9ca0bdcb80 [FIR] make script destructuring declaration initializer lazy expression
This change is required to properly support such declarations in lazy
resolution mode as we usually replaced initializers with lazy
expressions during the body calculation phase

^KT-62840
2024-02-14 16:16:01 +00:00
Dmitrii Gridin 898c8c002e [LL FIR] add lazy body calculation tests for scripts
After KT-65344 we can effectively calculate lazy bodies in scripts,
so we can safely add the test

^KT-62840
2024-02-14 16:16:01 +00:00
Dmitrii Gridin 2e2e592cc3 [Analysis API] CliTestModuleCompiler: support LANGUAGE_VERSION directive
^KT-64884
2024-02-13 16:07:17 +00:00
Dmitrii Gridin a567793d10 [LL FIR] add workaround for deserialization of data classes
To correctly process old metadata without properly sorted properties

^KT-64884 Fixed
2024-02-13 16:07:17 +00:00
Dmitrii Gridin faebef171d [Analysis API] add regression tests for data class copy arguments usage
This issue is not reproducible against the K2 compiler

^KT-64884
2024-02-13 16:07:17 +00:00
Dmitrii Gridin ab328e76d4 [LL FIR] FirDesignation: update KDoc for collectDesignationWithOptionalFile
^KT-65344
2024-02-13 14:58:31 +00:00
Dmitrii Gridin ca484fae2c [LL FIR] KtFirReferenceShortener: add order for FirScriptDeclarationsScope
It is similar mostly to FirClassUseSiteMemberScope or NestedClassifier

^KT-65344
2024-02-13 14:58:31 +00:00
Dmitrii Gridin 18978ca3f1 [LL FIR] FirDesignation: add toString
^KT-65344
2024-02-13 14:58:31 +00:00
Dmitrii Gridin cc46b6e3e9 [LL FIR] rename collectDesignationWithFile to collectDesignation
It should have a more simple name as it is the main function now

^KT-65344
2024-02-13 14:58:31 +00:00
Dmitrii Gridin 0b4dac9d8d [LL FIR] rename collectDesignation to collectDesignationWithOptionalFile
To make the choice more visible

^KT-65344
2024-02-13 14:58:31 +00:00
Dmitrii Gridin 3c26d0e85d [LL FIR] refactor collectDesignation and friends
to simplify code and add KDoc

^KT-65344
2024-02-13 14:58:31 +00:00
Dmitrii Gridin 8f987644ab [LL FIR] designation refactoring
Collect `FirDesignation` by default with `FirFile` instead of just
a separate path and additional repeated logic around

^KT-65344
2024-02-13 14:58:31 +00:00
Dmitrii Gridin 47e8d987b9 [LL FIR] ContextCollector: optimize collector for file elements
We shouldn't trigger declaration processing if we want to check just
annotations/package/imports.
But currently, we still will iterate over the entire file
if there is an element somewhere inside package/import
(see `fileImportInside.kt` test case)

^KT-65344
^KT-65560 Fixed
2024-02-13 14:58:31 +00:00
Dmitrii Gridin 0c3a1dfd67 [LL FIR] ContextCollector: add tests for file package and imports
It reproduces redundant resolution

^KT-65344
^KT-65560
2024-02-13 14:58:31 +00:00
Dmitrii Gridin 58ad26ee5b [LL FIR] make script initializers independent
Now we can resolve all script declarations independently

^KT-65344 Fixed
2024-02-13 14:58:31 +00:00
Dmitrii Gridin d59b8b3244 [LL FIR] LLFirStatusTargetResolver: add missing branch for FirFile
It is better to explicitly say that we shouldn't do anything in the
case of the file. It worked before because of `needResolveMembers == false`
and `needResolveNestedClassifiers == false` inside
`LLFirStatusTargetResolver.Transformer`

^KT-65344
2024-02-13 14:58:31 +00:00
Dmitrii Gridin 697f1477fd [LL FIR] drop forEachDependentDeclaration
Now this function is redundant

^KT-65344
2024-02-13 14:58:31 +00:00
Dmitrii Gridin 5de5f70ec9 [LL FIR] LLFirPhaseUpdater: update backing field initializer directly
Instead of the backing field itself as we already update its phase
during `updatePhaseForNonLocals`

^KT-65344
2024-02-13 14:58:31 +00:00
Dmitrii Gridin 6415f423a8 [LL FIR] PhaseUpdatingTransformer: drop redundant checks
We shouldn't check the current phase as this condition effectively
always is **false** as we use this updater only once for the phase

^KT-65344
2024-02-13 14:58:31 +00:00
Dmitrii Gridin 348c9664c1 [LL FIR] drop isScriptDependentDeclaration
Now this property is redundant

^KT-65344
2024-02-13 14:58:31 +00:00
Dmitrii Gridin 4f0bc86ad4 [LL FIR] make result$$ property independent
Now we can resolve this generated property in the same way
as other regular properties.
This is the pre-step for independent script initializers

^KT-65344
^KT-65523
2024-02-13 14:58:31 +00:00
Dmitrii Gridin 6135a98e4e [LL FIR] do not rebuild entire script for lazy calculation of result$$ property
After the previous commit, it is possible to rebuild initializer for
`result$$` property without a full script creation.
Also, this commit fixes anchor symbol for annotations
inside script statements

^KT-65344
2024-02-13 14:58:31 +00:00
Dmitrii Gridin 338c533a58 [FIR] FirScriptConfigurationExtensionImpl: change source element for result$$ property
We should use the source from replaced `FirAnonymousInitializer` as it
is more equivalent. Another point – the previous implementation
duplicated the source between generated FirProperty and initializer

^KT-65344
2024-02-13 14:58:31 +00:00
Dmitrii Gridin f972c8d239 [LL FIR] add more tests for script initializer
^KT-65344
2024-02-13 14:58:31 +00:00
Dmitrii Gridin 0e16788b0a [FIR] value parameters from data class copy should be marked as resolved
^KT-65763 Fixed
2024-02-13 11:54:04 +00:00
Dmitrii Gridin ab7ae180f9 [LL FIR] add test data for data class from library
^KT-65763
2024-02-13 11:54:04 +00:00
Dmitrii Gridin addbb713a5 [LL FIR] FileStructure: collect diagnostics from bottom to top
In this way, we can be sure that all nested declarations will be fully
resolved before the outer one. As an example, we had a workaround for
file diagnostics as its `FileStructure` element resolves the file only
to `IMPORTS` phase yet.
Also, this commit probably should improve the performance of highlighting
as we will trigger the resolution from bottom to top while other
highlighting passes will iterate from top to bottom.

^KT-65562
2024-02-12 23:14:12 +00:00
Dmitrii Gridin 31852c6c05 [LL FIR] FileStructure: support dangling modifier list in non-end position
The root cause of the exception is that we missed such an element, and
it led to unresolved declaration during iteration over file declarations

^KT-65562 Fixed
2024-02-12 23:14:12 +00:00
Dmitrii Gridin 77c850f0d0 [LL FIR] LLFirResolveMultiDesignationCollector: simplify code
We can unify all designation calculators and migrate from
`List<LLFirResolveTarget>` to `LLFirResolveTarget`

^KT-65563
2024-02-08 22:28:13 +00:00
Dmitrii Gridin c52b9032ce [LL FIR] pull up custom logic for synthetic properties and accessors
We should process them independently as they can be not related to each
other

^KT-65563 Fixed
2024-02-08 22:28:13 +00:00
Dmitrii Gridin b1b33475fa [SLC] SymbolLightParameterCommon: drop redundant parameterDeclaration
Now we can replace it with kotlinOrigin

^KT-64772
2024-02-08 19:45:17 +00:00
Dmitrii Gridin 255a2d27f7 [SLC] SymbolLightTypeParameter: drop redundant typeParameterDeclaration
Now we can replace it with kotlinOrigin

^KT-64772
2024-02-08 19:45:17 +00:00
Dmitrii Gridin 042042768f [SLC] prefer sourcePsiSafe to psiSafe
We should use only source declarations as anchors as it is a predictable
contract

^KT-64772
2024-02-08 19:45:17 +00:00
Dmitrii Gridin b8306c8242 [SLC] SymbolLightParameterCommon: use only source kotlinOriginal
We shouldn't return it for, for example, SOURCE_MEMBER_GENERATED

^KT-64772 Fixed
2024-02-08 19:45:17 +00:00
Dmitrii Gridin 9589043a05 [LL FIR] adapt LLFirTargetResolver for new FirDesignation
We should maintain `containingDeclarations` to be consistent with
the new ` FirDesignation `

^KT-65345 Fixed
2024-02-05 09:32:45 +00:00
Dmitrii Gridin 9b60e5ca06 [LL FIR] adapt RawFirNonLocalDeclarationBuilder for new FirDesignation
Effectively nothing changed right now, but now it is possible to process
`FirScript` as `containingDeclaration` inside `moveNext`

^KT-65345
2024-02-05 09:32:45 +00:00
Dmitrii Gridin eb8e3f64f0 [LL FIR] reuse FirDesignation for LLFirResolveTarget
This is an intermediate change before unification

^KT-65345
2024-02-05 09:32:45 +00:00
Dmitrii Gridin 39131a7f30 [LL FIR] rework FirDesignation collector
The main change – now we collect not only `FirRegularClass`, but also
`FirScript`.
This allows us to have a proper context collector for
diagnostics for scripts.
Also, this change fixes dangling files for scripts in `IGNORE_SELF`
as now we have the correct patcher for this case, so we won't resolve
the copied script

^KT-65345
^KT-62841 Fixed
2024-02-05 09:32:45 +00:00
Dmitrii Gridin f06b17cbb2 [LL FIR] unify FirDesignation
Now we have only one FirDesignation instead of `FirDesignation`,
`FirDesignationWithFile` and `FirDesignationWithScript`

This allows us to unify situations with `FirFile` and `FirScript`
in the path and unbind from `FirRegularClass`.
This commit only refactors code, the semantic is still the same yet

^KT-65345
2024-02-05 09:32:45 +00:00
Dmitrii Gridin e03f8b503f [LL FIR] implement lock resolution algorithm for jumping phases
This commit extends `LLFirLockProvider` API functionality to provide
`withJumpingLock`, which can be safely used in multithreaded scenarios.
Comparing to regular `withWriteLock`/`withReadLock`, the new API has a
bit more overhead as we have to maintain `jumpingResolutionStatesStack`
and `FirInProcessOfResolvingToJumpingPhaseState` even without contention.
See KDoc of `LLFirLockProvider#withJumpingLockImpl` for implementation
details.

The implicit type phase has been migrated to the new approach, so
now it is safe to drop the last global phase lock.
Potentially, we can have some benefits from migration of other
jumping phases to this API.

^KT-56551 Fixed
^KT-55750 Fixed
2024-01-29 12:39:09 +00:00
Dmitrii Gridin 58ed52ee1f [LL FIR] LLFirTargetResolver: drop withPossiblyJumpingLock function
We should have explicit separation for jumping and non-jumping

^KT-56551
2024-01-29 12:39:09 +00:00
Dmitrii Gridin 0a55cfebd5 [LL FIR] LLFirLockProvider: cleanup code
^KT-56551
2024-01-29 12:39:09 +00:00
Dmitrii Gridin 92fc3ec824 [LL FIR] LLFirLockProvider: add registry key to disable global phase lock
It is enabled by default

^KT-56551
2024-01-29 12:39:09 +00:00
Dmitrii Gridin 53c4a10817 [FIR] FirImplicitBodyResolve: extract recursive error into a function
to be able to reuse it from Low Level FIR later

^KT-56551
2024-01-29 12:39:09 +00:00
Dmitrii Gridin e60a436068 [PSI2FIR] add test on primary constructor without constructor keyword
^KT-64900
2024-01-12 12:19:54 +00:00
Dmitrii Gridin 2c0cf9cad8 [PSI2FIR] split AbstractRawFirBuilderLazyBodiesTestCase on ast and stub versions
This commit explicitly splits raw fir builder in lazy mode on
AST and stubs.
By default, in tests we have an AST tree loaded, so all our
`disallowTreeLoading` is useless in unit tests mode

^KT-64646 Fixed
^KT-64898
^KT-64899
^KT-64900
^KT-64901
2024-01-12 12:19:54 +00:00
Dmitrii Gridin cf290a73fc [Analysis API] migrate AbstractSymbolLightClassesTestBase to doTestByMainModuleAndOptionalMainFile
^KT-64805
2024-01-10 22:07:03 +00:00
Dmitrii Gridin 1aa2377c60 [Analysis API test] rename AbstractLowLevelApiModifiablePsiSingleFileTest to AbstractLowLevelApiModifiablePsiTest
^KT-64805
2024-01-10 22:07:03 +00:00
Dmitrii Gridin 6145255e2c [Analysis API test] extract AbstractPsiDeclarationProviderTest
^KT-64805
2024-01-10 22:07:03 +00:00
Dmitrii Gridin 0f3f0ff080 [Analysis API test] rename AbstractPsiDeclarationProviderMultiModuleBinaryTest to AbstractPsiDeclarationProviderBinaryTest
^KT-64805
2024-01-10 22:07:03 +00:00
Dmitrii Gridin 79a8b6de1f [Analysis API test] rename AbstractPsiDeclarationProviderSingleModuleTest to AbstractPsiDeclarationProviderSourceTest
^KT-64805
2024-01-10 22:07:03 +00:00
Dmitrii Gridin 052622b862 [Analysis API test] migrate more tests from doTestByModuleStructure to doTestByMainFile
^KT-64805
2024-01-10 22:07:03 +00:00
Dmitrii Gridin cbae92f5c6 [Analysis API test] get rid of AbstractAnalysisApiSingleFileTest
^KT-64805
2024-01-10 22:07:03 +00:00
Dmitrii Gridin 476940c06b [Analysis API test] get rid of AbstractAnalysisApiBasedSingleModuleTest
^KT-64805
2024-01-10 22:07:03 +00:00
Dmitrii Gridin 095989b6fc [LL FIR] ger rid of AbstractLowLevelApiLastModuleFirstFileTest
Now this class is redundant and all tests migrated to the base class

^KT-64805
2024-01-10 22:07:03 +00:00
Dmitrii Gridin 84d07ef492 [LL FIR] ger rid of AbstractLowLevelApiSingleFileTest
Now this class is redundant and all tests migrated to the base class

^KT-64805
2024-01-10 22:07:03 +00:00
Dmitrii Gridin f8d95eceb7 [Analysis API] AbstractAnalysisApiBasedTest: implement test entry points to avoid boilerplate on implementation side
There are three test entry points:
* [doTestByMainFile] – test cases with dedicated main file.
Supports everything from single-file cases to multi-platform multi-module
multi-file cases
* [doTestByMainModuleAndOptionalMainFile] – test cases rather around
modules than files
* [doTestByModuleStructure] – all other cases with fully custom logic

Look at the KDoc of the corresponding method for more details.

^KT-64805 Fixed
2024-01-10 22:07:03 +00:00
Dmitrii Gridin b67deea21f [Analysis API] introduce getKtFiles util
^KT-64805
2024-01-10 22:07:03 +00:00