oak_java/builder/
mod.rs

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}