Add new functionality to "Change signature" refactoring

Extract single point of entry for all change signature refactorings and fixes (remove parameter, add parameter)
Change signature now affects overriding functions as well
Ask the user whether he wants to refactor base function(s) or the selected one if appropiate
Fix a problem with descriptorToDeclaration in JetChangeSignatureHandler
Rename: JetFunctionPlatformDescriptor -> JetMethodDescriptor
This commit is contained in:
Pavel V. Talanov
2013-10-07 20:49:44 +04:00
parent 967030e7c1
commit 8c95884ad2
27 changed files with 1198 additions and 323 deletions
@@ -0,0 +1,65 @@
// "Add parameter to function 'f'" "true"
trait OA {
fun f(a: Int,
i: Int)
}
trait OB {
fun f(a: Int,
i: Int)
}
trait O : OA, OB {
override fun f(a: Int,
i: Int)
}
trait OO : O {
override fun f(a: Int,
i: Int) {
}
}
trait OOO : OO {
override fun f(a: Int,
i: Int) {}
}
trait OOOA : OOO {
override fun f(a: Int,
i: Int) {
}
}
trait OOOB : OOO {
override fun f(a: Int,
i: Int) {
}
}
fun usage(o: OA) {
o.f(1, 12)
}
fun usage(o: OB) {
o.f(1, 12)
}
fun usage(o: O) {
o.f(1, 12)
}
fun usage(o: OO) {
o.f(13, 12)
}
fun usage(o: OOO) {
o.f(3, 12)
}
fun usage(o: OOOA) {
o.f(3, 12)
}
fun usage(o: OOOB) {
o.f(3, 12)
}
@@ -0,0 +1,58 @@
// "Remove parameter 'a'" "true"
trait OA {
fun f()
}
trait OB {
fun f(a: Int)
}
trait O : OA, OB {
override fun f()
}
trait OO : O {
override fun f() {
}
}
trait OOO : OO {
override fun f() {}
}
trait OOOA : OOO {
override fun f() {
}
}
trait OOOB : OOO {
override fun f() {
}
}
fun usage(o: OA) {
o.f()
}
fun usage(o: OB) {
o.f(1)
}
fun usage(o: O) {
o.f()
}
fun usage(o: OO) {
o.f()
}
fun usage(o: OOO) {
o.f()
}
fun usage(o: OOOA) {
o.f()
}
fun usage(o: OOOB) {
o.f()
}
@@ -0,0 +1,65 @@
// "Add parameter to function 'f'" "true"
trait OA {
fun f(a: Int,
s: String)
}
trait OB {
fun f(a: Int,
s: String)
}
trait O : OA, OB {
override fun f(a: Int,
s: String)
}
trait OO : O {
override fun f(a: Int,
s: String) {
}
}
trait OOO : OO {
override fun f(a: Int,
s: String) {}
}
trait OOOA : OOO {
override fun f(a: Int,
s: String) {
}
}
trait OOOB : OOO {
override fun f(a: Int,
s: String) {
}
}
fun usage(o: OA) {
o.f(1, "asdv")
}
fun usage(o: OB) {
o.f(1, "asdv")
}
fun usage(o: O) {
o.f(1, "asdv")
}
fun usage(o: OO) {
o.f(13, "asdv")
}
fun usage(o: OOO) {
o.f(3, "asdv")
}
fun usage(o: OOOA) {
o.f(3, "asdv")
}
fun usage(o: OOOB) {
o.f(3, "asdv")
}
@@ -0,0 +1,28 @@
// "Add parameter to function 'f'" "true"
trait O {
fun f(a: Int,
i: Int)
}
trait OO : O {
override fun f(a: Int,
i: Int) {
}
}
trait OOO : OO {
override fun f(a: Int,
i: Int) {}
}
fun usage(o: O) {
o.f(1, 12)
}
fun usage(o: OO) {
o.f(13, 12)
}
fun usage(o: OOO) {
o.f(3, 12)
}
@@ -0,0 +1,58 @@
// "Add parameter to function 'f'" "true"
trait OA {
fun f(a: Int)
}
trait OB {
fun f(a: Int)
}
trait O : OA, OB {
override fun f(a: Int)
}
trait OO : O {
override fun f(a: Int) {
}
}
trait OOO : OO {
override fun f(a: Int) {}
}
trait OOOA : OOO {
override fun f(a: Int) {
}
}
trait OOOB : OOO {
override fun f(a: Int) {
}
}
fun usage(o: OA) {
o.f(1)
}
fun usage(o: OB) {
o.f(1)
}
fun usage(o: O) {
o.f(1)
}
fun usage(o: OO) {
o.f(13, <caret>12)
}
fun usage(o: OOO) {
o.f(3)
}
fun usage(o: OOOA) {
o.f(3)
}
fun usage(o: OOOB) {
o.f(3)
}
@@ -0,0 +1,58 @@
// "Remove parameter 'a'" "true"
trait OA {
fun f(a: Int)
}
trait OB {
fun f(a: Int)
}
trait O : OA, OB {
override fun f(a: Int)
}
trait OO : O {
override fun f(a: Int) {
}
}
trait OOO : OO {
override fun f(a: Int) {}
}
trait OOOA : OOO {
override fun f(a: Int) {
}
}
trait OOOB : OOO {
override fun f(a: Int) {
}
}
fun usage(o: OA) {
o.f(<caret>)
}
fun usage(o: OB) {
o.f(1)
}
fun usage(o: O) {
o.f(1)
}
fun usage(o: OO) {
o.f(13)
}
fun usage(o: OOO) {
o.f(3)
}
fun usage(o: OOOA) {
o.f(3)
}
fun usage(o: OOOB) {
o.f(3)
}
@@ -0,0 +1,58 @@
// "Add parameter to function 'f'" "true"
trait OA {
fun f(a: Int)
}
trait OB {
fun f(a: Int)
}
trait O : OA, OB {
override fun f(a: Int)
}
trait OO : O {
override fun f(a: Int) {
}
}
trait OOO : OO {
override fun f(a: Int) {}
}
trait OOOA : OOO {
override fun f(a: Int) {
}
}
trait OOOB : OOO {
override fun f(a: Int) {
}
}
fun usage(o: OA) {
o.f(1)
}
fun usage(o: OB) {
o.f(1)
}
fun usage(o: O) {
o.f(1)
}
fun usage(o: OO) {
o.f(13)
}
fun usage(o: OOO) {
o.f(3)
}
fun usage(o: OOOA) {
o.f(3)
}
fun usage(o: OOOB) {
o.f(3, <caret>"asdv")
}
@@ -0,0 +1,25 @@
// "Add parameter to function 'f'" "true"
trait O {
fun f(a: Int)
}
trait OO : O {
override fun f(a: Int) {
}
}
trait OOO : OO {
override fun f(a: Int) {}
}
fun usage(o: O) {
o.f(1)
}
fun usage(o: OO) {
o.f(13, <caret>12)
}
fun usage(o: OOO) {
o.f(3)
}