1use crate::{language::JavaLanguage, parser::JavaParser};
2use oak_core::{
3 Parser, Source,
4 builder::{BuildOutput, Builder, BuilderCache},
5 source::TextEdit,
6};
7
8mod build_expressions;
9mod build_inheritance;
10mod build_items;
11mod build_members;
12mod build_statements;
13mod build_utils;
14
15pub struct JavaBuilder<'config> {
17 language: &'config JavaLanguage,
18}
19
20impl<'config> JavaBuilder<'config> {
21 pub fn new(language: &'config JavaLanguage) -> Self {
23 Self { language }
24 }
25}
26
27impl<'config> Builder<JavaLanguage> for JavaBuilder<'config> {
28 fn build<'a, S: Source + ?Sized>(&self, text: &S, edits: &[TextEdit], cache: &'a mut impl BuilderCache<JavaLanguage>) -> BuildOutput<JavaLanguage> {
29 let parser = JavaParser::new(self.language);
30 let output = parser.parse(text, edits, cache);
31 let result = output.result.map(|green| self.build_root(green, &text.get_text_in((0..text.length()).into())));
32 oak_core::errors::OakDiagnostics { result, diagnostics: output.diagnostics }
33 }
34}