Commit Graph

39 Commits

Author SHA1 Message Date
Roman Golyshev 1e91c66d19 [FIR IDE] Fix Always false condition in FirReferenceResolveHelper 2021-09-21 01:29:06 +03:00
Roman Golyshev 39116853d2 [FIR IDE] Implement pointers for JavaField and SyntheticJavaProperty symbols 2021-09-21 01:29:05 +03:00
Tianyu Geng 9ca8d39240 FIR IDE: use KtVariableWithInvokeFunctionCall for extension invoke 2021-09-17 17:27:53 +02:00
Tianyu Geng c19ed07fd1 FIR IDE: add cache in KtFirCallResolver 2021-09-17 17:27:52 +02:00
Tianyu Geng d2ed203528 FIR IDE: Add substitutor to KtCall 2021-09-17 17:27:52 +02:00
Tianyu Geng 9f0f1781c9 FIR IDE: add validity token to KtCall 2021-09-17 17:27:52 +02:00
Tianyu Geng 245c4082cd FIR IDE: add KtSubstitutor 2021-09-17 17:27:52 +02:00
Nikolay Lunyak ba8dc49a31 [FIX] Move backing field bytecodeListing tests to a separate folder 2021-09-17 15:29:35 +03:00
Tianyu Geng 765cad8448 FIR checker: substitute type parameters in dispatch receiver type
Consider the following code:

```
fun test(a: List<String>) {
  a.first()
}
```

The dispatch receiver type of `first` in this case is `List<T>` before
this change. After this change, it's `List<String>`.

In addition, this change also replace the dispatch receiver type with
the more specific type if available. For example, consider the following

```
class MyList: ArrayList<String>()

fun test(a: MyList) {
  a.get(0)
}
```
The dispatch receiver type of `get` is `MyList`, instead of
`ArrayList<String>`. That is, a fake override is created in this case.
2021-09-17 01:59:06 +03:00
Tianyu Geng c047adbaec FIR IDE: register module data for library modules
Various HL API needs to create fake override for symbols in libraries.
Without module data it may fail. Following exception is an example:

