diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolContainingDeclarationProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolContainingDeclarationProvider.kt index 66c665d8e35..4a679ae1d7d 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolContainingDeclarationProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolContainingDeclarationProvider.kt @@ -52,7 +52,7 @@ internal class KtFirSymbolContainingDeclarationProvider( KtSymbolOrigin.LIBRARY, KtSymbolOrigin.JAVA, KtSymbolOrigin.JAVA_SYNTHETIC_PROPERTY -> getContainingDeclarationForLibrarySymbol(symbol) KtSymbolOrigin.PROPERTY_BACKING_FIELD -> getContainingDeclarationForBackingFieldSymbol(symbol) - KtSymbolOrigin.INTERSECTION_OVERRIDE -> TODO() + KtSymbolOrigin.INTERSECTION_OVERRIDE, KtSymbolOrigin.SUBSTITUTION_OVERRIDE -> TODO() KtSymbolOrigin.SAM_CONSTRUCTOR -> null KtSymbolOrigin.PLUGIN -> TODO("Containing declaration is requested for ${ DebugSymbolRenderer.render(symbol) }") KtSymbolOrigin.DELEGATED -> TODO() diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbol.kt index 5146069b980..35df5d5a069 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbol.kt @@ -76,11 +76,9 @@ internal tailrec fun FirDeclaration.ktSymbolOrigin(): KtSymbolOrigin = when (ori original.ktSymbolOrigin() } is FirDeclarationOrigin.Plugin -> KtSymbolOrigin.PLUGIN - else -> { - val overridden = (this as? FirCallableDeclaration)?.originalIfFakeOverride() - ?: throw InvalidFirDeclarationOriginForSymbol(this) - overridden.ktSymbolOrigin() - } + FirDeclarationOrigin.RenamedForOverride -> KtSymbolOrigin.JAVA + FirDeclarationOrigin.SubstitutionOverride -> KtSymbolOrigin.SUBSTITUTION_OVERRIDE + FirDeclarationOrigin.DynamicScope -> throw InvalidFirDeclarationOriginForSymbol(this) } class InvalidFirDeclarationOriginForSymbol(declaration: FirDeclaration) : diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KtSymbol.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KtSymbol.kt index 989fe4a5c49..55008d100ef 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KtSymbol.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KtSymbol.kt @@ -88,6 +88,17 @@ public enum class KtSymbolOrigin { */ INTERSECTION_OVERRIDE, + /** + * Consider the following code: + * ``` + * interface A { fun x(): T } + * interface B : A { } + * ``` + * + * The B will have a member B.foo(): Int, this member is generated inside interface B with substtution T -> Int, such members are SUBSTITUTION_OVERRIDE + */ + SUBSTITUTION_OVERRIDE, + /** * Member symbol which was generated by compiler when using `by` interface delegation * e.g, diff --git a/analysis/analysis-api/testData/components/scopeProvider/typeScope/innerClassTypeParamsSubstitution.txt b/analysis/analysis-api/testData/components/scopeProvider/typeScope/innerClassTypeParamsSubstitution.txt index 9f51f342e28..276a9713933 100644 --- a/analysis/analysis-api/testData/components/scopeProvider/typeScope/innerClassTypeParamsSubstitution.txt +++ b/analysis/analysis-api/testData/components/scopeProvider/typeScope/innerClassTypeParamsSubstitution.txt @@ -128,7 +128,7 @@ KtFunctionSymbol: isSuspend: false modality: ABSTRACT name: fromSuper - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE receiverType: null returnType: O symbolKind: CLASS_MEMBER diff --git a/analysis/analysis-api/testData/scopes/memberScopeByFqName/MutableList.txt b/analysis/analysis-api/testData/scopes/memberScopeByFqName/MutableList.txt index 3ec9970d853..09c9a62a5f4 100644 --- a/analysis/analysis-api/testData/scopes/memberScopeByFqName/MutableList.txt +++ b/analysis/analysis-api/testData/scopes/memberScopeByFqName/MutableList.txt @@ -377,7 +377,7 @@ KtFunctionSymbol: isSuspend: false modality: ABSTRACT name: contains - origin: LIBRARY + origin: SUBSTITUTION_OVERRIDE receiverType: null returnType: kotlin/Boolean symbolKind: CLASS_MEMBER @@ -405,7 +405,7 @@ KtFunctionSymbol: isSuspend: false modality: ABSTRACT name: containsAll - origin: LIBRARY + origin: SUBSTITUTION_OVERRIDE receiverType: null returnType: kotlin/Boolean symbolKind: CLASS_MEMBER @@ -433,7 +433,7 @@ KtFunctionSymbol: isSuspend: false modality: ABSTRACT name: get - origin: LIBRARY + origin: SUBSTITUTION_OVERRIDE receiverType: null returnType: E symbolKind: CLASS_MEMBER @@ -461,7 +461,7 @@ KtFunctionSymbol: isSuspend: false modality: ABSTRACT name: indexOf - origin: LIBRARY + origin: SUBSTITUTION_OVERRIDE receiverType: null returnType: kotlin/Int symbolKind: CLASS_MEMBER @@ -541,7 +541,7 @@ KtFunctionSymbol: isSuspend: false modality: ABSTRACT name: lastIndexOf - origin: LIBRARY + origin: SUBSTITUTION_OVERRIDE receiverType: null returnType: kotlin/Int symbolKind: CLASS_MEMBER diff --git a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/ClassWithGenericBase1.txt b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/ClassWithGenericBase1.txt index ac64eaf6bf7..6dd83f1c221 100644 --- a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/ClassWithGenericBase1.txt +++ b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/ClassWithGenericBase1.txt @@ -6,7 +6,7 @@ KtFunctionSymbol: KtFunctionSymbol: callableIdIfNonLocal: test/ClassWithGenericBase.withOuterGeneric name: withOuterGeneric - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: test/Base.withOwnGeneric @@ -16,7 +16,7 @@ KtFunctionSymbol: KtFunctionSymbol: callableIdIfNonLocal: test/ClassWithGenericBase.withOuterAndOwnGeneric name: withOuterAndOwnGeneric - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: kotlin/Any.equals diff --git a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/ClassWithGenericBase2.txt b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/ClassWithGenericBase2.txt index c03ff79bfac..ad10ecf5e8a 100644 --- a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/ClassWithGenericBase2.txt +++ b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/ClassWithGenericBase2.txt @@ -6,7 +6,7 @@ KtKotlinPropertySymbol: KtKotlinPropertySymbol: callableIdIfNonLocal: test/ClassWithGenericBase.withOuterGeneric name: withOuterGeneric - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtKotlinPropertySymbol: callableIdIfNonLocal: test/Base.withOwnGeneric @@ -16,7 +16,7 @@ KtKotlinPropertySymbol: KtKotlinPropertySymbol: callableIdIfNonLocal: test/ClassWithGenericBase.withOuterAndOwnGeneric name: withOuterAndOwnGeneric - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: kotlin/Any.equals diff --git a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/ClassWithGenericBase3.txt b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/ClassWithGenericBase3.txt index f34317a9dea..31c9db06d82 100644 --- a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/ClassWithGenericBase3.txt +++ b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/ClassWithGenericBase3.txt @@ -6,7 +6,7 @@ KtFunctionSymbol: KtFunctionSymbol: callableIdIfNonLocal: test/ClassWithInterfaceWithFun.withOuterGeneric_InterfaceWithFun name: withOuterGeneric_InterfaceWithFun - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: test/InterfaceWithFunBase.noGenerics_InterfaceWithFunBase @@ -16,12 +16,12 @@ KtFunctionSymbol: KtFunctionSymbol: callableIdIfNonLocal: test/InterfaceWithFun.withOuterGenericT1_InterfaceWithFunBase name: withOuterGenericT1_InterfaceWithFunBase - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: test/ClassWithInterfaceWithFun.withOuterGenericT2_InterfaceWithFunBase name: withOuterGenericT2_InterfaceWithFunBase - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: kotlin/Any.equals diff --git a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/ClassWithGenericBase4.txt b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/ClassWithGenericBase4.txt index f543a1af385..4af25be236b 100644 --- a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/ClassWithGenericBase4.txt +++ b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/ClassWithGenericBase4.txt @@ -6,7 +6,7 @@ KtKotlinPropertySymbol: KtKotlinPropertySymbol: callableIdIfNonLocal: test/ClassWithInterfaceWithVal.withOuterGeneric_InterfaceWithVal name: withOuterGeneric_InterfaceWithVal - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtKotlinPropertySymbol: callableIdIfNonLocal: test/InterfaceWithVal.withOwnGeneric_InterfaceWithVal @@ -16,7 +16,7 @@ KtKotlinPropertySymbol: KtKotlinPropertySymbol: callableIdIfNonLocal: test/ClassWithInterfaceWithVal.withOwnAndOuterGeneric_InterfaceWithVal name: withOwnAndOuterGeneric_InterfaceWithVal - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtKotlinPropertySymbol: callableIdIfNonLocal: test/InterfaceWithValBase.noGenerics_InterfaceWithValBase @@ -26,12 +26,12 @@ KtKotlinPropertySymbol: KtKotlinPropertySymbol: callableIdIfNonLocal: test/InterfaceWithVal.withOuterGenericT1_InterfaceWithValBase name: withOuterGenericT1_InterfaceWithValBase - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtKotlinPropertySymbol: callableIdIfNonLocal: test/ClassWithInterfaceWithVal.withOuterGenericT2_InterfaceWithValBase name: withOuterGenericT2_InterfaceWithValBase - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtKotlinPropertySymbol: callableIdIfNonLocal: test/InterfaceWithValBase.withOwnGeneric_InterfaceWithValBase @@ -41,12 +41,12 @@ KtKotlinPropertySymbol: KtKotlinPropertySymbol: callableIdIfNonLocal: test/InterfaceWithVal.withOwnAndOuterGenericT1_InterfaceWithValBase name: withOwnAndOuterGenericT1_InterfaceWithValBase - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtKotlinPropertySymbol: callableIdIfNonLocal: test/ClassWithInterfaceWithVal.withOwnAndOuterGenericT2_InterfaceWithValBase name: withOwnAndOuterGenericT2_InterfaceWithValBase - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: kotlin/Any.equals diff --git a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromFunctionInLocalClass2.txt b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromFunctionInLocalClass2.txt index 89bd5c95f74..d38f9eed7ac 100644 --- a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromFunctionInLocalClass2.txt +++ b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromFunctionInLocalClass2.txt @@ -11,7 +11,7 @@ KtFunctionSymbol: KtFunctionSymbol: callableIdIfNonLocal: null name: withOuterAndOwn - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: kotlin/Any.equals diff --git a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromOuterClassInInnerClass2.txt b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromOuterClassInInnerClass2.txt index 3d5fc65e7a2..8cd1c2d2343 100644 --- a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromOuterClassInInnerClass2.txt +++ b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromOuterClassInInnerClass2.txt @@ -11,7 +11,7 @@ KtFunctionSymbol: KtFunctionSymbol: callableIdIfNonLocal: test/TopLevel.Child.withOwnAndOuter name: withOwnAndOuter - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: kotlin/Any.equals diff --git a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromOuterClassInInnerClassInInheritor1.txt b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromOuterClassInInnerClassInInheritor1.txt index ce5a6c3f4bc..8d2adafef09 100644 --- a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromOuterClassInInnerClassInInheritor1.txt +++ b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromOuterClassInInnerClassInInheritor1.txt @@ -6,7 +6,7 @@ KtFunctionSymbol: KtFunctionSymbol: callableIdIfNonLocal: test/OtherTopLevel.Child.withOuter name: withOuter - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: kotlin/Any.equals diff --git a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromOuterClassInInnerClassInInheritor2.txt b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromOuterClassInInnerClassInInheritor2.txt index ce5a6c3f4bc..8d2adafef09 100644 --- a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromOuterClassInInnerClassInInheritor2.txt +++ b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromOuterClassInInnerClassInInheritor2.txt @@ -6,7 +6,7 @@ KtFunctionSymbol: KtFunctionSymbol: callableIdIfNonLocal: test/OtherTopLevel.Child.withOuter name: withOuter - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: kotlin/Any.equals diff --git a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromOuterClassInInnerClassInInheritor3.txt b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromOuterClassInInnerClassInInheritor3.txt index d851687c632..a81fbcd54d7 100644 --- a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromOuterClassInInnerClassInInheritor3.txt +++ b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/GenericFromOuterClassInInnerClassInInheritor3.txt @@ -6,12 +6,12 @@ KtFunctionSymbol: KtFunctionSymbol: callableIdIfNonLocal: test/OtherTopLevel.Child.withOuter name: withOuter - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: test/OtherTopLevel.Child.withOwnAndOuter name: withOwnAndOuter - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: kotlin/Any.equals diff --git a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/Implement_java_util_Collection.txt b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/Implement_java_util_Collection.txt index 361087dbf82..21cf5552c1d 100644 --- a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/Implement_java_util_Collection.txt +++ b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/Implement_java_util_Collection.txt @@ -16,7 +16,7 @@ KtFunctionSymbol: KtFunctionSymbol: callableIdIfNonLocal: test/MyList.iterator name: iterator - origin: JAVA + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: java/util/Collection.toArray @@ -31,7 +31,7 @@ KtFunctionSymbol: KtFunctionSymbol: callableIdIfNonLocal: test/MyList.add name: add - origin: JAVA + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: java/util/Collection.remove @@ -46,7 +46,7 @@ KtFunctionSymbol: KtFunctionSymbol: callableIdIfNonLocal: test/MyList.addAll name: addAll - origin: JAVA + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: java/util/Collection.removeAll diff --git a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/MemberFunctionWithOuterTypeParameterBound.txt b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/MemberFunctionWithOuterTypeParameterBound.txt index d58ff97bdf8..15e437550df 100644 --- a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/MemberFunctionWithOuterTypeParameterBound.txt +++ b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/MemberFunctionWithOuterTypeParameterBound.txt @@ -1,12 +1,12 @@ KtFunctionSymbol: callableIdIfNonLocal: test/MyClass.funWithOuterAndOwnGenericsAndBounds name: funWithOuterAndOwnGenericsAndBounds - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtKotlinPropertySymbol: callableIdIfNonLocal: test/MyClass.propWithOuterAndOwnGenericsAndBounds name: propWithOuterAndOwnGenericsAndBounds - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: kotlin/Any.equals diff --git a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/MemberPropertyWithOuterTypeParameterBound.txt b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/MemberPropertyWithOuterTypeParameterBound.txt index 3f622fd3d76..a6dfc021f6e 100644 --- a/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/MemberPropertyWithOuterTypeParameterBound.txt +++ b/analysis/analysis-api/testData/scopes/substitutionOverridesUnwrapping/MemberPropertyWithOuterTypeParameterBound.txt @@ -6,7 +6,7 @@ KtKotlinPropertySymbol: KtKotlinPropertySymbol: callableIdIfNonLocal: test/Inheritor.withOwnAndOuterGenericAsTypeBound_InterfaceWithValBase name: withOwnAndOuterGenericAsTypeBound_InterfaceWithValBase - origin: SOURCE + origin: SUBSTITUTION_OVERRIDE KtFunctionSymbol: callableIdIfNonLocal: kotlin/Any.equals diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/constructorViaTypeAlias.txt b/analysis/analysis-api/testData/symbols/symbolByReference/constructorViaTypeAlias.txt index ce0896aa940..2b30c37ddde 100644 --- a/analysis/analysis-api/testData/symbols/symbolByReference/constructorViaTypeAlias.txt +++ b/analysis/analysis-api/testData/symbols/symbolByReference/constructorViaTypeAlias.txt @@ -5,7 +5,7 @@ KtConstructorSymbol: hasStableParameterNames: false isExtension: false isPrimary: false - origin: JAVA + origin: SUBSTITUTION_OVERRIDE receiverType: null returnType: java/util/ArrayList symbolKind: CLASS_MEMBER