use super::LanguageSemantics;
pub static JAVA_SEMANTICS: LanguageSemantics = LanguageSemantics {
language: "java",
function_def_kinds: &[
"method_declaration",
"constructor_declaration",
"lambda_expression",
"compact_constructor_declaration",
],
if_kinds: &["if_statement"],
loop_kinds: &[
"for_statement",
"enhanced_for_statement",
"while_statement",
"do_statement",
],
variable_declaration_kinds: &[
"local_variable_declaration",
"field_declaration",
"constant_declaration",
],
assignment_kinds: &["assignment_expression"],
augmented_assignment_kinds: &["assignment_expression"],
return_kinds: &["return_statement"],
call_kinds: &[
"method_invocation",
"object_creation_expression",
"explicit_constructor_invocation",
],
try_catch_kinds: &["try_statement", "try_with_resources_statement"],
throw_kinds: &["throw_statement"],
string_literal_kinds: &["string_literal", "text_block", "character_literal"],
numeric_literal_kinds: &[
"decimal_integer_literal",
"hex_integer_literal",
"octal_integer_literal",
"binary_integer_literal",
"decimal_floating_point_literal",
"hex_floating_point_literal",
],
boolean_literal_kinds: &["true", "false"],
null_literal_kinds: &["null_literal"],
parameter_kinds: &["formal_parameter", "spread_parameter", "receiver_parameter"],
class_kinds: &[
"class_declaration",
"interface_declaration",
"enum_declaration",
"record_declaration",
"annotation_type_declaration",
],
import_kinds: &["import_declaration"],
block_scope_kinds: &["block", "static_initializer", "instance_initializer"],
break_kinds: &["break_statement"],
continue_kinds: &["continue_statement"],
switch_kinds: &["switch_expression", "switch_statement"],
case_kinds: &["switch_block_statement_group", "switch_rule"],
member_access_kinds: &["field_access", "array_access", "method_reference"],
binary_expression_kinds: &["binary_expression"],
identifier_kinds: &["identifier", "type_identifier"],
unsafe_block_kinds: &[],
defer_kinds: &[],
spawn_kinds: &[],
condition_field: "condition",
consequence_field: "consequence",
alternative_field: "alternative",
body_field: "body",
initializer_field: "value",
left_field: "left",
right_field: "right",
name_field: "name",
arguments_field: "arguments",
value_field: "value",
operator_field: "operator",
object_field: "object",
property_field: "field",
function_field: "name",
parameters_field: "parameters",
return_type_field: "type",
type_field: "type",
handler_field: "handler",
finalizer_field: "finalizer",
};
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_java_function_kinds() {
assert!(JAVA_SEMANTICS.is_function_def("method_declaration"));
assert!(JAVA_SEMANTICS.is_function_def("constructor_declaration"));
assert!(JAVA_SEMANTICS.is_function_def("lambda_expression"));
assert!(JAVA_SEMANTICS.is_function_def("compact_constructor_declaration"));
assert!(!JAVA_SEMANTICS.is_function_def("method_invocation"));
}
#[test]
fn test_java_loop_kinds() {
assert!(JAVA_SEMANTICS.is_loop("for_statement"));
assert!(JAVA_SEMANTICS.is_loop("enhanced_for_statement"));
assert!(JAVA_SEMANTICS.is_loop("while_statement"));
assert!(JAVA_SEMANTICS.is_loop("do_statement"));
assert!(!JAVA_SEMANTICS.is_loop("if_statement"));
}
#[test]
fn test_java_null() {
assert!(JAVA_SEMANTICS.is_null_literal("null_literal"));
assert!(!JAVA_SEMANTICS.is_null_literal("nil"));
}
#[test]
fn test_java_try_catch() {
assert!(JAVA_SEMANTICS.is_try_catch("try_statement"));
assert!(JAVA_SEMANTICS.is_try_catch("try_with_resources_statement"));
assert!(JAVA_SEMANTICS.is_throw("throw_statement"));
}
#[test]
fn test_java_class_kinds() {
assert!(JAVA_SEMANTICS.is_class("class_declaration"));
assert!(JAVA_SEMANTICS.is_class("interface_declaration"));
assert!(JAVA_SEMANTICS.is_class("enum_declaration"));
assert!(JAVA_SEMANTICS.is_class("record_declaration"));
assert!(JAVA_SEMANTICS.is_class("annotation_type_declaration"));
}
#[test]
fn test_java_switch_kinds() {
assert!(JAVA_SEMANTICS.is_switch("switch_expression"));
assert!(JAVA_SEMANTICS.is_switch("switch_statement"));
assert!(JAVA_SEMANTICS.is_case("switch_block_statement_group"));
assert!(JAVA_SEMANTICS.is_case("switch_rule"));
}
#[test]
fn test_java_literal_kinds() {
assert!(JAVA_SEMANTICS.is_string_literal("string_literal"));
assert!(JAVA_SEMANTICS.is_string_literal("text_block"));
assert!(JAVA_SEMANTICS.is_string_literal("character_literal"));
assert!(JAVA_SEMANTICS.is_numeric_literal("decimal_integer_literal"));
assert!(JAVA_SEMANTICS.is_numeric_literal("hex_integer_literal"));
assert!(JAVA_SEMANTICS.is_numeric_literal("binary_integer_literal"));
assert!(JAVA_SEMANTICS.is_numeric_literal("decimal_floating_point_literal"));
assert!(JAVA_SEMANTICS.is_boolean_literal("true"));
assert!(JAVA_SEMANTICS.is_boolean_literal("false"));
assert!(JAVA_SEMANTICS.is_literal("string_literal"));
assert!(JAVA_SEMANTICS.is_literal("decimal_integer_literal"));
assert!(JAVA_SEMANTICS.is_literal("true"));
assert!(JAVA_SEMANTICS.is_literal("null_literal"));
}
#[test]
fn test_java_member_access() {
assert!(JAVA_SEMANTICS.is_member_access("field_access"));
assert!(JAVA_SEMANTICS.is_member_access("array_access"));
assert!(JAVA_SEMANTICS.is_member_access("method_reference"));
}
#[test]
fn test_java_call_kinds() {
assert!(JAVA_SEMANTICS.is_call("method_invocation"));
assert!(JAVA_SEMANTICS.is_call("object_creation_expression"));
assert!(JAVA_SEMANTICS.is_call("explicit_constructor_invocation"));
}
#[test]
fn test_java_control_flow() {
assert!(JAVA_SEMANTICS.is_control_flow("if_statement"));
assert!(JAVA_SEMANTICS.is_control_flow("for_statement"));
assert!(JAVA_SEMANTICS.is_control_flow("while_statement"));
assert!(JAVA_SEMANTICS.is_control_flow("switch_statement"));
assert!(JAVA_SEMANTICS.is_control_flow("try_statement"));
assert!(JAVA_SEMANTICS.is_control_flow("return_statement"));
assert!(JAVA_SEMANTICS.is_control_flow("break_statement"));
assert!(JAVA_SEMANTICS.is_control_flow("continue_statement"));
assert!(JAVA_SEMANTICS.is_control_flow("throw_statement"));
}
#[test]
fn test_java_no_unsafe_defer_spawn() {
assert!(!JAVA_SEMANTICS.is_unsafe_block("unsafe_block"));
assert!(!JAVA_SEMANTICS.is_defer("defer_statement"));
assert!(!JAVA_SEMANTICS.is_spawn("go_statement"));
}
#[test]
fn test_java_identifiers() {
assert!(JAVA_SEMANTICS.is_identifier("identifier"));
assert!(JAVA_SEMANTICS.is_identifier("type_identifier"));
}
#[test]
fn test_java_block_scopes() {
assert!(JAVA_SEMANTICS.is_block_scope("block"));
assert!(JAVA_SEMANTICS.is_block_scope("static_initializer"));
assert!(JAVA_SEMANTICS.is_block_scope("instance_initializer"));
}
}