Skip to main content

oak_java/builder/
mod.rs

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
15/// Java AST builder.
16pub struct JavaBuilder<'config> {
17    language: &'config JavaLanguage,
18}
19
20impl<'config> JavaBuilder<'config> {
21    /// Create a new Java builder.
22    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}