Java 8 rules for method overrides:

- report errors on implementing methods of Any in interfaces
- update testData

~~~

Java 8 override restrictions: interface can't implement a method of 'Any'
- update compiler sources
This commit is contained in:
Dmitry Petrov
2015-10-08 13:00:13 +03:00
parent 5d9ee7efee
commit 7e9e427d4c
36 changed files with 247 additions and 190 deletions
+7 -4
View File
@@ -1,12 +1,15 @@
interface Trait {
fun foo() = "O"
override fun toString() = "K"
fun bar(): String
}
class SimpleClass : Trait
class SimpleClass : Trait {
override fun bar() = "K"
}
// Delegating 'toString' doesn't work, see KT-9519
class ComplexClass : Trait by SimpleClass() {
override fun toString() = foo() + super.toString()
fun qux() = foo() + bar()
}
fun box() = ComplexClass().toString()
fun box() = ComplexClass().qux()
@@ -8,10 +8,6 @@ interface IWithToString {
override fun toString(): String
}
interface IWithDefaultToString {
override fun toString(): String = "I"
}
class C1 : ClassWithToString(), ISomething {
override fun toString(): String = super.toString()
}
@@ -20,15 +16,10 @@ class C2 : ClassWithToString(), IWithToString, ISomething {
override fun toString(): String = super.toString()
}
class C3 : IWithDefaultToString, ISomething {
override fun toString(): String = super.toString()
}
fun box(): String {
return when {
C1().toString() != "C" -> "Failed #1"
C2().toString() != "C" -> "Failed #2"
C3().toString() != "I" -> "Failed #3"
else -> "OK"
}
}
-15
View File
@@ -1,15 +0,0 @@
interface A {
override fun toString(): String {
return "OK"
}
}
interface B : A
class C : B {
override fun toString(): String {
return super.toString()
}
}
fun box() = "${C()}"
+4 -4
View File
@@ -3,8 +3,8 @@ package builders
import java.util.ArrayList
import java.util.HashMap
interface Element {
fun render(builder: StringBuilder, indent: String)
abstract class Element {
abstract fun render(builder: StringBuilder, indent: String)
override fun toString(): String {
val builder = StringBuilder()
@@ -13,13 +13,13 @@ interface Element {
}
}
class TextElement(val text: String) : Element {
class TextElement(val text: String) : Element() {
override fun render(builder: StringBuilder, indent: String) {
builder.append("$indent$text\n")
}
}
abstract class Tag(val name: String) : Element {
abstract class Tag(val name: String) : Element() {
val children = ArrayList<Element>()
val attributes = HashMap<String, String>()
@@ -3,8 +3,8 @@ package builders
import java.util.ArrayList
import java.util.HashMap
interface Element {
fun render(builder: StringBuilder, indent: String)
abstract class Element {
abstract fun render(builder: StringBuilder, indent: String)
override fun toString(): String {
val builder = StringBuilder()
@@ -13,13 +13,13 @@ interface Element {
}
}
class TextElement(val text: String) : Element {
class TextElement(val text: String) : Element() {
override fun render(builder: StringBuilder, indent: String) {
builder.append("$indent$text\n")
}
}
abstract class Tag(val name: String) : Element {
abstract class Tag(val name: String) : Element() {
val children = ArrayList<Element>()
val attributes = HashMap<String, String>()
@@ -1,8 +1,8 @@
interface SuperTrait {
abstract class SuperTrait {
override fun toString(): String = "!"
}
data class A(val x: Int): SuperTrait {
data class A(val x: Int): SuperTrait() {
}
fun box(): String {