Move ClassifierUsageChecker invocation lower in LazyTopDownAnalyzer

Invoking checkers right after resolution of qualified expressions is too early:
DeprecatedClassifierUsageChecker tries to load the annotations of a referenced
classifier to report deprecation, and that may result in building light classes
for not yet analyzed declarations

 #KT-13954 Fixed
This commit is contained in:
Alexander Udalov
2016-09-22 20:19:00 +03:00
parent 35839695f7
commit dca99c3fd2
11 changed files with 166 additions and 31 deletions
@@ -17,4 +17,16 @@ fun useCompanion() {
val <!UNUSED_VARIABLE!>x<!> = Another.<!DEPRECATION!>Companion<!>
Another.<!DEPRECATION!>Companion<!>.use()
<!DEPRECATION!>Another<!>.use()
}
}
@Deprecated("Some")
class Some {
companion object {
fun use() {}
}
}
fun some() {
<!DEPRECATION!>Some<!>.use()
<!DEPRECATION!>Some<!>.Companion.use()
}
@@ -1,6 +1,7 @@
package
public fun first(): kotlin.Unit
public fun some(): kotlin.Unit
public fun useCompanion(): kotlin.Unit
public final class Another {
@@ -18,3 +19,18 @@ public final class Another {
public final fun use(): kotlin.Unit
}
}
@kotlin.Deprecated(message = "Some") public final class Some {
public constructor Some()
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 final fun use(): kotlin.Unit
}
}
@@ -0,0 +1,26 @@
// FILE: foo/A.kt
package foo
class A(val c: C)
// FILE: foo/B.kt
package foo
class B {
interface D {
fun foo(): E
}
class E
}
// FILE: foo/C.java
package foo;
import static foo.B.D.*;
@SuppressWarnings("RedundantTypeArguments")
public class C {}
@@ -0,0 +1,40 @@
package
package foo {
public final class A {
public constructor A(/*0*/ c: foo.C)
public final val c: foo.C
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 B {
public constructor B()
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 interface D {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun foo(): foo.B.E
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class E {
public constructor E()
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
}
}
@java.lang.SuppressWarnings(value = "RedundantTypeArguments") public open class C {
public constructor C()
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
}
}