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