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@{
|
FirRegularClassSymbol(this).apply symbol@{
|
||||||
buildRegularClass klass@{
|
buildRegularClass klass@{
|
||||||
session = this@FirBuiltinSymbolProvider.session
|
session = this@FirBuiltinSymbolProvider.session
|
||||||
origin = FirDeclarationOrigin.Synthetic
|
origin = FirDeclarationOrigin.BuiltIns
|
||||||
name = relativeClassName.shortName()
|
name = relativeClassName.shortName()
|
||||||
status = FirResolvedDeclarationStatusImpl(
|
status = FirResolvedDeclarationStatusImpl(
|
||||||
Visibilities.Public,
|
Visibilities.Public,
|
||||||
@@ -112,7 +112,7 @@ class FirBuiltinSymbolProvider(session: FirSession, val kotlinScopeProvider: Kot
|
|||||||
buildTypeParameter {
|
buildTypeParameter {
|
||||||
session = this@FirBuiltinSymbolProvider.session
|
session = this@FirBuiltinSymbolProvider.session
|
||||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||||
origin = FirDeclarationOrigin.Synthetic
|
origin = FirDeclarationOrigin.BuiltIns
|
||||||
name = Name.identifier("P$it")
|
name = Name.identifier("P$it")
|
||||||
symbol = FirTypeParameterSymbol()
|
symbol = FirTypeParameterSymbol()
|
||||||
variance = Variance.IN_VARIANCE
|
variance = Variance.IN_VARIANCE
|
||||||
@@ -125,7 +125,7 @@ class FirBuiltinSymbolProvider(session: FirSession, val kotlinScopeProvider: Kot
|
|||||||
buildTypeParameter {
|
buildTypeParameter {
|
||||||
session = this@FirBuiltinSymbolProvider.session
|
session = this@FirBuiltinSymbolProvider.session
|
||||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||||
origin = FirDeclarationOrigin.Synthetic
|
origin = FirDeclarationOrigin.BuiltIns
|
||||||
name = Name.identifier("R")
|
name = Name.identifier("R")
|
||||||
symbol = FirTypeParameterSymbol()
|
symbol = FirTypeParameterSymbol()
|
||||||
variance = Variance.OUT_VARIANCE
|
variance = Variance.OUT_VARIANCE
|
||||||
@@ -200,7 +200,7 @@ class FirBuiltinSymbolProvider(session: FirSession, val kotlinScopeProvider: Kot
|
|||||||
buildSimpleFunction {
|
buildSimpleFunction {
|
||||||
session = this@FirBuiltinSymbolProvider.session
|
session = this@FirBuiltinSymbolProvider.session
|
||||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||||
origin = FirDeclarationOrigin.Synthetic
|
origin = FirDeclarationOrigin.BuiltIns
|
||||||
returnTypeRef = typeArguments.last()
|
returnTypeRef = typeArguments.last()
|
||||||
this.name = name
|
this.name = name
|
||||||
status = functionStatus
|
status = functionStatus
|
||||||
@@ -212,7 +212,7 @@ class FirBuiltinSymbolProvider(session: FirSession, val kotlinScopeProvider: Kot
|
|||||||
val parameterName = Name.identifier("p${index + 1}")
|
val parameterName = Name.identifier("p${index + 1}")
|
||||||
buildValueParameter {
|
buildValueParameter {
|
||||||
session = this@FirBuiltinSymbolProvider.session
|
session = this@FirBuiltinSymbolProvider.session
|
||||||
origin = FirDeclarationOrigin.Synthetic
|
origin = FirDeclarationOrigin.BuiltIns
|
||||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||||
returnTypeRef = typeArgument
|
returnTypeRef = typeArgument
|
||||||
this.name = parameterName
|
this.name = parameterName
|
||||||
|
|||||||
-11
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
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.FirFakeSourceElementKind
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
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.fir.utils.FirRefWithValidityCheck
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbolOrigin
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbolOrigin
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
|
||||||
|
|
||||||
internal interface KtFirSymbol<F : FirDeclaration> : KtSymbol, ValidityTokenOwner {
|
internal interface KtFirSymbol<F : FirDeclaration> : KtSymbol, ValidityTokenOwner {
|
||||||
val firRef: FirRefWithValidityCheck<F>
|
val firRef: FirRefWithValidityCheck<F>
|
||||||
@@ -40,7 +38,6 @@ private tailrec fun FirDeclaration.ktSymbolOrigin(): KtSymbolOrigin = when (orig
|
|||||||
FirDeclarationOrigin.Delegated -> KtSymbolOrigin.DELEGATED
|
FirDeclarationOrigin.Delegated -> KtSymbolOrigin.DELEGATED
|
||||||
FirDeclarationOrigin.Synthetic -> {
|
FirDeclarationOrigin.Synthetic -> {
|
||||||
when {
|
when {
|
||||||
isSyntheticFunctionalInterface() -> KtSymbolOrigin.LIBRARY
|
|
||||||
this is FirSyntheticProperty -> KtSymbolOrigin.JAVA_SYNTHETIC_PROPERTY
|
this is FirSyntheticProperty -> KtSymbolOrigin.JAVA_SYNTHETIC_PROPERTY
|
||||||
else -> throw InvalidFirDeclarationOriginForSymbol(this)
|
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) :
|
class InvalidFirDeclarationOriginForSymbol(declaration: FirDeclaration) :
|
||||||
IllegalStateException("Invalid FirDeclarationOrigin ${declaration.origin::class.simpleName} for ${declaration.render()}")
|
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");
|
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")
|
@TestMetadata("MutableList.txt")
|
||||||
public void testMutableList() throws Exception {
|
public void testMutableList() throws Exception {
|
||||||
runTest("idea/idea-frontend-fir/testData/memberScopeByFqName/MutableList.txt");
|
runTest("idea/idea-frontend-fir/testData/memberScopeByFqName/MutableList.txt");
|
||||||
|
|||||||
Reference in New Issue
Block a user