Quickfix for NOTHING_TO_OVERRIDE

This commit is contained in:
Michał Sapalski
2013-03-02 15:08:00 +01:00
committed by Andrey Breslav
parent 231457df8e
commit 01c4826b06
51 changed files with 1169 additions and 159 deletions
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f(a: Int)'" "true"
trait A {
fun f(a: Int)
}
class B : A {
<caret>override fun f(a: Int) {}
}
@@ -0,0 +1,10 @@
// "Change function signature..." "true"
// ERROR: <html>Class 'B' must be declared abstract or implement abstract member<br/><b>abstract</b> <b>fun</b> f(a: jet.String): jet.Unit <i>defined in</i> A</html>
trait A {
fun f(a: Int)
fun f(a: String)
}
class B : A {
<caret>override fun f(a: Int) {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'public override fun f(a: Int)'" "true"
trait A {
fun f(a: Int)
}
class B : A {
public <caret>override fun f(a: Int) {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f(a: Int)'" "true"
open class A {
open fun f(a: Int) {}
}
class B : A(){
<caret>override fun f(a: Int) {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f(a: Int)'" "true"
abstract class A {
abstract fun f(a: Int)
}
class B : A(){
<caret>override fun f(a: Int) {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f(a: Int)'" "true"
trait A {
fun f(a: Int)
}
trait B : A {
<caret>override fun f(a: Int)
}
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f(x: Int, t: String, z: Double)'" "true"
open class A {
open fun f(x: Int, y: String, z: Double) {}
}
class B : A(){
<caret>override fun f(x: Int, t: String, z: Double) {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f(y: Int, x: String)'" "true"
open class A {
open fun f(a: Int, b: String) {}
}
class B : A(){
<caret>override fun f(y: Int, x: String) {}
}
@@ -0,0 +1,12 @@
// "Change function signature to 'override fun f()'" "true"
open class A {
open fun f() {}
}
open class B : A() {
open override fun f() {}
}
class C : B() {
<caret>override fun f() {}
}
@@ -0,0 +1,10 @@
// "Change function signature to 'override fun f(a: Int): Int'" "true"
open class A {
open fun f(a: Int): Int {
return 0
}
}
class B : A(){
<caret>override fun f(a: Int): Int = 7
}
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f(a: Int)'" "true"
trait A {
fun f(a: Int)
}
class B : A {
<caret>override fun f(a: Int) {}
}
@@ -0,0 +1,11 @@
// "Change function signature to 'override fun f(a: Int): Int'" "true"
// ERROR: <html>Type mismatch.<table><tr><td>Required:</td><td>jet.Int</td></tr><tr><td>Found:</td><td>jet.String</td></tr></table></html>
open class A {
open fun f(a: Int): Int = 0
}
class B : A(){
// Note that when parameter types match, RETURN_TYPE_MISMATCH_ON_OVERRIDE error is reported
// and "Change function signature" quickfix is not present.
<caret>override fun f(a: Int): Int = "FOO"
}
@@ -0,0 +1,11 @@
// "Change function signature to 'override fun f(a: Int)'" "false"
// ERROR: 'f' overrides nothing
// ACTION: Remove 'override' modifier
open class A {
open fun foo() {}
fun f(a: Int) {}
}
class B : A(){
<caret>override fun f(a: String) {}
}
@@ -0,0 +1,6 @@
// "Change function signature to 'protected override fun next(p0: Int): Int'" "true"
import java.util.Random
class MyRandom : Random() {
<caret>protected override fun next(p0: Int): Int = 4
}
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f()'" "true"
trait A {
fun f()
}
class B : A {
<caret>override fun f() {}
}
@@ -0,0 +1,11 @@
// "Change function signature to 'override fun f()'" "true"
trait A {
fun f()
}
trait B {
fun f()
}
class C : A, B {
<caret>override fun f() {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f(a: Int)'" "true"
trait A {
fun f(a: Int)
}
class B : A {
<caret>override fun f() {}
}
@@ -0,0 +1,10 @@
// "Change function signature..." "true"
// ERROR: <html>Class 'B' must be declared abstract or implement abstract member<br/><b>abstract</b> <b>fun</b> f(a: jet.String): jet.Unit <i>defined in</i> A</html>
trait A {
fun f(a: Int)
fun f(a: String)
}
class B : A {
<caret>override fun f() {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'public override fun f(a: Int)'" "true"
trait A {
fun f(a: Int)
}
class B : A {
public <caret>override fun f() {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f(a: Int)'" "true"
open class A {
open fun f(a: Int) {}
}
class B : A(){
<caret>override fun f(a: String) {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f(a: Int)'" "true"
abstract class A {
abstract fun f(a: Int)
}
class B : A(){
<caret>override fun f(a: String) {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f(a: Int)'" "true"
trait A {
fun f(a: Int)
}
trait B : A {
<caret>override fun f(a: String)
}
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f(x: Int, t: String, z: Double)'" "true"
open class A {
open fun f(x: Int, y: String, z: Double) {}
}
class B : A(){
<caret>override fun f(z: String, x: String, t: String) {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f(y: Int, x: String)'" "true"
open class A {
open fun f(a: Int, b: String) {}
}
class B : A(){
<caret>override fun f(x: String, y: Int) {}
}
@@ -0,0 +1,12 @@
// "Change function signature to 'override fun f()'" "true"
open class A {
open fun f() {}
}
open class B : A() {
open override fun f() {}
}
class C : B() {
<caret>override fun f(a : Int) {}
}
@@ -0,0 +1,10 @@
// "Change function signature to 'override fun f(a: Int): Int'" "true"
open class A {
open fun f(a: Int): Int {
return 0
}
}
class B : A(){
<caret>override fun f(a: String): Int = 7
}
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f(a: Int)'" "true"
trait A {
fun f(a: Int)
}
class B : A {
<caret>override fun f(a: String) {}
}
@@ -0,0 +1,11 @@
// "Change function signature to 'override fun f(a: Int): Int'" "true"
// ERROR: <html>Type mismatch.<table><tr><td>Required:</td><td>jet.Int</td></tr><tr><td>Found:</td><td>jet.String</td></tr></table></html>
open class A {
open fun f(a: Int): Int = 0
}
class B : A(){
// Note that when parameter types match, RETURN_TYPE_MISMATCH_ON_OVERRIDE error is reported
// and "Change function signature" quickfix is not present.
<caret>override fun f(a : String): String = "FOO"
}
@@ -0,0 +1,11 @@
// "Change function signature to 'override fun f(a: Int)'" "false"
// ERROR: 'f' overrides nothing
// ACTION: Remove 'override' modifier
open class A {
open fun foo() {}
fun f(a: Int) {}
}
class B : A(){
<caret>override fun f(a: String) {}
}
@@ -0,0 +1,6 @@
// "Change function signature to 'protected override fun next(p0: Int): Int'" "true"
import java.util.Random
class MyRandom : Random() {
<caret>override fun next(): Int = 4
}
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f()'" "true"
trait A {
fun f()
}
class B : A {
<caret>override fun f(a: Int) {}
}
@@ -0,0 +1,11 @@
// "Change function signature to 'override fun f()'" "true"
trait A {
fun f()
}
trait B {
fun f()
}
class C : A, B {
<caret>override fun f(a: String) {}
}
@@ -0,0 +1,9 @@
// "Change function signature to 'override fun f(a: A)'" "true"
// ERROR: 'f' overrides nothing
// ERROR: 'f' overrides nothing
import a.B
import a.A
class BB : B() {
<caret>override fun f(a: A) {}
}
@@ -0,0 +1,7 @@
// "Change function signature to 'override fun f(a: A)'" "true"
// ERROR: 'f' overrides nothing
// ERROR: 'f' overrides nothing
import a.B
class BB : B() {
<caret>override fun f() {}
}
@@ -0,0 +1,5 @@
package a
class A {}
open class B {
override fun f(a: A) {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f(a: A)'" "true"
// ERROR: 'f' overrides nothing
// ERROR: 'f' overrides nothing
import a.B
class A {}
class BB : B() {
<caret>override fun f(a: a.A) {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'override fun f(a: A)'" "true"
// ERROR: 'f' overrides nothing
// ERROR: 'f' overrides nothing
import a.B
class A {}
class BB : B() {
<caret>override fun f() {}
}
@@ -0,0 +1,5 @@
package a
class A {}
open class B {
override fun f(a: A) {}
}