Render incompatible impl member in "no impl for header" diagnostic

This commit is contained in:
Alexander Udalov
2017-03-23 13:25:00 +03:00
parent db1f039586
commit 633798db18
5 changed files with 14 additions and 16 deletions
@@ -48,10 +48,14 @@ object PlatformIncompatibilityDiagnosticRenderer :
append("The following declaration")
if (descriptors.size == 1) append(" is") else append("s are")
append(" incompatible")
incompatibility.reason?.let { append(" because $it") }
incompatibility.reason?.let { appendln(" because $it:") }
for (descriptor in descriptors) {
append(indent + " ")
appendln(renderDescriptor(descriptor))
}
incompatibility.unimplemented?.let { unimplemented ->
appendln(".")
append(indent)
appendln("No implementations are found for members listed below:")
for ((descriptor, mapping) in unimplemented) {
@@ -63,12 +67,6 @@ object PlatformIncompatibilityDiagnosticRenderer :
}
render(mapping, indent + INDENTATION_UNIT, renderDescriptor)
}
} ?: run {
appendln(":")
for (descriptor in descriptors) {
append(indent + " ")
appendln(renderDescriptor(descriptor))
}
}
}
}
@@ -6,7 +6,8 @@ Output:
Exit code: COMPILATION_ERROR
Output:
compiler/testData/multiplatform/classScopes/constructorIncorrectSignature/common.kt:1:14: error: header declaration 'Foo' has no implementation in module
The following declaration is incompatible because some members are not implemented.
The following declaration is incompatible because some members are not implemented:
public final impl class Foo
No implementations are found for members listed below:
public constructor Foo(s: String)
@@ -22,4 +23,3 @@ impl class Foo {
compiler/testData/multiplatform/classScopes/constructorIncorrectSignature/jvm.kt:2:5: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
impl constructor(s: Array<String>)
^
@@ -6,7 +6,8 @@ Output:
Exit code: COMPILATION_ERROR
Output:
compiler/testData/multiplatform/classScopes/functionIncorrectSignature/common.kt:1:14: error: header declaration 'Foo' has no implementation in module
The following declaration is incompatible because some members are not implemented.
The following declaration is incompatible because some members are not implemented:
public final impl class Foo
No implementations are found for members listed below:
public final header fun function(b: ByteArray): Int
@@ -22,4 +23,3 @@ impl class Foo {
compiler/testData/multiplatform/classScopes/functionIncorrectSignature/jvm.kt:2:5: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
impl fun function(b: ByteArray): Long = b.size.toLong()
^
@@ -6,7 +6,8 @@ Output:
Exit code: COMPILATION_ERROR
Output:
compiler/testData/multiplatform/classScopes/missingConstructor/common.kt:1:14: error: header declaration 'Foo' has no implementation in module
The following declaration is incompatible because some members are not implemented.
The following declaration is incompatible because some members are not implemented:
public final impl class Foo
No implementations are found for members listed below:
public constructor Foo(s: String)
@@ -19,4 +20,3 @@ header class Foo {
compiler/testData/multiplatform/classScopes/missingConstructor/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
impl class Foo
^
@@ -6,7 +6,8 @@ Output:
Exit code: COMPILATION_ERROR
Output:
compiler/testData/multiplatform/classScopes/missingFunction/common.kt:1:14: error: header declaration 'Foo' has no implementation in module
The following declaration is incompatible because some members are not implemented.
The following declaration is incompatible because some members are not implemented:
public final impl class Foo
No implementations are found for members listed below:
public final header fun function(s: String): Unit
@@ -16,4 +17,3 @@ header class Foo {
compiler/testData/multiplatform/classScopes/missingFunction/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
impl class Foo
^