Recompile implicit type usages when class signature is changed

This commit is contained in:
Alexey Tsvetkov
2016-01-21 18:34:38 +03:00
parent 310a995bb1
commit f32ff42ba3
63 changed files with 255 additions and 22 deletions
@@ -1135,12 +1135,36 @@ public class ExperimentalIncrementalJpsTestGenerated extends AbstractExperimenta
doTest(fileName);
}
@TestMetadata("implcitUpcast")
public void testImplcitUpcast() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/implcitUpcast/");
doTest(fileName);
}
@TestMetadata("inferredTypeArgumentChanged")
public void testInferredTypeArgumentChanged() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/inferredTypeArgumentChanged/");
doTest(fileName);
}
@TestMetadata("inferredTypeChanged")
public void testInferredTypeChanged() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/inferredTypeChanged/");
doTest(fileName);
}
@TestMetadata("jvmNameChanged")
public void testJvmNameChanged() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/jvmNameChanged/");
doTest(fileName);
}
@TestMetadata("lambdaParameterAffected")
public void testLambdaParameterAffected() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/lambdaParameterAffected/");
doTest(fileName);
}
@TestMetadata("methodAdded")
public void testMethodAdded() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/methodAdded/");
@@ -14,6 +14,7 @@ out/production/module/foo/ATypeParameter.class
out/production/module/foo/ClassLiteralKt.class
out/production/module/foo/FunctionParameterKt.class
out/production/module/foo/GetAKt.class
out/production/module/foo/ReturnTypeImplicitKt.class
out/production/module/foo/ReturnTypeKt.class
End of files
Compiling files:
@@ -28,6 +29,7 @@ src/importAGrandChild.kt
src/importStar.kt
src/referencedByFqName.kt
src/returnType.kt
src/returnTypeImplicit.kt
End of files
@@ -48,6 +50,7 @@ out/production/module/foo/ATypeParameter.class
out/production/module/foo/ClassLiteralKt.class
out/production/module/foo/FunctionParameterKt.class
out/production/module/foo/GetAKt.class
out/production/module/foo/ReturnTypeImplicitKt.class
out/production/module/foo/ReturnTypeKt.class
End of files
Compiling files:
@@ -62,4 +65,5 @@ src/importAGrandChild.kt
src/importStar.kt
src/referencedByFqName.kt
src/returnType.kt
src/returnTypeImplicit.kt
End of files
@@ -14,6 +14,7 @@ out/production/module/foo/ATypeParameter.class
out/production/module/foo/ClassLiteralKt.class
out/production/module/foo/FunctionParameterKt.class
out/production/module/foo/GetAKt.class
out/production/module/foo/ReturnTypeImplicitKt.class
out/production/module/foo/ReturnTypeKt.class
End of files
Compiling files:
@@ -28,6 +29,7 @@ src/importAGrandChild.kt
src/importStar.kt
src/referencedByFqName.kt
src/returnType.kt
src/returnTypeImplicit.kt
End of files
COMPILATION FAILED
Cannot access 'A': it is 'private' in file
@@ -46,6 +48,7 @@ Cannot access 'A': it is 'private' in file
Function effective visibility 'public' should be the same or less permissive than its return type effective visibility 'private'
Cannot access 'A': it is 'private' in file
Cannot access 'A': it is 'private' in file
Function effective visibility 'public' should be the same or less permissive than its return type effective visibility 'private'
Cleaning output files:
@@ -64,4 +67,5 @@ src/importAGrandChild.kt
src/importStar.kt
src/referencedByFqName.kt
src/returnType.kt
src/returnTypeImplicit.kt
End of files
@@ -7,11 +7,13 @@ End of files
Cleaning output files:
out/production/module/GetRandomEnumEntryKt.class
out/production/module/META-INF/module.kotlin_module
out/production/module/UseEnumImplicitlyKt.class
out/production/module/UseKt.class
End of files
Compiling files:
src/getRandomEnumEntry.kt
src/use.kt
src/useEnumImplicitly.kt
End of files
COMPILATION FAILED
when expression must be exhaustive, add necessary 'C' branch or 'else' branch instead
@@ -24,4 +26,5 @@ Compiling files:
src/Enum.kt
src/getRandomEnumEntry.kt
src/use.kt
src/useEnumImplicitly.kt
End of files
@@ -0,0 +1 @@
open class A
@@ -0,0 +1 @@
open class B : A()
@@ -0,0 +1 @@
open class B
@@ -0,0 +1 @@
open class B : A()
@@ -0,0 +1 @@
class C : B()
@@ -0,0 +1 @@
class D : A()
@@ -0,0 +1,37 @@
Cleaning output files:
out/production/module/B.class
End of files
Compiling files:
src/B.kt
End of files
Cleaning output files:
out/production/module/C.class
out/production/module/CallUseAWithBKt.class
out/production/module/CallUseAWithCKt.class
out/production/module/GetBKt.class
out/production/module/GetCKt.class
out/production/module/META-INF/module.kotlin_module
End of files
Compiling files:
src/C.kt
src/callUseAWithB.kt
src/callUseAWithC.kt
src/getB.kt
src/getC.kt
End of files
COMPILATION FAILED
Type mismatch: inferred type is B but A was expected
Type mismatch: inferred type is C but A was expected
Cleaning output files:
out/production/module/B.class
End of files
Compiling files:
src/B.kt
src/C.kt
src/callUseAWithB.kt
src/callUseAWithC.kt
src/getB.kt
src/getC.kt
End of files
@@ -0,0 +1,3 @@
fun callUseAWithA() {
useA(getA())
}
@@ -0,0 +1,3 @@
fun callUseAWithB() {
useA(getB())
}
@@ -0,0 +1,3 @@
fun callUseAWithC() {
useA(getC())
}
@@ -0,0 +1,3 @@
fun callUseAWithD() {
useA(getD())
}
@@ -0,0 +1 @@
fun getA() = A()
@@ -0,0 +1 @@
fun getB() = B()
@@ -0,0 +1 @@
fun getC() = C()
@@ -0,0 +1 @@
fun getD() = D()
@@ -0,0 +1 @@
fun useA(a: A) {}
@@ -0,0 +1 @@
open class A
@@ -0,0 +1 @@
open class B : A()
@@ -0,0 +1 @@
open class B
@@ -0,0 +1 @@
open class B : A()
@@ -0,0 +1 @@
class C : B()
@@ -0,0 +1 @@
class D : A()
@@ -0,0 +1,43 @@
Cleaning output files:
out/production/module/B.class
End of files
Compiling files:
src/B.kt
End of files
Cleaning output files:
out/production/module/C.class
out/production/module/GetListOfAKt.class
out/production/module/GetListOfBKt.class
out/production/module/GetListOfCKt.class
out/production/module/META-INF/module.kotlin_module
out/production/module/UseListOfAKt.class
out/production/module/UseListOfAWithListOfBKt.class
out/production/module/UseListOfAWithListOfCKt.class
End of files
Compiling files:
src/C.kt
src/getListOfA.kt
src/getListOfB.kt
src/getListOfC.kt
src/useListOfA.kt
src/useListOfAWithListOfB.kt
src/useListOfAWithListOfC.kt
End of files
COMPILATION FAILED
Type mismatch: inferred type is kotlin.collections.List<B> but kotlin.collections.List<A> was expected
Type mismatch: inferred type is kotlin.collections.List<C> but kotlin.collections.List<A> was expected
Cleaning output files:
out/production/module/B.class
End of files
Compiling files:
src/B.kt
src/C.kt
src/getListOfA.kt
src/getListOfB.kt
src/getListOfC.kt
src/useListOfA.kt
src/useListOfAWithListOfB.kt
src/useListOfAWithListOfC.kt
End of files
@@ -0,0 +1 @@
fun getListOfA() = listOf(A())
@@ -0,0 +1 @@
fun getListOfB() = listOf(B())
@@ -0,0 +1 @@
fun getListOfC() = listOf(C())
@@ -0,0 +1 @@
fun getListOfD() = listOf(D())
@@ -0,0 +1 @@
fun useListOfA(aas: List<A>) {}
@@ -0,0 +1,3 @@
fun useListOfAWithListOfA() {
useListOfA(getListOfA())
}
@@ -0,0 +1,3 @@
fun useListOfAWithListOfB() {
useListOfA(getListOfB())
}
@@ -0,0 +1,3 @@
fun useListOfAWithListOfC() {
useListOfA(getListOfC())
}
@@ -0,0 +1,3 @@
fun useListOfAWithListOfD() {
useListOfA(getListOfD())
}
@@ -0,0 +1 @@
open class A
@@ -0,0 +1 @@
open class B : A()
@@ -0,0 +1 @@
open class B
@@ -0,0 +1 @@
class C : B()
@@ -0,0 +1 @@
class D : A()
@@ -0,0 +1,23 @@
Cleaning output files:
out/production/module/B.class
End of files
Compiling files:
src/B.kt
End of files
Cleaning output files:
out/production/module/C.class
out/production/module/GetBKt.class
out/production/module/GetBorCKt.class
out/production/module/GetBorDKt.class
out/production/module/GetCKt.class
out/production/module/GetCorDKt.class
out/production/module/META-INF/module.kotlin_module
End of files
Compiling files:
src/C.kt
src/getB.kt
src/getBorC.kt
src/getBorD.kt
src/getC.kt
src/getCorD.kt
End of files
@@ -0,0 +1 @@
fun getA() = A()
@@ -0,0 +1 @@
fun getAorD() = if (Math.random() > 0.5) getA() else getD()
@@ -0,0 +1 @@
fun getB() = B()
@@ -0,0 +1 @@
fun getBorC() = if (Math.random() > 0.5) getB() else getC()
@@ -0,0 +1 @@
fun getBorD() = if (Math.random() > 0.5) getB() else getD()
@@ -0,0 +1 @@
fun getC() = C()
@@ -0,0 +1 @@
fun getCorD() = if (Math.random() > 0.5) getC() else getD()
@@ -0,0 +1 @@
fun getD() = D()
@@ -0,0 +1 @@
open class A
@@ -0,0 +1 @@
class B : A()
@@ -0,0 +1 @@
class B : A()
@@ -0,0 +1,36 @@
Cleaning output files:
out/production/module/B.class
End of files
Compiling files:
src/B.kt
End of files
Cleaning output files:
out/production/module/ConsumeBExtLambdaKt.class
out/production/module/ConsumeBLambdaKt.class
out/production/module/META-INF/module.kotlin_module
out/production/module/UseConsumeBExtLambdaKt$useConsumeBExtLambda$1.class
out/production/module/UseConsumeBExtLambdaKt.class
out/production/module/UseConsumeBLambdaKt$useConsumeBLambda$1.class
out/production/module/UseConsumeBLambdaKt.class
End of files
Compiling files:
src/consumeBExtLambda.kt
src/consumeBLambda.kt
src/useConsumeBExtLambda.kt
src/useConsumeBLambda.kt
End of files
COMPILATION FAILED
Type mismatch: inferred type is B but A was expected
Type mismatch: inferred type is B but A was expected
Cleaning output files:
out/production/module/B.class
End of files
Compiling files:
src/B.kt
src/consumeBExtLambda.kt
src/consumeBLambda.kt
src/useConsumeBExtLambda.kt
src/useConsumeBLambda.kt
End of files
@@ -0,0 +1 @@
fun consumeA(a: A) {}
@@ -0,0 +1,3 @@
fun consumeBExtLambda(fn: B.()->Unit) {
B().fn()
}
@@ -0,0 +1,3 @@
fun consumeBLambda(fn: (B)->Unit) {
fn(B())
}
@@ -0,0 +1,3 @@
fun useConsumeBExtLambda() {
consumeBExtLambda() { consumeA(this) }
}
@@ -0,0 +1,3 @@
fun useConsumeBLambda() {
consumeBLambda() { consumeA(it) }
}
@@ -15,6 +15,7 @@ out/production/module/foo/ATypeParameter.class
out/production/module/foo/ClassLiteralKt.class
out/production/module/foo/FunctionParameterKt.class
out/production/module/foo/GetAKt.class
out/production/module/foo/ReturnTypeImplicitKt.class
out/production/module/foo/ReturnTypeKt.class
End of files
Compiling files:
@@ -29,6 +30,7 @@ src/importAGrandChild.kt
src/importStar.kt
src/referencedByFqName.kt
src/returnType.kt
src/returnTypeImplicit.kt
End of files
@@ -9,39 +9,20 @@ out/production/module/D$Companion.class
out/production/module/D.class
out/production/module/META-INF/module.kotlin_module
out/production/module/UseAKt.class
End of files
Compiling files:
src/D.kt
src/useA.kt
End of files
COMPILATION FAILED
Type mismatch: inferred type is A<B> but A<C> was expected
Cleaning output files:
out/production/module/A.class
End of files
Compiling files:
src/A.kt
src/D.kt
src/useA.kt
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/UseDKt.class
End of files
Compiling files:
src/D.kt
src/useA.kt
src/useD.kt
End of files
COMPILATION FAILED
Type mismatch: inferred type is A<B> but A<C> was expected
Type mismatch: inferred type is A<B> but A<C> was expected
Cleaning output files:
out/production/module/A.class
out/production/module/D$Companion.class
out/production/module/D.class
out/production/module/UseAKt.class
End of files
Compiling files:
src/A.kt