fn main() {
let source = r#"
package com.example;
import java.util.List;
import java.util.Map;
/**
* A simple example class demonstrating the parser.
*/
public class Example {
private final String name;
private int count;
public Example(String name, int count) {
this.name = name;
this.count = count;
}
public String getName() {
return this.name;
}
public int getCount() {
return this.count;
}
public void increment() {
this.count++;
}
@Override
public String toString() {
return "Example{name='" + this.name + "', count=" + this.count + "}";
}
public static void main(String[] args) {
var example = new Example("test", 42);
System.out.println(example);
}
}
"#;
let unit: java_lang::ast::CompilationUnit = java_lang::parse_str(source).unwrap();
println!("=== Parsed Java Source ===\n");
if let Some(pkg) = &unit.package {
println!("Package: {}", pkg.name);
}
println!("\nImports ({}):", unit.imports.len());
for imp in &unit.imports {
println!(" - {:?}", imp);
}
println!("\nType declarations ({}):", unit.type_decls.len());
for td in &unit.type_decls {
if let java_lang::ast::TypeDecl::Class(cls) = td {
println!(" class {} ({:?})", cls.name, cls.name.span);
for modifier in &cls.modifiers {
println!(" modifier: {:?}", modifier);
}
for member in &cls.body.declarations {
match member {
java_lang::ast::ClassBodyDecl::Field(f) => {
for d in &f.declarators {
let name = d.name.as_ref().map(|n| n.name.as_str()).unwrap_or("_");
println!(" field: {} (type: {:?})", name, f.ty);
}
}
java_lang::ast::ClassBodyDecl::Method(m) => {
println!(" method: {} (params: {})", m.name, m.params.len());
}
java_lang::ast::ClassBodyDecl::Constructor(c) => {
println!(" constructor: {} (params: {})", c.name, c.params.len());
}
_ => {}
}
}
}
}
}