@@ -521,4 +521,59 @@ impl Getter for JavaCode {
521521 _ => SpaceKind :: Unknown ,
522522 }
523523 }
524+
525+ // fn get_func_space_name<'a>(node: &Node, code: &'a [u8]) -> Option<&'a str> {
526+ // if let Some(name) = node.object().child_by_field_name("name") {
527+ // let code = &code[name.start_byte()..name.end_byte()];
528+ // std::str::from_utf8(code).ok()
529+ // } else {
530+ // Some("<anonymous>")
531+ // }
532+ // }
533+
534+ fn get_op_type ( node : & Node ) -> HalsteadType {
535+ use Java :: * ;
536+
537+ // keywords, operators, literals: https://docs.oracle.com/javase/specs/jls/se18/html/jls-3.html#jls-3.12
538+ // https://www.geeksforgeeks.org/software-engineering-halsteads-software-metrics/?msclkid=5e181114abef11ecbb03527e95a34828
539+ //
540+ // comments not considered
541+ // Operator: function calls?
542+ // Operator: control flow
543+ // Operator: keywords
544+ // Operator: brackets and comma and terminators
545+ // Operator: operators
546+ // Operator: InstanceOf
547+ // Operator: .
548+ // Operand: struct name
549+ // Operand: vars and const
550+
551+ let typ = node. object ( ) . kind_id ( ) ;
552+ match typ. into ( ) {
553+ // LPAREN | COMMA | STAR | GTGT | COLON | SEMI | Return | Break | Continue | If | Else
554+ // | Switch | Case | Default | For | While | New | Try | Catch | Throw | Throws
555+ // | Throws2 | EQ | EQEQ | AMP | AMPAMP | AMPEQ | LT | LTLT | LTEQ | LTLTEQ | BANGEQ
556+ // | GTEQ | GTGTEQ | GTGTGT | GTGTGTEQ | PLUSEQ | BANG | STAREQ | SLASHEQ | PERCENTEQ
557+ // | CARET | CARETEQ | LBRACE | RBRACE | QMARK | Instanceof
558+ // Operator: function calls?
559+ MethodInvocation
560+ // Operator: control flow
561+ | If | Else | Switch | Case | Try | Catch | Throw | Throws | Throws2 | For | While | Continue | Break | Do | Finally
562+ // Operator: keywords
563+ | New | Return | Default | Abstract | Assert | Instanceof | Extends | Final | Implements | Transient | Synchronized | Super | This
564+ // Operator: brackets and comma and terminators (separators)
565+ | SEMI | COMMA | COLONCOLON | LBRACE | LBRACK | LPAREN | RBRACE | RBRACK | RPAREN | DOTDOTDOT | DOT
566+ // Operator: operators
567+ | EQ | LT | GT | BANG | TILDE | QMARK | COLON // no grammar for lambda operator ->
568+ | EQEQ | LTEQ | GTEQ | BANGEQ | AMPAMP | PIPEPIPE | PLUSPLUS | DASHDASH
569+ | PLUS | DASH | STAR | SLASH | AMP | PIPE | CARET | PERCENT | LTLT | GTGT | GTGTGT
570+ | PLUSEQ | DASHEQ | STAREQ | SLASHEQ | AMPEQ | PIPEEQ | CARETEQ | PERCENTEQ | LTLTEQ | GTGTEQ | GTGTGTEQ
571+ => HalsteadType :: Operator ,
572+ // variables, constants
573+ Identifier | Literal => HalsteadType :: Operand ,
574+ _ => HalsteadType :: Unknown ,
575+ }
576+ }
577+
578+ get_operator ! ( Java ) ;
524579}
0 commit comments