@@ -18,25 +18,31 @@ class FuncMissingReturnInspection : FuncInspectionBase() {
18
18
val block = function.blockStatement ? : return
19
19
val atomicType = function.type as ? FuncAtomicType ? : return
20
20
val isVoid = atomicType is FuncHoleType || (atomicType as ? FuncTensorType )?.typeList?.isEmpty() == true
21
- if (isVoid || isTerminating(block)) return
22
- val brace = block.rBrace
23
- holder.registerProblem(brace ? : block, " Missing return at end of function" )
21
+ if (isVoid) return
22
+ holder.isTerminating(block)
24
23
}
25
24
26
- private fun isTerminating (element : FuncElement ? ): Boolean {
25
+ private fun ProblemsHolder. isTerminating (element : FuncElement ? ): Boolean {
27
26
ProgressIndicatorProvider .checkCanceled()
28
27
return when (element) {
29
28
null -> false
30
29
is FuncReturnStatement -> true
31
- is FuncBlockStatement -> isTerminating(element.statementList.lastOrNull())
30
+ is FuncBlockStatement -> {
31
+ val result = isTerminating(element.statementList.lastOrNull())
32
+ if (! result) {
33
+ val brace = element.rBrace
34
+ registerProblem(brace ? : element, " Missing `return`" )
35
+ }
36
+ result
37
+ }
32
38
is FuncIfStatement -> isTerminating(element.blockStatement) && isTerminating(
33
39
element.`else ` ? : element.elseIf
34
40
)
35
-
36
41
is FuncElse -> isTerminating(element.blockStatement)
37
42
is FuncElseIf ->
38
43
isTerminating(element.blockStatement) && isTerminating(element.`else ` ? : element.elseIf)
39
-
44
+ is FuncTryStatement -> isTerminating(element.blockStatement) && isTerminating(element.catch )
45
+ is FuncCatch -> isTerminating(element.blockStatement)
40
46
else -> false
41
47
}
42
48
}
0 commit comments