Do not suggest "Redundant Unit return type" for Nothing-typed expression

So #KT-20261 Fixed
This commit is contained in:
Toshiaki Kameyama
2017-09-17 16:44:42 +03:00
committed by Mikhail Glukhikh
parent d87c0b164f
commit 1c7d66c803
3 changed files with 19 additions and 2 deletions
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.psi.KtVisitorVoid
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.types.typeUtil.isNothing
import org.jetbrains.kotlin.types.typeUtil.isUnit
class RedundantUnitReturnTypeInspection : AbstractKotlinInspection() {
@@ -43,7 +44,9 @@ class RedundantUnitReturnTypeInspection : AbstractKotlinInspection() {
if (!function.hasBlockBody()) {
val bodyExpression = function.bodyExpression
if (bodyExpression != null) {
val resolvedCall = bodyExpression.getResolvedCall(bodyExpression.analyze(BodyResolveMode.PARTIAL))
val bodyContext = bodyExpression.analyze(BodyResolveMode.PARTIAL)
if (bodyContext.getType(bodyExpression)?.isNothing() == true) return
val resolvedCall = bodyExpression.getResolvedCall(bodyContext)
if (resolvedCall != null) {
if (resolvedCall.candidateDescriptor.returnType?.isUnit() != true) return
}
+7 -1
View File
@@ -7,4 +7,10 @@ fun bar(): Unit {
fun baz(): Unit = println("ok")
fun f1(): Int = 1
fun f1(): Int = 1
fun f2(): Unit {
throw UnsupportedOperationException("")
}
fun f3(): Unit = throw UnsupportedOperationException("")
@@ -23,6 +23,14 @@
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant 'Unit' return type</problem_class>
<description>Redundant Unit return type</description>
</problem>
<problem>
<file>Test.kt</file>
<line>12</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/Test.kt" />
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant 'Unit' return type</problem_class>
<description>Redundant Unit return type</description>
</problem>
<problem>
<file>WithLambda.kt</file>
<line>11</line>