Commit Graph

4272 Commits

Author SHA1 Message Date
Mikhail Glukhikh 7f7bc1f36c K2: add test to reproduce KT-63233 2023-12-21 13:10:17 +00:00
Mikhail Glukhikh 2f29738989 K2: use lookupTag instead of classId in use-site scopes
We used this classId to get an associated symbol,
but this way is anyway not recommended (e.g. problems with local classes).
In this commit we migrated to usage of lookup tags instead.
2023-12-21 13:10:16 +00:00
Mikhail Glukhikh 79e041a310 FE: drop a redundant diagnostic test (exact duplicate of suspendJavaOverrides.kt) 2023-12-21 13:10:16 +00:00
Kirill Rakhman f47705f123 [Tests] Add box tests for #KT-59904 2023-12-21 12:03:48 +00:00
Mikhail Glukhikh a02cf76d6c K2: build SAM-based function type for a given captured type properly
Before this commit, we assumed (erroneously) that a captured type
cannot have an associated SAM-based function type.
In this commit we changed this assumption, replacing a captured type
with its lower type for this purpose

#KT-63379 Fixed
2023-12-21 10:19:23 +00:00
Mikhail Glukhikh 8588588760 K2: add test reproducing KT-63379 2023-12-21 10:19:23 +00:00
Dmitrii Gridin de44b7dc3b [LL FIR] LLFirSuperTypeTargetResolver: pass correct session during resolution
We should use the declaration-site session to have stable
resolution order. The same scheme is applicable during
regular lazy resolution calls.
Also, this means that we should process 'expect' classes
before 'actual' like it was for 'super' and 'sub' classes

^KT-63547
2023-12-21 09:34:39 +00:00
Dmitrii Gridin 960a59d49a [LL FIR] LLFirSupertypeComputationSession: rename session to useSiteSession
^KT-63547
2023-12-21 09:34:39 +00:00
Dmitrii Gridin 35a7e0db12 [LL FIR] LLFirSupertypeLazyResolver: covert receiver to parameter
To separate it from the next refactoring

^KT-63547
2023-12-21 09:34:39 +00:00
Dmitrii Gridin 14082f6924 [LL FIR] LLFirLazyResolver: drop redundant FirSession argument
LLFirSession should be received from LLFirResolveTarget to avoid
potential wrong sessions
ScopeSession cannot be dropped yet as we should be able to use another
session during on-air resolution to avoid garbage in the original one

^KT-63547
2023-12-21 09:34:39 +00:00
Dmitrii Gridin 1538c125c3 [LL FIR] LLFirReturnTypeCalculatorWithJump: use declaration-site ScopeSession
We should use the declaration-site session to have stable
resolution order. The same scheme is applicable during
regular lazy resolution calls

^KT-63547
2023-12-21 09:34:39 +00:00
Dmitrii Gridin e3841a1728 [Analysis API] add test for duplicated callable during implicit type
^KT-63547
2023-12-21 09:34:39 +00:00
Dmitrii Gridin 51f6525238 [LL FIR] LLFirCompilerAnnotationsLazyResolver: pass correct ScopeSession
We should use the declaration-site session to have stable
resolution order. The same scheme is applicable during
regular lazy resolution calls.

^KT-63547 Fixed
2023-12-21 09:34:39 +00:00
Dmitrii Gridin d83392a27a [LL FIR] LLFirStatusLazyResolver: pass correct session during resolution
We should use the declaration-site session to have stable
resolution order. The same scheme is applicable during
regular lazy resolution calls.
Also, this means that we should process 'expect' classes
before 'actual' like it was for 'super' and 'sub' classes

^KT-63547
2023-12-21 09:34:39 +00:00
Dmitrii Gridin 6ca6221be9 [LL FIR] LLFirStatusLazyResolver: more conservative optimization for actual classes
We cannot skip resolution in the case of type actualization as we cannot
guaranty that there are no any classes in super types which can be
actualized in the current context

^KT-62832 Fixed
^KT-63547
2023-12-21 09:34:39 +00:00
Dmitrii Gridin 0dace65f05 [LL FIR] add lazy resole test for actual override
^KT-63547
2023-12-21 09:34:39 +00:00
Dmitrii Gridin 4bd73e4ccd [Analysis API] add diagnostic test for compiler annotation with argument from another module
^KT-63547
2023-12-21 09:34:39 +00:00
Mikhail Glukhikh d3a0a6cabe K2: discriminate candidates with adaptations in the first place in ConeOverloadConflictResolver
Before this commit, we discriminated particular candidates with callable
reference adaptations during resolution stages.
After disabling compatibility mode for new inference, it's not so,
but now we discriminate similar candidates in ConeOverloadConflictResolver;
more precisely, it's candidates with callable reference adaptation
in their postponed atoms.
This does not allow going up the tower,
but allows to select better candidate at similar tower level.

