Commit Graph

2220 Commits

Author SHA1 Message Date
Dmitrii Gridin 607b8f6b61 Revert "[SLC] Support generics and ignore whitespace in KtSuperTypeList.findEntry"
This reverts commit e77f5c7764.
2023-02-13 17:28:35 +01:00
Dmitrii Gridin 761553ea75 [LC] reduce memory consumption from SLC and DLC
The main change is drop `LightClassesLazyCreator`

KtLightClassForDecompiledDeclaration:
* fixed a few captured fields

^KT-56561 Fixed
2023-02-13 16:08:17 +00:00
Dmitrii Gridin a8e8fc1f11 [LC] add ClassInnerStuffCache
^KT-56561
2023-02-13 16:08:16 +00:00
Dmitrii Gridin f501259cd4 [ULC] KtLightClassBase: do not override myInnersCache
^KT-56561
2023-02-13 16:08:16 +00:00
Pavel Mikhailovskii e77f5c7764 [SLC] Support generics and ignore whitespace in KtSuperTypeList.findEntry 2023-02-13 14:47:45 +00:00
Mikhail Glukhikh 2405f28e64 K2: add test confirming successful work of KT-56261 2023-02-13 12:21:42 +00:00
Kirill Rakhman 314784f435 [FIR] Introduce FirDeclarationStatus.hasStableParameterNames
This flag is true by default but is set to false for

- Java methods and constructors
- interface delegation methods that delegate to Java

The NAMED_ARGUMENTS_NOT_ALLOWED logic is mostly refactored to use the
new flag though some custom logic remains for determining the correct
message and to work around a corner case with fake overrides.

The flag is (de)serialized from/to metadata. For backward compatibility
with K1, delegated methods to Java types are deserialized as stable.

^KT-40480 Fixed
2023-02-13 12:09:39 +00:00
Marco Pennekamp fb43e53ca3 [LL FIR] KTIJ-24574 Fix containing declaration finder for init blocks
- KTIJ-24574 occurred because a local destructuring declaration was
  erroneously returned as the non-local containing declaration of an
  element by `getNonLocalContainingOrThisDeclaration`. This occurred in
  `init` blocks.

KTIJ-24574 fixed
2023-02-13 10:38:26 +00:00
Ilya Kirillov 769fb835f9 [Analysis API] introduce a KotlinResolutionScopeProvider to optimize the resolutions scope in the IDE 2023-02-13 11:35:24 +01:00
Ilya Kirillov 1f834aa99c [Analysis API FIR] avoid redundant resolve in renderer
Before we resolved all declarations to body resolve.
It was rarely needed and badly affects performance.
If the resolution will still be needed, it will be lazily performed by KtSymbol
2023-02-13 09:53:33 +00:00
Dmitrii Gridin 06095b379f [LL API] LLFirProvider: add missing usage of SyntheticFirClassProvider for callable declarations
currently on air resolve failed for such declarations
^KT-55750
2023-02-13 07:37:31 +00:00
Stanislav Erokhin bec9ad0f6b Minor. Rename FunctionClassDescriptor#functionKind -> functionTypeKind
This commit is needed for the following commit.
There we will restore the compatibility API with Android IDEA plugin
2023-02-10 16:01:04 +00:00
Anna Kozlova a71a94add7 [LL] avoid dbl service registration 2023-02-10 13:20:02 +00:00
Dmitriy Novozhilov a9248569a6 [FIR] Fix reporting of UNINITIALIZED_ENUM_ENTRY in init blocks
^KT-41126 Fixed
2023-02-10 12:30:12 +00:00
Dmitriy Novozhilov 3c42521ce7 [FE 1.0] Report warning on leaking anonymous object type from private inline lambda
^KT-33917
^KT-56490 Fixed
2023-02-09 20:44:15 +00:00
Jinseong Jeon 88b07f5287 SLC: keep annotations on type when converting to PsiType
^KT-55815 Fixed
2023-02-09 19:53:45 +01:00
Roman Golyshev ac8d5a0ea8 [Analysis API] KTIJ-24527 Properly handle typealiased functional types
Use expanded ConeTypes to get correct parameters and return types

