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> {
|
class AA<T> {
|
||||||
inner class Inner<U, V>
|
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.A
|
||||||
import a.AA
|
import a.AA
|
||||||
|
import a.AAA
|
||||||
|
|
||||||
interface B1 {
|
interface B1 {
|
||||||
fun produceA(): A<String>.Inner<Int, Unit>
|
fun produceA(): A<String>.Inner<Int, Unit>
|
||||||
fun produceAA(): AA<Int>.Inner<Unit, String>
|
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> {
|
class AA<T, U> {
|
||||||
inner class Inner<V>
|
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.A
|
||||||
import a.AA
|
import a.AA
|
||||||
|
import a.AAA
|
||||||
|
|
||||||
interface B2 {
|
interface B2 {
|
||||||
fun consumeA(a: A<Int, String, Double>.Inner<B2>)
|
fun consumeA(a: A<Int, String, Double>.Inner<B2>)
|
||||||
fun consumeAA(a: AA<Int, Unit>.Inner<String>)
|
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
|
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())
|
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())
|
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())
|
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())
|
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) {
|
fun testA(b1: B1, b2: B2) {
|
||||||
b2.consumeA(b1.produceA())
|
b2.consumeA(b1.produceA())
|
||||||
|
b2.consumeA(b1.produceAGeneric("foo"))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testAA(b1: B1, b2: B2) {
|
fun testAA(b1: B1, b2: B2) {
|
||||||
b2.consumeAA(b1.produceAA())
|
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() {
|
fun testMissingDependencyConflictingLibraries() {
|
||||||
val library1 = copyJarFileWithoutEntry(
|
val library1 = copyJarFileWithoutEntry(
|
||||||
compileLibrary("library1"),
|
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(
|
val library2 = copyJarFileWithoutEntry(
|
||||||
compileLibrary("library2"),
|
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))
|
compileKotlin("source.kt", tmpdir, listOf(library1, library2))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,19 +51,20 @@ class NotFoundClasses(private val storageManager: StorageManager, private val mo
|
|||||||
private val isInner: Boolean,
|
private val isInner: Boolean,
|
||||||
numberOfDeclaredTypeParameters: Int
|
numberOfDeclaredTypeParameters: Int
|
||||||
) : ClassDescriptorBase(storageManager, container, name, SourceElement.NO_SOURCE, /* isExternal = */ false) {
|
) : 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(
|
TypeParameterDescriptorImpl.createWithDefaultBound(
|
||||||
this, Annotations.EMPTY, false, Variance.INVARIANT, Name.identifier("T$index"), index, storageManager
|
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 getKind() = ClassKind.CLASS
|
||||||
override fun getModality() = Modality.FINAL
|
override fun getModality() = Modality.FINAL
|
||||||
override fun getVisibility() = Visibilities.PUBLIC
|
override fun getVisibility() = Visibilities.PUBLIC
|
||||||
override fun getTypeConstructor() = typeConstructor
|
override fun getTypeConstructor() = typeConstructor
|
||||||
override fun getDeclaredTypeParameters() = typeParameters
|
override fun getDeclaredTypeParameters() = declaredTypeParameters
|
||||||
override fun isInner() = isInner
|
override fun isInner() = isInner
|
||||||
|
|
||||||
override fun isCompanionObject() = false
|
override fun isCompanionObject() = false
|
||||||
|
|||||||
Reference in New Issue
Block a user