Related to KT-63558, KT-64307, KT-64308
2023-12-21 07:43:38 +00:00
Mikhail Glukhikh 087edc026d K2: discriminate particular SAMs in the first place in ConeOverloadConflictResolver
Before this commit, we discriminated particular candidates with SAM
during resolution stages. More precisely, candidates from Kotlin
which used Java SAM types, were discriminated allowing go up the tower
for better candidates. After disabling compatibility mode for new
inference, it's not so, but now we discriminate similar candidates
in ConeOverloadConflictResolver. This does not allow going up the tower,
but allows to select better candidate at similar tower level.

Related to KT-63558, KT-64306
2023-12-21 07:43:38 +00:00
vladislav.grechko 77d0d1073e Preserve origins when desugaring augmented array assignments
^KT-63827: Fixed
2023-12-20 17:15:40 +00:00
Ivan Kochurkin a2cd2200d6 [FIR] Infer Unit type for generic lambda function if implicit return exists
Make behavior more consistent with K1

^KT-63563 Fixed
2023-12-20 13:50:05 +00:00
Roman Efremov 3f95e99e29 [Tests] Add tests for matching of expect property against Java property
...via typealias. Java property can be either field or method, which
overrides Kotlin property.

^KT-63624
2023-12-20 13:37:43 +00:00
Mikhail Glukhikh c322644860 K2: report only warning on lambda parameters with missing dependencies
During the fix of KT-62525, we've forbidden to use lambda parameters
with inaccessible types at all. After it, some impact was noticed,
so we decided to forbid them only in case it's necessary
(the case when associated types have type arguments, see KT-62525
description), and to deprecate them in other cases.

#KT-64266 Fixed
2023-12-20 12:48:00 +00:00
Mikhail Glukhikh 44aa2d86d3 K2: add test to reproduce KT-64266 2023-12-20 12:47:59 +00:00
Anna Kozlova 21bdf22249 [AA] support KDoc reference resolve in fragments
test in monorepo QuickDocNavigationTest#testTopLevelFunShortName

KTIJ-27582
^KTIJ-27760 fixed
2023-12-19 19:05:26 +00:00
Dmitrii Gridin 357015f399 [FIR] FirFakeOverrideGenerator: drop fake attributes from value parameters
We can find corresponding parameters by the containing function symbol.
Analysis API part is covered by tests from:
* FirIdeNormalAnalysisSourceModuleResolveCandidatesTestGenerated
* FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated
* FirIdeNormalAnalysisSourceModuleTypeScopeTestGenerated

^KT-64243
2023-12-19 16:21:57 +00:00
Dmitrii Gridin ed6a67b26d [LL FIR] proper lazy resolution support for fake declarations
Fake declarations do not require any context to be resolved, so we are
able to resolve them not only for non-local classes.
They share most states with the real declaration, so mostly they are
resolved through `LLFirTargetResolver.resolveDependencies`.
The next step is KT-64363

^KT-64243 Fixed
2023-12-19 16:21:57 +00:00
Dmitrii Gridin c3e6dd12a2 [FIR] FirFakeOverrideGenerator: generate fake declaration with STATUS phase
The requirement for original declarations is to have resolved status,
so we can set at least `STATUS` phase for copied ones. This fixes the
problem that fake declarations for local declarations can have `RAW_FIR`
phase due to the copy from the original declarations, as during body
resolution all local declarations have only this phase.
Another issue: we cannot set the phase from the original declaration
as it is not guaranteed that we will have everything in the resolved
state. E.g., we can have the original declaration in `BODY_RESOLVE`
phase, but at the same time a containing class for fake declaration
can be in `STATUS` phase, for example. This means that the fake
declaration can have unresolved type annotation as it has them
from both places – from the original declaration and from the class
super type.
To simplify the code, we can just always set STATUS phase to be sure
that everything is resolved correctly.

Also, so we can optimize the logic for all phases above on Low Level FIR
level

^KT-64243
2023-12-19 16:21:57 +00:00
Dmitrii Gridin 835a9632b9 [FIR] FirFakeOverrideGenerator: use stub expression instead of original default value
We shouldn't copy the default value from the original declaration as is
as it won't be resolved correctly in some cases. It is enough to use
STUB as it will highlight the fact that we have some default value.
In LLFirBodyTargetResolver we shouldn't try to resolve fake declarations
as they don't have bodies and everything should already be resolved

^KT-64243
2023-12-19 16:21:57 +00:00
Dmitrii Gridin c9f11ad74f [FIR] FirFakeOverrideGenerator: unify value parameter copy between regular functions and property accessors
This commit contains:
* correct containingFunctionSymbol for value parameter from accessors
* correct choose between originalForIntersectionOverrideAttr and
originalForSubstitutionOverrideAttr for value parameters from functions