java.lang.IllegalStateException: Module data is not registered in Libraries session
	at org.jetbrains.kotlin.fir.FirModuleDataKt.getModuleData(FirModuleData.kt:80)
	at org.jetbrains.kotlin.fir.scopes.impl.FirFakeOverrideGenerator.createCopyForFirProperty(FirFakeOverrideGenerator.kt:297)
	at org.jetbrains.kotlin.fir.scopes.impl.FirFakeOverrideGenerator.createCopyForFirProperty$default(FirFakeOverrideGenerator.kt:281)
	at org.jetbrains.kotlin.fir.scopes.impl.FirFakeOverrideGenerator.createSubstitutionOverrideProperty(FirFakeOverrideGenerator.kt:271)
	at org.jetbrains.kotlin.fir.scopes.impl.FirFakeOverrideGenerator.createSubstitutionOverrideProperty$default(FirFakeOverrideGenerator.kt:254)
	at org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope.createSubstitutionOverrideProperty(FirClassSubstitutionScope.kt:211)
	at org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope.access$createSubstitutionOverrideProperty(FirClassSubstitutionScope.kt:30)
	at org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope$processPropertiesByName$1.invoke(FirClassSubstitutionScope.kt:84)
	at org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope$processPropertiesByName$1.invoke(FirClassSubstitutionScope.kt:81)
	at org.jetbrains.kotlin.fir.scopes.impl.FirClassUseSiteMemberScope$processPropertiesByName$1.invoke(FirClassUseSiteMemberScope.kt:32)
	at org.jetbrains.kotlin.fir.scopes.impl.FirClassUseSiteMemberScope$processPropertiesByName$1.invoke(FirClassUseSiteMemberScope.kt:25)
	at org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope.processPropertiesByName(FirClassDeclaredMemberScope.kt:115)
	at org.jetbrains.kotlin.fir.scopes.impl.FirClassUseSiteMemberScope.processPropertiesByName(FirClassUseSiteMemberScope.kt:25)
	at org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope.processPropertiesByName(FirClassSubstitutionScope.kt:81)
	at org.jetbrains.kotlin.fir.scopes.impl.FirClassUseSiteMemberScope.computeDirectOverridden(FirClassUseSiteMemberScope.kt:45)
	at org.jetbrains.kotlin.fir.scopes.impl.FirClassUseSiteMemberScope.access$computeDirectOverridden(FirClassUseSiteMemberScope.kt:17)
	at org.jetbrains.kotlin.fir.scopes.impl.FirClassUseSiteMemberScope$processPropertiesByName$1.invoke(FirClassUseSiteMemberScope.kt:28)
	at org.jetbrains.kotlin.fir.scopes.impl.FirClassUseSiteMemberScope$processPropertiesByName$1.invoke(FirClassUseSiteMemberScope.kt:25)
	at org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope.processPropertiesByName(FirClassDeclaredMemberScope.kt:115)
	at org.jetbrains.kotlin.fir.scopes.impl.FirClassUseSiteMemberScope.processPropertiesByName(FirClassUseSiteMemberScope.kt:25)
	at org.jetbrains.kotlin.idea.frontend.api.fir.components.KtFirSymbolDeclarationOverridesProvider.processCallableByName(KtFirSymbolDeclarationOverridesProvider.kt:58)
	at org.jetbrains.kotlin.idea.frontend.api.fir.components.KtFirSymbolDeclarationOverridesProvider.access$processCallableByName(KtFirSymbolDeclarationOverridesProvider.kt:29)
	at org.jetbrains.kotlin.idea.frontend.api.fir.components.KtFirSymbolDeclarationOverridesProvider$getDirectlyOverriddenSymbols$$inlined$processOverrides$1.invoke(FirRefWithValidityCheck.kt:105)
	at org.jetbrains.kotlin.idea.frontend.api.fir.components.KtFirSymbolDeclarationOverridesProvider$getDirectlyOverriddenSymbols$$inlined$processOverrides$1.invoke(FirRefWithValidityCheck.kt:33)
	at org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeKt.withFirDeclaration(LowLevelFirApiFacade.kt:129)
	at org.jetbrains.kotlin.idea.frontend.api.fir.components.KtFirSymbolDeclarationOverridesProvider.getDirectlyOverriddenSymbols(KtFirSymbolDeclarationOverridesProvider.kt:253)
	at org.jetbrains.kotlin.idea.frontend.api.components.KtSymbolDeclarationOverridesProviderMixIn$DefaultImpls.getDirectlyOverriddenSymbols(KtSymbolDeclarationOverridesProvider.kt:45)
	at org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession.getDirectlyOverriddenSymbols(KtAnalysisSession.kt:29)
	at org.jetbrains.kotlin.idea.completion.weighers.CallableWeigher.addWeight(CallableWeigher.kt:28)
	at org.jetbrains.kotlin.idea.completion.weighers.Weighers.applyWeighsToLookupElement(Weighers.kt:61)
	at org.jetbrains.kotlin.idea.completion.contributors.FirCompletionContributorBase.applyWeighers(FirCompletionContributorBase.kt:115)
	at org.jetbrains.kotlin.idea.completion.contributors.FirCompletionContributorBase.addCallableSymbolToCompletion(FirCompletionContributorBase.kt:101)
	at org.jetbrains.kotlin.idea.completion.contributors.FirCallableCompletionContributor.collectDotCompletionForCallableReceiver(FirCallableCompletionContributor.kt:189)
	at org.jetbrains.kotlin.idea.completion.contributors.FirCallableCompletionContributor.collectDotCompletion(FirCallableCompletionContributor.kt:145)
	at org.jetbrains.kotlin.idea.completion.contributors.FirCallableCompletionContributor.complete(FirCallableCompletionContributor.kt:79)
	at org.jetbrains.kotlin.idea.completion.contributors.FirCallableCompletionContributor.complete(FirCallableCompletionContributor.kt:31)
	at org.jetbrains.kotlin.idea.completion.contributors.FirCompletionContributorBaseKt.complete(FirCompletionContributorBase.kt:124)
	at org.jetbrains.kotlin.idea.completion.Completions.complete(Completions.kt:18)
	at org.jetbrains.kotlin.idea.completion.KotlinFirCompletionProvider.complete(KotlinFirCompletionContributor.kt:81)
	at org.jetbrains.kotlin.idea.completion.KotlinFirCompletionProvider.addCompletions(KotlinFirCompletionContributor.kt:70)
	at com.intellij.codeInsight.completion.CompletionProvider.addCompletionVariants(CompletionProvider.java:34)
	at com.intellij.codeInsight.completion.CompletionContributor.fillCompletionVariants(CompletionContributor.java:156)
	at com.intellij.codeInsight.completion.CompletionService.getVariantsFromContributors(CompletionService.java:77)
	at com.intellij.codeInsight.completion.CompletionService.getVariantsFromContributors(CompletionService.java:60)
	at com.intellij.codeInsight.completion.CompletionService.performCompletion(CompletionService.java:133)
	at com.intellij.codeInsight.completion.BaseCompletionService.performCompletion(BaseCompletionService.java:41)
	at com.intellij.codeInsight.completion.CompletionProgressIndicator.lambda$calculateItems$12(CompletionProgressIndicator.java:863)
	at com.intellij.util.indexing.FileBasedIndex.lambda$ignoreDumbMode$0(FileBasedIndex.java:163)
	at com.intellij.openapi.util.RecursionManager$1.computePreventingRecursion(RecursionManager.java:111)
	at com.intellij.util.indexing.FileBasedIndexEx.ignoreDumbMode(FileBasedIndexEx.java:588)
	at com.intellij.util.indexing.FileBasedIndex.ignoreDumbMode(FileBasedIndex.java:162)
	at com.intellij.util.indexing.DumbModeAccessType.ignoreDumbMode(DumbModeAccessType.java:43)
	at com.intellij.codeInsight.completion.CompletionProgressIndicator.calculateItems(CompletionProgressIndicator.java:859)
	at com.intellij.codeInsight.completion.CompletionProgressIndicator.runContributors(CompletionProgressIndicator.java:847)
	at com.intellij.codeInsight.completion.CodeCompletionHandlerBase.lambda$startContributorThread$6(CodeCompletionHandlerBase.java:353)
	at com.intellij.codeInsight.completion.AsyncCompletion.lambda$tryReadOrCancel$5(CompletionThreading.java:172)
	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1078)
	at com.intellij.codeInsight.completion.AsyncCompletion.tryReadOrCancel(CompletionThreading.java:170)
	at com.intellij.codeInsight.completion.CodeCompletionHandlerBase.lambda$startContributorThread$7(CodeCompletionHandlerBase.java:345)
	at com.intellij.codeInsight.completion.AsyncCompletion.lambda$startThread$0(CompletionThreading.java:95)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:183)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:705)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:647)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:63)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:170)
	at com.intellij.codeInsight.completion.AsyncCompletion.lambda$startThread$1(CompletionThreading.java:91)
	at com.intellij.openapi.application.impl.ApplicationImpl$1.run(ApplicationImpl.java:265)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
