[FIR] Split :compiler:fir:resolve module into three different modules
Those modules are:
- :compiler:fir:providers, which contains Fir and Symbol providers,
scopes, and different utilities used by them
- :compiler:fir:semantics, which contains different abstractions and
entities which are used in resolution and in checkers
- :compiler:fir:resolve, which contains all stuff related to resolution
and inference
There are two pros of this change:
1. It may increase gradle build, because it allows to compile :fir:resolve
and :fir:checkers modules in parallel
2. Logic of working FIR (scopes, providers, DFA logic system, etc) is
now separated from logic of resolution phases, so for example checkers,
which are depend on scopes physically will not be able to run resolve
in any way
This commit is contained in:
@@ -9,6 +9,8 @@ dependencies {
|
|||||||
api(project(":compiler:fir:fir2ir"))
|
api(project(":compiler:fir:fir2ir"))
|
||||||
api(project(":compiler:ir.tree"))
|
api(project(":compiler:ir.tree"))
|
||||||
api(project(":compiler:fir:resolve"))
|
api(project(":compiler:fir:resolve"))
|
||||||
|
api(project(":compiler:fir:providers"))
|
||||||
|
api(project(":compiler:fir:semantics"))
|
||||||
api(project(":compiler:fir:checkers"))
|
api(project(":compiler:fir:checkers"))
|
||||||
api(project(":compiler:fir:checkers:checkers.jvm"))
|
api(project(":compiler:fir:checkers:checkers.jvm"))
|
||||||
api(project(":compiler:fir:java"))
|
api(project(":compiler:fir:java"))
|
||||||
|
|||||||
+1
-1
@@ -28,8 +28,8 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirFieldImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirFieldImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
|
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.originalConstructorIfTypeAlias
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.getSymbolByLookupTag
|
import org.jetbrains.kotlin.fir.resolve.getSymbolByLookupTag
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.originalConstructorIfTypeAlias
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||||
|
|||||||
+1
-1
@@ -49,7 +49,7 @@ internal interface KtFirAnalysisSessionComponent {
|
|||||||
qualifiedAccessSource: FirSourceElement?,
|
qualifiedAccessSource: FirSourceElement?,
|
||||||
diagnosticCache: MutableList<FirDiagnostic>
|
diagnosticCache: MutableList<FirDiagnostic>
|
||||||
): KtDiagnosticWithPsi<*>? {
|
): KtDiagnosticWithPsi<*>? {
|
||||||
val firDiagnostic = toFirDiagnostics(source, qualifiedAccessSource).firstOrNull() ?: return null
|
val firDiagnostic = toFirDiagnostics(analysisSession.rootModuleSession, source, qualifiedAccessSource).firstOrNull() ?: return null
|
||||||
diagnosticCache += firDiagnostic
|
diagnosticCache += firDiagnostic
|
||||||
check(firDiagnostic is FirPsiDiagnostic)
|
check(firDiagnostic is FirPsiDiagnostic)
|
||||||
return firDiagnostic.asKtDiagnostic()
|
return firDiagnostic.asKtDiagnostic()
|
||||||
|
|||||||
+1
-1
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirVariable
|
import org.jetbrains.kotlin.fir.declarations.FirVariable
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.ImplicitReceiverValue
|
import org.jetbrains.kotlin.fir.resolve.calls.ImplicitReceiverValue
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.receiverType
|
import org.jetbrains.kotlin.fir.types.receiverType
|
||||||
import org.jetbrains.kotlin.fir.types.coneType
|
import org.jetbrains.kotlin.fir.types.coneType
|
||||||
import org.jetbrains.kotlin.psi.KtExpression
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
|||||||
-1
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||||
import org.jetbrains.kotlin.fir.renderWithType
|
import org.jetbrains.kotlin.fir.renderWithType
|
||||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedError
|
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedError
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.*
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.toFirRegularClass
|
import org.jetbrains.kotlin.fir.resolve.toFirRegularClass
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||||
|
|||||||
+5
-6
@@ -6,20 +6,19 @@
|
|||||||
package org.jetbrains.kotlin.analysis.api.fir.scopes
|
package org.jetbrains.kotlin.analysis.api.fir.scopes
|
||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.JavaPsiFacade
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.analysis.providers.createDeclarationProvider
|
|
||||||
import org.jetbrains.kotlin.analysis.providers.createPackageProvider
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope
|
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.components.KtFirScopeProvider
|
|
||||||
import org.jetbrains.kotlin.analysis.api.scopes.KtPackageScope
|
import org.jetbrains.kotlin.analysis.api.scopes.KtPackageScope
|
||||||
import org.jetbrains.kotlin.analysis.api.scopes.KtScopeNameFilter
|
import org.jetbrains.kotlin.analysis.api.scopes.KtScopeNameFilter
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtClassifierSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtClassifierSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPackageSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtPackageSymbol
|
||||||
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
|
import org.jetbrains.kotlin.analysis.providers.createDeclarationProvider
|
||||||
|
import org.jetbrains.kotlin.analysis.providers.createPackageProvider
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
|
|||||||
+7
-8
@@ -5,6 +5,13 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.api.fir.symbols
|
package org.jetbrains.kotlin.analysis.api.fir.symbols
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.analysis.api.components.KtOverrideInfoProvider
|
||||||
|
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
||||||
|
import org.jetbrains.kotlin.analysis.api.fir.buildSymbol
|
||||||
|
import org.jetbrains.kotlin.analysis.api.fir.components.KtFirAnalysisSessionComponent
|
||||||
|
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
||||||
|
import org.jetbrains.kotlin.analysis.api.symbols.KtClassOrObjectSymbol
|
||||||
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.getImplementationStatus
|
import org.jetbrains.kotlin.fir.analysis.checkers.getImplementationStatus
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.isVisibleInClass
|
import org.jetbrains.kotlin.fir.analysis.checkers.isVisibleInClass
|
||||||
import org.jetbrains.kotlin.fir.containingClass
|
import org.jetbrains.kotlin.fir.containingClass
|
||||||
@@ -17,14 +24,6 @@ import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
|||||||
import org.jetbrains.kotlin.fir.resolve.SessionHolderImpl
|
import org.jetbrains.kotlin.fir.resolve.SessionHolderImpl
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData
|
import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData
|
||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
|
||||||
import org.jetbrains.kotlin.analysis.api.components.KtOverrideInfoProvider
|
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.buildSymbol
|
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.components.KtFirAnalysisSessionComponent
|
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtClassOrObjectSymbol
|
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
|
||||||
import org.jetbrains.kotlin.util.ImplementationStatus
|
import org.jetbrains.kotlin.util.ImplementationStatus
|
||||||
|
|
||||||
internal class KtFirOverrideInfoProvider(
|
internal class KtFirOverrideInfoProvider(
|
||||||
|
|||||||
+2
-3
@@ -11,14 +11,13 @@ import org.jetbrains.kotlin.analysis.api.ValidityTokenOwner
|
|||||||
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.getCandidateSymbols
|
import org.jetbrains.kotlin.analysis.api.fir.getCandidateSymbols
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.utils.cached
|
import org.jetbrains.kotlin.analysis.api.fir.utils.cached
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.utils.weakRef
|
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.*
|
import org.jetbrains.kotlin.analysis.api.types.*
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType
|
import org.jetbrains.kotlin.fir.types.isSuspendFunctionType
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.receiverType
|
import org.jetbrains.kotlin.fir.types.receiverType
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ dependencies {
|
|||||||
api(project(":compiler:fir:fir2ir:jvm-backend"))
|
api(project(":compiler:fir:fir2ir:jvm-backend"))
|
||||||
api(project(":compiler:ir.serialization.common"))
|
api(project(":compiler:ir.serialization.common"))
|
||||||
api(project(":compiler:fir:resolve"))
|
api(project(":compiler:fir:resolve"))
|
||||||
|
api(project(":compiler:fir:providers"))
|
||||||
|
api(project(":compiler:fir:semantics"))
|
||||||
api(project(":compiler:fir:checkers"))
|
api(project(":compiler:fir:checkers"))
|
||||||
api(project(":compiler:fir:checkers:checkers.jvm"))
|
api(project(":compiler:fir:checkers:checkers.jvm"))
|
||||||
api(project(":compiler:fir:java"))
|
api(project(":compiler:fir:java"))
|
||||||
|
|||||||
+12
-18
@@ -6,32 +6,16 @@
|
|||||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.api
|
package org.jetbrains.kotlin.analysis.low.level.api.fir.api
|
||||||
|
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.DeclarationCopyBuilder.withBodyFrom
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
|
||||||
import org.jetbrains.kotlin.fir.realPsi
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirTowerDataContext
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.asTowerDataElement
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirTypeResolveTransformer
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.createImportingScopes
|
|
||||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.FirModuleResolveStateDepended
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.FirModuleResolveStateDepended
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.FirModuleResolveStateImpl
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.FirModuleResolveStateImpl
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.DeclarationCopyBuilder.withBodyFrom
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FileTowerProvider
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FileTowerProvider
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerContextProvider
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerContextProvider
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerDataContextAllElementsCollector
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerDataContextAllElementsCollector
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.runCustomResolveUnderLock
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.runCustomResolveUnderLock
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.FirElementsRecorder
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.FirElementsRecorder
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.KtToFirMapping
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.KtToFirMapping
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.RawFirNonLocalDeclarationBuilder
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.*
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.RawFirReplacement
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.ResolveTreeBuilder
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.buildFileFirAnnotation
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.buildFirUserTypeRef
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.firIdeProvider
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.firIdeProvider
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.FirIdeSourcesSession
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.FirIdeSourcesSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getElementTextInContext
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getElementTextInContext
|
||||||
@@ -39,6 +23,16 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.util.originalDeclaration
|
|||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.parentOfType
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.parentOfType
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.parentsOfType
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.parentsOfType
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
|
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
|
||||||
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||||
|
import org.jetbrains.kotlin.fir.realPsi
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.transformers.FirTypeResolveTransformer
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.createImportingScopes
|
||||||
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.isAncestor
|
import org.jetbrains.kotlin.psi.psiUtil.isAncestor
|
||||||
|
|||||||
+2
-2
@@ -6,13 +6,13 @@
|
|||||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder
|
package org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.originalDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirTowerDataContext
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||||
import org.jetbrains.kotlin.fir.psi
|
import org.jetbrains.kotlin.fir.psi
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirTowerDataContext
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.originalDeclaration
|
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
|
||||||
interface FirTowerContextProvider {
|
interface FirTowerContextProvider {
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirVariable
|
import org.jetbrains.kotlin.fir.declarations.FirVariable
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.*
|
import org.jetbrains.kotlin.fir.resolve.calls.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.receiverType
|
import org.jetbrains.kotlin.fir.types.receiverType
|
||||||
import org.jetbrains.kotlin.fir.types.coneType
|
import org.jetbrains.kotlin.fir.types.coneType
|
||||||
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
||||||
|
|
||||||
|
|||||||
@@ -202,6 +202,8 @@ val commonCompilerModules = arrayOf(
|
|||||||
|
|
||||||
val firCompilerCoreModules = arrayOf(
|
val firCompilerCoreModules = arrayOf(
|
||||||
":compiler:fir:cones",
|
":compiler:fir:cones",
|
||||||
|
":compiler:fir:providers",
|
||||||
|
":compiler:fir:semantics",
|
||||||
":compiler:fir:resolve",
|
":compiler:fir:resolve",
|
||||||
":compiler:fir:fir-serialization",
|
":compiler:fir:fir-serialization",
|
||||||
":compiler:fir:fir-deserialization",
|
":compiler:fir:fir-deserialization",
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ dependencies {
|
|||||||
api(commonDep("org.jline", "jline"))
|
api(commonDep("org.jline", "jline"))
|
||||||
api(project(":compiler:fir:raw-fir:psi2fir"))
|
api(project(":compiler:fir:raw-fir:psi2fir"))
|
||||||
api(project(":compiler:fir:resolve"))
|
api(project(":compiler:fir:resolve"))
|
||||||
|
api(project(":compiler:fir:providers"))
|
||||||
|
api(project(":compiler:fir:semantics"))
|
||||||
api(project(":compiler:fir:java"))
|
api(project(":compiler:fir:java"))
|
||||||
implementation(project(":compiler:fir:entrypoint"))
|
implementation(project(":compiler:fir:entrypoint"))
|
||||||
api(project(":compiler:fir:fir2ir"))
|
api(project(":compiler:fir:fir2ir"))
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ val projectsAllowedToUseFirFromSymbol = listOf(
|
|||||||
"java",
|
"java",
|
||||||
"jvm",
|
"jvm",
|
||||||
"raw-fir",
|
"raw-fir",
|
||||||
|
"providers",
|
||||||
|
"semantics",
|
||||||
"resolve",
|
"resolve",
|
||||||
"tree",
|
"tree",
|
||||||
"jvm-backend",
|
"jvm-backend",
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api(project(":compiler:fir:resolve"))
|
api(project(":compiler:fir:providers"))
|
||||||
|
api(project(":compiler:fir:semantics"))
|
||||||
implementation(project(":compiler:frontend.common-psi"))
|
implementation(project(":compiler:frontend.common-psi"))
|
||||||
implementation(project(":compiler:psi"))
|
implementation(project(":compiler:psi"))
|
||||||
|
|
||||||
|
|||||||
-37
@@ -1,37 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.analysis
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporterFactory
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirTransformerBasedResolveProcessor
|
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
|
||||||
|
|
||||||
class FirCheckersResolveProcessor(
|
|
||||||
session: FirSession,
|
|
||||||
scopeSession: ScopeSession
|
|
||||||
) : FirTransformerBasedResolveProcessor(session, scopeSession) {
|
|
||||||
val diagnosticCollector: AbstractDiagnosticCollector = FirDiagnosticsCollector.create(session, scopeSession)
|
|
||||||
|
|
||||||
override val transformer: FirTransformer<Nothing?> = FirCheckersRunnerTransformer(diagnosticCollector)
|
|
||||||
}
|
|
||||||
|
|
||||||
class FirCheckersRunnerTransformer(private val diagnosticCollector: AbstractDiagnosticCollector) : FirTransformer<Nothing?>() {
|
|
||||||
override fun <E : FirElement> transformElement(element: E, data: Nothing?): E {
|
|
||||||
return element
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun transformFile(file: FirFile, data: Nothing?): FirFile {
|
|
||||||
val reporter = DiagnosticReporterFactory.createReporter()
|
|
||||||
diagnosticCollector.collectDiagnostics(file, reporter)
|
|
||||||
return file
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+1
-1
@@ -31,7 +31,7 @@ import org.jetbrains.kotlin.fir.references.FirReference
|
|||||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirThisReference
|
import org.jetbrains.kotlin.fir.references.FirThisReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.*
|
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isBuiltinFunctionalType
|
import org.jetbrains.kotlin.fir.types.isBuiltinFunctionalType
|
||||||
import org.jetbrains.kotlin.fir.resolve.isInvoke
|
import org.jetbrains.kotlin.fir.resolve.isInvoke
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
|
|||||||
+6
-3
@@ -95,6 +95,9 @@ object FirReturnsImpliesAnalyzer : FirControlFlowChecker() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: create separate variable storage and don't modify existing one
|
||||||
|
val variableStorage = dataFlowInfo.variableStorage as VariableStorageImpl
|
||||||
|
|
||||||
var typeStatements: TypeStatements = flow.approvedTypeStatements
|
var typeStatements: TypeStatements = flow.approvedTypeStatements
|
||||||
|
|
||||||
if (effect.value != ConeConstantReference.WILDCARD) {
|
if (effect.value != ConeConstantReference.WILDCARD) {
|
||||||
@@ -104,13 +107,13 @@ object FirReturnsImpliesAnalyzer : FirControlFlowChecker() {
|
|||||||
if (resultExpression is FirConstExpression<*>) {
|
if (resultExpression is FirConstExpression<*>) {
|
||||||
if (!resultExpression.isApplicableWith(operation)) return false
|
if (!resultExpression.isApplicableWith(operation)) return false
|
||||||
} else {
|
} else {
|
||||||
val resultVar = dataFlowInfo.variableStorage.getOrCreateVariable(flow, resultExpression)
|
val resultVar = variableStorage.getOrCreateVariable(flow, resultExpression)
|
||||||
typeStatements = logicSystem.approveOperationStatement(flow, OperationStatement(resultVar, operation), builtinTypes)
|
typeStatements = logicSystem.approveOperationStatement(flow, OperationStatement(resultVar, operation), builtinTypes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val conditionStatements = effectDeclaration.condition.buildTypeStatements(
|
val conditionStatements = effectDeclaration.condition.buildTypeStatements(
|
||||||
function, logicSystem, dataFlowInfo.variableStorage, flow, context
|
function, logicSystem, variableStorage, flow, context
|
||||||
) ?: return false
|
) ?: return false
|
||||||
|
|
||||||
for ((realVar, requiredTypeStatement) in conditionStatements) {
|
for ((realVar, requiredTypeStatement) in conditionStatements) {
|
||||||
@@ -153,7 +156,7 @@ object FirReturnsImpliesAnalyzer : FirControlFlowChecker() {
|
|||||||
private fun ConeBooleanExpression.buildTypeStatements(
|
private fun ConeBooleanExpression.buildTypeStatements(
|
||||||
function: FirFunction,
|
function: FirFunction,
|
||||||
logicSystem: LogicSystem<*>,
|
logicSystem: LogicSystem<*>,
|
||||||
variableStorage: VariableStorage,
|
variableStorage: VariableStorageImpl,
|
||||||
flow: Flow,
|
flow: Flow,
|
||||||
context: CheckerContext
|
context: CheckerContext
|
||||||
): MutableTypeStatements? {
|
): MutableTypeStatements? {
|
||||||
|
|||||||
+1
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.analysis.cfa.util
|
package org.jetbrains.kotlin.fir.analysis.cfa.util
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.contracts.description.isInPlace
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.referredPropertySymbol
|
import org.jetbrains.kotlin.fir.declarations.utils.referredPropertySymbol
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.analysis.checkers
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isConst
|
import org.jetbrains.kotlin.fir.declarations.utils.isConst
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.modality
|
import org.jetbrains.kotlin.fir.declarations.utils.modality
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
|
|||||||
@@ -21,9 +21,11 @@ import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
|
import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyExpressionBlock
|
import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyExpressionBlock
|
||||||
import org.jetbrains.kotlin.fir.expressions.toResolvedCallableSymbol
|
import org.jetbrains.kotlin.fir.expressions.toResolvedCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.SessionHolder
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isBuiltinFunctionalType
|
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.multipleDelegatesWithTheSameSignature
|
import org.jetbrains.kotlin.fir.scopes.impl.multipleDelegatesWithTheSameSignature
|
||||||
|
|||||||
+1
-1
@@ -16,8 +16,8 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirOuterClassTypeParameterRef
|
import org.jetbrains.kotlin.fir.declarations.impl.FirOuterClassTypeParameterRef
|
||||||
import org.jetbrains.kotlin.fir.resolve.getContainingDeclaration
|
import org.jetbrains.kotlin.fir.resolve.getContainingDeclaration
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
||||||
import org.jetbrains.kotlin.fir.scopes.PACKAGE_MEMBER
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.impl.PACKAGE_MEMBER
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
||||||
import org.jetbrains.kotlin.fir.symbols.ensureResolved
|
import org.jetbrains.kotlin.fir.symbols.ensureResolved
|
||||||
|
|||||||
-1
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOnWithSuppression
|
|||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.withSuppressedDiagnostics
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.withSuppressedDiagnostics
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.isPotentiallyArray
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||||
import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes
|
import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
||||||
|
|||||||
+3
-3
@@ -22,9 +22,9 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.references.FirSuperReference
|
import org.jetbrains.kotlin.fir.references.FirSuperReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isBuiltinFunctionalType
|
import org.jetbrains.kotlin.fir.types.isBuiltinFunctionalType
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isFunctionalType
|
import org.jetbrains.kotlin.fir.types.isFunctionalType
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType
|
import org.jetbrains.kotlin.fir.types.isSuspendFunctionType
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.publishedApiEffectiveVisibility
|
import org.jetbrains.kotlin.fir.resolve.transformers.publishedApiEffectiveVisibility
|
||||||
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenMembers
|
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenMembers
|
||||||
|
|||||||
+1
-1
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeTypeParameterInQualifiedAccess
|
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeTypeParameterInQualifiedAccess
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isKClassType
|
import org.jetbrains.kotlin.fir.types.isKClassType
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.toConeType
|
import org.jetbrains.kotlin.fir.scopes.impl.toConeType
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
|
|||||||
-1
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
|
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
|
||||||
|
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
||||||
|
|||||||
-2
@@ -6,9 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
|
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.findClosest
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.extractArgumentTypeRefAndSource
|
import org.jetbrains.kotlin.fir.analysis.checkers.extractArgumentTypeRefAndSource
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClassSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn
|
||||||
|
|||||||
+4
-2
@@ -10,8 +10,10 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
|||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.toConeType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.ConeTypeParameterType
|
||||||
|
import org.jetbrains.kotlin.fir.types.coneType
|
||||||
|
import org.jetbrains.kotlin.fir.types.type
|
||||||
|
|
||||||
object FirPropertyTypeParametersChecker : FirPropertyChecker() {
|
object FirPropertyTypeParametersChecker : FirPropertyChecker() {
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -12,9 +12,9 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
|||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirTryExpression
|
import org.jetbrains.kotlin.fir.expressions.FirTryExpression
|
||||||
import org.jetbrains.kotlin.fir.resolve.isTypeMismatchDueToNullability
|
|
||||||
import org.jetbrains.kotlin.fir.types.ConeTypeParameterType
|
import org.jetbrains.kotlin.fir.types.ConeTypeParameterType
|
||||||
import org.jetbrains.kotlin.fir.types.coneType
|
import org.jetbrains.kotlin.fir.types.coneType
|
||||||
|
import org.jetbrains.kotlin.fir.types.isTypeMismatchDueToNullability
|
||||||
import org.jetbrains.kotlin.fir.types.typeContext
|
import org.jetbrains.kotlin.fir.types.typeContext
|
||||||
|
|
||||||
object FirCatchParameterChecker : FirTryExpressionChecker() {
|
object FirCatchParameterChecker : FirTryExpressionChecker() {
|
||||||
|
|||||||
-1
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcast
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirReturnExpression
|
import org.jetbrains.kotlin.fir.expressions.FirReturnExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirWhenExpression
|
import org.jetbrains.kotlin.fir.expressions.FirWhenExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.isExhaustive
|
import org.jetbrains.kotlin.fir.expressions.isExhaustive
|
||||||
import org.jetbrains.kotlin.fir.resolve.isTypeMismatchDueToNullability
|
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
|
|
||||||
object FirFunctionReturnTypeMismatchChecker : FirReturnExpressionChecker() {
|
object FirFunctionReturnTypeMismatchChecker : FirReturnExpressionChecker() {
|
||||||
|
|||||||
+1
-1
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
|
|||||||
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference
|
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType
|
import org.jetbrains.kotlin.fir.types.isSuspendFunctionType
|
||||||
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
|
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
|
|||||||
+1
-1
@@ -13,8 +13,8 @@ import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
|||||||
import org.jetbrains.kotlin.fir.expressions.toResolvedCallableSymbol
|
import org.jetbrains.kotlin.fir.expressions.toResolvedCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.isTypeAliasedConstructor
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableWrongReceiver
|
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableWrongReceiver
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.isTypeAliasedConstructor
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||||
|
|||||||
+1
-1
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
|
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.*
|
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isFunctionalType
|
import org.jetbrains.kotlin.fir.types.isFunctionalType
|
||||||
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
||||||
import org.jetbrains.kotlin.fir.symbols.ensureResolved
|
import org.jetbrains.kotlin.fir.symbols.ensureResolved
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
|
|||||||
-2
@@ -11,9 +11,7 @@ import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
|||||||
import org.jetbrains.kotlin.fir.PrivateForInline
|
import org.jetbrains.kotlin.fir.PrivateForInline
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.collectImplicitReceivers
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.defaultType
|
import org.jetbrains.kotlin.fir.resolve.defaultType
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
||||||
|
|||||||
+1
-1
@@ -127,7 +127,7 @@ class ErrorNodeDiagnosticCollectorComponent(
|
|||||||
// See FirForLoopChecker
|
// See FirForLoopChecker
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for (coneDiagnostic in diagnostic.toFirDiagnostics(source, qualifiedAccessSource)) {
|
for (coneDiagnostic in diagnostic.toFirDiagnostics(session, source, qualifiedAccessSource)) {
|
||||||
reporter.report(coneDiagnostic, context)
|
reporter.report(coneDiagnostic, context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-9
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.analysis.diagnostics
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.KtNodeTypes
|
import org.jetbrains.kotlin.KtNodeTypes
|
||||||
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
||||||
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.isLocalMember
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.isLocalMember
|
||||||
import org.jetbrains.kotlin.fir.analysis.getChild
|
import org.jetbrains.kotlin.fir.analysis.getChild
|
||||||
@@ -20,7 +21,6 @@ import org.jetbrains.kotlin.fir.resolve.inference.ConeTypeVariableForLambdaRetur
|
|||||||
import org.jetbrains.kotlin.fir.resolve.inference.model.ConeArgumentConstraintPosition
|
import org.jetbrains.kotlin.fir.resolve.inference.model.ConeArgumentConstraintPosition
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.model.ConeExpectedTypeConstraintPosition
|
import org.jetbrains.kotlin.fir.resolve.inference.model.ConeExpectedTypeConstraintPosition
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.model.ConeLambdaArgumentConstraintPosition
|
import org.jetbrains.kotlin.fir.resolve.inference.model.ConeLambdaArgumentConstraintPosition
|
||||||
import org.jetbrains.kotlin.fir.resolve.isTypeMismatchDueToNullability
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
@@ -63,13 +63,13 @@ private fun ConeDiagnostic.toFirDiagnostic(
|
|||||||
is ConeAmbiguityError -> when {
|
is ConeAmbiguityError -> when {
|
||||||
applicability.isSuccess -> FirErrors.OVERLOAD_RESOLUTION_AMBIGUITY.createOn(source, this.candidates.map { it.symbol })
|
applicability.isSuccess -> FirErrors.OVERLOAD_RESOLUTION_AMBIGUITY.createOn(source, this.candidates.map { it.symbol })
|
||||||
applicability == CandidateApplicability.UNSAFE_CALL -> {
|
applicability == CandidateApplicability.UNSAFE_CALL -> {
|
||||||
val candidate = candidates.first { it.currentApplicability == CandidateApplicability.UNSAFE_CALL }
|
val candidate = candidates.first { it.applicability == CandidateApplicability.UNSAFE_CALL }
|
||||||
val unsafeCall = candidate.diagnostics.firstIsInstance<UnsafeCall>()
|
val unsafeCall = candidate.diagnostics.firstIsInstance<UnsafeCall>()
|
||||||
mapUnsafeCallError(candidate, unsafeCall, source, qualifiedAccessSource)
|
mapUnsafeCallError(candidate, unsafeCall, source, qualifiedAccessSource)
|
||||||
}
|
}
|
||||||
applicability == CandidateApplicability.UNSTABLE_SMARTCAST -> {
|
applicability == CandidateApplicability.UNSTABLE_SMARTCAST -> {
|
||||||
val unstableSmartcast =
|
val unstableSmartcast =
|
||||||
this.candidates.first { it.currentApplicability == CandidateApplicability.UNSTABLE_SMARTCAST }.diagnostics.firstIsInstance<UnstableSmartCast>()
|
this.candidates.first { it.applicability == CandidateApplicability.UNSTABLE_SMARTCAST }.diagnostics.firstIsInstance<UnstableSmartCast>()
|
||||||
FirErrors.SMARTCAST_IMPOSSIBLE.createOn(
|
FirErrors.SMARTCAST_IMPOSSIBLE.createOn(
|
||||||
unstableSmartcast.argument.source,
|
unstableSmartcast.argument.source,
|
||||||
unstableSmartcast.targetType,
|
unstableSmartcast.targetType,
|
||||||
@@ -115,18 +115,19 @@ private fun ConeDiagnostic.toFirDiagnostic(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun ConeDiagnostic.toFirDiagnostics(
|
fun ConeDiagnostic.toFirDiagnostics(
|
||||||
|
session: FirSession,
|
||||||
source: FirSourceElement,
|
source: FirSourceElement,
|
||||||
qualifiedAccessSource: FirSourceElement?
|
qualifiedAccessSource: FirSourceElement?
|
||||||
): List<FirDiagnostic> {
|
): List<FirDiagnostic> {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is ConeInapplicableCandidateError -> mapInapplicableCandidateError(this, source, qualifiedAccessSource)
|
is ConeInapplicableCandidateError -> mapInapplicableCandidateError(session, this, source, qualifiedAccessSource)
|
||||||
is ConeConstraintSystemHasContradiction -> mapSystemHasContradictionError(this, source, qualifiedAccessSource)
|
is ConeConstraintSystemHasContradiction -> mapSystemHasContradictionError(session, this, source, qualifiedAccessSource)
|
||||||
else -> listOfNotNull(toFirDiagnostic(source, qualifiedAccessSource))
|
else -> listOfNotNull(toFirDiagnostic(source, qualifiedAccessSource))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun mapUnsafeCallError(
|
private fun mapUnsafeCallError(
|
||||||
candidate: Candidate,
|
candidate: AbstractCandidate,
|
||||||
rootCause: UnsafeCall,
|
rootCause: UnsafeCall,
|
||||||
source: FirSourceElement,
|
source: FirSourceElement,
|
||||||
qualifiedAccessSource: FirSourceElement?,
|
qualifiedAccessSource: FirSourceElement?,
|
||||||
@@ -175,6 +176,7 @@ private fun mapUnsafeCallError(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun mapInapplicableCandidateError(
|
private fun mapInapplicableCandidateError(
|
||||||
|
session: FirSession,
|
||||||
diagnostic: ConeInapplicableCandidateError,
|
diagnostic: ConeInapplicableCandidateError,
|
||||||
source: FirSourceElement,
|
source: FirSourceElement,
|
||||||
qualifiedAccessSource: FirSourceElement?,
|
qualifiedAccessSource: FirSourceElement?,
|
||||||
@@ -190,7 +192,7 @@ private fun mapInapplicableCandidateError(
|
|||||||
rootCause.forbiddenNamedArgumentsTarget
|
rootCause.forbiddenNamedArgumentsTarget
|
||||||
)
|
)
|
||||||
is ArgumentTypeMismatch -> {
|
is ArgumentTypeMismatch -> {
|
||||||
val typeContext = diagnostic.candidate.callInfo.session.typeContext
|
val typeContext = session.typeContext
|
||||||
FirErrors.ARGUMENT_TYPE_MISMATCH.createOn(
|
FirErrors.ARGUMENT_TYPE_MISMATCH.createOn(
|
||||||
rootCause.argument.source ?: source,
|
rootCause.argument.source ?: source,
|
||||||
rootCause.expectedType.removeTypeVariableTypes(typeContext),
|
rootCause.expectedType.removeTypeVariableTypes(typeContext),
|
||||||
@@ -238,6 +240,7 @@ private fun mapInapplicableCandidateError(
|
|||||||
|
|
||||||
@OptIn(ExperimentalStdlibApi::class)
|
@OptIn(ExperimentalStdlibApi::class)
|
||||||
private fun mapSystemHasContradictionError(
|
private fun mapSystemHasContradictionError(
|
||||||
|
session: FirSession,
|
||||||
diagnostic: ConeConstraintSystemHasContradiction,
|
diagnostic: ConeConstraintSystemHasContradiction,
|
||||||
source: FirSourceElement,
|
source: FirSourceElement,
|
||||||
qualifiedAccessSource: FirSourceElement?,
|
qualifiedAccessSource: FirSourceElement?,
|
||||||
@@ -249,7 +252,7 @@ private fun mapSystemHasContradictionError(
|
|||||||
error.toDiagnostic(
|
error.toDiagnostic(
|
||||||
source,
|
source,
|
||||||
qualifiedAccessSource,
|
qualifiedAccessSource,
|
||||||
diagnostic.candidate.callInfo.session.typeContext,
|
session.typeContext,
|
||||||
errorsToIgnore,
|
errorsToIgnore,
|
||||||
diagnostic.candidate,
|
diagnostic.candidate,
|
||||||
)
|
)
|
||||||
@@ -285,7 +288,7 @@ private fun ConstraintSystemError.toDiagnostic(
|
|||||||
qualifiedAccessSource: FirSourceElement?,
|
qualifiedAccessSource: FirSourceElement?,
|
||||||
typeContext: ConeTypeContext,
|
typeContext: ConeTypeContext,
|
||||||
errorsToIgnore: MutableSet<ConstraintSystemError>,
|
errorsToIgnore: MutableSet<ConstraintSystemError>,
|
||||||
candidate: Candidate,
|
candidate: AbstractCandidate,
|
||||||
): FirDiagnostic? {
|
): FirDiagnostic? {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is NewConstraintError -> {
|
is NewConstraintError -> {
|
||||||
|
|||||||
+9
-3
@@ -9,11 +9,12 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationCheckers
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationCheckers
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.ExpressionCheckers
|
import org.jetbrains.kotlin.fir.analysis.checkers.expression.ExpressionCheckers
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.type.TypeCheckers
|
import org.jetbrains.kotlin.fir.analysis.checkers.type.TypeCheckers
|
||||||
import org.jetbrains.kotlin.fir.extensions.AbstractFirAdditionalCheckersExtension
|
import org.jetbrains.kotlin.fir.extensions.FirExtension
|
||||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionPointName
|
import org.jetbrains.kotlin.fir.extensions.FirExtensionPointName
|
||||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionService
|
import org.jetbrains.kotlin.fir.extensions.FirExtensionService
|
||||||
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
abstract class FirAdditionalCheckersExtension(session: FirSession) : AbstractFirAdditionalCheckersExtension(session) {
|
abstract class FirAdditionalCheckersExtension(session: FirSession) : FirExtension(session) {
|
||||||
companion object {
|
companion object {
|
||||||
val NAME = FirExtensionPointName("ExtensionCheckers")
|
val NAME = FirExtensionPointName("ExtensionCheckers")
|
||||||
}
|
}
|
||||||
@@ -24,8 +25,13 @@ abstract class FirAdditionalCheckersExtension(session: FirSession) : AbstractFir
|
|||||||
|
|
||||||
final override val name: FirExtensionPointName
|
final override val name: FirExtensionPointName
|
||||||
get() = NAME
|
get() = NAME
|
||||||
|
|
||||||
|
fun interface Factory : FirExtension.Factory<FirAdditionalCheckersExtension>
|
||||||
|
|
||||||
|
final override val extensionType: KClass<out FirExtension>
|
||||||
|
get() = FirAdditionalCheckersExtension::class
|
||||||
}
|
}
|
||||||
|
|
||||||
val FirExtensionService.additionalCheckers: List<FirAdditionalCheckersExtension> by FirExtensionService.registeredExtensions(
|
val FirExtensionService.additionalCheckers: List<FirAdditionalCheckersExtension> by FirExtensionService.registeredExtensions(
|
||||||
AbstractFirAdditionalCheckersExtension::class
|
FirAdditionalCheckersExtension::class
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ plugins {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api(project(":core:compiler.common"))
|
api(project(":core:compiler.common"))
|
||||||
|
api(kotlinxCollectionsImmutable())
|
||||||
|
|
||||||
compileOnly(intellijCoreDep()) { includeJars("intellij-core") }
|
compileOnly(intellijCoreDep()) { includeJars("intellij-core") }
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -27,3 +27,5 @@ abstract class ConeSubstitutor : TypeSubstitutorMarker {
|
|||||||
fun ConeSubstitutor.substituteOrNull(type: ConeKotlinType?): ConeKotlinType? {
|
fun ConeSubstitutor.substituteOrNull(type: ConeKotlinType?): ConeKotlinType? {
|
||||||
return type?.let { substituteOrNull(it) }
|
return type?.let { substituteOrNull(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
object NoSubstitutor : TypeSubstitutorMarker
|
||||||
|
|||||||
+2
-2
@@ -1,9 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir
|
package org.jetbrains.kotlin.fir.util
|
||||||
|
|
||||||
private open class FrozenReversedListReadOnly<out T>(
|
private open class FrozenReversedListReadOnly<out T>(
|
||||||
private val delegate: List<T>
|
private val delegate: List<T>
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -13,6 +13,8 @@ dependencies {
|
|||||||
implementation(project(":core:deserialization"))
|
implementation(project(":core:deserialization"))
|
||||||
implementation(project(":compiler:fir:cones"))
|
implementation(project(":compiler:fir:cones"))
|
||||||
implementation(project(":compiler:fir:tree"))
|
implementation(project(":compiler:fir:tree"))
|
||||||
|
implementation(project(":compiler:fir:providers"))
|
||||||
|
implementation(project(":compiler:fir:semantics"))
|
||||||
implementation(project(":compiler:fir:resolve"))
|
implementation(project(":compiler:fir:resolve"))
|
||||||
implementation(project(":compiler:fir:java"))
|
implementation(project(":compiler:fir:java"))
|
||||||
implementation(project(":compiler:cli"))
|
implementation(project(":compiler:cli"))
|
||||||
|
|||||||
+6
-5
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.extensions
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.SessionConfiguration
|
import org.jetbrains.kotlin.fir.SessionConfiguration
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.extensions.FirAdditionalCheckersExtension
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
abstract class FirExtensionRegistrar {
|
abstract class FirExtensionRegistrar {
|
||||||
@@ -14,7 +15,7 @@ abstract class FirExtensionRegistrar {
|
|||||||
val AVAILABLE_EXTENSIONS = listOf(
|
val AVAILABLE_EXTENSIONS = listOf(
|
||||||
FirStatusTransformerExtension::class,
|
FirStatusTransformerExtension::class,
|
||||||
FirDeclarationGenerationExtension::class,
|
FirDeclarationGenerationExtension::class,
|
||||||
AbstractFirAdditionalCheckersExtension::class,
|
FirAdditionalCheckersExtension::class,
|
||||||
FirSupertypeGenerationExtension::class,
|
FirSupertypeGenerationExtension::class,
|
||||||
FirTypeAttributeExtension::class,
|
FirTypeAttributeExtension::class,
|
||||||
)
|
)
|
||||||
@@ -34,10 +35,10 @@ abstract class FirExtensionRegistrar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@JvmName("plusAdditionalCheckersExtension")
|
@JvmName("plusAdditionalCheckersExtension")
|
||||||
operator fun ((FirSession) -> AbstractFirAdditionalCheckersExtension).unaryPlus() {
|
operator fun ((FirSession) -> FirAdditionalCheckersExtension).unaryPlus() {
|
||||||
registerExtension(
|
registerExtension(
|
||||||
AbstractFirAdditionalCheckersExtension::class,
|
FirAdditionalCheckersExtension::class,
|
||||||
AbstractFirAdditionalCheckersExtension.Factory { this.invoke(it) }
|
FirAdditionalCheckersExtension.Factory { this.invoke(it) }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13,7 +13,8 @@ dependencies {
|
|||||||
|
|
||||||
api(project(":compiler:fir:cones"))
|
api(project(":compiler:fir:cones"))
|
||||||
api(project(":compiler:fir:tree"))
|
api(project(":compiler:fir:tree"))
|
||||||
api(project(":compiler:fir:resolve"))
|
api(project(":compiler:fir:providers"))
|
||||||
|
api(project(":compiler:fir:semantics"))
|
||||||
|
|
||||||
compileOnly(intellijCoreDep()) { includeJars("intellij-core", rootProject = rootProject) }
|
compileOnly(intellijCoreDep()) { includeJars("intellij-core", rootProject = rootProject) }
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.declarations.utils.addDefaultBoundIfNecessary
|
|||||||
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
|
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
|
||||||
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
|
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.firUnsafe
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
|
||||||
@@ -194,7 +193,7 @@ class FirTypeDeserializer(
|
|||||||
attributes: ConeAttributes
|
attributes: ConeAttributes
|
||||||
): ConeClassLikeType {
|
): ConeClassLikeType {
|
||||||
val result =
|
val result =
|
||||||
when (functionTypeConstructor.toSymbol(moduleData.session)!!.firUnsafe<FirTypeParameterRefsOwner>().typeParameters.size - arguments.size) {
|
when ((functionTypeConstructor.toSymbol(moduleData.session)?.fir as FirTypeParameterRefsOwner).typeParameters.size - arguments.size) {
|
||||||
0 -> createSuspendFunctionTypeForBasicCase(functionTypeConstructor, arguments, isNullable, attributes)
|
0 -> createSuspendFunctionTypeForBasicCase(functionTypeConstructor, arguments, isNullable, attributes)
|
||||||
1 -> {
|
1 -> {
|
||||||
val arity = arguments.size - 1
|
val arity = arguments.size - 1
|
||||||
|
|||||||
@@ -11,7 +11,8 @@ dependencies {
|
|||||||
|
|
||||||
api(project(":compiler:fir:cones"))
|
api(project(":compiler:fir:cones"))
|
||||||
api(project(":compiler:fir:tree"))
|
api(project(":compiler:fir:tree"))
|
||||||
api(project(":compiler:fir:resolve"))
|
api(project(":compiler:fir:providers"))
|
||||||
|
api(project(":compiler:fir:semantics"))
|
||||||
|
|
||||||
compileOnly(intellijCoreDep()) { includeJars("intellij-core", rootProject = rootProject) }
|
compileOnly(intellijCoreDep()) { includeJars("intellij-core", rootProject = rootProject) }
|
||||||
}
|
}
|
||||||
|
|||||||
-3
@@ -26,9 +26,6 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyAnnotationArgumentMappi
|
|||||||
import org.jetbrains.kotlin.fir.extensions.extensionService
|
import org.jetbrains.kotlin.fir.extensions.extensionService
|
||||||
import org.jetbrains.kotlin.fir.extensions.typeAttributeExtensions
|
import org.jetbrains.kotlin.fir.extensions.typeAttributeExtensions
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.varargElementType
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.suspendFunctionTypeToFunctionTypeWithContinuation
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
||||||
import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator
|
import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator
|
||||||
import org.jetbrains.kotlin.fir.scopes.processAllFunctions
|
import org.jetbrains.kotlin.fir.scopes.processAllFunctions
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ dependencies {
|
|||||||
compileOnly(project(":core:descriptors.jvm"))
|
compileOnly(project(":core:descriptors.jvm"))
|
||||||
compileOnly(project(":compiler:fir:cones"))
|
compileOnly(project(":compiler:fir:cones"))
|
||||||
compileOnly(project(":compiler:fir:resolve"))
|
compileOnly(project(":compiler:fir:resolve"))
|
||||||
|
compileOnly(project(":compiler:fir:providers"))
|
||||||
|
compileOnly(project(":compiler:fir:semantics"))
|
||||||
compileOnly(project(":compiler:fir:tree"))
|
compileOnly(project(":compiler:fir:tree"))
|
||||||
compileOnly(project(":compiler:ir.tree"))
|
compileOnly(project(":compiler:ir.tree"))
|
||||||
compileOnly(project(":compiler:ir.psi2ir"))
|
compileOnly(project(":compiler:ir.psi2ir"))
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ dependencies {
|
|||||||
compileOnly(project(":compiler:backend.common.jvm"))
|
compileOnly(project(":compiler:backend.common.jvm"))
|
||||||
compileOnly(project(":compiler:fir:cones"))
|
compileOnly(project(":compiler:fir:cones"))
|
||||||
compileOnly(project(":compiler:fir:resolve"))
|
compileOnly(project(":compiler:fir:resolve"))
|
||||||
|
compileOnly(project(":compiler:fir:providers"))
|
||||||
|
compileOnly(project(":compiler:fir:semantics"))
|
||||||
compileOnly(project(":compiler:fir:java"))
|
compileOnly(project(":compiler:fir:java"))
|
||||||
compileOnly(project(":compiler:fir:tree"))
|
compileOnly(project(":compiler:fir:tree"))
|
||||||
compileOnly(project(":compiler:fir:fir2ir"))
|
compileOnly(project(":compiler:fir:fir2ir"))
|
||||||
|
|||||||
+1
-1
@@ -19,8 +19,8 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isBuiltinFunctionalType
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
||||||
|
import org.jetbrains.kotlin.fir.types.isBuiltinFunctionalType
|
||||||
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
|
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.serialization.FirElementSerializer
|
import org.jetbrains.kotlin.fir.serialization.FirElementSerializer
|
||||||
import org.jetbrains.kotlin.fir.serialization.FirSerializerExtension
|
import org.jetbrains.kotlin.fir.serialization.FirSerializerExtension
|
||||||
|
|||||||
-4
@@ -19,10 +19,6 @@ import org.jetbrains.kotlin.fir.declarations.utils.isInner
|
|||||||
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
||||||
import org.jetbrains.kotlin.fir.resolve.defaultType
|
import org.jetbrains.kotlin.fir.resolve.defaultType
|
||||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isFunctionalType
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isKClassType
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isKFunctionType
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ import org.jetbrains.kotlin.fir.references.FirThisReference
|
|||||||
import org.jetbrains.kotlin.fir.references.impl.FirPropertyFromParameterResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.impl.FirPropertyFromParameterResolvedNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticPropertySymbol
|
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticPropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.originalConstructorIfTypeAlias
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||||
|
|||||||
+1
-1
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyConstructor
|
|||||||
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyProperty
|
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyProperty
|
||||||
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazySimpleFunction
|
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazySimpleFunction
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType
|
import org.jetbrains.kotlin.fir.types.isSuspendFunctionType
|
||||||
import org.jetbrains.kotlin.fir.resolve.isKFunctionInvoke
|
import org.jetbrains.kotlin.fir.resolve.isKFunctionInvoke
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
|
|||||||
@@ -1063,7 +1063,7 @@ class IrBuiltInsOverFir(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun findFunctions(packageName: FqName, name: Name) =
|
private fun findFunctions(packageName: FqName, name: Name): List<IrSimpleFunctionSymbol> =
|
||||||
components.session.symbolProvider.getTopLevelFunctionSymbols(packageName, name).mapNotNull { firOpSymbol ->
|
components.session.symbolProvider.getTopLevelFunctionSymbols(packageName, name).mapNotNull { firOpSymbol ->
|
||||||
components.declarationStorage.getIrFunctionSymbol(firOpSymbol) as? IrSimpleFunctionSymbol
|
components.declarationStorage.getIrFunctionSymbol(firOpSymbol) as? IrSimpleFunctionSymbol
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-4
@@ -21,10 +21,7 @@ import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference
|
|||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.FirFakeArgumentForCallableReference
|
import org.jetbrains.kotlin.fir.resolve.calls.FirFakeArgumentForCallableReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.ResolvedCallArgument
|
import org.jetbrains.kotlin.fir.resolve.calls.ResolvedCallArgument
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
|
||||||
import org.jetbrains.kotlin.fir.types.coneType
|
|
||||||
import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX
|
import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBlock
|
import org.jetbrains.kotlin.ir.expressions.IrBlock
|
||||||
|
|||||||
+2
-2
@@ -26,8 +26,8 @@ import org.jetbrains.kotlin.fir.resolve.FirSamResolverImpl
|
|||||||
import org.jetbrains.kotlin.fir.resolve.calls.getExpectedType
|
import org.jetbrains.kotlin.fir.resolve.calls.getExpectedType
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.isFunctional
|
import org.jetbrains.kotlin.fir.resolve.calls.isFunctional
|
||||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isBuiltinFunctionalType
|
import org.jetbrains.kotlin.fir.types.isBuiltinFunctionalType
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isKMutableProperty
|
import org.jetbrains.kotlin.fir.types.isKMutableProperty
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor
|
import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ dependencies {
|
|||||||
api(project(":compiler:config.jvm"))
|
api(project(":compiler:config.jvm"))
|
||||||
api(project(":compiler:resolution.common.jvm"))
|
api(project(":compiler:resolution.common.jvm"))
|
||||||
api(project(":compiler:frontend.common"))
|
api(project(":compiler:frontend.common"))
|
||||||
|
// api(project(":compiler:fir:resolve"))
|
||||||
api(project(":compiler:fir:resolve"))
|
api(project(":compiler:fir:resolve"))
|
||||||
api(project(":compiler:fir:checkers"))
|
api(project(":compiler:fir:checkers"))
|
||||||
api(project(":compiler:fir:fir-deserialization"))
|
api(project(":compiler:fir:fir-deserialization"))
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ dependencies {
|
|||||||
testRuntimeOnly(project(":core:descriptors.runtime"))
|
testRuntimeOnly(project(":core:descriptors.runtime"))
|
||||||
testApi(projectTests(":compiler:fir:analysis-tests:legacy-fir-tests"))
|
testApi(projectTests(":compiler:fir:analysis-tests:legacy-fir-tests"))
|
||||||
testApi(project(":compiler:fir:resolve"))
|
testApi(project(":compiler:fir:resolve"))
|
||||||
|
testApi(project(":compiler:fir:providers"))
|
||||||
|
testApi(project(":compiler:fir:semantics"))
|
||||||
testApi(project(":compiler:fir:dump"))
|
testApi(project(":compiler:fir:dump"))
|
||||||
|
|
||||||
val asyncProfilerClasspath = project.findProperty("fir.bench.async.profiler.classpath") as? String
|
val asyncProfilerClasspath = project.findProperty("fir.bench.async.profiler.classpath") as? String
|
||||||
|
|||||||
+26
-1
@@ -16,7 +16,9 @@ import org.jetbrains.kotlin.ObsoleteTestInfrastructure
|
|||||||
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
|
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
|
||||||
import org.jetbrains.kotlin.cli.common.toBooleanLenient
|
import org.jetbrains.kotlin.cli.common.toBooleanLenient
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.*
|
import org.jetbrains.kotlin.cli.jvm.compiler.*
|
||||||
import org.jetbrains.kotlin.fir.analysis.FirCheckersResolveProcessor
|
import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporterFactory
|
||||||
import org.jetbrains.kotlin.fir.builder.PsiHandlingMode
|
import org.jetbrains.kotlin.fir.builder.PsiHandlingMode
|
||||||
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
@@ -25,8 +27,10 @@ import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
|
|||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
|
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.transformers.FirTransformerBasedResolveProcessor
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.createAllCompilerResolveProcessors
|
import org.jetbrains.kotlin.fir.resolve.transformers.createAllCompilerResolveProcessors
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import sun.management.ManagementFactoryHelper
|
import sun.management.ManagementFactoryHelper
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileOutputStream
|
import java.io.FileOutputStream
|
||||||
@@ -315,3 +319,24 @@ class FirResolveModularizedTotalKotlinTest : AbstractModularizedTest() {
|
|||||||
mxBean.dumpHeap(filePath, true)
|
mxBean.dumpHeap(filePath, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class FirCheckersResolveProcessor(
|
||||||
|
session: FirSession,
|
||||||
|
scopeSession: ScopeSession
|
||||||
|
) : FirTransformerBasedResolveProcessor(session, scopeSession) {
|
||||||
|
val diagnosticCollector: AbstractDiagnosticCollector = FirDiagnosticsCollector.create(session, scopeSession)
|
||||||
|
|
||||||
|
override val transformer: FirTransformer<Nothing?> = FirCheckersRunnerTransformer(diagnosticCollector)
|
||||||
|
}
|
||||||
|
|
||||||
|
class FirCheckersRunnerTransformer(private val diagnosticCollector: AbstractDiagnosticCollector) : FirTransformer<Nothing?>() {
|
||||||
|
override fun <E : FirElement> transformElement(element: E, data: Nothing?): E {
|
||||||
|
return element
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun transformFile(file: FirFile, data: Nothing?): FirFile {
|
||||||
|
val reporter = DiagnosticReporterFactory.createReporter()
|
||||||
|
diagnosticCollector.collectDiagnostics(file, reporter)
|
||||||
|
return file
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
plugins {
|
||||||
|
kotlin("jvm")
|
||||||
|
id("jps-compatible")
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
api(project(":core:compiler.common"))
|
||||||
|
api(project(":compiler:resolution.common"))
|
||||||
|
api(project(":compiler:fir:cones"))
|
||||||
|
api(project(":compiler:fir:tree"))
|
||||||
|
implementation(project(":core:util.runtime"))
|
||||||
|
|
||||||
|
compileOnly(project(":kotlin-reflect-api"))
|
||||||
|
compileOnly(intellijCoreDep()) { includeJars("guava", rootProject = rootProject) }
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
"main" { projectDefault() }
|
||||||
|
"test" { none() }
|
||||||
|
}
|
||||||
+3
-3
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir
|
package org.jetbrains.kotlin.fir
|
||||||
@@ -58,7 +58,7 @@ fun FirFunctionCall.copy(
|
|||||||
return (builder as FirCallBuilder).build() as FirFunctionCall
|
return (builder as FirCallBuilder).build() as FirFunctionCall
|
||||||
}
|
}
|
||||||
|
|
||||||
internal inline fun FirFunctionCall.copyAsImplicitInvokeCall(
|
inline fun FirFunctionCall.copyAsImplicitInvokeCall(
|
||||||
setupCopy: FirImplicitInvokeCallBuilder.() -> Unit
|
setupCopy: FirImplicitInvokeCallBuilder.() -> Unit
|
||||||
): FirImplicitInvokeCall {
|
): FirImplicitInvokeCall {
|
||||||
val original = this
|
val original = this
|
||||||
+1
-65
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -12,9 +12,7 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
|
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
|
|
||||||
import org.jetbrains.kotlin.fir.references.FirSuperReference
|
import org.jetbrains.kotlin.fir.references.FirSuperReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.Candidate
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.ExpressionReceiverValue
|
import org.jetbrains.kotlin.fir.resolve.calls.ExpressionReceiverValue
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticFunctionSymbol
|
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.ReceiverValue
|
import org.jetbrains.kotlin.fir.resolve.calls.ReceiverValue
|
||||||
@@ -32,7 +30,6 @@ import org.jetbrains.kotlin.fir.types.typeContext
|
|||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.types.AbstractTypeChecker
|
import org.jetbrains.kotlin.types.AbstractTypeChecker
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
|
||||||
|
|
||||||
abstract class FirModuleVisibilityChecker : FirSessionComponent {
|
abstract class FirModuleVisibilityChecker : FirSessionComponent {
|
||||||
abstract fun <T> isInFriendModule(declaration: T): Boolean where T : FirMemberDeclaration, T : FirDeclaration
|
abstract fun <T> isInFriendModule(declaration: T): Boolean where T : FirMemberDeclaration, T : FirDeclaration
|
||||||
@@ -62,67 +59,6 @@ abstract class FirVisibilityChecker : FirSessionComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirMemberDeclaration.getBackingFieldIfApplicable(): FirBackingField? {
|
|
||||||
val field = this.safeAs<FirProperty>()?.getExplicitBackingField()
|
|
||||||
?: return null
|
|
||||||
|
|
||||||
// This check prevents resolving protected and
|
|
||||||
// public fields.
|
|
||||||
if (
|
|
||||||
field.visibility == Visibilities.PrivateToThis ||
|
|
||||||
field.visibility == Visibilities.Private ||
|
|
||||||
field.visibility == Visibilities.Internal
|
|
||||||
) {
|
|
||||||
return field
|
|
||||||
}
|
|
||||||
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
fun isVisible(
|
|
||||||
declaration: FirMemberDeclaration,
|
|
||||||
candidate: Candidate
|
|
||||||
): Boolean {
|
|
||||||
if (declaration is FirCallableDeclaration && (declaration.isIntersectionOverride || declaration.isSubstitutionOverride)) {
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
|
||||||
return isVisible(declaration.originalIfFakeOverride() as FirMemberDeclaration, candidate)
|
|
||||||
}
|
|
||||||
|
|
||||||
val callInfo = candidate.callInfo
|
|
||||||
val useSiteFile = callInfo.containingFile
|
|
||||||
val containingDeclarations = callInfo.containingDeclarations
|
|
||||||
val session = callInfo.session
|
|
||||||
|
|
||||||
// We won't resolve into the backing field
|
|
||||||
// in the first place, if it's not accessible.
|
|
||||||
if (declaration is FirBackingField) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
val visible = isVisible(
|
|
||||||
declaration,
|
|
||||||
session,
|
|
||||||
useSiteFile,
|
|
||||||
containingDeclarations,
|
|
||||||
candidate.dispatchReceiverValue,
|
|
||||||
candidate.callInfo.callSite is FirVariableAssignment
|
|
||||||
)
|
|
||||||
val backingField = declaration.getBackingFieldIfApplicable()
|
|
||||||
|
|
||||||
if (visible && backingField != null) {
|
|
||||||
candidate.hasVisibleBackingField = isVisible(
|
|
||||||
backingField,
|
|
||||||
session,
|
|
||||||
useSiteFile,
|
|
||||||
containingDeclarations,
|
|
||||||
candidate.dispatchReceiverValue,
|
|
||||||
candidate.callInfo.callSite is FirVariableAssignment,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
return visible
|
|
||||||
}
|
|
||||||
|
|
||||||
fun isVisible(
|
fun isVisible(
|
||||||
declaration: FirMemberDeclaration,
|
declaration: FirMemberDeclaration,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.resolve
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.builtins.StandardNames
|
||||||
|
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
||||||
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.getAnnotationsByClassId
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotation
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationArgumentMapping
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression
|
||||||
|
import org.jetbrains.kotlin.fir.fakeElement
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTagWithFixedSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
|
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||||
|
import org.jetbrains.kotlin.fir.utils.WeakPair
|
||||||
|
import org.jetbrains.kotlin.name.SpecialNames
|
||||||
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
|
import org.jetbrains.kotlin.types.ConstantValueKind
|
||||||
|
|
||||||
|
fun ConeClassifierLookupTag.toSymbol(useSiteSession: FirSession): FirClassifierSymbol<*>? =
|
||||||
|
when (this) {
|
||||||
|
is ConeClassLikeLookupTag -> toSymbol(useSiteSession)
|
||||||
|
is ConeClassifierLookupTagWithFixedSymbol -> this.symbol
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(LookupTagInternals::class)
|
||||||
|
fun ConeClassLikeLookupTag.toSymbol(useSiteSession: FirSession): FirClassLikeSymbol<*>? {
|
||||||
|
if (this is ConeClassLookupTagWithFixedSymbol) {
|
||||||
|
return this.symbol
|
||||||
|
}
|
||||||
|
val firSymbolProvider = useSiteSession.symbolProvider
|
||||||
|
(this as? ConeClassLikeLookupTagImpl)?.boundSymbol?.takeIf { it.first === useSiteSession }?.let { return it.second }
|
||||||
|
|
||||||
|
return firSymbolProvider.getClassLikeSymbolByClassId(classId).also {
|
||||||
|
(this as? ConeClassLikeLookupTagImpl)?.bindSymbolToLookupTag(useSiteSession, it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(LookupTagInternals::class)
|
||||||
|
fun ConeClassLikeLookupTag.toSymbolOrError(useSiteSession: FirSession): FirClassLikeSymbol<*> =
|
||||||
|
toSymbol(useSiteSession)
|
||||||
|
?: error("Class symbol with classId $classId was not found")
|
||||||
|
|
||||||
|
@OptIn(LookupTagInternals::class)
|
||||||
|
fun ConeClassLikeLookupTag.toFirRegularClassSymbol(session: FirSession): FirRegularClassSymbol? =
|
||||||
|
session.symbolProvider.getSymbolByLookupTag(this) as? FirRegularClassSymbol
|
||||||
|
|
||||||
|
@OptIn(LookupTagInternals::class)
|
||||||
|
fun ConeClassLikeLookupTagImpl.bindSymbolToLookupTag(session: FirSession, symbol: FirClassLikeSymbol<*>?) {
|
||||||
|
boundSymbol = WeakPair(session, symbol)
|
||||||
|
}
|
||||||
|
|
||||||
|
@LookupTagInternals
|
||||||
|
fun ConeClassLikeLookupTag.toFirRegularClass(session: FirSession): FirRegularClass? =
|
||||||
|
session.symbolProvider.getSymbolByLookupTag(this)?.fir as? FirRegularClass
|
||||||
|
|
||||||
|
fun FirSymbolProvider.getSymbolByLookupTag(lookupTag: ConeClassifierLookupTag): FirClassifierSymbol<*>? {
|
||||||
|
return lookupTag.toSymbol(session)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun FirSymbolProvider.getSymbolByLookupTag(lookupTag: ConeClassLikeLookupTag): FirClassLikeSymbol<*>? {
|
||||||
|
return lookupTag.toSymbol(session)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun ConeKotlinType.withParameterNameAnnotation(valueParameter: FirValueParameter, context: ConeTypeContext): ConeKotlinType {
|
||||||
|
if (valueParameter.name == SpecialNames.NO_NAME_PROVIDED || valueParameter.name == SpecialNames.UNDERSCORE_FOR_UNUSED_VAR) return this
|
||||||
|
// Existing @ParameterName annotation takes precedence
|
||||||
|
if (attributes.customAnnotations.getAnnotationsByClassId(StandardNames.FqNames.parameterNameClassId).isNotEmpty()) return this
|
||||||
|
|
||||||
|
val fakeSource = valueParameter.source?.fakeElement(FirFakeSourceElementKind.ParameterNameAnnotationCall)
|
||||||
|
val parameterNameAnnotationCall = buildAnnotation {
|
||||||
|
source = fakeSource
|
||||||
|
annotationTypeRef =
|
||||||
|
buildResolvedTypeRef {
|
||||||
|
source = fakeSource
|
||||||
|
type = ConeClassLikeTypeImpl(
|
||||||
|
ConeClassLikeLookupTagImpl(StandardNames.FqNames.parameterNameClassId),
|
||||||
|
emptyArray(),
|
||||||
|
isNullable = false
|
||||||
|
)
|
||||||
|
}
|
||||||
|
argumentMapping = buildAnnotationArgumentMapping {
|
||||||
|
mapping[StandardClassIds.Annotations.ParameterNames.parameterNameName] =
|
||||||
|
buildConstExpression(fakeSource, ConstantValueKind.String, valueParameter.name.asString(), setType = true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val attributesWithParameterNameAnnotation =
|
||||||
|
ConeAttributes.create(listOf(CustomAnnotationTypeAttribute(listOf(parameterNameAnnotationCall))))
|
||||||
|
return withCombinedCustomAttributesFrom(attributesWithParameterNameAnnotation, context)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun ConeKotlinType.withCombinedCustomAttributesFrom(other: ConeKotlinType, context: ConeTypeContext): ConeKotlinType =
|
||||||
|
withCombinedCustomAttributesFrom(other.attributes, context)
|
||||||
|
|
||||||
|
private fun ConeKotlinType.withCombinedCustomAttributesFrom(other: ConeAttributes, context: ConeTypeContext): ConeKotlinType {
|
||||||
|
val customAttributesFromOther = other.custom ?: return this
|
||||||
|
val combinedConeAttributes = attributes.add(ConeAttributes.create(listOf(customAttributesFromOther)))
|
||||||
|
return withAttributes(combinedConeAttributes, context)
|
||||||
|
}
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+9
-6
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.resolve.calls
|
package org.jetbrains.kotlin.fir.resolve.calls
|
||||||
@@ -22,8 +22,11 @@ import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
|||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.ConeKotlinErrorType
|
||||||
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.types.coneType
|
||||||
|
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
||||||
import org.jetbrains.kotlin.types.SmartcastStability
|
import org.jetbrains.kotlin.types.SmartcastStability
|
||||||
|
|
||||||
interface Receiver
|
interface Receiver
|
||||||
@@ -93,7 +96,7 @@ sealed class ImplicitReceiverValue<S : FirBasedSymbol<*>>(
|
|||||||
/*
|
/*
|
||||||
* Should be called only in ImplicitReceiverStack
|
* Should be called only in ImplicitReceiverStack
|
||||||
*/
|
*/
|
||||||
internal fun replaceType(type: ConeKotlinType) {
|
fun replaceType(type: ConeKotlinType) {
|
||||||
if (!mutable) throw IllegalStateException("Cannot mutate an immutable ImplicitReceiverValue")
|
if (!mutable) throw IllegalStateException("Cannot mutate an immutable ImplicitReceiverValue")
|
||||||
if (type == this.type) return
|
if (type == this.type) return
|
||||||
this.type = type
|
this.type = type
|
||||||
@@ -127,14 +130,14 @@ private fun receiverExpression(symbol: FirBasedSymbol<*>, type: ConeKotlinType):
|
|||||||
isImplicit = true
|
isImplicit = true
|
||||||
}
|
}
|
||||||
|
|
||||||
class ImplicitDispatchReceiverValue internal constructor(
|
class ImplicitDispatchReceiverValue(
|
||||||
boundSymbol: FirClassSymbol<*>,
|
boundSymbol: FirClassSymbol<*>,
|
||||||
type: ConeKotlinType,
|
type: ConeKotlinType,
|
||||||
useSiteSession: FirSession,
|
useSiteSession: FirSession,
|
||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
mutable: Boolean = true,
|
mutable: Boolean = true,
|
||||||
) : ImplicitReceiverValue<FirClassSymbol<*>>(boundSymbol, type, useSiteSession, scopeSession, mutable) {
|
) : ImplicitReceiverValue<FirClassSymbol<*>>(boundSymbol, type, useSiteSession, scopeSession, mutable) {
|
||||||
internal constructor(
|
constructor(
|
||||||
boundSymbol: FirClassSymbol<*>, useSiteSession: FirSession, scopeSession: ScopeSession
|
boundSymbol: FirClassSymbol<*>, useSiteSession: FirSession, scopeSession: ScopeSession
|
||||||
) : this(
|
) : this(
|
||||||
boundSymbol, boundSymbol.constructType(typeArguments = emptyArray(), isNullable = false),
|
boundSymbol, boundSymbol.constructType(typeArguments = emptyArray(), isNullable = false),
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.resolve.calls
|
package org.jetbrains.kotlin.fir.resolve.calls
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+2
-3
@@ -1,12 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.resolve.substitution
|
package org.jetbrains.kotlin.fir.resolve.substitution
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.inferenceComponents
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.withCombinedCustomAttributesFrom
|
import org.jetbrains.kotlin.fir.resolve.withCombinedCustomAttributesFrom
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.scopes
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||||
|
|
||||||
|
fun ConeClassLikeLookupTag.getNestedClassifierScope(session: FirSession, scopeSession: ScopeSession): FirContainingNamesAwareScope? {
|
||||||
|
val klass = toSymbol(session)?.fir as? FirRegularClass ?: return null
|
||||||
|
return klass.scopeProvider.getNestedClassifierScope(klass, session, scopeSession)
|
||||||
|
}
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.scopes.impl
|
package org.jetbrains.kotlin.fir.scopes.impl
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+2
-2
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ enum class FirImportingScopeFilter {
|
|||||||
if (this == ALL) return true
|
if (this == ALL) return true
|
||||||
// TODO: also check DeprecationLevel.HIDDEN and required Kotlin version
|
// TODO: also check DeprecationLevel.HIDDEN and required Kotlin version
|
||||||
val fir = symbol.fir
|
val fir = symbol.fir
|
||||||
if (fir !is FirMemberDeclaration) return false
|
if (fir !is FirMemberDeclaration) return false
|
||||||
val isVisible = when (fir.status.visibility) {
|
val isVisible = when (fir.status.visibility) {
|
||||||
// When importing from the same module, status may be unknown because the status resolver depends on super types
|
// When importing from the same module, status may be unknown because the status resolver depends on super types
|
||||||
// to determine visibility for functions, so it may not have finished yet. Since we only care about classes,
|
// to determine visibility for functions, so it may not have finished yet. Since we only care about classes,
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user