^KT-64243
2023-12-19 16:21:57 +00:00
Dmitrii Gridin 4a87ae9e04 [LL FIR] fix type annotations resolution for fake override declarations
Fake overrides have annotations from a class from which type parameters
were substituted, so we have to resolve them before the declaration.
It worked before in most cases as an original containing class is a part
of the designation path, so we considered annotations from such classes
as our and just resolved them in the wrong scope without right locks

^KT-64243
2023-12-19 16:21:57 +00:00
Dmitrii Gridin b6f0571f0b [LL FIR] introduce lazy resolution tests for fake overrides
^KT-64243
2023-12-19 16:21:57 +00:00
Dmitrii Gridin 6ffa8e6e98 [LL FIR] LLFirResolveTarget: make firFile property optional
Not all targets belonged to any files (e.g., fake overrides),
so we should be able to resolve them without a provided file

^KT-64243
2023-12-19 16:21:57 +00:00
Dmitrii Gridin a7cfbe6d50 [LL FIR] drop redundant usages of LLFirResolveTarget.firFile
After 6893c44a 'target' can be used in many cases

^KT-64243
2023-12-19 16:21:57 +00:00
Mikhail Glukhikh 4783822fbc K1/K2: add test confirming the work of KT-54487 case
#KT-54487 Obsolete
#KT-63350 Declined
2023-12-19 12:24:37 +00:00
Marco Pennekamp 32fe29b8cc [Test] Add debug names to unnamed test disposables
- This helps to track down disposables which are never disposed, and
  reduces confusion when printing disposables in general (the names will
  now be meaningful, instead of endless lists of "newDisposable" and
  "TestDisposable").

^KT-64099
2023-12-19 11:12:23 +00:00
Marco Pennekamp bba5447b12 [Test/AA] Pass project disposable to getOrCreateApplicationEnvironment instead of application disposable
- The disposable passed to `getOrCreateApplicationEnvironment` should
  not actually be the application environment's disposable, which is
  created inside the function. Instead, it should be the project's
  disposable, which is used to track how many projects still rely on the
  shared application environment.
- This issue wasn't apparent before because there is no visible
  consequence when an application isn't disposed after all projects have
  been disposed (during tests). However, the solution for KT-63650
  relies on application environments being disposed after all projects
  are disposed, so that a new application environment with a different
  configuration can be created. (Only one shared application environment
  may be active at the same time.)

^KT-63650
2023-12-19 11:12:23 +00:00
Dmitriy Novozhilov fa33c5dc79 [FIR] Implement deprecation warning for synthetic without java base getter
Also implement new resolution behavior under language feature

^KT-63076 Fixed
^KT-64358
2023-12-19 09:04:26 +00:00
Dmitriy Novozhilov be6694f049 [Test] Add tests for KT-63076 2023-12-19 09:04:26 +00:00
Dmitrii Gridin a824a8f86d [Analysis API] StandaloneModeLibraryBinaryTestConfigurator: drop sealed preprocessor 2023-12-19 07:03:31 +00:00
Jinseong Jeon 4c7e9f3cbf AA standalone: more tests about resolving properties in nested class/object from binary 2023-12-19 07:03:31 +00:00
Jinseong Jeon d603115def AA standalone: set binary dependency kind in test configurator 2023-12-19 07:03:30 +00:00
Jinseong Jeon 92d6aeb7a3 LC: lookup backing field of property in decompiled class/companion
^KTIJ-27684
2023-12-19 07:03:30 +00:00
Jinseong Jeon e5095a60ba K2 UAST: lookup properties in the containing class, not companion object
...because properties in the companion object are materialized
in the containing class.

^KTIJ-27684 fixed
2023-12-19 07:03:29 +00:00
Jinseong Jeon 10c9b81c79 AA standalone: introduce multi-module binary dependency test 2023-12-19 07:03:29 +00:00
Jinseong Jeon 3fbc16af62 AA standalone: repackage test configurators
...before introducing a new test configurator for binary dependency
2023-12-19 07:03:28 +00:00
Jinseong Jeon 0832158017 AA standalone: rename previous test to include SingleModule
...before introducing multi-module / binary dependency tests
2023-12-19 07:03:28 +00:00
Jinseong Jeon 1f0540faa1 AA: place FIR test configurator in the same package
...for better consistency and easier discovery.
2023-12-19 07:03:27 +00:00
Dmitrii Gridin f39c72360d [SLC] inherit SymbolPsiLiteral from PsiLiteralExpression
We should use PsiLiteralExpression instead of PsiLiteral as it
is used in the Java world. Effectively, `psiLiteral` property
already has this type (as `createPsiExpression` produce `PsiExpression`),
but we missed this part before and used just PsiLiteral for our
own class

^KT-63949 Fixed
2023-12-18 20:20:06 +00:00
Vladimir Sukharev c09e8909d4 [K/N] Move cinterop tests from standalone to codegen/box
^KT-61259
2023-12-18 18:04:27 +00:00