From bf363e8f1a408901210ef54d567f30eac4c19c51 Mon Sep 17 00:00:00 2001 From: vldf Date: Thu, 27 Aug 2020 10:46:01 +0300 Subject: [PATCH] [FIR] Update/add extended checker tests --- .../nullable.kt | 2 +- .../nullable2.kt | 2 +- .../safeString2.kt | 2 +- .../RedundantCallOfConversionMethod/uByte.kt | 2 +- .../RedundantCallOfConversionMethod/uInt.kt | 2 +- .../RedundantCallOfConversionMethod/uLong.kt | 2 +- .../RedundantCallOfConversionMethod/uShort.kt | 2 +- .../RedundantExplicitTypeChecker.kt | 40 ++++++------- .../RedundantModalityModifierChecker.kt | 2 +- .../RedundantVisibilityModifierChecker.kt | 16 ++--- .../BasicTest.kt | 2 +- .../ComplexExpression.kt | 2 +- .../OperatorAssignment.kt | 2 +- .../flexibleTypeBug.kt | 2 +- .../illegalMultipleOperators.kt | 2 +- .../illegalMultipleOperatorsMiddle.kt | 2 +- .../invalidSubtraction.kt | 2 +- .../list.kt | 2 +- .../logicOperators.kt | 2 +- .../multipleOperators.kt | 2 +- .../multipleOperatorsRightSideRepeat.kt | 2 +- .../mutableList.kt | 2 +- .../nonCommutativeRepeat.kt | 2 +- .../nonRepeatingAssignment.kt | 4 +- .../plusAssignConflict.kt | 2 +- .../rightSideRepeat.kt | 2 +- .../simpleAssign.kt | 2 +- .../validAddition.kt | 2 +- .../validSubtraction.kt | 2 +- .../emptyRangeChecker/NoWarning.kt | 6 +- .../emptyRangeChecker/Warning.kt | 6 +- .../extendedCheckers/unused/classProperty.kt | 9 +++ .../extendedCheckers/unused/classProperty.txt | 15 +++++ .../extendedCheckers/unused/lambda.kt | 9 +++ .../extendedCheckers/unused/lambda.txt | 10 ++++ .../extendedCheckers/unused/localVariable.kt | 42 ++++++++++++++ .../extendedCheckers/unused/localVariable.txt | 58 +++++++++++++++++++ .../unused/manyLocalVariables.kt | 19 ++++++ .../unused/manyLocalVariables.txt | 28 +++++++++ .../unused/valueIsNeverRead.kt | 6 ++ .../unused/valueIsNeverRead.txt | 7 +++ .../ExtendedFirDiagnosticsTestGenerated.java | 48 +++++++++++++-- ...WithLightTreeDiagnosticsTestGenerated.java | 48 +++++++++++++-- 43 files changed, 351 insertions(+), 72 deletions(-) create mode 100644 compiler/fir/analysis-tests/testData/extendedCheckers/unused/classProperty.kt create mode 100644 compiler/fir/analysis-tests/testData/extendedCheckers/unused/classProperty.txt create mode 100644 compiler/fir/analysis-tests/testData/extendedCheckers/unused/lambda.kt create mode 100644 compiler/fir/analysis-tests/testData/extendedCheckers/unused/lambda.txt create mode 100644 compiler/fir/analysis-tests/testData/extendedCheckers/unused/localVariable.kt create mode 100644 compiler/fir/analysis-tests/testData/extendedCheckers/unused/localVariable.txt create mode 100644 compiler/fir/analysis-tests/testData/extendedCheckers/unused/manyLocalVariables.kt create mode 100644 compiler/fir/analysis-tests/testData/extendedCheckers/unused/manyLocalVariables.txt create mode 100644 compiler/fir/analysis-tests/testData/extendedCheckers/unused/valueIsNeverRead.kt create mode 100644 compiler/fir/analysis-tests/testData/extendedCheckers/unused/valueIsNeverRead.txt diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/nullable.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/nullable.kt index d43f6516445..97809b57f70 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/nullable.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/nullable.kt @@ -1,5 +1,5 @@ // WITH_RUNTIME // IS_APPLICABLE: false fun foo(s: String?) { - val t: String = s.toString() + val t: String = s.toString() } \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/nullable2.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/nullable2.kt index a170902eb5d..c828043775a 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/nullable2.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/nullable2.kt @@ -3,5 +3,5 @@ data class Foo(val name: String) fun nullable2(foo: Foo?) { - val s: String = foo?.name.toString() + val s: String = foo?.name.toString() } \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/safeString2.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/safeString2.kt index 650024a7204..c0b5a99987e 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/safeString2.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/safeString2.kt @@ -2,5 +2,5 @@ data class Foo(val name: String) fun test(foo: Foo?) { - val s: String? = foo?.name?.toString() + val s: String? = foo?.name?.toString() } \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/uByte.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/uByte.kt index 65588def258..20444d1549d 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/uByte.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/uByte.kt @@ -1,4 +1,4 @@ // WITH_RUNTIME fun test(i: UByte) { - val foo = i.toUByte() + val foo = i.toUByte() } \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/uInt.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/uInt.kt index 5206cec1733..fec6f346b66 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/uInt.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/uInt.kt @@ -1,4 +1,4 @@ // WITH_RUNTIME fun test(i: UInt) { - val foo = i.toUInt() + val foo = i.toUInt() } \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/uLong.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/uLong.kt index b4000455e91..c9fc29d32ca 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/uLong.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/uLong.kt @@ -1,4 +1,4 @@ // WITH_RUNTIME fun test(i: ULong) { - val foo = i.toULong() + val foo = i.toULong() } \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/uShort.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/uShort.kt index 2ef3e96deb7..98fd40c8c4e 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/uShort.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/uShort.kt @@ -1,4 +1,4 @@ // WITH_RUNTIME fun test(i: UShort) { - val foo = i.toUShort() + val foo = i.toUShort() } \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantExplicitTypeChecker.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantExplicitTypeChecker.kt index 11495ecde4f..d28a4286e91 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantExplicitTypeChecker.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantExplicitTypeChecker.kt @@ -4,16 +4,16 @@ import kotlin.reflect.KClass annotation class A fun annotated() { - val x: @A Int /* NOT redundant */ = 1 + val x: @A Int /* NOT redundant */ = 1 } object SomeObj fun fer() { - val x: Any /* NOT redundant */ = SomeObj + val x: Any /* NOT redundant */ = SomeObj } fun f2(y: String?): String { - val f: KClass<*> = (y ?: return "")::class + val f: KClass<*> = (y ?: return "")::class return "" } @@ -25,7 +25,7 @@ interface IB : IA fun IA.extFun(x: IB) {} fun testWithExpectedType() { - val extFun_AB_A: IA.(IB) -> Unit = IA::extFun + val extFun_AB_A: IA.(IB) -> Unit = IA::extFun } interface Point { @@ -36,27 +36,27 @@ interface Point { class PointImpl(override val x: Int, override val y: Int) : Point fun foo() { - val s: String = "Hello ${10+1}" - val str: String? = "" + val s: String = "Hello ${10+1}" + val str: String? = "" - val o: Obj = Obj + val o: Obj = Obj - val p: Point = PointImpl(1, 2) - val a: Boolean = true - val i: Int = 2 * 2 - val l: Long = 1234567890123L - val s: String? = null - val sh: Short = 42 + val p: Point = PointImpl(1, 2) + val a: Boolean = true + val i: Int = 2 * 2 + val l: Long = 1234567890123L + val s: String? = null + val sh: Short = 42 - val integer: Int = 42 - val piFloat: Float = 3.14f - val piDouble: Double = 3.14 - val charZ: Char = 'z' - var alpha: Int = 0 + val integer: Int = 42 + val piFloat: Float = 3.14f + val piDouble: Double = 3.14 + val charZ: Char = 'z' + var alpha: Int = 0 } fun test(boolean: Boolean) { - val expectedLong: Long = if (boolean) { + val expectedLong: Long = if (boolean) { 42 } else { return @@ -70,7 +70,7 @@ class My { val ZERO: Int = 0 fun main() { - val id: Id = 11 + val id: Id = 11 } typealias Id = Int \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantModalityModifierChecker.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantModalityModifierChecker.kt index 53ddeb6595a..990762a9590 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantModalityModifierChecker.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantModalityModifierChecker.kt @@ -82,4 +82,4 @@ abstract interface AbstractInterface // Redundant final object final object FinalObject // Open interface -open interface OpenInterface +open interface OpenInterface \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantVisibilityModifierChecker.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantVisibilityModifierChecker.kt index 378a5a75428..00343ba50ed 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantVisibilityModifierChecker.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantVisibilityModifierChecker.kt @@ -1,5 +1,5 @@ fun f() { - public var baz = 0 + public var baz = 0 class LocalClass { internal var foo = 0 } @@ -75,12 +75,12 @@ open class J { } var buf = 0 - private get() = 42 - protected set(value) { - field = value - } + private get() = 42 + protected set(value) { + field = value + } var bar = 0 - get() = 3.1415926535 - set(value) {} -} + get() = 3.1415926535 + set(value) {} +} \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/BasicTest.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/BasicTest.kt index 8358b6595c7..e218c599d57 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/BasicTest.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/BasicTest.kt @@ -3,5 +3,5 @@ fun goo() { val b = 4 a = a + 1 + b a = (a + 1) - a = a * b + 1 + a = a * b + 1 } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/ComplexExpression.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/ComplexExpression.kt index 6754f127ad4..5a90ff58c9e 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/ComplexExpression.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/ComplexExpression.kt @@ -1,4 +1,4 @@ fun foo() { var a = 0 - a = (a + 1) / 2 + a = (a + 1) / 2 } \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/OperatorAssignment.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/OperatorAssignment.kt index 97ff8586aea..b23a87e1a43 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/OperatorAssignment.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/OperatorAssignment.kt @@ -1,4 +1,4 @@ fun foo() { var a = 0 - a += 10 + a + a += 10 + a } \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/flexibleTypeBug.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/flexibleTypeBug.kt index 15464876e2a..3b1535cde4f 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/flexibleTypeBug.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/flexibleTypeBug.kt @@ -2,5 +2,5 @@ fun foo() { var list1 = java.util.Collections.emptyList() val list2 = listOf("b") - list1 = list1 + list2 + list1 = list1 + list2 } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/illegalMultipleOperators.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/illegalMultipleOperators.kt index bd15008d601..af5ae513d3f 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/illegalMultipleOperators.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/illegalMultipleOperators.kt @@ -1,4 +1,4 @@ fun foo() { var x = 0 - x = x / 1 + 1 + x = x / 1 + 1 } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/illegalMultipleOperatorsMiddle.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/illegalMultipleOperatorsMiddle.kt index 25d3ab44a32..3fedc6b6707 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/illegalMultipleOperatorsMiddle.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/illegalMultipleOperatorsMiddle.kt @@ -1,5 +1,5 @@ fun foo() { var x = 0 val y = 0 - x = y / x + 0 + x = y / x + 0 } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/invalidSubtraction.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/invalidSubtraction.kt index f256d51086b..c757451c72f 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/invalidSubtraction.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/invalidSubtraction.kt @@ -1,4 +1,4 @@ fun foo() { var x = 0 - x = 1 - x + x = 1 - x } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/list.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/list.kt index 0c668efce9e..8f8351918b2 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/list.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/list.kt @@ -3,5 +3,5 @@ fun foo() { var list = listOf(1, 2, 3) // Should not be highlighted because it's the way we use to say explicitly // "yes, we want to re-assign this immutable list" - list = list + 4 + list = list + 4 } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/logicOperators.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/logicOperators.kt index 5aaec4aec1d..27febf75055 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/logicOperators.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/logicOperators.kt @@ -1,4 +1,4 @@ fun foo(something: Boolean) { var res = false - res = res and something + res = res and something } \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/multipleOperators.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/multipleOperators.kt index 061b14cade8..9d171517e9c 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/multipleOperators.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/multipleOperators.kt @@ -1,5 +1,5 @@ fun foo() { var x = 0 var y = 0 - x = x + y + 5 + x = x + y + 5 } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/multipleOperatorsRightSideRepeat.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/multipleOperatorsRightSideRepeat.kt index 0fabdf0cbea..a93064495f9 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/multipleOperatorsRightSideRepeat.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/multipleOperatorsRightSideRepeat.kt @@ -1,5 +1,5 @@ fun foo() { var x = 0 var y = 0 - x = y + x + 5 + x = y + x + 5 } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/mutableList.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/mutableList.kt index fcf8a7bcc40..b8e16cb844b 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/mutableList.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/mutableList.kt @@ -5,5 +5,5 @@ fun foo() { // now, Idea hightlights this code like error (cuz listVar // is mutable and listVar + 4 is immutable) and like warning // (cuz can be replaced with +=) - listVar = listVar + 4 + listVar = listVar + 4 } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/nonCommutativeRepeat.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/nonCommutativeRepeat.kt index 42a73c4c6c5..2208ebf69b3 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/nonCommutativeRepeat.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/nonCommutativeRepeat.kt @@ -4,5 +4,5 @@ fun foo() { x = x / 1 x = 1 / x - x = -1 + x + x = -1 + x } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/nonRepeatingAssignment.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/nonRepeatingAssignment.kt index 5ba73f3f09a..0b19a7e7ab5 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/nonRepeatingAssignment.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/nonRepeatingAssignment.kt @@ -1,6 +1,6 @@ fun foo() { - var x = 0 + var x = 0 val y = 0 val z = 0 - x = y + z + x = y + z } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/plusAssignConflict.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/plusAssignConflict.kt index a297b550562..ff5c5a5fe46 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/plusAssignConflict.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/plusAssignConflict.kt @@ -6,5 +6,5 @@ operator fun A.plusAssign(a: A){} fun foo() { var a1 = A() val a2 = A() - a1 = a1 + a2 + a1 = a1 + a2 } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/rightSideRepeat.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/rightSideRepeat.kt index d6812063422..43f50dd8c40 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/rightSideRepeat.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/rightSideRepeat.kt @@ -1,4 +1,4 @@ fun foo() { var x = 0 - x = 1 + x + x = 1 + x } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/simpleAssign.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/simpleAssign.kt index 8e4a5426069..ba5108a3cc6 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/simpleAssign.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/simpleAssign.kt @@ -1,5 +1,5 @@ fun foo() { var y = 0 val x = 0 - y = y + x + y = y + x } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/validAddition.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/validAddition.kt index 38873894637..191b05aebd9 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/validAddition.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/validAddition.kt @@ -1,4 +1,4 @@ fun foo() { var x = 0 - x = x + 1 + x = x + 1 } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/validSubtraction.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/validSubtraction.kt index c2df85864a5..41407233e65 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/validSubtraction.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment/validSubtraction.kt @@ -1,4 +1,4 @@ fun foo() { var x = 0 - x = x - 1 + x = x - 1 } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/emptyRangeChecker/NoWarning.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/emptyRangeChecker/NoWarning.kt index cb47905d662..209d2c11c89 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/emptyRangeChecker/NoWarning.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/emptyRangeChecker/NoWarning.kt @@ -3,7 +3,7 @@ fun foo() { for (i in 1..2) { } - val a = 3..4 + val a = 3..4 val v = 1 if (v in 5..6) { } @@ -13,7 +13,7 @@ fun foo() { fun backward() { for (i in 2 downTo 1) { } - val a = 4 downTo 3 + val a = 4 downTo 3 val v = 1 if (v in -5 downTo -6) { } @@ -22,7 +22,7 @@ fun backward() { fun until() { for (i in 1 until 2) { } - val a = 3 until 4 + val a = 3 until 4 val v = 1 if (v in -5 until -4) { } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/emptyRangeChecker/Warning.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/emptyRangeChecker/Warning.kt index e994e46ab15..ad813ac13fd 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/emptyRangeChecker/Warning.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/emptyRangeChecker/Warning.kt @@ -3,7 +3,7 @@ fun foo() { for (i in 2..1) { } - val a = 10..0 + val a = 10..0 val v = 1 if (v in 10..1) { } @@ -12,7 +12,7 @@ fun foo() { fun backward() { for (i in 1 downTo 2) { } - val a = -3 downTo 4 + val a = -3 downTo 4 val v = 1 if (v in 0 downTo 6) { } @@ -21,7 +21,7 @@ fun backward() { fun until() { for (i in 1 until 1) { } - val a = 4 until 3 + val a = 4 until 3 val v = 1 if (v in -5 until -5) { } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/unused/classProperty.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/classProperty.kt new file mode 100644 index 00000000000..e3aebeed61e --- /dev/null +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/classProperty.kt @@ -0,0 +1,9 @@ +class A { + var v: String? = null +} + +fun foo(): String? { + val t = A().v + + return t +} \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/unused/classProperty.txt b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/classProperty.txt new file mode 100644 index 00000000000..5fed62ce9ba --- /dev/null +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/classProperty.txt @@ -0,0 +1,15 @@ +FILE: classProperty.kt + public final class A : R|kotlin/Any| { + public constructor(): R|A| { + super() + } + + public final var v: R|kotlin/String?| = Null(null) + public get(): R|kotlin/String?| + public set(value: R|kotlin/String?|): R|kotlin/Unit| + + } + public final fun foo(): R|kotlin/String?| { + lval t: R|kotlin/String?| = R|/A.A|().R|/A.v| + ^foo R|/t| + } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/unused/lambda.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/lambda.kt new file mode 100644 index 00000000000..0d3519b88ab --- /dev/null +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/lambda.kt @@ -0,0 +1,9 @@ +fun f(t: (v: Int) -> Unit) { + 1.run(t) +} + +fun main() { + f { i -> + + } +} \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/unused/lambda.txt b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/lambda.txt new file mode 100644 index 00000000000..8732d89b696 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/lambda.txt @@ -0,0 +1,10 @@ +FILE: lambda.kt + public final fun f(t: R|(kotlin/Int) -> kotlin/Unit|): R|kotlin/Unit| { + Int(1).R|kotlin/run|(R|/t|) + } + public final fun main(): R|kotlin/Unit| { + R|/f|( = f@fun (i: R|kotlin/Int|): R|kotlin/Unit| { + ^@f Unit + } + ) + } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/unused/localVariable.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/localVariable.kt new file mode 100644 index 00000000000..aa69fc811ae --- /dev/null +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/localVariable.kt @@ -0,0 +1,42 @@ +import kotlin.reflect.KProperty + +class Outer { + fun foo() { + class Local { + fun bar() { + val x = y + } + } + } + + val y = "" +} + +fun f() { + val a = 1 + + fun g(): Int { + return a + } +} + + +fun foo(v: Int) { + val d: Int by Delegate + val a: Int + val b = 1 + val c = 2 + + @Anno + val e: Int + + foo(c) +} + +object Delegate { + operator fun getValue(instance: Any?, property: KProperty<*>) = 1 + operator fun setValue(instance: Any?, property: KProperty<*>, value: String) {} +} + +@Target(AnnotationTarget.LOCAL_VARIABLE) +annotation class Anno diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/unused/localVariable.txt b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/localVariable.txt new file mode 100644 index 00000000000..9207c3b5295 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/localVariable.txt @@ -0,0 +1,58 @@ +FILE: localVariable.kt + public final class Outer : R|kotlin/Any| { + public constructor(): R|Outer| { + super() + } + + public final fun foo(): R|kotlin/Unit| { + local final class Local : R|kotlin/Any| { + public constructor(): R|Outer.Local| { + super() + } + + public final fun bar(): R|kotlin/Unit| { + lval x: R|kotlin/String| = this@R|/Outer|.R|/Outer.y| + } + + } + + } + + public final val y: R|kotlin/String| = String() + public get(): R|kotlin/String| + + } + public final fun f(): R|kotlin/Unit| { + lval a: R|kotlin/Int| = Int(1) + local final fun g(): R|kotlin/Int| { + ^g R|/a| + } + + } + public final fun foo(v: R|kotlin/Int|): R|kotlin/Unit| { + lval d: R|kotlin/Int|by Q|Delegate| + lval a: R|kotlin/Int| + lval b: R|kotlin/Int| = Int(1) + lval c: R|kotlin/Int| = Int(2) + @R|Anno|() lval e: R|kotlin/Int| + R|/foo|(R|/c|) + } + public final object Delegate : R|kotlin/Any| { + private constructor(): R|Delegate| { + super() + } + + public final operator fun getValue(instance: R|kotlin/Any?|, property: R|kotlin/reflect/KProperty<*>|): R|kotlin/Int| { + ^getValue Int(1) + } + + public final operator fun setValue(instance: R|kotlin/Any?|, property: R|kotlin/reflect/KProperty<*>|, value: R|kotlin/String|): R|kotlin/Unit| { + } + + } + @R|kotlin/annotation/Target|(vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.LOCAL_VARIABLE|)) public final annotation class Anno : R|kotlin/Annotation| { + public constructor(): R|Anno| { + super() + } + + } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/unused/manyLocalVariables.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/manyLocalVariables.kt new file mode 100644 index 00000000000..7de68571e70 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/manyLocalVariables.kt @@ -0,0 +1,19 @@ +fun foo() { + var a = 1 + var b = 2 + var c = 3 + + for (i in 0..5) { + if (a == 2) { + b = c + c = a + } else { + b = a + c = b + } + } + + if (c == a) { + foo() + } +} \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/unused/manyLocalVariables.txt b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/manyLocalVariables.txt new file mode 100644 index 00000000000..0dcd5fdd47b --- /dev/null +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/manyLocalVariables.txt @@ -0,0 +1,28 @@ +FILE: manyLocalVariables.kt + public final fun foo(): R|kotlin/Unit| { + lvar a: R|kotlin/Int| = Int(1) + lvar b: R|kotlin/Int| = Int(2) + lvar c: R|kotlin/Int| = Int(3) + lval : R|kotlin/collections/IntIterator| = Int(0).R|kotlin/Int.rangeTo|(Int(5)).R|kotlin/ranges/IntProgression.iterator|() + while(R|/|.R|kotlin/collections/Iterator.hasNext|()) { + lval i: R|kotlin/Int| = R|/|.R|kotlin/collections/IntIterator.next|() + when () { + ==(R|/a|, Int(2)) -> { + R|/b| = R|/c| + R|/c| = R|/a| + } + else -> { + R|/b| = R|/a| + R|/c| = R|/b| + } + } + + } + + when () { + ==(R|/c|, R|/a|) -> { + R|/foo|() + } + } + + } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/unused/valueIsNeverRead.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/valueIsNeverRead.kt new file mode 100644 index 00000000000..ae14b691400 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/valueIsNeverRead.kt @@ -0,0 +1,6 @@ +fun foo() { + var a = 1 + a = 2 + a = 3 + a += 1 +} \ No newline at end of file diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/unused/valueIsNeverRead.txt b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/valueIsNeverRead.txt new file mode 100644 index 00000000000..e31f2c4d327 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/unused/valueIsNeverRead.txt @@ -0,0 +1,7 @@ +FILE: valueIsNeverRead.kt + public final fun foo(): R|kotlin/Unit| { + lvar a: R|kotlin/Int| = Int(1) + R|/a| = Int(2) + R|/a| = Int(3) + R|/a| = R|/a|.R|kotlin/Int.plus|(Int(1)) + } diff --git a/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/ExtendedFirDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/ExtendedFirDiagnosticsTestGenerated.java index 4f5f98e27b9..57d9eaa7c44 100644 --- a/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/ExtendedFirDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/ExtendedFirDiagnosticsTestGenerated.java @@ -33,6 +33,11 @@ public class ExtendedFirDiagnosticsTestGenerated extends AbstractExtendedFirDiag runTest("compiler/fir/analysis-tests/testData/extendedCheckers/ArrayEqualityCanBeReplacedWithEquals.kt"); } + @TestMetadata("CanBeValChecker.kt") + public void testCanBeValChecker() throws Exception { + runTest("compiler/fir/analysis-tests/testData/extendedCheckers/CanBeValChecker.kt"); + } + @TestMetadata("RedundantExplicitTypeChecker.kt") public void testRedundantExplicitTypeChecker() throws Exception { runTest("compiler/fir/analysis-tests/testData/extendedCheckers/RedundantExplicitTypeChecker.kt"); @@ -63,11 +68,6 @@ public class ExtendedFirDiagnosticsTestGenerated extends AbstractExtendedFirDiag runTest("compiler/fir/analysis-tests/testData/extendedCheckers/RedundantVisibilityModifierChecker.kt"); } - @TestMetadata("VariableAssignmentChecker.kt") - public void testVariableAssignmentChecker() throws Exception { - runTest("compiler/fir/analysis-tests/testData/extendedCheckers/VariableAssignmentChecker.kt"); - } - @TestMetadata("compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) @@ -311,4 +311,42 @@ public class ExtendedFirDiagnosticsTestGenerated extends AbstractExtendedFirDiag runTest("compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/variable.kt"); } } + + @TestMetadata("compiler/fir/analysis-tests/testData/extendedCheckers/unused") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Unused extends AbstractExtendedFirDiagnosticsTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + public void testAllFilesPresentInUnused() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/extendedCheckers/unused"), Pattern.compile("^([^.]+)\\.kt$"), null, true); + } + + @TestMetadata("classProperty.kt") + public void testClassProperty() throws Exception { + runTest("compiler/fir/analysis-tests/testData/extendedCheckers/unused/classProperty.kt"); + } + + @TestMetadata("lambda.kt") + public void testLambda() throws Exception { + runTest("compiler/fir/analysis-tests/testData/extendedCheckers/unused/lambda.kt"); + } + + @TestMetadata("localVariable.kt") + public void testLocalVariable() throws Exception { + runTest("compiler/fir/analysis-tests/testData/extendedCheckers/unused/localVariable.kt"); + } + + @TestMetadata("manyLocalVariables.kt") + public void testManyLocalVariables() throws Exception { + runTest("compiler/fir/analysis-tests/testData/extendedCheckers/unused/manyLocalVariables.kt"); + } + + @TestMetadata("valueIsNeverRead.kt") + public void testValueIsNeverRead() throws Exception { + runTest("compiler/fir/analysis-tests/testData/extendedCheckers/unused/valueIsNeverRead.kt"); + } + } } diff --git a/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/ExtendedFirWithLightTreeDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/ExtendedFirWithLightTreeDiagnosticsTestGenerated.java index d2044ddc641..32de628438f 100644 --- a/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/ExtendedFirWithLightTreeDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/ExtendedFirWithLightTreeDiagnosticsTestGenerated.java @@ -33,6 +33,11 @@ public class ExtendedFirWithLightTreeDiagnosticsTestGenerated extends AbstractEx runTest("compiler/fir/analysis-tests/testData/extendedCheckers/ArrayEqualityCanBeReplacedWithEquals.kt"); } + @TestMetadata("CanBeValChecker.kt") + public void testCanBeValChecker() throws Exception { + runTest("compiler/fir/analysis-tests/testData/extendedCheckers/CanBeValChecker.kt"); + } + @TestMetadata("RedundantExplicitTypeChecker.kt") public void testRedundantExplicitTypeChecker() throws Exception { runTest("compiler/fir/analysis-tests/testData/extendedCheckers/RedundantExplicitTypeChecker.kt"); @@ -63,11 +68,6 @@ public class ExtendedFirWithLightTreeDiagnosticsTestGenerated extends AbstractEx runTest("compiler/fir/analysis-tests/testData/extendedCheckers/RedundantVisibilityModifierChecker.kt"); } - @TestMetadata("VariableAssignmentChecker.kt") - public void testVariableAssignmentChecker() throws Exception { - runTest("compiler/fir/analysis-tests/testData/extendedCheckers/VariableAssignmentChecker.kt"); - } - @TestMetadata("compiler/fir/analysis-tests/testData/extendedCheckers/canBeReplacedWithOperatorAssignment") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) @@ -311,4 +311,42 @@ public class ExtendedFirWithLightTreeDiagnosticsTestGenerated extends AbstractEx runTest("compiler/fir/analysis-tests/testData/extendedCheckers/RedundantCallOfConversionMethod/variable.kt"); } } + + @TestMetadata("compiler/fir/analysis-tests/testData/extendedCheckers/unused") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Unused extends AbstractExtendedFirWithLightTreeDiagnosticsTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + public void testAllFilesPresentInUnused() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/extendedCheckers/unused"), Pattern.compile("^([^.]+)\\.kt$"), null, true); + } + + @TestMetadata("classProperty.kt") + public void testClassProperty() throws Exception { + runTest("compiler/fir/analysis-tests/testData/extendedCheckers/unused/classProperty.kt"); + } + + @TestMetadata("lambda.kt") + public void testLambda() throws Exception { + runTest("compiler/fir/analysis-tests/testData/extendedCheckers/unused/lambda.kt"); + } + + @TestMetadata("localVariable.kt") + public void testLocalVariable() throws Exception { + runTest("compiler/fir/analysis-tests/testData/extendedCheckers/unused/localVariable.kt"); + } + + @TestMetadata("manyLocalVariables.kt") + public void testManyLocalVariables() throws Exception { + runTest("compiler/fir/analysis-tests/testData/extendedCheckers/unused/manyLocalVariables.kt"); + } + + @TestMetadata("valueIsNeverRead.kt") + public void testValueIsNeverRead() throws Exception { + runTest("compiler/fir/analysis-tests/testData/extendedCheckers/unused/valueIsNeverRead.kt"); + } + } }