diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/library1/a1.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/library1/a1.kt index 9bf2d35bded..aa5a49c288b 100644 --- a/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/library1/a1.kt +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/library1/a1.kt @@ -7,3 +7,9 @@ class A { class AA { inner class Inner } + +class AAA { + inner class Inner { + inner class InnerInner + } +} diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/library1/b1.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/library1/b1.kt index 284e4c1af29..f6447577b10 100644 --- a/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/library1/b1.kt +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/library1/b1.kt @@ -2,8 +2,11 @@ package b import a.A import a.AA +import a.AAA interface B1 { fun produceA(): A.Inner fun produceAA(): AA.Inner + fun produceAGeneric(t: T): A.Inner + fun produceAAA(): AAA.Inner.InnerInner } diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/library2/a2.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/library2/a2.kt index 0f8359b44ef..228bf5a32a8 100644 --- a/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/library2/a2.kt +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/library2/a2.kt @@ -7,3 +7,9 @@ class A { class AA { inner class Inner } + +class AAA { + inner class Inner { + inner class InnerInner + } +} diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/library2/b2.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/library2/b2.kt index bbbf0213b89..98ca7394d72 100644 --- a/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/library2/b2.kt +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/library2/b2.kt @@ -2,8 +2,10 @@ package b import a.A import a.AA +import a.AAA interface B2 { fun consumeA(a: A.Inner) fun consumeAA(a: AA.Inner) + fun consumeAAA(a: AAA.Inner.InnerInner) } diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/output.txt b/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/output.txt index 9f04735f032..080a7472762 100644 --- a/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/output.txt +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/output.txt @@ -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.Inner but A.Inner 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.Inner but AA.Inner was expected +compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt:12:18: error: type mismatch: inferred type is AA.Inner but AA.Inner 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 \ No newline at end of file +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 diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt index e2679bfb912..faea02f2543 100644 --- a/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/missingDependencyConflictingLibraries/source.kt @@ -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()) +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt index db60322a569..c6754e486e6 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt @@ -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)) } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/NotFoundClasses.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/NotFoundClasses.kt index c9591988ece..39cfb494a1f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/NotFoundClasses.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/NotFoundClasses.kt @@ -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