Provide additional information about missing supertypes

Add -X flag to report extra compiler diagnostics which migth break compatibility.
Use the flag to unconditionally check constructors without fear of
prematurely evaluating lazy supertypes.

KT-19234
KT-42404
KT-44583
This commit is contained in:
Pavel Kirpichenkov
2021-02-04 20:46:49 +03:00
parent 4a381d4b83
commit 2a46da906c
17 changed files with 109 additions and 1 deletions
@@ -0,0 +1,5 @@
package test;
public class Sub extends Super {
}
@@ -0,0 +1,11 @@
package test
class SubKt : Super() {
companion object {
fun companionMethod() = "OK"
}
object InnerObject {
fun objectMethod() = "OK"
}
}
@@ -0,0 +1,7 @@
package test;
public class Super {
String foo() {
return "Super";
}
}
@@ -0,0 +1,20 @@
error: supertypes of the following classes cannot be resolved. Please make sure you have the required dependencies in the classpath:
class test.Sub, unresolved supertypes: test.Super
class test.SubKt, unresolved supertypes: test.Super
compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyWithExtendedCompilerChecks/source.kt:12:32: error: cannot access 'test.Super' which is a supertype of 'Sub'. Check your module classpath for missing or conflicting dependencies
fun simpleFun(arg: Sub): Sub = Sub()
^
compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyWithExtendedCompilerChecks/source.kt:19:18: error: cannot access 'test.Super' which is a supertype of 'Sub'. Check your module classpath for missing or conflicting dependencies
val x: Sub = Sub()
^
compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyWithExtendedCompilerChecks/source.kt:21:18: error: cannot access 'test.Super' which is a supertype of 'Sub'. Check your module classpath for missing or conflicting dependencies
useCallRef(::Sub)
^
compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyWithExtendedCompilerChecks/source.kt:22:15: error: cannot access 'test.Super' which is a supertype of 'Sub'. Check your module classpath for missing or conflicting dependencies
simpleFun(Sub())
^
compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyWithExtendedCompilerChecks/source.kt:23:20: error: cannot access 'test.Super' which is a supertype of 'Sub'. Check your module classpath for missing or conflicting dependencies
inlineFun<Sub>(Sub())
^
COMPILATION_ERROR
@@ -0,0 +1,26 @@
import test.Sub as MySub
import test.SubKt
typealias Sub = MySub
class Test<T>
@Suppress("UNUSED_PARAMETER")
fun useCallRef(ref: Any?) {}
@Suppress("UNUSED_PARAMETER")
fun simpleFun(arg: Sub): Sub = Sub()
inline fun <reified T> inlineFun(t: T) = t
// In conservative mode without -Xextended-compiler-checks flag these usages don't cause compilation error
fun test() {
@Suppress("UNUSED_VARIABLE")
val x: Sub = Sub()
Test<Sub>()
useCallRef(::Sub)
simpleFun(Sub())
inlineFun<Sub>(Sub())
SubKt.companionMethod()
SubKt.InnerObject.objectMethod()
}