KT-14352 Record short reference to companion object via type alias,
so that it would be checked properly.
This commit is contained in:
@@ -117,8 +117,8 @@ public interface BindingContext {
|
||||
WritableSlice<KtReferenceExpression, DeclarationDescriptor> REFERENCE_TARGET =
|
||||
new BasicWritableSlice<KtReferenceExpression, DeclarationDescriptor>(DO_NOTHING);
|
||||
// if 'A' really means 'A.Companion' then this slice stores class descriptor for A, REFERENCE_TARGET stores descriptor Companion in this case
|
||||
WritableSlice<KtReferenceExpression, ClassDescriptor> SHORT_REFERENCE_TO_COMPANION_OBJECT =
|
||||
new BasicWritableSlice<KtReferenceExpression, ClassDescriptor>(DO_NOTHING);
|
||||
WritableSlice<KtReferenceExpression, ClassifierDescriptorWithTypeParameters> SHORT_REFERENCE_TO_COMPANION_OBJECT =
|
||||
new BasicWritableSlice<KtReferenceExpression, ClassifierDescriptorWithTypeParameters>(DO_NOTHING);
|
||||
|
||||
WritableSlice<Call, ResolvedCall<?>> RESOLVED_CALL = new BasicWritableSlice<Call, ResolvedCall<?>>(DO_NOTHING);
|
||||
WritableSlice<Call, TailRecursionKind> TAIL_RECURSION_CALL = Slices.createSimpleSlice();
|
||||
|
||||
+1
-1
@@ -89,7 +89,7 @@ private fun resolveQualifierReferenceTarget(
|
||||
}
|
||||
|
||||
// TODO make decisions about short reference to companion object somewhere else
|
||||
if (qualifier is ClassQualifier) {
|
||||
if (qualifier is ClassifierQualifier) {
|
||||
val classifier = qualifier.descriptor
|
||||
val selectorIsCallable = selector is CallableDescriptor &&
|
||||
(selector.dispatchReceiverParameter != null || selector.extensionReceiverParameter != null)
|
||||
|
||||
+8
-6
@@ -56,15 +56,17 @@ interface ClassifierUsageChecker {
|
||||
|
||||
val target = getReferencedClassifier(expression) ?: return
|
||||
|
||||
for (checker in checkers) {
|
||||
checker.check(target, trace, expression, languageVersionSettings)
|
||||
}
|
||||
runCheckersWithTarget(target, expression)
|
||||
|
||||
if (isReferenceToCompanionViaOuterClass(expression, target)) {
|
||||
val outerClass = target.containingDeclaration as ClassDescriptor
|
||||
for (checker in checkers) {
|
||||
checker.check(outerClass, trace, expression, languageVersionSettings)
|
||||
}
|
||||
runCheckersWithTarget(outerClass, expression)
|
||||
}
|
||||
}
|
||||
|
||||
private fun runCheckersWithTarget(target: ClassifierDescriptor, expression: KtReferenceExpression) {
|
||||
for (checker in checkers) {
|
||||
checker.check(target, trace, expression, languageVersionSettings)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -53,7 +53,9 @@ class TypeParameterQualifier(
|
||||
override fun toString() = "TypeParameter{$descriptor}"
|
||||
}
|
||||
|
||||
interface ClassifierQualifier : Qualifier
|
||||
interface ClassifierQualifier : Qualifier {
|
||||
override val descriptor: ClassifierDescriptorWithTypeParameters
|
||||
}
|
||||
|
||||
class ClassQualifier(
|
||||
override val referenceExpression: KtSimpleNameExpression,
|
||||
|
||||
Reference in New Issue
Block a user