Fix construction of Mock classes in case of generic inner types
This fixes testMissingDependencyConflictingLibraries for NI and also fixes changed test for OI as well
This commit is contained in:
+6
@@ -7,3 +7,9 @@ class A<T> {
|
||||
class AA<T> {
|
||||
inner class Inner<U, V>
|
||||
}
|
||||
|
||||
class AAA<T> {
|
||||
inner class Inner<K> {
|
||||
inner class InnerInner<S>
|
||||
}
|
||||
}
|
||||
|
||||
+3
@@ -2,8 +2,11 @@ package b
|
||||
|
||||
import a.A
|
||||
import a.AA
|
||||
import a.AAA
|
||||
|
||||
interface B1 {
|
||||
fun produceA(): A<String>.Inner<Int, Unit>
|
||||
fun produceAA(): AA<Int>.Inner<Unit, String>
|
||||
fun <T> produceAGeneric(t: T): A<String>.Inner<Int, Unit>
|
||||
fun produceAAA(): AAA<String>.Inner<Int>.InnerInner<Unit>
|
||||
}
|
||||
|
||||
+6
@@ -7,3 +7,9 @@ class A<T, U: CharSequence, V> {
|
||||
class AA<T, U> {
|
||||
inner class Inner<V>
|
||||
}
|
||||
|
||||
class AAA<T> {
|
||||
inner class Inner<K> {
|
||||
inner class InnerInner<S>
|
||||
}
|
||||
}
|
||||
|
||||
+2
@@ -2,8 +2,10 @@ package b
|
||||
|
||||
import a.A
|
||||
import a.AA
|
||||
import a.AAA
|
||||
|
||||
interface B2 {
|
||||
fun consumeA(a: A<Int, String, Double>.Inner<B2>)
|
||||
fun consumeAA(a: AA<Int, Unit>.Inner<String>)
|
||||
fun consumeAAA(a: AAA<String>.Inner<Int>.InnerInner<Unit>)
|
||||
}
|
||||
|
||||
+19
-4
@@ -7,13 +7,28 @@ compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictin
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt:7:20: error: cannot access class 'a.A.Inner'. Check your module classpath for missing or conflicting dependencies
|
||||
b2.consumeA(b1.produceA())
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt:11:8: error: cannot access class 'a.AA.Inner'. Check your module classpath for missing or conflicting dependencies
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt:8:8: error: cannot access class 'a.A.Inner'. Check your module classpath for missing or conflicting dependencies
|
||||
b2.consumeA(b1.produceAGeneric("foo"))
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt:8:17: error: type mismatch: inferred type is A<String>.Inner<Int, Unit> but A<Int, String, Double>.Inner<B2> was expected
|
||||
b2.consumeA(b1.produceAGeneric("foo"))
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt:8:20: error: cannot access class 'a.A.Inner'. Check your module classpath for missing or conflicting dependencies
|
||||
b2.consumeA(b1.produceAGeneric("foo"))
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt:12:8: error: cannot access class 'a.AA.Inner'. Check your module classpath for missing or conflicting dependencies
|
||||
b2.consumeAA(b1.produceAA())
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt:11:18: error: type mismatch: inferred type is AA<Int>.Inner<Unit, String> but AA<Int, Unit>.Inner<String> was expected
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt:12:18: error: type mismatch: inferred type is AA<Int>.Inner<Unit, String> but AA<Int, Unit>.Inner<String> was expected
|
||||
b2.consumeAA(b1.produceAA())
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt:11:21: error: cannot access class 'a.AA.Inner'. Check your module classpath for missing or conflicting dependencies
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt:12:21: error: cannot access class 'a.AA.Inner'. Check your module classpath for missing or conflicting dependencies
|
||||
b2.consumeAA(b1.produceAA())
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt:16:8: error: cannot access class 'a.AAA.Inner.InnerInner'. Check your module classpath for missing or conflicting dependencies
|
||||
b2.consumeAAA(b1.produceAAA())
|
||||
^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt:16:22: error: cannot access class 'a.AAA.Inner.InnerInner'. Check your module classpath for missing or conflicting dependencies
|
||||
b2.consumeAAA(b1.produceAAA())
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt
Vendored
+5
@@ -5,8 +5,13 @@ import b.B2
|
||||
|
||||
fun testA(b1: B1, b2: B2) {
|
||||
b2.consumeA(b1.produceA())
|
||||
b2.consumeA(b1.produceAGeneric("foo"))
|
||||
}
|
||||
|
||||
fun testAA(b1: B1, b2: B2) {
|
||||
b2.consumeAA(b1.produceAA())
|
||||
}
|
||||
|
||||
fun testAAA(b1: B1, b2: B2) {
|
||||
b2.consumeAAA(b1.produceAAA())
|
||||
}
|
||||
+4
-2
@@ -259,11 +259,13 @@ class CompileKotlinAgainstCustomBinariesTest : AbstractKotlinCompilerIntegration
|
||||
fun testMissingDependencyConflictingLibraries() {
|
||||
val library1 = copyJarFileWithoutEntry(
|
||||
compileLibrary("library1"),
|
||||
"a/A.class", "a/A\$Inner.class", "a/AA.class", "a/AA\$Inner.class"
|
||||
"a/A.class", "a/A\$Inner.class", "a/AA.class", "a/AA\$Inner.class",
|
||||
"a/AAA.class", "a/AAA\$Inner.class", "a/AAA\$Inner\$Inner.class"
|
||||
)
|
||||
val library2 = copyJarFileWithoutEntry(
|
||||
compileLibrary("library2"),
|
||||
"a/A.class", "a/A\$Inner.class", "a/AA.class", "a/AA\$Inner.class"
|
||||
"a/A.class", "a/A\$Inner.class", "a/AA.class", "a/AA\$Inner.class",
|
||||
"a/AAA.class", "a/AAA\$Inner.class", "a/AAA\$Inner\$Inner.class"
|
||||
)
|
||||
compileKotlin("source.kt", tmpdir, listOf(library1, library2))
|
||||
}
|
||||
|
||||
@@ -51,19 +51,20 @@ class NotFoundClasses(private val storageManager: StorageManager, private val mo
|
||||
private val isInner: Boolean,
|
||||
numberOfDeclaredTypeParameters: Int
|
||||
) : ClassDescriptorBase(storageManager, container, name, SourceElement.NO_SOURCE, /* isExternal = */ false) {
|
||||
private val typeParameters = (0 until numberOfDeclaredTypeParameters).map { index ->
|
||||
private val declaredTypeParameters = (0 until numberOfDeclaredTypeParameters).map { index ->
|
||||
TypeParameterDescriptorImpl.createWithDefaultBound(
|
||||
this, Annotations.EMPTY, false, Variance.INVARIANT, Name.identifier("T$index"), index, storageManager
|
||||
)
|
||||
}
|
||||
|
||||
private val typeConstructor = ClassTypeConstructorImpl(this, typeParameters, setOf(module.builtIns.anyType), storageManager)
|
||||
private val typeConstructor =
|
||||
ClassTypeConstructorImpl(this, computeConstructorTypeParameters(), setOf(module.builtIns.anyType), storageManager)
|
||||
|
||||
override fun getKind() = ClassKind.CLASS
|
||||
override fun getModality() = Modality.FINAL
|
||||
override fun getVisibility() = Visibilities.PUBLIC
|
||||
override fun getTypeConstructor() = typeConstructor
|
||||
override fun getDeclaredTypeParameters() = typeParameters
|
||||
override fun getDeclaredTypeParameters() = declaredTypeParameters
|
||||
override fun isInner() = isInner
|
||||
|
||||
override fun isCompanionObject() = false
|
||||
|
||||
Reference in New Issue
Block a user