Extract final modifier on local variables

This commit is contained in:
Tamas Vajk
2022-04-20 09:58:19 +02:00
committed by Ian Lynagh
parent 4efb87a7dd
commit a24753f552
5 changed files with 61 additions and 32 deletions

View File

@@ -976,6 +976,9 @@ open class KotlinFileExtractor(
if (i != null) {
extractExpressionExpr(i, callable, exprId, 0, enclosingStmt)
}
if (!v.isVar) {
addModifiers(varId, "final")
}
}
}

View File

@@ -1,32 +1,36 @@
varAcc
| variables.kt:3:5:3:21 | prop |
| variables.kt:3:5:3:21 | this.prop |
| variables.kt:10:1:10:21 | VariablesKt.topLevel |
| variables.kt:10:1:10:21 | VariablesKt.topLevel |
| variables.kt:16:11:16:18 | o |
| variables.kt:16:11:16:18 | o |
| variables.kt:16:11:16:18 | this.o |
| variables.kt:24:9:24:9 | this |
| variables.kt:25:9:25:9 | this |
| variables.kt:27:9:27:12 | this |
| variables.kt:28:9:28:12 | this |
| variables.kt:7:17:7:22 | local1 |
| variables.kt:9:17:9:22 | local2 |
| variables.kt:10:22:10:26 | param |
| variables.kt:11:17:11:22 | local3 |
| variables.kt:15:1:15:21 | VariablesKt.topLevel |
| variables.kt:15:1:15:21 | VariablesKt.topLevel |
| variables.kt:21:11:21:18 | o |
| variables.kt:21:11:21:18 | o |
| variables.kt:21:11:21:18 | this.o |
| variables.kt:29:9:29:9 | this |
| variables.kt:30:9:30:9 | this |
| variables.kt:32:9:32:12 | this |
| variables.kt:33:9:33:12 | this |
extensionReceiverAcc
| variables.kt:24:9:24:9 | this |
| variables.kt:25:9:25:9 | this |
| variables.kt:27:9:27:12 | this |
| variables.kt:28:9:28:12 | this |
| variables.kt:29:9:29:9 | this |
| variables.kt:30:9:30:9 | this |
| variables.kt:32:9:32:12 | this |
| variables.kt:33:9:33:12 | this |
instAcc
| variables.kt:3:5:3:21 | this |
| variables.kt:16:11:16:18 | this |
| variables.kt:21:9:21:9 | this |
| variables.kt:21:11:21:15 | this |
| variables.kt:26:9:26:12 | C2.this |
| variables.kt:31:9:31:15 | C2.this |
| variables.kt:32:9:32:15 | C2.this |
| variables.kt:41:13:41:16 | this |
| variables.kt:42:13:42:19 | C3.this |
| variables.kt:21:11:21:18 | this |
| variables.kt:26:9:26:9 | this |
| variables.kt:26:11:26:15 | this |
| variables.kt:31:9:31:12 | C2.this |
| variables.kt:36:9:36:15 | C2.this |
| variables.kt:37:9:37:15 | C2.this |
| variables.kt:46:13:46:16 | this |
| variables.kt:47:13:47:19 | C3.this |
instAccQualifier
| variables.kt:26:9:26:12 | C2.this | variables.kt:26:9:26:12 | C2 |
| variables.kt:31:9:31:15 | C2.this | variables.kt:31:9:31:15 | C2 |
| variables.kt:32:9:32:15 | C2.this | variables.kt:32:9:32:15 | C2 |
| variables.kt:42:13:42:19 | C3.this | variables.kt:42:13:42:19 | C3 |
| variables.kt:31:9:31:12 | C2.this | variables.kt:31:9:31:12 | C2 |
| variables.kt:36:9:36:15 | C2.this | variables.kt:36:9:36:15 | C2 |
| variables.kt:37:9:37:15 | C2.this | variables.kt:37:9:37:15 | C2 |
| variables.kt:47:13:47:19 | C3.this | variables.kt:47:13:47:19 | C3 |

View File

@@ -1,7 +1,16 @@
isFinal
| variables.kt:6:9:6:26 | int local1 | final |
| variables.kt:8:9:8:26 | int local2 | non-final |
| variables.kt:10:9:10:26 | int local3 | final |
compileTimeConstant
| variables.kt:7:17:7:22 | local1 |
#select
| variables.kt:3:5:3:21 | prop | int | variables.kt:3:21:3:21 | 1 |
| variables.kt:5:20:5:29 | param | int | file://:0:0:0:0 | <none> |
| variables.kt:6:9:6:25 | int local | int | variables.kt:6:21:6:25 | ... + ... |
| variables.kt:10:1:10:21 | topLevel | int | variables.kt:10:21:10:21 | 1 |
| variables.kt:16:11:16:18 | o | C1 | file://:0:0:0:0 | <none> |
| variables.kt:16:11:16:18 | o | C1 | variables.kt:16:11:16:18 | o |
| variables.kt:23:9:23:10 | <this> | C1 | file://:0:0:0:0 | <none> |
| variables.kt:6:9:6:26 | int local1 | int | variables.kt:6:22:6:26 | ... + ... |
| variables.kt:8:9:8:26 | int local2 | int | variables.kt:8:22:8:26 | ... + ... |
| variables.kt:10:9:10:26 | int local3 | int | variables.kt:10:22:10:26 | param |
| variables.kt:15:1:15:21 | topLevel | int | variables.kt:15:21:15:21 | 1 |
| variables.kt:21:11:21:18 | o | C1 | file://:0:0:0:0 | <none> |
| variables.kt:21:11:21:18 | o | C1 | variables.kt:21:11:21:18 | o |
| variables.kt:28:9:28:10 | <this> | C1 | file://:0:0:0:0 | <none> |

View File

@@ -3,7 +3,12 @@ class Foo {
val prop: Int = 1
fun myFunction(param: Int) {
val local = 2 + 3
val local1 = 2 + 3
println(local1)
var local2 = 2 + 3
println(local2)
val local3 = param
println(local3)
}
}

View File

@@ -35,3 +35,11 @@ MaybeExpr initializer(Variable v) {
from Variable v
where v.fromSource()
select v, v.getType().toString(), initializer(v)
query predicate isFinal(LocalVariableDecl v, string isFinal) {
if v.hasModifier("final") then isFinal = "final" else isFinal = "non-final"
}
query predicate compileTimeConstant(CompileTimeConstantExpr e) {
exists(Variable v | v.getAnAccess() = e)
}