oak-java 0.0.11

High-performance incremental Java language parser for the oak ecosystem with flexible configuration, supporting modern Java features and object-oriented programming.
Documentation
use crate::{builder::JavaBuilder, language::JavaLanguage, lexer::token_type::JavaTokenType, parser::element_type::JavaElementType};
use oak_core::tree::red_tree::{RedNode, RedTree};

impl<'config> JavaBuilder<'config> {
    pub(crate) fn extract_inheritance(&self, node: RedNode<JavaLanguage>, source: &str, class_name: &str, modifiers: &[String]) -> (Option<String>, Vec<String>) {
        let mut extends = None;
        let mut implements = Vec::new();

        let mut found_extends = false;
        let mut found_implements = false;

        for child in node.children() {
            match child {
                RedTree::Leaf(leaf) => {
                    if leaf.kind == JavaTokenType::Extends {
                        found_extends = true;
                        found_implements = false;
                    }
                    else if leaf.kind == JavaTokenType::Implements {
                        found_extends = false;
                        found_implements = true;
                    }
                }
                RedTree::Node(sub_node) => {
                    if sub_node.green.kind == JavaElementType::Identifier {
                        let id = self.get_text(sub_node.span(), source).trim().to_string();
                        if id != class_name && !modifiers.contains(&id) {
                            if found_extends {
                                extends = Some(id);
                                found_extends = false;
                            }
                            else if found_implements {
                                implements.push(id);
                            }
                        }
                    }
                }
            }
        }
        (extends, implements)
    }
}