Skip to content

Commit 60f7a77

Browse files
authored
Replace casts with checks, ignore CastExpr in LHS of AssignStmt (#357)
1 parent f2818d6 commit 60f7a77

File tree

1 file changed

+25
-6
lines changed
  • jacodb-ets/src/main/kotlin/org/jacodb/ets/dto

1 file changed

+25
-6
lines changed

jacodb-ets/src/main/kotlin/org/jacodb/ets/dto/Convert.kt

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,11 @@ class EtsMethodBuilder(
194194
if (entity is EtsExpr || entity is EtsFieldRef || entity is EtsArrayAccess) {
195195
return ensureLocal(entity)
196196
} else {
197-
check(entity is EtsValue) {
198-
"Expected EtsValue, but got $entity"
197+
if (entity !is EtsValue) {
198+
logger.error {
199+
"Expected EtsValue, but got ${entity::class.java}: $entity\nMethod: $method"
200+
}
201+
error("Expected EtsValue, but got ${entity::class.java}")
199202
}
200203
return entity
201204
}
@@ -207,9 +210,19 @@ class EtsMethodBuilder(
207210
}
208211

209212
is AssignStmtDto -> {
210-
val lhv = left.toEtsEntity() as EtsValue // safe cast
211-
check(lhv is EtsLocal || lhv is EtsFieldRef || lhv is EtsArrayAccess) {
212-
"LHV of AssignStmt should be EtsLocal, EtsFieldRef, or EtsArrayAccess, but got $lhv"
213+
val lhv = left.toEtsEntity().let {
214+
// Drop cast on LHV
215+
if (it is EtsCastExpr) {
216+
it.arg
217+
} else {
218+
it
219+
}
220+
}
221+
if (!(lhv is EtsLocal || lhv is EtsFieldRef || lhv is EtsArrayAccess)) {
222+
logger.error {
223+
"LHV of AssignStmt should be EtsLocal, EtsFieldRef, or EtsArrayAccess, but got ${lhv::class.java}: $lhv\nMethod: $method\nStmt: $this"
224+
}
225+
error("LHV of AssignStmt should be EtsLocal, EtsFieldRef, or EtsArrayAccess, but got ${lhv::class.java}")
213226
}
214227
val rhv = right.toEtsEntity().let { rhv ->
215228
if (lhv is EtsLocal) {
@@ -232,7 +245,13 @@ class EtsMethodBuilder(
232245
}
233246

234247
is CallStmtDto -> {
235-
val expr = expr.toEtsEntity() as EtsCallExpr // safe cast
248+
val expr = expr.toEtsEntity()
249+
if (expr !is EtsCallExpr) {
250+
logger.error {
251+
"Expr in CallStmt should be EtsCallExpr, but got ${expr::class.java}: $expr\nMethod: $method\nStmt: $this"
252+
}
253+
error("Expr in CallStmt should be EtsCallExpr, but got ${expr::class.java}")
254+
}
236255
EtsCallStmt(
237256
location = loc(),
238257
expr = expr,

0 commit comments

Comments
 (0)