Also, fix the order of rendering modifiers in `KtFunctionalTypeRenderer`

^KTIJ-24527 Fixed
2023-02-09 12:51:23 +00:00
Denis.Zharkov a71251d856 K2: Set correct containingFile in CheckerContext
Previously, it was working for all the checkers but the file-level
DeclarationChecker's because when execution comes to
DeclarationCheck::check for a file, `containingDeclarations` is empty
(it doesn't contain the file itself yet), thus some things that rely on
CheckerContext::containingFile don't work properly.

For example, SimpleDiagnosticsCollectorWithSuppress.report that
effectively doesn't collect diagnostics when the containingFile is null.
2023-02-09 12:08:06 +00:00
Denis.Zharkov a311d6eea0 K2: Extract CheckerContextForProvider from CheckerContext
So, the idea is that CheckerContext should remain just read-only
while the one who runs the checkers might build/modify the context.

^KT-56460 Related
2023-02-09 12:08:05 +00:00
Ting-Yuan Huang 42b08d411b [FIR] Pass container when creating FunctionType
so that it can be resolved when type annotations are demanded.
2023-02-08 19:43:24 +00:00
Dmitrii Gridin 8f34b6599a [AA FIR] BuilderCache: replace regular map with concurrent to avoid exceptions
Example:
```stacktrace
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 32 out of bounds for length 17
  at com.intellij.util.containers.RefHashMap$MyMap.rehash(RefHashMap.java:85)
  at it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap.insert(Object2ObjectOpenHashMap.java:251)
  at it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap.put(Object2ObjectOpenHashMap.java:259)
  at com.intellij.util.containers.RefHashMap.putKey(RefHashMap.java:160)
  at com.intellij.util.containers.RefKeyRefValueHashMap.put(RefKeyRefValueHashMap.java:55)
  at org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder$FunctionLikeSymbolBuilder.buildFunctionSymbol(KtSymbolByFirBuilder.kt:727)
  at org.jetbrains.kotlin.analysis.api.fir.scopes.FirScopeUtilsKt$getCallableSymbols$1$1$1$1.invoke(firScopeUtils.kt:25)
  at org.jetbrains.kotlin.analysis.api.fir.scopes.FirScopeUtilsKt$getCallableSymbols$1$1$1$1.invoke(firScopeUtils.kt:24)
  at org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScopeImpl.processFunctionsByName(FirClassDeclaredMemberScope.kt:103)
  ```

^KTIJ-22749
2023-02-08 20:12:12 +01:00
Jaebaek Seo a09d0aa1cf Handle SHORTEN_IF_ALEADY_IMPORTED case of KtFirReferenceShortener
For the following example, when we run the reference shortener, it
drops `a.b.c` qualifier, because it matches "FOURTH".
```
package a.b.c

fun <T, E, D> foo(a: T, b: E, c: D) = a.hashCode() + b.hashCode() + c.hashCode() // FIRST
fun <E> E.foo() = hashCode() // SECOND

object Receiver {
    fun <T, E, D> foo(a: T, b: E, c: D) = a.hashCode() + b.hashCode() + c.hashCode() // THIRD
    fun foo(a: Int, b: Boolean, c: String) = a.hashCode() + b.hashCode() + c.hashCode() // FOURTH
    fun test(): Int {
        fun foo(a: Int, b: Boolean, c: Int) = a + b.hashCode() + c // FIFTH
        return <expr>a.b.c.foo(1, false, "bar")</expr>
    }
}
```

As shown in the above example, when SHORTEN_IF_ALEADY_IMPORTED option is
given from a user, the reference shortener has to check whether it can
drop the qualifier without changing the referenced symbol and if it is
possible to do that without adding a new import directive, it deletes
the qualifier.

It needs two steps:
 1. Collect all candidate symbols matching the signature e.g., function
    arguments / type arguments
 2. Determine whether the referenced symbol has the highest reference
    priority when we drops the qualifier depending on scopes

This commit uses `AllCandidatesResolver(shorteningContext.analysisSession.useSiteSession).
getAllCandidates( .. fake FIR call/property-access ..)` for step1.
For step2, we use a heuristic based on scopes of candidates. If a
candidate symbol is under the same scope with the target expression, it
has a `FirLocalScope` which has the high priority. So when we have a
candidate under a `FirLocalScope` and the actual referenced symbol is
different from the candidate, we must avoid dropping its qualifier
because the shortening will change its semantics i.e., reference.

The order of scopes depending on their scope types is:
 1. FirLocalScope
 2. FirClassUseSiteMemberScope / FirNestedClassifierScope
 3. FirExplicitSimpleImportingScope
 4. FirPackageMemberScope
 5. others

Note that for "others" the above rule can be wrong. Please update it if
you find other scopes that have a priority higher than the specified
scopes.

One of non-trivial parts is the priority among multiple
FirClassUseSiteMemberScope and FirNestedClassifierScope. They are
basically scopes for class declarations. We decide their priorities
based on the distance of class declaration from the target expression.

Note that we take a strict approach to reject all false positive. For
example, when we are not sure, we don't shorten it to avoid changing its
semantics.

TODO: One corner case is handling receivers. We have to update
```
private fun shortenIfAlreadyImported(
    firQualifiedAccess: FirQualifiedAccess,
    calledSymbol: FirCallableSymbol<*>,
    expressionInScope: KtExpression,
): Boolean
```

The current implementation cannot handle the following example:
```
package foo
class Foo {
    fun test() {
        // It references FIRST. Removing `foo` lets it reference SECOND.
        <caret>foo.myRun {
            42
        }
    }
}
inline fun <R> myRun(block: () -> R): R = block()         // FIRST
inline fun <T, R> T.myRun(block: T.() -> R): R = block()  // SECOND
```

Tests related to TODO:
 - analysis/analysis-api/testData/components/referenceShortener/referenceShortener/receiver2.kt
 - analysis/analysis-api/testData/components/referenceShortener/referenceShortener/receiver3.kt
2023-02-08 18:39:12 +00:00
Jaebaek Seo 860dee2cb1 Fix reference resolver bug for companion object whose name is the same as class
FirReferenceResolveHelper internally checks whether the referenced class
id matches the qualifed access or not. If they do not match, it reports
an error. When the companion object has the same name as the class,
resolving a qualified expression access to a member of the companion
object causes an error because of the mismatch e.g.,

```
package my.sample

class Test {
    fun a() {
        my.sample.<caret>Test.say()
    }

    companion object Test {
        fun say() {}
    }
}
```

This commit fixes the issue.

TODO: When the companion object has a name difference from class, it
does not report an error but the resolution result is wrong in FIR. See
KT-56167.

---

Commentary from rebaser: the issue mentioned in this code is
fixed in 71a368e06e, so the actual
fix is omitted, and only test data is preserved
2023-02-08 18:39:11 +00:00
Ilya Kirillov d03f523a71 [LL FIR] return non-cancellable section back for resolve until cache invalidation problems (^KTIJ-24594) are fixed
^KTIJ-24594
2023-02-08 18:31:42 +00:00
Mikhail Glukhikh 898a9a0f2c K2: apply SAM if argument has postponed lambdas #KT-53966 Fixed 2023-02-08 17:40:21 +00:00
Mikhail Glukhikh 5a9e8b3c0a FE: add tests for KT-53966 (positive/negative) 2023-02-08 17:40:20 +00:00
Ilya Kirillov 69e41e19e7 [Analysis API] fix possible leaks of FirDeclarations from cache keys in KtSymbolByFirBuilder
If some FirDeclarations is inaccessible then there is no reason to store KtSymbol for it

^KTIJ-22749
2023-02-07 17:57:38 +00:00
Ilya Kirillov f5e5a134e7 [Analysis API] remove caches from KtSymbolByFirBuilder with very low hit rates
^KTIJ-22749
2023-02-07 17:57:38 +00:00
Ilya Kirillov a587913225 [Analysis API] avoid having separate versions of KtFirScopeProvider for each thread
Now KtFirScopeProvider do not contain caches, so it can be reused between the threads. The only thread-local thing it had, was a ScopeSession. Now it's not stored in the KtFirScopeProvider
2023-02-07 17:57:37 +00:00
Ilya Kirillov 489ffc5acb [Analysis API] remove caches from KtFirScopeProvider
The hit-rate for this cache seems to be very law and it causes additional memory consumption

^KTIJ-22749
2023-02-07 17:57:37 +00:00
Dmitrii Gridin 6c24436657 [SLC] make INSTANCE field for object public
^KT-56441 Fixed
2023-02-06 17:48:37 +00:00
Dmitrii Gridin 8e815e943e [SLC] add tests on private object
^KT-56441
2023-02-06 17:48:37 +00:00
Dmitrii Gridin bd7e5fd324 [LC] update testData for objects
^KTIJ-24119
2023-02-06 17:48:36 +00:00
aleksandrina-streltsova 7db32f6430 [FIR] Fix unexpected primary constructor scope in secondary constructor
^KTIJ-23720
^KT-56353 Fixed
2023-02-06 10:30:28 +00:00
Valeriy.Vyrva 9a0e2b08f1 Bump JUnit5 version to 5.9.1 2023-02-06 10:01:52 +00:00
Dmitriy Novozhilov f479a56f5e [FIR] Fix reporting of CANNOT_INFER_PARAMETER_TYPE on lambda parameters
^KT-56138 Fixed
2023-02-06 08:09:57 +00:00
Dmitriy Novozhilov e9204521a9 [FIR] Properly create type ref for error type in various places 2023-02-06 08:09:56 +00:00
Roman Golyshev 08831c0867 [Analysis API] KTIJ-24192 Use only lowerBound on flexible types when looking for decompiled PSI
Otherwise, decompiled declarations with flexible types in them cannot be
properly resolved by the Analysis API

Examples of such declarations:

```kt
fun foo()/*: ImplicitTypeFromJava! */ = <some call to java code>

var bar/*: ImplicitTypeFromJava! */ = foo()
// set(value: ImplicitTypeFromJava!) { ... }
```

^KTIJ-24192 Fixed
2023-02-03 23:34:51 +01:00
Dmitrii Gridin 5b8ece379d [SLC] GranularAnnotationsBox: drop commented annotations
^KT-56046
2023-02-03 19:49:16 +00:00
Dmitrii Gridin 3e4c6b160a [AA] KtAnnotationApplicationInfo: add more information to kdoc
^KT-56046
2023-02-03 19:49:15 +00:00
Dmitrii Gridin 00eddae867 [SLC] rename from toFilterWithAdditionalNull to toOptionalFilter
^KT-56046
2023-02-03 19:49:14 +00:00
Dmitrii Gridin 482bc15a70 [AA] rename from NullAnnotationUseSiteTargetFilter to NoAnnotationUseSiteTargetFilter
^KT-56046
2023-02-03 19:49:14 +00:00
Dmitrii Gridin 197160fbd7 [SLC] SymbolLightAbstractAnnotationParameterList: introduce more flexible symbolLightAnnotationParameterList api
^KT-56046
2023-02-03 19:49:14 +00:00
Dmitrii Gridin d7535c303d [SLC] rename from SimpleAdditionalAnnotationsProvider to CollectionAdditionalAnnotationsProvider
^KT-56046
2023-02-03 19:49:13 +00:00
Dmitrii Gridin 6e48774fff [SLC] rename from SimpleAnnotationFilter to CollectionAnnotationFilter
^KT-56046
2023-02-03 19:49:13 +00:00
Dmitrii Gridin fc05fa5b1a [SLC] rename from LazyAnnotationsBox to GranularAnnotationsBox
^KT-56046
2023-02-03 19:49:13 +00:00
Dmitrii Gridin a2c0a88592 [SLC] rename from LazyModifiersBox to GranularModifiersBox
^KT-56046
2023-02-03 19:49:12 +00:00
Dmitrii Gridin c05a47355e [SLC] rename from SimpleModifiersBox to InitializedModifiersBox
^KT-56046
2023-02-03 19:49:12 +00:00
Dmitrii Gridin 650267592c [SLC] rename from SimpleAnnotationsBox to ComputeAllAtOnceAnnotationsBox
^KT-56046
2023-02-03 19:49:12 +00:00
Dmitrii Gridin 0b7ef03490 [SLC] AnnotationFilter: add kdoc
^KT-56046
2023-02-03 19:49:11 +00:00