1use crate::{ast::JavaRoot, language::JavaLanguage, parser::JavaParser};
2use oak_core::{
3 Parser,
4 builder::{Builder, BuilderCache},
5 source::{Source, TextEdit},
6};
7
8pub struct JavaBuilder {
9 language: JavaLanguage,
10}
11
12impl JavaBuilder {
13 pub fn new(language: JavaLanguage) -> Self {
14 Self { language }
15 }
16}
17
18impl Builder<JavaLanguage> for JavaBuilder {
19 fn build<'a, S: Source + ?Sized>(&self, source: &S, edits: &[TextEdit], _cache: &'a mut impl BuilderCache<JavaLanguage>) -> oak_core::builder::BuildOutput<JavaLanguage> {
20 let parser = JavaParser::new(&self.language);
21 let mut cache = oak_core::parser::session::ParseSession::<JavaLanguage>::default();
22 let parse_result = parser.parse(source, edits, &mut cache);
23
24 match parse_result.result {
25 Ok(_green_tree) => oak_core::errors::OakDiagnostics { result: Ok(JavaRoot { items: vec![] }), diagnostics: parse_result.diagnostics },
26 Err(e) => oak_core::errors::OakDiagnostics { result: Err(e), diagnostics: parse_result.diagnostics },
27 }
28 }
29}