FIR IDE: fix origin of synthetic functional interfaces
^KT-45312 fixed
This commit is contained in:
+5
-5
@@ -90,7 +90,7 @@ class FirBuiltinSymbolProvider(session: FirSession, val kotlinScopeProvider: Kot
|
||||
FirRegularClassSymbol(this).apply symbol@{
|
||||
buildRegularClass klass@{
|
||||
session = this@FirBuiltinSymbolProvider.session
|
||||
origin = FirDeclarationOrigin.Synthetic
|
||||
origin = FirDeclarationOrigin.BuiltIns
|
||||
name = relativeClassName.shortName()
|
||||
status = FirResolvedDeclarationStatusImpl(
|
||||
Visibilities.Public,
|
||||
@@ -112,7 +112,7 @@ class FirBuiltinSymbolProvider(session: FirSession, val kotlinScopeProvider: Kot
|
||||
buildTypeParameter {
|
||||
session = this@FirBuiltinSymbolProvider.session
|
||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||
origin = FirDeclarationOrigin.Synthetic
|
||||
origin = FirDeclarationOrigin.BuiltIns
|
||||
name = Name.identifier("P$it")
|
||||
symbol = FirTypeParameterSymbol()
|
||||
variance = Variance.IN_VARIANCE
|
||||
@@ -125,7 +125,7 @@ class FirBuiltinSymbolProvider(session: FirSession, val kotlinScopeProvider: Kot
|
||||
buildTypeParameter {
|
||||
session = this@FirBuiltinSymbolProvider.session
|
||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||
origin = FirDeclarationOrigin.Synthetic
|
||||
origin = FirDeclarationOrigin.BuiltIns
|
||||
name = Name.identifier("R")
|
||||
symbol = FirTypeParameterSymbol()
|
||||
variance = Variance.OUT_VARIANCE
|
||||
@@ -200,7 +200,7 @@ class FirBuiltinSymbolProvider(session: FirSession, val kotlinScopeProvider: Kot
|
||||
buildSimpleFunction {
|
||||
session = this@FirBuiltinSymbolProvider.session
|
||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||
origin = FirDeclarationOrigin.Synthetic
|
||||
origin = FirDeclarationOrigin.BuiltIns
|
||||
returnTypeRef = typeArguments.last()
|
||||
this.name = name
|
||||
status = functionStatus
|
||||
@@ -212,7 +212,7 @@ class FirBuiltinSymbolProvider(session: FirSession, val kotlinScopeProvider: Kot
|
||||
val parameterName = Name.identifier("p${index + 1}")
|
||||
buildValueParameter {
|
||||
session = this@FirBuiltinSymbolProvider.session
|
||||
origin = FirDeclarationOrigin.Synthetic
|
||||
origin = FirDeclarationOrigin.BuiltIns
|
||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||
returnTypeRef = typeArgument
|
||||
this.name = parameterName
|
||||
|
||||
-11
@@ -5,7 +5,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
||||
|
||||
import org.jetbrains.kotlin.builtins.functions.FunctionClassKind
|
||||
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||
@@ -15,7 +14,6 @@ import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.FirRefWithValidityCheck
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbolOrigin
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
|
||||
internal interface KtFirSymbol<F : FirDeclaration> : KtSymbol, ValidityTokenOwner {
|
||||
val firRef: FirRefWithValidityCheck<F>
|
||||
@@ -40,7 +38,6 @@ private tailrec fun FirDeclaration.ktSymbolOrigin(): KtSymbolOrigin = when (orig
|
||||
FirDeclarationOrigin.Delegated -> KtSymbolOrigin.DELEGATED
|
||||
FirDeclarationOrigin.Synthetic -> {
|
||||
when {
|
||||
isSyntheticFunctionalInterface() -> KtSymbolOrigin.LIBRARY
|
||||
this is FirSyntheticProperty -> KtSymbolOrigin.JAVA_SYNTHETIC_PROPERTY
|
||||
else -> throw InvalidFirDeclarationOriginForSymbol(this)
|
||||
}
|
||||
@@ -53,14 +50,6 @@ private tailrec fun FirDeclaration.ktSymbolOrigin(): KtSymbolOrigin = when (orig
|
||||
}
|
||||
}
|
||||
|
||||
private fun FirDeclaration.isSyntheticFunctionalInterface(): Boolean {
|
||||
if (this !is FirRegularClass) return false
|
||||
return classId.isSyntheticFunctionalInterface()
|
||||
}
|
||||
|
||||
private fun ClassId.isSyntheticFunctionalInterface(): Boolean {
|
||||
return FunctionClassKind.byClassNamePrefix(packageFqName, relativeClassName.asString()) != null
|
||||
}
|
||||
|
||||
class InvalidFirDeclarationOriginForSymbol(declaration: FirDeclaration) :
|
||||
IllegalStateException("Invalid FirDeclarationOrigin ${declaration.origin::class.simpleName} for ${declaration.render()}")
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
class: kotlin/Function2
|
||||
|
||||
// SYMBOLS:
|
||||
KtFirFunctionSymbol:
|
||||
annotatedType: [] R
|
||||
annotationClassIds: []
|
||||
annotations: []
|
||||
callableIdIfNonLocal: kotlin.Function2.invoke
|
||||
dispatchType: kotlin/Function2<P1, P2, R>
|
||||
isExtension: false
|
||||
isExternal: false
|
||||
isInline: false
|
||||
isOperator: true
|
||||
isOverride: false
|
||||
isSuspend: false
|
||||
modality: ABSTRACT
|
||||
name: invoke
|
||||
origin: LIBRARY
|
||||
receiverType: null
|
||||
symbolKind: MEMBER
|
||||
typeParameters: []
|
||||
valueParameters: [KtFirFunctionValueParameterSymbol(p1), KtFirFunctionValueParameterSymbol(p2)]
|
||||
visibility: PUBLIC
|
||||
|
||||
KtFirFunctionSymbol:
|
||||
annotatedType: [] kotlin/Boolean
|
||||
annotationClassIds: []
|
||||
annotations: []
|
||||
callableIdIfNonLocal: kotlin.Any.equals
|
||||
dispatchType: kotlin/Any
|
||||
isExtension: false
|
||||
isExternal: false
|
||||
isInline: false
|
||||
isOperator: true
|
||||
isOverride: false
|
||||
isSuspend: false
|
||||
modality: OPEN
|
||||
name: equals
|
||||
origin: LIBRARY
|
||||
receiverType: null
|
||||
symbolKind: MEMBER
|
||||
typeParameters: []
|
||||
valueParameters: [KtFirFunctionValueParameterSymbol(other)]
|
||||
visibility: PUBLIC
|
||||
|
||||
KtFirFunctionSymbol:
|
||||
annotatedType: [] kotlin/Int
|
||||
annotationClassIds: []
|
||||
annotations: []
|
||||
callableIdIfNonLocal: kotlin.Any.hashCode
|
||||
dispatchType: kotlin/Any
|
||||
isExtension: false
|
||||
isExternal: false
|
||||
isInline: false
|
||||
isOperator: false
|
||||
isOverride: false
|
||||
isSuspend: false
|
||||
modality: OPEN
|
||||
name: hashCode
|
||||
origin: LIBRARY
|
||||
receiverType: null
|
||||
symbolKind: MEMBER
|
||||
typeParameters: []
|
||||
valueParameters: []
|
||||
visibility: PUBLIC
|
||||
|
||||
KtFirFunctionSymbol:
|
||||
annotatedType: [] kotlin/String
|
||||
annotationClassIds: []
|
||||
annotations: []
|
||||
callableIdIfNonLocal: kotlin.Any.toString
|
||||
dispatchType: kotlin/Any
|
||||
isExtension: false
|
||||
isExternal: false
|
||||
isInline: false
|
||||
isOperator: false
|
||||
isOverride: false
|
||||
isSuspend: false
|
||||
modality: OPEN
|
||||
name: toString
|
||||
origin: LIBRARY
|
||||
receiverType: null
|
||||
symbolKind: MEMBER
|
||||
typeParameters: []
|
||||
valueParameters: []
|
||||
visibility: PUBLIC
|
||||
+5
@@ -39,6 +39,11 @@ public class MemberScopeByFqNameTestGenerated extends AbstractMemberScopeByFqNam
|
||||
runTest("idea/idea-frontend-fir/testData/memberScopeByFqName/java.lang.String.txt");
|
||||
}
|
||||
|
||||
@TestMetadata("kotlin.Function2.txt")
|
||||
public void testKotlin_Function2() throws Exception {
|
||||
runTest("idea/idea-frontend-fir/testData/memberScopeByFqName/kotlin.Function2.txt");
|
||||
}
|
||||
|
||||
@TestMetadata("MutableList.txt")
|
||||
public void testMutableList() throws Exception {
|
||||
runTest("idea/idea-frontend-fir/testData/memberScopeByFqName/MutableList.txt");
|
||||
|
||||
Reference in New Issue
Block a user