#![allow(clippy::wildcard_imports, clippy::enum_glob_use)]
#![allow(
clippy::cast_precision_loss,
clippy::cast_possible_truncation,
clippy::cast_sign_loss
)]
use super::*;
impl Npa for GroovyCode {
fn compute<'a>(node: &Node<'a>, _code: &'a [u8], stats: &mut Stats) {
use Groovy::*;
if Self::is_func_space(node) && stats.is_disabled() {
stats.is_class_space = true;
}
match node.kind_id().into() {
ClassBody | EnumBody => {
let is_interface_like = groovy_body_is_interface_like(node);
for declaration in node
.children()
.filter(|n| matches!(n.kind_id().into(), FieldDeclaration))
{
let attributes = declaration
.children()
.filter(|n| matches!(n.kind_id().into(), VariableDeclarator))
.count();
if is_interface_like {
stats.interface_na += attributes;
stats.interface_npa += attributes;
} else {
stats.class_na += attributes;
if groovy_has_explicit_public(&declaration) {
stats.class_npa += attributes;
}
}
}
}
_ => {}
}
}
}