Detect recursive property accessors #KT-17221 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
20f5023c48
commit
3b4dafe691
@@ -0,0 +1,27 @@
|
||||
class A {
|
||||
var x = 0
|
||||
set(value) {
|
||||
<lineMarker descr="Recursive call">x</lineMarker>++
|
||||
<lineMarker descr="Recursive call">x</lineMarker>+=1
|
||||
<lineMarker descr="Recursive call">x</lineMarker> = value
|
||||
}
|
||||
|
||||
var y = 0
|
||||
get() {
|
||||
println("$<lineMarker descr="Recursive call">y</lineMarker>")
|
||||
<lineMarker descr="Recursive call">y</lineMarker>++
|
||||
<lineMarker descr="Recursive call">y</lineMarker> += 1
|
||||
return <lineMarker descr="Recursive call">y</lineMarker>
|
||||
}
|
||||
|
||||
var z = 0
|
||||
get() = <lineMarker descr="Recursive call">z</lineMarker>
|
||||
|
||||
var field = 0
|
||||
get() {
|
||||
return if (field != 0) field else -1
|
||||
}
|
||||
set(value) {
|
||||
if (value >= 0) field = value
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package a;
|
||||
|
||||
public interface JavaInterface {
|
||||
String getSomething();
|
||||
|
||||
void setSomething(String value);
|
||||
}
|
||||
+119
@@ -0,0 +1,119 @@
|
||||
<problems>
|
||||
<problem>
|
||||
<file>recursivePropertyAccessors.kt</file>
|
||||
<line>4</line>
|
||||
<module>light_idea_test_case</module>
|
||||
<entry_point TYPE="file" FQNAME="recursivePropertyAccessors.kt" />
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Recursive property accessor</problem_class>
|
||||
<description>Recursive property accessor</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>recursivePropertyAccessors.kt</file>
|
||||
<line>5</line>
|
||||
<module>light_idea_test_case</module>
|
||||
<entry_point TYPE="file" FQNAME="recursivePropertyAccessors.kt" />
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Recursive property accessor</problem_class>
|
||||
<description>Recursive property accessor</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>recursivePropertyAccessors.kt</file>
|
||||
<line>6</line>
|
||||
<module>light_idea_test_case</module>
|
||||
<entry_point TYPE="file" FQNAME="recursivePropertyAccessors.kt" />
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Recursive property accessor</problem_class>
|
||||
<description>Recursive property accessor</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>recursivePropertyAccessors.kt</file>
|
||||
<line>11</line>
|
||||
<module>light_idea_test_case</module>
|
||||
<entry_point TYPE="file" FQNAME="recursivePropertyAccessors.kt" />
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Recursive property accessor</problem_class>
|
||||
<description>Recursive property accessor</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>recursivePropertyAccessors.kt</file>
|
||||
<line>12</line>
|
||||
<module>light_idea_test_case</module>
|
||||
<entry_point TYPE="file" FQNAME="recursivePropertyAccessors.kt" />
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Recursive property accessor</problem_class>
|
||||
<description>Recursive property accessor</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>recursivePropertyAccessors.kt</file>
|
||||
<line>13</line>
|
||||
<module>light_idea_test_case</module>
|
||||
<entry_point TYPE="file" FQNAME="recursivePropertyAccessors.kt" />
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Recursive property accessor</problem_class>
|
||||
<description>Recursive property accessor</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>recursivePropertyAccessors.kt</file>
|
||||
<line>14</line>
|
||||
<module>light_idea_test_case</module>
|
||||
<entry_point TYPE="file" FQNAME="recursivePropertyAccessors.kt" />
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Recursive property accessor</problem_class>
|
||||
<description>Recursive property accessor</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>recursivePropertyAccessors.kt</file>
|
||||
<line>18</line>
|
||||
<module>light_idea_test_case</module>
|
||||
<entry_point TYPE="file" FQNAME="recursivePropertyAccessors.kt" />
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Recursive property accessor</problem_class>
|
||||
<description>Recursive property accessor</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>recursiveSyntheticPropertyAccessor.kt</file>
|
||||
<line>9</line>
|
||||
<module>light_idea_test_case</module>
|
||||
<entry_point TYPE="file" FQNAME="temp:///src/recursiveSyntheticPropertyAccessor.kt" />
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Recursive property accessor</problem_class>
|
||||
<description>Recursive synthetic property accessor</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>recursiveSyntheticPropertyAccessor.kt</file>
|
||||
<line>14</line>
|
||||
<module>light_idea_test_case</module>
|
||||
<entry_point TYPE="file" FQNAME="temp:///src/recursiveSyntheticPropertyAccessor.kt" />
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Recursive property accessor</problem_class>
|
||||
<description>Recursive synthetic property accessor</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>recursivePropertyAccessors.kt</file>
|
||||
<line>27</line>
|
||||
<module>light_idea_test_case</module>
|
||||
<entry_point TYPE="file" FQNAME="temp:///src/recursivePropertyAccessors.kt" />
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Recursive property accessor</problem_class>
|
||||
<description>Recursive property accessor</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>recursivePropertyAccessors.kt</file>
|
||||
<line>31</line>
|
||||
<module>light_idea_test_case</module>
|
||||
<entry_point TYPE="file" FQNAME="temp:///src/recursivePropertyAccessors.kt" />
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Recursive property accessor</problem_class>
|
||||
<description>Recursive property accessor</description>
|
||||
</problem>
|
||||
|
||||
<problem>
|
||||
<file>recursivePropertyAccessors.kt</file>
|
||||
<line>38</line>
|
||||
<module>light_idea_test_case</module>
|
||||
<entry_point TYPE="file" FQNAME="temp:///src/recursivePropertyAccessors.kt" />
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Recursive property accessor</problem_class>
|
||||
<description>Recursive property accessor</description>
|
||||
</problem>
|
||||
|
||||
</problems>
|
||||
+1
@@ -0,0 +1 @@
|
||||
// INSPECTION_CLASS: org.jetbrains.kotlin.idea.inspections.RecursivePropertyAccessorInspection
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
class A {
|
||||
var x = 0
|
||||
set(value) {
|
||||
x++
|
||||
x += 1
|
||||
x = value
|
||||
}
|
||||
|
||||
var y = 0
|
||||
get() {
|
||||
println("$y")
|
||||
y++
|
||||
y += 1
|
||||
return y
|
||||
}
|
||||
|
||||
var z = 0
|
||||
get() = z
|
||||
|
||||
var w
|
||||
set(value) {
|
||||
field = w + value
|
||||
}
|
||||
|
||||
var field = 0
|
||||
get() {
|
||||
this.field
|
||||
return if (field != 0) field else -1
|
||||
}
|
||||
set(value) {
|
||||
this.field = value
|
||||
if (value >= 0) field = value
|
||||
}
|
||||
|
||||
companion object {
|
||||
var g = 0
|
||||
set(value) {
|
||||
A.g = 99
|
||||
}
|
||||
}
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
import a.JavaInterface
|
||||
|
||||
class B {
|
||||
var something: String = "123"
|
||||
|
||||
class Nested : JavaInterface {
|
||||
override fun setSomething(value: String) {
|
||||
val x = something // OK
|
||||
something = value
|
||||
}
|
||||
|
||||
override fun getSomething(): String {
|
||||
something = "456" // OK
|
||||
return something
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user