2021-09-17 01:59:05 +03:00
Tianyu Geng d77db2cda6 FIR checker: expose API to check if two types are compatible
This is useful for quickfixes offering casts. We don't want to offer
user to cast incompatible types.

Also, explicitly allow compare to `Nothing` and handle `Nothing` from intersection
2021-09-17 01:59:05 +03:00
Tianyu Geng 951812f130 FIR checker: record whether type mismatch is due to nullability
This is useful for downstream quickfixes.
2021-09-17 01:59:01 +03:00
Tianyu Geng d3e8cc577c FIR checker: fix local type approximation on delegated property
Previously types of delegated property is not approximated, which can
cause local types to leak through public APIs.
2021-09-16 22:38:08 +03:00
Tianyu Geng 76e192fc8a FIR Checker: check AMBIGUOUS_ANONYMOUS_TYPE_INFERRED
Also change
org.jetbrains.kotlin.fir.types.TypeUtilsKt#hideLocalTypeIfNeeded to skip
approximating anonymous objects if there are multiple super type refs so
that resolution behaves the same (for uncompilable code).

Note that this change does not implement check for
ApproximateAnonymousReturnTypesInPrivateInlineFunctions as the check is
already turned on in 1.5 and will likely not needed when FIR becomes
stable.
2021-09-16 22:38:06 +03:00
Jinseong Jeon 35409fdb8d FIR IDE: resolve arrayOf calls in annotations 2021-09-15 22:33:20 +02:00
Jinseong Jeon 068e81570d FIR IDE: type-aware constant conversion 2021-09-15 22:32:12 +02:00
Roman Golyshev 642591770e [FIR] Calculate lazy initializers in properties with backing fields
More tests should be added in the future
2021-09-15 18:33:43 +00:00
Dmitriy Novozhilov 5c2a3bb78e [FIR] Move duplicating names and classIds to StandardClassIds 2021-09-15 17:11:29 +03:00
Ilya Kirillov 81336820e2 FIR IDE: regenerate diagnostics 2021-09-15 11:32:59 +02:00
Ilya Kirillov 585eb9a4f0 FIR IDE: regenerate analysis api tests 2021-09-15 11:32:49 +02:00
Ilya Kirillov 5b38bd2be2 FIR IDE: fix generators after changing analysis api packages 2021-09-15 11:32:47 +02:00
Ilya Kirillov 99a65527b7 FIR IDE: fix symbol light classes imports after package changes 2021-09-15 11:32:45 +02:00
Ilya Kirillov 42f0536904 FIR IDE: move analysis api fir testdata to the analysis directory 2021-09-15 11:32:43 +02:00
Ilya Kirillov 4d52b354af FIR IDE: move analysis api fir generator to the analysis directory 2021-09-15 11:32:33 +02:00
Ilya Kirillov b43e664985 FIR IDE: move analysis api fir test sources to the analysis directory 2021-09-15 11:32:32 +02:00
Ilya Kirillov 5e9f807c78 FIR IDE: move analysis api fir main sources to the analysis directory 2021-09-15 11:32:30 +02:00
Ilya Kirillov 989f3248e4 FIR IDE: move low level api testdata sources to the analysis directory 2021-09-15 11:32:28 +02:00
Ilya Kirillov 633b0fa612 FIR IDE: move low level api test sources to the analysis directory 2021-09-15 11:32:25 +02:00
Ilya Kirillov b70f4f581e FIR IDE: move low level api main sources to the analysis directory 2021-09-15 11:32:22 +02:00
Ilya Kirillov 0c04ff98c3 FIR IDE: move analysis api to the analysis directory 2021-09-15 11:31:30 +02:00
Ilya Kirillov 55990f65cb FIR LC: fix vararg parameter type
After fix in KtParamterSymbol, vararg parameter type now is a non-array type
2021-09-13 19:18:02 +02:00
Jinseong Jeon c2964f688e FIR LC: don't include annotations w/o use-site targets to property accessors 2021-09-09 16:07:09 +02:00
Jinseong Jeon 5446a8ad10 FIR IDE: null out for erroneous PsiType conversion 2021-09-09 16:07:09 +02:00
Dmitriy Novozhilov 762d225bd7 Unify Deprecation classes from :core:compiler.common and :compiler:frontend modules 2021-09-02 15:04:06 +03:00
Jinseong Jeon 24abf7168c FIR LC: get origin of property accessors via light member origin 2021-08-30 23:13:23 +03:00
Jinseong Jeon dbce9b3d45 FIR LC: use FirLightParameterList for setter parameter
to preserve the parent chain from setter parameter to setter
2021-08-30 23:13:22 +03:00
Ilya Kirillov 20f297aaf7 FIR LC: do not ignore useSite target for getting deprecation status 2021-08-24 20:13:18 +03:00
Ilya Kirillov c17a4a5a3b FIR IDE: move light classes to separate module 2021-08-24 20:13:09 +03:00
Ilya Kirillov abe2311372 FIR IDE: move declaration/package providers to separate module 2021-08-24 20:12:58 +03:00