diff --git a/jacodb-ets/src/main/kotlin/org/jacodb/ets/dto/Convert.kt b/jacodb-ets/src/main/kotlin/org/jacodb/ets/dto/Convert.kt index d071751f7..e0296dc6e 100644 --- a/jacodb-ets/src/main/kotlin/org/jacodb/ets/dto/Convert.kt +++ b/jacodb-ets/src/main/kotlin/org/jacodb/ets/dto/Convert.kt @@ -194,8 +194,11 @@ class EtsMethodBuilder( if (entity is EtsExpr || entity is EtsFieldRef || entity is EtsArrayAccess) { return ensureLocal(entity) } else { - check(entity is EtsValue) { - "Expected EtsValue, but got $entity" + if (entity !is EtsValue) { + logger.error { + "Expected EtsValue, but got ${entity::class.java}: $entity\nMethod: $method" + } + error("Expected EtsValue, but got ${entity::class.java}") } return entity } @@ -207,9 +210,19 @@ class EtsMethodBuilder( } is AssignStmtDto -> { - val lhv = left.toEtsEntity() as EtsValue // safe cast - check(lhv is EtsLocal || lhv is EtsFieldRef || lhv is EtsArrayAccess) { - "LHV of AssignStmt should be EtsLocal, EtsFieldRef, or EtsArrayAccess, but got $lhv" + val lhv = left.toEtsEntity().let { + // Drop cast on LHV + if (it is EtsCastExpr) { + it.arg + } else { + it + } + } + if (!(lhv is EtsLocal || lhv is EtsFieldRef || lhv is EtsArrayAccess)) { + logger.error { + "LHV of AssignStmt should be EtsLocal, EtsFieldRef, or EtsArrayAccess, but got ${lhv::class.java}: $lhv\nMethod: $method\nStmt: $this" + } + error("LHV of AssignStmt should be EtsLocal, EtsFieldRef, or EtsArrayAccess, but got ${lhv::class.java}") } val rhv = right.toEtsEntity().let { rhv -> if (lhv is EtsLocal) { @@ -232,7 +245,13 @@ class EtsMethodBuilder( } is CallStmtDto -> { - val expr = expr.toEtsEntity() as EtsCallExpr // safe cast + val expr = expr.toEtsEntity() + if (expr !is EtsCallExpr) { + logger.error { + "Expr in CallStmt should be EtsCallExpr, but got ${expr::class.java}: $expr\nMethod: $method\nStmt: $this" + } + error("Expr in CallStmt should be EtsCallExpr, but got ${expr::class.java}") + } EtsCallStmt( location = loc(), expr = expr,