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") append("The following declaration")
if (descriptors.size == 1) append(" is") else append("s are") if (descriptors.size == 1) append(" is") else append("s are")
append(" incompatible") 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 -> incompatibility.unimplemented?.let { unimplemented ->
appendln(".")
append(indent) append(indent)
appendln("No implementations are found for members listed below:") appendln("No implementations are found for members listed below:")
for ((descriptor, mapping) in unimplemented) { for ((descriptor, mapping) in unimplemented) {
@@ -63,12 +67,6 @@ object PlatformIncompatibilityDiagnosticRenderer :
} }
render(mapping, indent + INDENTATION_UNIT, renderDescriptor) 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 Exit code: COMPILATION_ERROR
Output: Output:
compiler/testData/multiplatform/classScopes/constructorIncorrectSignature/common.kt:1:14: error: header declaration 'Foo' has no implementation in module 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: No implementations are found for members listed below:
public constructor Foo(s: String) 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 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>) impl constructor(s: Array<String>)
^ ^
@@ -6,7 +6,8 @@ Output:
Exit code: COMPILATION_ERROR Exit code: COMPILATION_ERROR
Output: Output:
compiler/testData/multiplatform/classScopes/functionIncorrectSignature/common.kt:1:14: error: header declaration 'Foo' has no implementation in module 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: No implementations are found for members listed below:
public final header fun function(b: ByteArray): Int 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 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() impl fun function(b: ByteArray): Long = b.size.toLong()
^ ^
@@ -6,7 +6,8 @@ Output:
Exit code: COMPILATION_ERROR Exit code: COMPILATION_ERROR
Output: Output:
compiler/testData/multiplatform/classScopes/missingConstructor/common.kt:1:14: error: header declaration 'Foo' has no implementation in module 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: No implementations are found for members listed below:
public constructor Foo(s: String) 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 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 impl class Foo
^ ^
@@ -6,7 +6,8 @@ Output:
Exit code: COMPILATION_ERROR Exit code: COMPILATION_ERROR
Output: Output:
compiler/testData/multiplatform/classScopes/missingFunction/common.kt:1:14: error: header declaration 'Foo' has no implementation in module 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: No implementations are found for members listed below:
public final header fun function(s: String): Unit 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 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 impl class Foo
^ ^