[AA] Add KtResolveExtensionInfoProvider to AA.

This provider is responsible for answering queries related to resolve
extensions. At the moment, this includes retrieving a KtScope with all REx
top-level declarations (moved from KtSymbolFromResolveExtensionProvider), and
retrieving information necessary to supply a GeneratedSourcesFilter for REx
generated code. Future REx-related functions can be added to this interface.

^KT-59329
This commit is contained in:
Justin Paupore
2023-06-14 23:57:38 -07:00
committed by Ilya Kirillov
parent fa0209a322
commit 9f85739599
24 changed files with 1133 additions and 81 deletions
@@ -0,0 +1,38 @@
// MODULE: rex1
// WITH_RESOLVE_EXTENSION
// RESOLVE_EXTENSION_PACKAGE: rex1
// FILE: rex1.kt
// RESOLVE_EXTENSION_FILE
package rex1
// RESOLVE_EXTENSION_CLASSIFIER: RexClass1
interface RexClass1
// RESOLVE_EXTENSION_CALLABLE: rexCallable1
fun rexCallable1(): Any = TODO()
// MODULE: rex2
// WITH_RESOLVE_EXTENSION
// RESOLVE_EXTENSION_PACKAGE: rex2
// FILE: rex2.kt
// RESOLVE_EXTENSION_FILE
package rex2
// RESOLVE_EXTENSION_CLASSIFIER: RexClass2
interface RexClass2
// RESOLVE_EXTENSION_CALLABLE: rexCallable2
fun rexCallable2(): Any = TODO()
// MODULE: main(rex1, rex2)
// FILE: main.kt
package main
import rex1.*
import rex2.*
object <caret_onAirContext>MainObject : RexClass1, RexClass2 {
fun foo(): List<Any> = listOf(rexCallable1(), rexCallable2())
}
@@ -0,0 +1,26 @@
packages: 2
rex1
rex2
classifiers: 2
interface RexClass1
PSI: KtClass RexClass1 [from rex1.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtClass RexClass1]
interface RexClass2
PSI: KtClass RexClass2 [from rex2.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtClass RexClass2]
callables: 2
fun rexCallable1(): kotlin.Any
PSI: KtNamedFunction rexCallable1 [from rex1.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtNamedFunction rexCallable1]
fun rexCallable2(): kotlin.Any
PSI: KtNamedFunction rexCallable2 [from rex2.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtNamedFunction rexCallable2]
constructors: 0
@@ -0,0 +1,126 @@
packages: 2
KtPackageSymbol:
fqName: rex1
origin: SOURCE
KtPackageSymbol:
fqName: rex2
origin: SOURCE
classifiers: 2
KtNamedClassOrObjectSymbol:
annotationsList: []
classIdIfNonLocal: rex1/RexClass1
classKind: INTERFACE
companionObject: null
contextReceivers: []
isData: false
isExternal: false
isFun: false
isInline: false
isInner: false
modality: ABSTRACT
name: RexClass1
origin: SOURCE
superTypes: [
KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/Any
]
symbolKind: TOP_LEVEL
typeParameters: []
visibility: Public
PSI: KtClass RexClass1 [from rex1.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtClass RexClass1]
KtNamedClassOrObjectSymbol:
annotationsList: []
classIdIfNonLocal: rex2/RexClass2
classKind: INTERFACE
companionObject: null
contextReceivers: []
isData: false
isExternal: false
isFun: false
isInline: false
isInner: false
modality: ABSTRACT
name: RexClass2
origin: SOURCE
superTypes: [
KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/Any
]
symbolKind: TOP_LEVEL
typeParameters: []
visibility: Public
PSI: KtClass RexClass2 [from rex2.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtClass RexClass2]
callables: 2
KtFunctionSymbol:
annotationsList: []
callableIdIfNonLocal: rex1/rexCallable1
contextReceivers: []
contractEffects: []
hasStableParameterNames: true
isBuiltinFunctionInvoke: false
isExtension: false
isExternal: false
isInfix: false
isInline: false
isOperator: false
isOverride: false
isStatic: false
isSuspend: false
modality: FINAL
name: rexCallable1
origin: SOURCE
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/Any
symbolKind: TOP_LEVEL
typeParameters: []
valueParameters: []
visibility: Public
PSI: KtNamedFunction rexCallable1 [from rex1.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtNamedFunction rexCallable1]
KtFunctionSymbol:
annotationsList: []
callableIdIfNonLocal: rex2/rexCallable2
contextReceivers: []
contractEffects: []
hasStableParameterNames: true
isBuiltinFunctionInvoke: false
isExtension: false
isExternal: false
isInfix: false
isInline: false
isOperator: false
isOverride: false
isStatic: false
isSuspend: false
modality: FINAL
name: rexCallable2
origin: SOURCE
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/Any
symbolKind: TOP_LEVEL
typeParameters: []
valueParameters: []
visibility: Public
PSI: KtNamedFunction rexCallable2 [from rex2.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtNamedFunction rexCallable2]
constructors: 0
@@ -0,0 +1,44 @@
// WITH_RESOLVE_EXTENSION
// RESOLVE_EXTENSION_PACKAGE: generated
// FILE: extension1.kt
// RESOLVE_EXTENSION_FILE
package generated
// RESOLVE_EXTENSION_CLASSIFIER: GenClass1
class GenClass1 {
fun genMemberFun1(foo: Any): String = TODO()
fun GenClass2.genMemberExtension1(): Unit = TODO()
val genMemberVal1: String = "foo"
var genMemberVar1: String = "bar"
private set
}
// RESOLVE_EXTENSION_CALLABLE: genTopLevelFun1
fun genTopLevelFun1(foo: GenClass2): String = TODO()
// RESOLVE_EXTENSION_CALLABLE: genTopLevelExtension1
fun String.genTopLevelExtension1(): Int = TODO()
// RESOLVE_EXTENSION_CALLABLE: genTopLevelVal1
val genTopLevelVal1: String = "baz"
// RESOLVE_EXTENSION_CALLABLE: genTopLevelVar1
var genTopLevelVar1: String = "quux"
internal set
// RESOLVE_EXTENSION_CALLABLE: genExtensionVal1
val GenClass2.genExtensionVal1: Int
get() = TODO
// FILE: extension2.kt
// RESOLVE_EXTENSION_FILE
package generated
// RESOLVE_EXTENSION_CLASSIFIER: GenClass2
open class GenClass2
// FILE: main.kt
fun <caret_onAirContext>main() {}
@@ -0,0 +1,41 @@
packages: 1
generated
classifiers: 2
class GenClass1
PSI: KtClass GenClass1 [from extension1.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtClass GenClass1]
class GenClass2
PSI: KtClass GenClass2 [from extension2.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtClass GenClass2]
callables: 5
fun genTopLevelFun1(foo: generated.GenClass2): kotlin.String
PSI: KtNamedFunction genTopLevelFun1 [from extension1.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtNamedFunction genTopLevelFun1]
fun kotlin.String.genTopLevelExtension1(): kotlin.Int
PSI: KtNamedFunction genTopLevelExtension1 [from extension1.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtNamedFunction genTopLevelExtension1]
val genTopLevelVal1: kotlin.String
PSI: KtProperty genTopLevelVal1 [from extension1.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtProperty genTopLevelVal1]
var genTopLevelVar1: kotlin.String
PSI: KtProperty genTopLevelVar1 [from extension1.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtProperty genTopLevelVar1]
val generated.GenClass2.genExtensionVal1: kotlin.Int
get()
PSI: KtProperty genExtensionVal1 [from extension1.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtProperty genExtensionVal1]
constructors: 0
@@ -0,0 +1,430 @@
packages: 1
KtPackageSymbol:
fqName: generated
origin: SOURCE
classifiers: 2
KtNamedClassOrObjectSymbol:
annotationsList: []
classIdIfNonLocal: generated/GenClass1
classKind: CLASS
companionObject: null
contextReceivers: []
isData: false
isExternal: false
isFun: false
isInline: false
isInner: false
modality: FINAL
name: GenClass1
origin: SOURCE
superTypes: [
KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/Any
]
symbolKind: TOP_LEVEL
typeParameters: []
visibility: Public
PSI: KtClass GenClass1 [from extension1.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtClass GenClass1]
KtNamedClassOrObjectSymbol:
annotationsList: []
classIdIfNonLocal: generated/GenClass2
classKind: CLASS
companionObject: null
contextReceivers: []
isData: false
isExternal: false
isFun: false
isInline: false
isInner: false
modality: OPEN
name: GenClass2
origin: SOURCE
superTypes: [
KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/Any
]
symbolKind: TOP_LEVEL
typeParameters: []
visibility: Public
PSI: KtClass GenClass2 [from extension2.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtClass GenClass2]
callables: 5
KtFunctionSymbol:
annotationsList: []
callableIdIfNonLocal: generated/genTopLevelFun1
contextReceivers: []
contractEffects: []
hasStableParameterNames: true
isBuiltinFunctionInvoke: false
isExtension: false
isExternal: false
isInfix: false
isInline: false
isOperator: false
isOverride: false
isStatic: false
isSuspend: false
modality: FINAL
name: genTopLevelFun1
origin: SOURCE
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/String
symbolKind: TOP_LEVEL
typeParameters: []
valueParameters: [
KtValueParameterSymbol:
annotationsList: []
callableIdIfNonLocal: null
contextReceivers: []
generatedPrimaryConstructorProperty: null
hasDefaultValue: false
isCrossinline: false
isExtension: false
isImplicitLambdaParameter: false
isNoinline: false
isVararg: false
name: foo
origin: SOURCE
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: generated/GenClass2
symbolKind: LOCAL
typeParameters: []
]
visibility: Public
PSI: KtNamedFunction genTopLevelFun1 [from extension1.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtNamedFunction genTopLevelFun1]
KtFunctionSymbol:
annotationsList: []
callableIdIfNonLocal: generated/genTopLevelExtension1
contextReceivers: []
contractEffects: []
hasStableParameterNames: true
isBuiltinFunctionInvoke: false
isExtension: true
isExternal: false
isInfix: false
isInline: false
isOperator: false
isOverride: false
isStatic: false
isSuspend: false
modality: FINAL
name: genTopLevelExtension1
origin: SOURCE
receiverParameter: KtReceiverParameterSymbol:
annotationsList: []
origin: SOURCE
owningCallableSymbol: KtFunctionSymbol(generated/genTopLevelExtension1)
type: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/String
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/Int
symbolKind: TOP_LEVEL
typeParameters: []
valueParameters: []
visibility: Public
PSI: KtNamedFunction genTopLevelExtension1 [from extension1.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtNamedFunction genTopLevelExtension1]
KtKotlinPropertySymbol:
annotationsList: []
backingFieldSymbol: KtBackingFieldSymbol:
annotationsList: []
callableIdIfNonLocal: null
contextReceivers: []
isExtension: false
name: field
origin: PROPERTY_BACKING_FIELD
owningProperty: KtKotlinPropertySymbol(generated/genTopLevelVal1)
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/String
symbolKind: LOCAL
typeParameters: []
callableIdIfNonLocal: generated/genTopLevelVal1
contextReceivers: []
getter: KtPropertyGetterSymbol:
annotationsList: []
callableIdIfNonLocal: null
contextReceivers: []
hasBody: false
hasStableParameterNames: true
isDefault: true
isExtension: false
isInline: false
isOverride: false
modality: FINAL
origin: SOURCE
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/String
symbolKind: ACCESSOR
typeParameters: []
valueParameters: []
visibility: Public
hasBackingField: true
hasGetter: true
hasSetter: false
initializer: KtConstantInitializerValue("baz")
isConst: false
isDelegatedProperty: false
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
isVal: true
modality: FINAL
name: genTopLevelVal1
origin: SOURCE
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/String
setter: null
symbolKind: TOP_LEVEL
typeParameters: []
visibility: Public
PSI: KtProperty genTopLevelVal1 [from extension1.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtProperty genTopLevelVal1]
KtKotlinPropertySymbol:
annotationsList: []
backingFieldSymbol: KtBackingFieldSymbol:
annotationsList: []
callableIdIfNonLocal: null
contextReceivers: []
isExtension: false
name: field
origin: PROPERTY_BACKING_FIELD
owningProperty: KtKotlinPropertySymbol(generated/genTopLevelVar1)
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/String
symbolKind: LOCAL
typeParameters: []
callableIdIfNonLocal: generated/genTopLevelVar1
contextReceivers: []
getter: KtPropertyGetterSymbol:
annotationsList: []
callableIdIfNonLocal: null
contextReceivers: []
hasBody: false
hasStableParameterNames: true
isDefault: true
isExtension: false
isInline: false
isOverride: false
modality: FINAL
origin: SOURCE
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/String
symbolKind: ACCESSOR
typeParameters: []
valueParameters: []
visibility: Public
hasBackingField: true
hasGetter: true
hasSetter: true
initializer: KtConstantInitializerValue("quux")
isConst: false
isDelegatedProperty: false
isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
isVal: false
modality: FINAL
name: genTopLevelVar1
origin: SOURCE
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/String
setter: KtPropertySetterSymbol:
annotationsList: []
callableIdIfNonLocal: null
contextReceivers: []
hasBody: false
hasStableParameterNames: true
isDefault: true
isExtension: false
isInline: false
isOverride: false
modality: FINAL
origin: SOURCE
parameter: KtValueParameterSymbol:
annotationsList: []
callableIdIfNonLocal: null
contextReceivers: []
generatedPrimaryConstructorProperty: null
hasDefaultValue: false
isCrossinline: false
isExtension: false
isImplicitLambdaParameter: false
isNoinline: false
isVararg: false
name: value
origin: SOURCE
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/String
symbolKind: LOCAL
typeParameters: []
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/Unit
symbolKind: ACCESSOR
typeParameters: []
valueParameters: [
KtValueParameterSymbol:
annotationsList: []
callableIdIfNonLocal: null
contextReceivers: []
generatedPrimaryConstructorProperty: null
hasDefaultValue: false
isCrossinline: false
isExtension: false
isImplicitLambdaParameter: false
isNoinline: false
isVararg: false
name: value
origin: SOURCE
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/String
symbolKind: LOCAL
typeParameters: []
]
visibility: Internal
symbolKind: TOP_LEVEL
typeParameters: []
visibility: Public
PSI: KtProperty genTopLevelVar1 [from extension1.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtProperty genTopLevelVar1]
KtKotlinPropertySymbol:
annotationsList: []
backingFieldSymbol: KtBackingFieldSymbol:
annotationsList: []
callableIdIfNonLocal: null
contextReceivers: []
isExtension: false
name: field
origin: PROPERTY_BACKING_FIELD
owningProperty: KtKotlinPropertySymbol(generated/genExtensionVal1)
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/Int
symbolKind: LOCAL
typeParameters: []
callableIdIfNonLocal: generated/genExtensionVal1
contextReceivers: []
getter: KtPropertyGetterSymbol:
annotationsList: []
callableIdIfNonLocal: null
contextReceivers: []
hasBody: true
hasStableParameterNames: true
isDefault: false
isExtension: false
isInline: false
isOverride: false
modality: FINAL
origin: SOURCE
receiverParameter: KtReceiverParameterSymbol:
annotationsList: []
origin: SOURCE
owningCallableSymbol: KtKotlinPropertySymbol(generated/genExtensionVal1)
type: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: generated/GenClass2
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/Int
symbolKind: ACCESSOR
typeParameters: []
valueParameters: []
visibility: Public
hasBackingField: false
hasGetter: true
hasSetter: false
initializer: null
isConst: false
isDelegatedProperty: false
isExtension: true
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
isVal: true
modality: FINAL
name: genExtensionVal1
origin: SOURCE
receiverParameter: KtReceiverParameterSymbol:
annotationsList: []
origin: SOURCE
owningCallableSymbol: KtKotlinPropertySymbol(generated/genExtensionVal1)
type: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: generated/GenClass2
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/Int
setter: null
symbolKind: TOP_LEVEL
typeParameters: []
visibility: Public
PSI: KtProperty genExtensionVal1 [from extension1.kt]
From resolve extension: true
Resolve extension navigation targets: 1
[Resolve extension navigation target for test for KtProperty genExtensionVal1]
constructors: 0