rusty-javac 0.2.3

A Java compiler written in Rust.
Documentation
use crate::ast::{JavaSyntaxKind, JavaSyntaxNode};

pub(super) const ACC_PUBLIC: u16 = 0x0001;
const ACC_PRIVATE: u16 = 0x0002;
const ACC_PROTECTED: u16 = 0x0004;
const ACC_STATIC: u16 = 0x0008;
const ACC_FINAL: u16 = 0x0010;
const ACC_SYNCHRONIZED: u16 = 0x0020;
pub(super) const ACC_NATIVE: u16 = 0x0100;
pub(super) const ACC_ABSTRACT: u16 = 0x0400;

pub(super) fn access_flags(node: &JavaSyntaxNode) -> u16 {
    node.descendants_with_tokens()
        .filter_map(|element| element.into_token())
        .fold(0, |flags, token| match token.kind() {
            JavaSyntaxKind::PublicKw => flags | ACC_PUBLIC,
            JavaSyntaxKind::PrivateKw => flags | ACC_PRIVATE,
            JavaSyntaxKind::ProtectedKw => flags | ACC_PROTECTED,
            JavaSyntaxKind::StaticKw => flags | ACC_STATIC,
            JavaSyntaxKind::FinalKw => flags | ACC_FINAL,
            JavaSyntaxKind::SynchronizedKw => flags | ACC_SYNCHRONIZED,
            JavaSyntaxKind::NativeKw => flags | ACC_NATIVE,
            JavaSyntaxKind::AbstractKw => flags | ACC_ABSTRACT,
            _ => flags,
        })
}

pub(super) fn has_code(access_flags: u16) -> bool {
    access_flags & (ACC_ABSTRACT | ACC_NATIVE) == 0
}