Skip to main content

oxilean_codegen/java_backend/
javaexpr_traits.rs

1//! # JavaExpr - Trait Implementations
2//!
3//! This module contains trait implementations for `JavaExpr`.
4//!
5//! ## Implemented Traits
6//!
7//! - `Display`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use crate::lcnf::*;
12
13use super::types::JavaExpr;
14use std::fmt;
15
16impl fmt::Display for JavaExpr {
17    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18        match self {
19            JavaExpr::Lit(lit) => write!(f, "{}", lit),
20            JavaExpr::Var(name) => write!(f, "{}", name),
21            JavaExpr::BinOp(op, lhs, rhs) => write!(f, "({} {} {})", lhs, op, rhs),
22            JavaExpr::UnaryOp(op, operand) => write!(f, "{}{}", op, operand),
23            JavaExpr::Call(callee, args) => {
24                write!(f, "{}(", callee)?;
25                for (i, a) in args.iter().enumerate() {
26                    if i > 0 {
27                        write!(f, ", ")?;
28                    }
29                    write!(f, "{}", a)?;
30                }
31                write!(f, ")")
32            }
33            JavaExpr::MethodCall(recv, method, args) => {
34                write!(f, "{}.{}(", recv, method)?;
35                for (i, a) in args.iter().enumerate() {
36                    if i > 0 {
37                        write!(f, ", ")?;
38                    }
39                    write!(f, "{}", a)?;
40                }
41                write!(f, ")")
42            }
43            JavaExpr::New(cls, args) => {
44                write!(f, "new {}(", cls)?;
45                for (i, a) in args.iter().enumerate() {
46                    if i > 0 {
47                        write!(f, ", ")?;
48                    }
49                    write!(f, "{}", a)?;
50                }
51                write!(f, ")")
52            }
53            JavaExpr::Cast(ty, expr) => write!(f, "(({}) {})", ty, expr),
54            JavaExpr::Instanceof(expr, ty) => write!(f, "({} instanceof {})", expr, ty),
55            JavaExpr::Ternary(cond, then, else_) => {
56                write!(f, "({} ? {} : {})", cond, then, else_)
57            }
58            JavaExpr::Null => write!(f, "null"),
59            JavaExpr::Lambda(params, body) => {
60                if params.is_empty() {
61                    write!(f, "() -> {}", body)
62                } else if params.len() == 1 {
63                    write!(f, "{} -> {}", params[0], body)
64                } else {
65                    write!(f, "(")?;
66                    for (i, p) in params.iter().enumerate() {
67                        if i > 0 {
68                            write!(f, ", ")?;
69                        }
70                        write!(f, "{}", p)?;
71                    }
72                    write!(f, ") -> {}", body)
73                }
74            }
75            JavaExpr::MethodRef(cls, method) => write!(f, "{}::{}", cls, method),
76            JavaExpr::ArrayAccess(arr, idx) => write!(f, "{}[{}]", arr, idx),
77            JavaExpr::FieldAccess(obj, field) => write!(f, "{}.{}", obj, field),
78        }
79    }
80}