From dbf38823b9531d88e47cc940724c302c0a7b03af Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Fri, 1 Jul 2016 15:26:28 +0300 Subject: [PATCH] Minor: use NoLookupLocation.WHEN_GET_SUPER_MEMBERS for unqualified 'super' resolution --- .../unqualifiedSuper/unqualifiedSuper.kt | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/unqualifiedSuper/unqualifiedSuper.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/unqualifiedSuper/unqualifiedSuper.kt index 6b614745e56..1ea32a529b8 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/unqualifiedSuper/unqualifiedSuper.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/unqualifiedSuper/unqualifiedSuper.kt @@ -49,19 +49,18 @@ fun resolveUnqualifiedSuperFromExpressionContext( val calleeExpression = selectorExpression.calleeExpression if (calleeExpression is KtSimpleNameExpression) { val calleeName = calleeExpression.getReferencedNameAsName() - val location = NoLookupLocation.WHEN_TYPING if (isCallingMethodOfAny(selectorExpression, calleeName)) { - return resolveSupertypesForMethodOfAny(supertypes, calleeName, location, anyType) + return resolveSupertypesForMethodOfAny(supertypes, calleeName, anyType) } else { - return resolveSupertypesByCalleeName(supertypes, calleeName, location) + return resolveSupertypesByCalleeName(supertypes, calleeName) } } } is KtSimpleNameExpression -> { // super.x: x can be a property only // NB there are no properties in kotlin.Any - return resolveSupertypesByPropertyName(supertypes, selectorExpression.getReferencedNameAsName(), NoLookupLocation.WHEN_TYPING) + return resolveSupertypesByPropertyName(supertypes, selectorExpression.getReferencedNameAsName()) } } } @@ -94,22 +93,31 @@ private fun isCallingMethodOfAnyWithSuper(superExpression: KtSuperExpression): B return false } +private val LOOKUP_LOCATION = NoLookupLocation.WHEN_GET_SUPER_MEMBERS + private fun KotlinType.isInterface(): Boolean = TypeUtils.getClassDescriptor(this)?.kind == ClassKind.INTERFACE -private fun resolveSupertypesForMethodOfAny(supertypes: Collection, calleeName: Name, location: LookupLocation, anyType: KotlinType): Collection { - val typesWithConcreteOverride = resolveSupertypesByMembers(supertypes, false) { getFunctionMembers(it, calleeName, location) } +private fun resolveSupertypesForMethodOfAny(supertypes: Collection, calleeName: Name, anyType: KotlinType): Collection { + val typesWithConcreteOverride = resolveSupertypesByMembers(supertypes, false) { + getFunctionMembers(it, calleeName, LOOKUP_LOCATION) + } return if (typesWithConcreteOverride.isNotEmpty()) typesWithConcreteOverride else anyType.singletonList() } -private fun resolveSupertypesByCalleeName(supertypes: Collection, calleeName: Name, location: LookupLocation): Collection = - resolveSupertypesByMembers(supertypes, true) { getFunctionMembers(it, calleeName, location) + getPropertyMembers(it, calleeName, location) } +private fun resolveSupertypesByCalleeName(supertypes: Collection, calleeName: Name): Collection = + resolveSupertypesByMembers(supertypes, true) { + getFunctionMembers(it, calleeName, LOOKUP_LOCATION) + + getPropertyMembers(it, calleeName, LOOKUP_LOCATION) + } -private fun resolveSupertypesByPropertyName(supertypes: Collection, propertyName: Name, location: LookupLocation): Collection = - resolveSupertypesByMembers(supertypes, true) { getPropertyMembers(it, propertyName, location) } +private fun resolveSupertypesByPropertyName(supertypes: Collection, propertyName: Name): Collection = + resolveSupertypesByMembers(supertypes, true) { + getPropertyMembers(it, propertyName, LOOKUP_LOCATION) + } private inline fun resolveSupertypesByMembers( supertypes: Collection,