Introduce inspection detecting self-assignment of properties

So #KT-20714 Fixed
This commit is contained in:
Toshiaki Kameyama
2017-10-22 19:14:54 +03:00
committed by Mikhail Glukhikh
parent ffa9478d0c
commit 204d9e3423
34 changed files with 569 additions and 0 deletions
@@ -0,0 +1 @@
org.jetbrains.kotlin.idea.inspections.SelfAssignmentInspection
@@ -0,0 +1,17 @@
// PROBLEM: none
// WITH_RUNTIME
// Minimized from KT-20714 itself
class ServerUser {
var id = ""
var city = ""
fun toClientUser() = ClientUser().apply {
id = <caret>this@ServerUser.id
city = this@ServerUser.city
}
}
class ClientUser {
var id = ""
}
@@ -0,0 +1,18 @@
// PROBLEM: Variable 'city' is assigned to itself
// WITH_RUNTIME
// FIX: Remove self assignment
// Minimized from KT-20714 itself
class ServerUser {
var id = ""
var city = ""
fun toClientUser() = ClientUser().apply {
id = this@ServerUser.id
city = <caret>this@ServerUser.city
}
}
class ClientUser {
var id = ""
}
@@ -0,0 +1,17 @@
// PROBLEM: Variable 'city' is assigned to itself
// WITH_RUNTIME
// FIX: Remove self assignment
// Minimized from KT-20714 itself
class ServerUser {
var id = ""
var city = ""
fun toClientUser() = ClientUser().apply {
id = this@ServerUser.id
}
}
class ClientUser {
var id = ""
}
@@ -0,0 +1,11 @@
// PROBLEM: none
// SKIP_ERRORS_BEFORE
// SKIP_ERRORS_AFTER
class Point {
val x: Int
constructor(x: Int) {
x = <caret>x
}
}
@@ -0,0 +1,12 @@
// PROBLEM: none
// WITH_RUNTIME
class Test {
var foo = 1
fun test() {
with (Test()) {
this@Test.foo = <caret>this.foo // Different receivers
}
}
}
@@ -0,0 +1,12 @@
// PROBLEM: none
// WITH_RUNTIME
class Test {
var foo = 1
fun test() {
with (Test()) {
this@Test.foo = <caret>foo // Different receiver
}
}
}
+7
View File
@@ -0,0 +1,7 @@
// PROBLEM: none
// WITH_RUNTIME
fun test() {
val list = mutableListOf(1, 2, 3)
list[1] = <caret>list[1]
}
@@ -0,0 +1,8 @@
// PROBLEM: none
// SKIP_ERRORS_BEFORE
// SKIP_ERRORS_AFTER
fun test() {
val bar = 1
bar = <caret>bar
}
@@ -0,0 +1,7 @@
// PROBLEM: Variable 'bar' is assigned to itself
// FIX: Remove self assignment
fun test() {
var bar = 1
bar = <caret>bar
}
@@ -0,0 +1,6 @@
// PROBLEM: Variable 'bar' is assigned to itself
// FIX: Remove self assignment
fun test() {
var bar = 1
}
@@ -0,0 +1,6 @@
// PROBLEM: none
fun test() {
var bar = 1
bar += <caret>bar
}
@@ -0,0 +1,12 @@
// PROBLEM: none
// WITH_RUNTIME
class Bar(var foo: Int = 1)
class Test(var foo: Int = 2) {
fun test() {
Bar().apply {
this.foo = <caret>this@Test.foo
}
}
}
@@ -0,0 +1,9 @@
// PROBLEM: none
open class Test {
open var foo = 1
fun test() {
foo = <caret>this.foo
}
}
@@ -0,0 +1,7 @@
// PROBLEM: none
// SKIP_ERRORS_BEFORE
// SKIP_ERRORS_AFTER
fun test(bar: Int) {
bar = <caret>bar
}
@@ -0,0 +1,10 @@
// PROBLEM: Variable 'foo' is assigned to itself
// FIX: Remove self assignment
class Test {
var foo = 1
fun test() {
foo = <caret>foo
}
}
@@ -0,0 +1,9 @@
// PROBLEM: Variable 'foo' is assigned to itself
// FIX: Remove self assignment
class Test {
var foo = 1
fun test() {
}
}
@@ -0,0 +1,10 @@
// PROBLEM: Variable 'foo' is assigned to itself
// FIX: Remove self assignment
class Test {
var foo = 1
fun test() {
foo = <caret>this.foo
}
}
@@ -0,0 +1,9 @@
// PROBLEM: Variable 'foo' is assigned to itself
// FIX: Remove self assignment
class Test {
var foo = 1
fun test() {
}
}
@@ -0,0 +1,10 @@
// PROBLEM: Variable 'foo' is assigned to itself
// FIX: Remove self assignment
class Test {
var foo = 1
fun test() {
foo = <caret>this@Test.foo
}
}
@@ -0,0 +1,9 @@
// PROBLEM: Variable 'foo' is assigned to itself
// FIX: Remove self assignment
class Test {
var foo = 1
fun test() {
}
}
@@ -0,0 +1,20 @@
// PROBLEM: none
// WITH_RUNTIME
import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty
class Test {
var foo: Int by Delegate()
fun test() {
foo = <caret>foo
}
}
class Delegate : ReadWriteProperty<Test, Int> {
override fun getValue(thisRef: Test, property: KProperty<*>): Int = 1
override fun setValue(thisRef: Test, property: KProperty<*>, value: Int) {
println()
}
}
@@ -0,0 +1,14 @@
// PROBLEM: none
// WITH_RUNTIME
class Test {
var foo = 1
get() {
println()
return 2
}
fun test() {
foo = <caret>foo
}
}
@@ -0,0 +1,13 @@
// PROBLEM: none
// WITH_RUNTIME
class Test {
var foo = 1
set(value) {
println(value)
}
fun test() {
foo = <caret>foo
}
}
@@ -0,0 +1,10 @@
// PROBLEM: Variable 'foo' is assigned to itself
// FIX: Remove self assignment
class Test {
var foo = 1
fun test() {
this.foo = <caret>this@Test.foo
}
}
@@ -0,0 +1,9 @@
// PROBLEM: Variable 'foo' is assigned to itself
// FIX: Remove self assignment
class Test {
var foo = 1
fun test() {
}
}
@@ -0,0 +1,13 @@
// PROBLEM: Variable 'foo' is assigned to itself
// WITH_RUNTIME
// FIX: Remove self assignment
class Test {
var foo = 1
fun test() {
with (Test()) {
this.foo = <caret>foo
}
}
}
@@ -0,0 +1,12 @@
// PROBLEM: Variable 'foo' is assigned to itself
// WITH_RUNTIME
// FIX: Remove self assignment
class Test {
var foo = 1
fun test() {
with (Test()) {
}
}
}
@@ -0,0 +1,5 @@
// PROBLEM: none
fun test(bar: Int) {
var bar = <caret>bar
}
@@ -0,0 +1,7 @@
// PROBLEM: none
class Point(var x: Int) {
fun copyFrom(other: Point) {
x = <caret>other.x
}
}