Record special descriptor in REFERENCE_TARGET for type alias object

If a type alias is used to reference an object (companion object) as a
qualifier, record FakeCallableDescriptorForTypeAliasObject in
REFERENCE_TARGET. This tells IDE that type alias was used in the file,
thus, if it's imported, such import isn't redundant.
REFERENCE_TARGET is used mostly by IDE and by ClassifierUsageChecker,
which we also have to update to handle qualifiers with
FakeCallableDescriptorForTypeAliasObject in REFERENCE_TARGET.

Rewrite some parts of ClassifierUsageChecker for cleaner interaction.

 #KT-21863 Fixed Target versions 1.2.40
This commit is contained in:
Dmitry Petrov
2018-03-13 15:17:30 +03:00
parent 3b3cc5233f
commit f956e8d85d
13 changed files with 156 additions and 42 deletions
@@ -0,0 +1,18 @@
// FILE: 1.kt
package something
object N
class WC {
companion object
}
typealias T = N
typealias TWC = WC
// FILE: 2.kt
import something.T
import something.TWC
val test1 = T.hashCode()
val test2 = TWC.hashCode()
@@ -0,0 +1,30 @@
package
public val test1: kotlin.Int
public val test2: kotlin.Int
package something {
public object N {
private constructor N()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class WC {
public constructor WC()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public companion object Companion {
private constructor Companion()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
public typealias T = something.N
public typealias TWC = something.WC
}