Recompile implicit type usages when class signature is changed

Original commit: f32ff42ba3
This commit is contained in:
Alexey Tsvetkov
2016-01-21 18:34:38 +03:00
parent ecd7b0c9d6
commit d77e5a2b59
63 changed files with 255 additions and 22 deletions
@@ -1135,12 +1135,36 @@ public class ExperimentalIncrementalJpsTestGenerated extends AbstractExperimenta
doTest(fileName); 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") @TestMetadata("jvmNameChanged")
public void testJvmNameChanged() throws Exception { public void testJvmNameChanged() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/jvmNameChanged/"); String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/jvmNameChanged/");
doTest(fileName); doTest(fileName);
} }
@TestMetadata("lambdaParameterAffected")
public void testLambdaParameterAffected() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/lambdaParameterAffected/");
doTest(fileName);
}
@TestMetadata("methodAdded") @TestMetadata("methodAdded")
public void testMethodAdded() throws Exception { public void testMethodAdded() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/methodAdded/"); 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/ClassLiteralKt.class
out/production/module/foo/FunctionParameterKt.class out/production/module/foo/FunctionParameterKt.class
out/production/module/foo/GetAKt.class out/production/module/foo/GetAKt.class
out/production/module/foo/ReturnTypeImplicitKt.class
out/production/module/foo/ReturnTypeKt.class out/production/module/foo/ReturnTypeKt.class
End of files End of files
Compiling files: Compiling files:
@@ -28,6 +29,7 @@ src/importAGrandChild.kt
src/importStar.kt src/importStar.kt
src/referencedByFqName.kt src/referencedByFqName.kt
src/returnType.kt src/returnType.kt
src/returnTypeImplicit.kt
End of files End of files
@@ -48,6 +50,7 @@ out/production/module/foo/ATypeParameter.class
out/production/module/foo/ClassLiteralKt.class out/production/module/foo/ClassLiteralKt.class
out/production/module/foo/FunctionParameterKt.class out/production/module/foo/FunctionParameterKt.class
out/production/module/foo/GetAKt.class out/production/module/foo/GetAKt.class
out/production/module/foo/ReturnTypeImplicitKt.class
out/production/module/foo/ReturnTypeKt.class out/production/module/foo/ReturnTypeKt.class
End of files End of files
Compiling files: Compiling files:
@@ -62,4 +65,5 @@ src/importAGrandChild.kt
src/importStar.kt src/importStar.kt
src/referencedByFqName.kt src/referencedByFqName.kt
src/returnType.kt src/returnType.kt
src/returnTypeImplicit.kt
End of files End of files
@@ -14,6 +14,7 @@ out/production/module/foo/ATypeParameter.class
out/production/module/foo/ClassLiteralKt.class out/production/module/foo/ClassLiteralKt.class
out/production/module/foo/FunctionParameterKt.class out/production/module/foo/FunctionParameterKt.class
out/production/module/foo/GetAKt.class out/production/module/foo/GetAKt.class
out/production/module/foo/ReturnTypeImplicitKt.class
out/production/module/foo/ReturnTypeKt.class out/production/module/foo/ReturnTypeKt.class
End of files End of files
Compiling files: Compiling files:
@@ -28,6 +29,7 @@ src/importAGrandChild.kt
src/importStar.kt src/importStar.kt
src/referencedByFqName.kt src/referencedByFqName.kt
src/returnType.kt src/returnType.kt
src/returnTypeImplicit.kt
End of files End of files
COMPILATION FAILED COMPILATION FAILED
Cannot access 'A': it is 'private' in file 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' 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
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: Cleaning output files:
@@ -64,4 +67,5 @@ src/importAGrandChild.kt
src/importStar.kt src/importStar.kt
src/referencedByFqName.kt src/referencedByFqName.kt
src/returnType.kt src/returnType.kt
src/returnTypeImplicit.kt
End of files End of files
@@ -7,11 +7,13 @@ End of files
Cleaning output files: Cleaning output files:
out/production/module/GetRandomEnumEntryKt.class out/production/module/GetRandomEnumEntryKt.class
out/production/module/META-INF/module.kotlin_module out/production/module/META-INF/module.kotlin_module
out/production/module/UseEnumImplicitlyKt.class
out/production/module/UseKt.class out/production/module/UseKt.class
End of files End of files
Compiling files: Compiling files:
src/getRandomEnumEntry.kt src/getRandomEnumEntry.kt
src/use.kt src/use.kt
src/useEnumImplicitly.kt
End of files End of files
COMPILATION FAILED COMPILATION FAILED
when expression must be exhaustive, add necessary 'C' branch or 'else' branch instead when expression must be exhaustive, add necessary 'C' branch or 'else' branch instead
@@ -24,4 +26,5 @@ Compiling files:
src/Enum.kt src/Enum.kt
src/getRandomEnumEntry.kt src/getRandomEnumEntry.kt
src/use.kt src/use.kt
src/useEnumImplicitly.kt
End of files End of files
@@ -0,0 +1 @@
open class A
@@ -0,0 +1 @@
open class B : A()
@@ -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,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 B : 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,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/ClassLiteralKt.class
out/production/module/foo/FunctionParameterKt.class out/production/module/foo/FunctionParameterKt.class
out/production/module/foo/GetAKt.class out/production/module/foo/GetAKt.class
out/production/module/foo/ReturnTypeImplicitKt.class
out/production/module/foo/ReturnTypeKt.class out/production/module/foo/ReturnTypeKt.class
End of files End of files
Compiling files: Compiling files:
@@ -29,6 +30,7 @@ src/importAGrandChild.kt
src/importStar.kt src/importStar.kt
src/referencedByFqName.kt src/referencedByFqName.kt
src/returnType.kt src/returnType.kt
src/returnTypeImplicit.kt
End of files End of files
@@ -9,39 +9,20 @@ out/production/module/D$Companion.class
out/production/module/D.class out/production/module/D.class
out/production/module/META-INF/module.kotlin_module out/production/module/META-INF/module.kotlin_module
out/production/module/UseAKt.class 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 out/production/module/UseDKt.class
End of files End of files
Compiling files: Compiling files:
src/D.kt
src/useA.kt
src/useD.kt src/useD.kt
End of files End of files
COMPILATION FAILED 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
Type mismatch: inferred type is A<B> but A<C> was expected
Cleaning output files: Cleaning output files:
out/production/module/A.class out/production/module/A.class
out/production/module/D$Companion.class
out/production/module/D.class
out/production/module/UseAKt.class
End of files End of files
Compiling files: Compiling files:
src/A.kt src/A.kt