Add tests for class hierarchy incremental recompilation

Original commit: 9190029fcc
This commit is contained in:
Alexey Tsvetkov
2015-12-17 21:30:17 +03:00
parent ec8f7b70b8
commit ff40b098f9
205 changed files with 1601 additions and 3 deletions
@@ -1030,4 +1030,140 @@ public class ExperimentalIncrementalJpsTestGenerated extends AbstractExperimenta
}
}
@TestMetadata("jps-plugin/testData/incremental/classHierarchyAffected")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class ClassHierarchyAffected extends AbstractExperimentalIncrementalJpsTest {
public void testAllFilesPresentInClassHierarchyAffected() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("jps-plugin/testData/incremental/classHierarchyAffected"), Pattern.compile("^([^\\.]+)$"), true);
}
@TestMetadata("annotationListChanged")
public void testAnnotationListChanged() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/annotationListChanged/");
doTest(fileName);
}
@TestMetadata("bridgeGenerated")
public void testBridgeGenerated() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/bridgeGenerated/");
doTest(fileName);
}
@TestMetadata("classBecameFinal")
public void testClassBecameFinal() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/classBecameFinal/");
doTest(fileName);
}
@TestMetadata("classBecameInterface")
public void testClassBecameInterface() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/classBecameInterface/");
doTest(fileName);
}
@TestMetadata("classBecamePrivate")
public void testClassBecamePrivate() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/classBecamePrivate/");
doTest(fileName);
}
@TestMetadata("constructorVisibilityChanged")
public void testConstructorVisibilityChanged() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/constructorVisibilityChanged/");
doTest(fileName);
}
@TestMetadata("flagsAndMemberInDifferentClassesChanged")
public void testFlagsAndMemberInDifferentClassesChanged() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/flagsAndMemberInDifferentClassesChanged/");
doTest(fileName);
}
@TestMetadata("jvmNameChanged")
public void testJvmNameChanged() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/jvmNameChanged/");
doTest(fileName);
}
@TestMetadata("methodAdded")
public void testMethodAdded() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/methodAdded/");
doTest(fileName);
}
@TestMetadata("methodAnnotationAdded")
public void testMethodAnnotationAdded() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/methodAnnotationAdded/");
doTest(fileName);
}
@TestMetadata("methodNullabilityChanged")
public void testMethodNullabilityChanged() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/methodNullabilityChanged/");
doTest(fileName);
}
@TestMetadata("methodParameterWithDefaultValueAdded")
public void testMethodParameterWithDefaultValueAdded() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/methodParameterWithDefaultValueAdded/");
doTest(fileName);
}
@TestMetadata("methodRemoved")
public void testMethodRemoved() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/methodRemoved/");
doTest(fileName);
}
@TestMetadata("multiModuleCircular")
public void testMultiModuleCircular() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/multiModuleCircular/");
doTest(fileName);
}
@TestMetadata("multiModuleExported")
public void testMultiModuleExported() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/multiModuleExported/");
doTest(fileName);
}
@TestMetadata("multiModuleSimple")
public void testMultiModuleSimple() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/multiModuleSimple/");
doTest(fileName);
}
@TestMetadata("propertyNullabilityChanged")
public void testPropertyNullabilityChanged() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/propertyNullabilityChanged/");
doTest(fileName);
}
@TestMetadata("starProjectionUpperBoundChanged")
public void testStarProjectionUpperBoundChanged() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/starProjectionUpperBoundChanged/");
doTest(fileName);
}
@TestMetadata("supertypesListChanged")
public void testSupertypesListChanged() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/supertypesListChanged/");
doTest(fileName);
}
@TestMetadata("typeParameterListChanged")
public void testTypeParameterListChanged() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/typeParameterListChanged/");
doTest(fileName);
}
@TestMetadata("varianceChanged")
public void testVarianceChanged() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/varianceChanged/");
doTest(fileName);
}
}
}
@@ -17,7 +17,6 @@
package org.jetbrains.kotlin.jps.build
import org.jetbrains.jps.incremental.ModuleBuildTarget
import org.jetbrains.kotlin.config.IncrementalCompilation
import org.jetbrains.kotlin.jps.incremental.CacheVersionProvider
abstract class AbstractExperimentalIncrementalJpsTest : AbstractIncrementalJpsTest() {
@@ -0,0 +1,5 @@
package foo
open class A {
open fun f() {}
}
@@ -0,0 +1,8 @@
package foo
annotation class Ann
@Ann
open class A {
open fun f() {}
}
@@ -0,0 +1,7 @@
package foo
annotation class Ann
open class A {
open fun f() {}
}
@@ -0,0 +1,3 @@
package foo
open class AChild : A()
@@ -0,0 +1,3 @@
package foo
open class AGrandChild : AChild()
@@ -0,0 +1,3 @@
package foo
class ATypeParameter<T : A>
@@ -0,0 +1,65 @@
Cleaning output files:
out/production/module/foo/A.class
End of files
Compiling files:
src/A.kt
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/bar/ImportStarKt.class
out/production/module/bar/ReferencedByFqNameKt.class
out/production/module/foo/AChild.class
out/production/module/foo/AGrandChild.class
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/ReturnTypeKt.class
End of files
Compiling files:
src/AChild.kt
src/AGrandChild.kt
src/ATypeParameter.kt
src/classLiteral.kt
src/functionParameter.kt
src/getA.kt
src/importA.kt
src/importAGrandChild.kt
src/importStar.kt
src/referencedByFqName.kt
src/returnType.kt
End of files
Cleaning output files:
out/production/module/foo/A.class
out/production/module/foo/Ann.class
End of files
Compiling files:
src/A.kt
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/bar/ImportStarKt.class
out/production/module/bar/ReferencedByFqNameKt.class
out/production/module/foo/AChild.class
out/production/module/foo/AGrandChild.class
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/ReturnTypeKt.class
End of files
Compiling files:
src/AChild.kt
src/AGrandChild.kt
src/ATypeParameter.kt
src/classLiteral.kt
src/functionParameter.kt
src/getA.kt
src/importA.kt
src/importAGrandChild.kt
src/importStar.kt
src/referencedByFqName.kt
src/returnType.kt
End of files
@@ -0,0 +1,5 @@
package foo
fun classLiteral() {
A::class
}
@@ -0,0 +1,5 @@
package foo
fun useA(a: A) {
a.f()
}
@@ -0,0 +1,3 @@
package foo
fun getA() = A()
@@ -0,0 +1,3 @@
package bar
import foo.A
@@ -0,0 +1,3 @@
package bar
import foo.AGrandChild
@@ -0,0 +1,7 @@
package bar
import foo.*
fun importStarUse() {
A()
}
@@ -0,0 +1,5 @@
package bar
fun createAByFqName() {
foo.A()
}
@@ -0,0 +1,3 @@
package foo
fun getAExplicit(): A = A()
@@ -0,0 +1,3 @@
package foo
fun getAImplicit() = getA()
@@ -0,0 +1,5 @@
package foo
open class A<T> {
open fun f(x: T) {}
}
@@ -0,0 +1,3 @@
package foo
class AChild : A<Int>()
@@ -0,0 +1,5 @@
package foo
class AChild : A<Int>() {
override fun f(x: Int) {}
}
@@ -0,0 +1,13 @@
Cleaning output files:
out/production/module/foo/AChild.class
End of files
Compiling files:
src/AChild.kt
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/foo/UseAChildKt.class
End of files
Compiling files:
src/useAChild.kt
End of files
@@ -0,0 +1,5 @@
package foo
fun useAChild(a: AChild) {
a.f(0)
}
@@ -0,0 +1,5 @@
package foo
open class A {
open fun f() {}
}
@@ -0,0 +1,5 @@
package foo
class A {
open fun f() {}
}
@@ -0,0 +1,5 @@
package foo
open class A {
open fun f() {}
}
@@ -0,0 +1,3 @@
package foo
open class AChild : A()
@@ -0,0 +1,3 @@
package foo
open class AGrandChild : AChild()
@@ -0,0 +1,3 @@
package foo
class ATypeParameter<T : A>
@@ -0,0 +1,55 @@
Cleaning output files:
out/production/module/foo/A.class
End of files
Compiling files:
src/A.kt
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/bar/ImportStarKt.class
out/production/module/bar/ReferencedByFqNameKt.class
out/production/module/foo/AChild.class
out/production/module/foo/AGrandChild.class
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:
src/AChild.kt
src/AGrandChild.kt
src/ATypeParameter.kt
src/classLiteral.kt
src/functionParameter.kt
src/getA.kt
src/importA.kt
src/importAGrandChild.kt
src/importStar.kt
src/referencedByFqName.kt
src/returnType.kt
src/returnTypeImplicit.kt
End of files
COMPILATION FAILED
This type is final, so it cannot be inherited from
Cleaning output files:
out/production/module/foo/A.class
End of files
Compiling files:
src/A.kt
src/AChild.kt
src/AGrandChild.kt
src/ATypeParameter.kt
src/classLiteral.kt
src/functionParameter.kt
src/getA.kt
src/importA.kt
src/importAGrandChild.kt
src/importStar.kt
src/referencedByFqName.kt
src/returnType.kt
src/returnTypeImplicit.kt
End of files
@@ -0,0 +1,5 @@
package foo
fun classLiteral() {
A::class
}
@@ -0,0 +1,5 @@
package foo
fun useA(a: A) {
a.f()
}
@@ -0,0 +1,3 @@
package foo
fun getA() = A()
@@ -0,0 +1,3 @@
package bar
import foo.A
@@ -0,0 +1,3 @@
package bar
import foo.AGrandChild
@@ -0,0 +1,7 @@
package bar
import foo.*
fun importStarUse() {
A()
}
@@ -0,0 +1,5 @@
package bar
fun createAByFqName() {
foo.A()
}
@@ -0,0 +1,3 @@
package foo
fun getAExplicit(): A = A()
@@ -0,0 +1,3 @@
package foo
fun getAImplicit() = getA()
@@ -0,0 +1,5 @@
package foo
open class A {
open fun f() {}
}
@@ -0,0 +1,5 @@
package foo
interface A {
open fun f() {}
}
@@ -0,0 +1,5 @@
package foo
open class A {
open fun f() {}
}
@@ -0,0 +1,3 @@
package foo
open class AChild : A()
@@ -0,0 +1,3 @@
package foo
open class AGrandChild : AChild()
@@ -0,0 +1,3 @@
package foo
class ATypeParameter<T : A>
@@ -0,0 +1,60 @@
Cleaning output files:
out/production/module/foo/A.class
End of files
Compiling files:
src/A.kt
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/bar/ImportStarKt.class
out/production/module/bar/ReferencedByFqNameKt.class
out/production/module/foo/AChild.class
out/production/module/foo/AGrandChild.class
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:
src/AChild.kt
src/AGrandChild.kt
src/ATypeParameter.kt
src/classLiteral.kt
src/functionParameter.kt
src/getA.kt
src/importA.kt
src/importAGrandChild.kt
src/importStar.kt
src/referencedByFqName.kt
src/returnType.kt
src/returnTypeImplicit.kt
End of files
COMPILATION FAILED
This class does not have a constructor
Unresolved reference: A
Unresolved reference: A
Unresolved reference: A
Unresolved reference: A
Cleaning output files:
out/production/module/foo/A$DefaultImpls.class
out/production/module/foo/A.class
End of files
Compiling files:
src/A.kt
src/AChild.kt
src/AGrandChild.kt
src/ATypeParameter.kt
src/classLiteral.kt
src/functionParameter.kt
src/getA.kt
src/importA.kt
src/importAGrandChild.kt
src/importStar.kt
src/referencedByFqName.kt
src/returnType.kt
src/returnTypeImplicit.kt
End of files
@@ -0,0 +1,5 @@
package foo
fun classLiteral() {
A::class
}
@@ -0,0 +1,5 @@
package foo
fun useA(a: A) {
a.f()
}
@@ -0,0 +1,3 @@
package foo
fun getA() = A()
@@ -0,0 +1,3 @@
package bar
import foo.A
@@ -0,0 +1,3 @@
package bar
import foo.AGrandChild
@@ -0,0 +1,7 @@
package bar
import foo.*
fun importStarUse() {
A()
}
@@ -0,0 +1,5 @@
package bar
fun createAByFqName() {
foo.A()
}
@@ -0,0 +1,3 @@
package foo
fun getAExplicit(): A = A()
@@ -0,0 +1,3 @@
package foo
fun getAImplicit() = getA()
@@ -0,0 +1,5 @@
package foo
open class A {
open fun f() {}
}
@@ -0,0 +1,5 @@
package foo
private open class A {
open fun f() {}
}
@@ -0,0 +1,5 @@
package foo
open class A {
open fun f() {}
}
@@ -0,0 +1,3 @@
package foo
open class AChild : A()
@@ -0,0 +1,3 @@
package foo
open class AGrandChild : AChild()
@@ -0,0 +1,3 @@
package foo
class ATypeParameter<T : A>
@@ -0,0 +1,67 @@
Cleaning output files:
out/production/module/foo/A.class
End of files
Compiling files:
src/A.kt
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/bar/ImportStarKt.class
out/production/module/bar/ReferencedByFqNameKt.class
out/production/module/foo/AChild.class
out/production/module/foo/AGrandChild.class
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/ReturnTypeKt.class
End of files
Compiling files:
src/AChild.kt
src/AGrandChild.kt
src/ATypeParameter.kt
src/classLiteral.kt
src/functionParameter.kt
src/getA.kt
src/importA.kt
src/importAGrandChild.kt
src/importStar.kt
src/referencedByFqName.kt
src/returnType.kt
End of files
COMPILATION FAILED
Cannot access 'A': it is 'private' in file
Subclass effective visibility 'public' should be the same or less permissive than its superclass effective visibility 'private'
Generic effective visibility 'public' should be the same or less permissive than its type parameter bound 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 parameter 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'
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'
Cannot access 'A': it is 'private' in file
Cannot access 'A': it is 'private' in file
Cleaning output files:
out/production/module/foo/A.class
End of files
Compiling files:
src/A.kt
src/AChild.kt
src/AGrandChild.kt
src/ATypeParameter.kt
src/classLiteral.kt
src/functionParameter.kt
src/getA.kt
src/importA.kt
src/importAGrandChild.kt
src/importStar.kt
src/referencedByFqName.kt
src/returnType.kt
End of files
@@ -0,0 +1,5 @@
package foo
fun classLiteral() {
A::class
}
@@ -0,0 +1,5 @@
package foo
fun useA(a: A) {
a.f()
}
@@ -0,0 +1,3 @@
package foo
fun getA() = A()
@@ -0,0 +1,3 @@
package bar
import foo.A
@@ -0,0 +1,3 @@
package bar
import foo.AGrandChild
@@ -0,0 +1,7 @@
package bar
import foo.*
fun importStarUse() {
A()
}
@@ -0,0 +1,5 @@
package bar
fun createAByFqName() {
foo.A()
}
@@ -0,0 +1,3 @@
package foo
fun getAExplicit(): A = A()
@@ -0,0 +1,3 @@
package foo
fun getAImplicit() = getA()
@@ -0,0 +1,3 @@
package foo
open class A
@@ -0,0 +1,3 @@
package foo
open class A private constructor ()
@@ -0,0 +1,3 @@
package foo
open class A
@@ -0,0 +1,3 @@
package foo
class AChild : A()
@@ -0,0 +1,28 @@
Cleaning output files:
out/production/module/foo/A.class
End of files
Compiling files:
src/A.kt
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/foo/AChild.class
out/production/module/foo/CreateAKt.class
End of files
Compiling files:
src/AChild.kt
src/createA.kt
End of files
COMPILATION FAILED
Cannot access '<init>': it is 'private' in 'A'
Cannot access '<init>': it is 'private' in 'A'
Cleaning output files:
out/production/module/foo/A.class
End of files
Compiling files:
src/A.kt
src/AChild.kt
src/createA.kt
End of files
@@ -0,0 +1,5 @@
package foo
fun createA() {
A()
}
@@ -0,0 +1,5 @@
package foo
fun createAChild() {
AChild()
}
@@ -0,0 +1,3 @@
package foo
open class A : AParent()
@@ -0,0 +1,3 @@
package foo
open class AChild : A()
@@ -0,0 +1,5 @@
package foo
class B {
fun f() {}
}
@@ -0,0 +1,5 @@
package foo
class B {
open fun f() {}
}
@@ -0,0 +1,20 @@
Cleaning output files:
out/production/module/foo/A.class
out/production/module/foo/B.class
End of files
Compiling files:
src/A.kt
src/AParent.kt
src/B.kt
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/bar/UseBKt.class
out/production/module/foo/AChild.class
End of files
Compiling files:
src/AChild.kt
src/importA.kt
src/importAChild.kt
src/useB.kt
End of files
@@ -0,0 +1,7 @@
package bar
import foo.B
fun useB() {
B().f()
}
@@ -0,0 +1,6 @@
package foo
open class A {
@JvmName("g")
fun f() {}
}
@@ -0,0 +1,6 @@
package foo
open class A {
@JvmName("h")
fun f() {}
}
@@ -0,0 +1,3 @@
package foo
class AChild : A()
@@ -0,0 +1,15 @@
Cleaning output files:
out/production/module/foo/A.class
End of files
Compiling files:
src/A.kt
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/foo/AChild.class
out/production/module/foo/UseAChildKt.class
End of files
Compiling files:
src/AChild.kt
src/useAChild.kt
End of files
@@ -0,0 +1,5 @@
package foo
fun useAChild(a: AChild) {
a.f()
}
@@ -0,0 +1,3 @@
package foo
open class A
@@ -0,0 +1,5 @@
package foo
open class A {
fun f() {}
}
@@ -0,0 +1,3 @@
package foo
class AChild : A()
@@ -0,0 +1,13 @@
Cleaning output files:
out/production/module/foo/A.class
End of files
Compiling files:
src/A.kt
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/foo/UseAChildKt.class
End of files
Compiling files:
src/useAChild.kt
End of files
@@ -0,0 +1,5 @@
package foo
fun useAChild(a: AChild) {
a.f()
}
@@ -0,0 +1,3 @@
package foo
fun AChild.f() {}
@@ -0,0 +1,5 @@
package foo
open class A {
fun f() {}
}

Some files were not shown because too many files have changed in this diff Show More