@@ -44,7 +44,7 @@ impl PythonOdooBuilder {
4444 if sym. borrow ( ) . typ ( ) != SymType :: CLASS {
4545 return diagnostics;
4646 }
47- if !self . test_symbol_is_model ( session, & mut diagnostics) {
47+ if !self . is_symbol_model ( session, & mut diagnostics) {
4848 return diagnostics;
4949 }
5050 self . _load_class_inherit ( session, & mut diagnostics) ;
@@ -352,36 +352,10 @@ impl PythonOdooBuilder {
352352 }
353353
354354 /* true if the symbol inherits from BaseModel, Model, TransientModel, or CachedModel. symbol must be the data of rc_symbol and must be a Class */
355- fn test_symbol_is_model ( & mut self , session : & mut SessionInfo , diagnostics : & mut Vec < Diagnostic > ) -> bool {
355+ fn is_symbol_model ( & mut self , session : & mut SessionInfo , diagnostics : & mut Vec < Diagnostic > ) -> bool {
356356 let symbol = & self . symbol . clone ( ) ;
357- let odoo_symbol_tree = symbol. borrow ( ) . get_main_entry_tree ( session) ;
358- let mut sym = symbol. borrow_mut ( ) ;
359- if [ & [ Sy ! ( "BaseModel" ) ] , & [ Sy ! ( "Model" ) ] , & [ Sy ! ( "TransientModel" ) ] ] . iter ( ) . any ( |x| x == & odoo_symbol_tree. 1 . as_slice ( ) ) &&
360- // [BaseModel|Model|TransientModel]
361- ( ( // < 18.1, and we are on odoo.models.
362- compare_semver ( session. sync_odoo . full_version . as_str ( ) , "18.1" ) == Ordering :: Less
363- && odoo_symbol_tree. 0 == & [ "odoo" , "models" ]
364- ) || ( // >= 18.1, and we are on odoo.orm.models.
365- compare_semver ( session. sync_odoo . full_version . as_str ( ) , "18.1" ) >= Ordering :: Equal
366- && odoo_symbol_tree. 0 == & [ "odoo" , "orm" , "models" ]
367- ) )
368- // >= 18.3, and we are on odoo.orm.models_transient.TransientModel
369- || (
370- compare_semver ( session. sync_odoo . full_version . as_str ( ) , "18.3" ) >= Ordering :: Equal
371- && odoo_symbol_tree. 1 == & [ "TransientModel" ]
372- && odoo_symbol_tree. 0 == & [ "odoo" , "orm" , "models_transient" ]
373- )
374- // we are on odoo.orm.models_cached.CachedModel
375- || (
376- compare_semver ( session. sync_odoo . full_version . as_str ( ) , "19.1" ) >= Ordering :: Equal
377- && odoo_symbol_tree. 1 == & [ "CachedModel" ]
378- && odoo_symbol_tree. 0 == & [ "odoo" , "orm" , "models_cached" ]
379- )
380- {
381- //we don't want to compare these classes with themselves, so we exit early
382- return false ;
383- }
384- if sym. as_class_sym ( ) . bases . is_empty ( ) {
357+ // let sym = symbol.borrow();
358+ if symbol. borrow ( ) . as_class_sym ( ) . bases . is_empty ( ) {
385359 return false ;
386360 }
387361 let mut base_model_tree = ( vec ! [ Sy !( "odoo" ) , Sy !( "models" ) ] , vec ! [ Sy !( "BaseModel" ) ] ) ;
@@ -405,41 +379,37 @@ impl PythonOdooBuilder {
405379 // Check if the symbol is exactly BaseModel, Model or TransientModel
406380 // BaseModel, Model, or TransientModel are abstract base classes, we don't want to mark them as models
407381 if Rc :: ptr_eq ( symbol, & base_model_syms[ 0 ] )
408- || model_syms. first ( ) . is_some_and ( |s| Rc :: ptr_eq ( symbol, s) )
409- || transient_syms. first ( ) . is_some_and ( |s| Rc :: ptr_eq ( symbol, s) )
382+ || model_syms. iter ( ) . any ( |s| Rc :: ptr_eq ( symbol, s) )
383+ || transient_syms. iter ( ) . any ( |s| Rc :: ptr_eq ( symbol, s) )
410384 {
411385 return false ;
412386 }
413387 if compare_semver ( session. sync_odoo . full_version . as_str ( ) , "19.1" ) >= Ordering :: Equal {
414388 let cached_model_tree = ( vec ! [ Sy !( "odoo" ) , Sy !( "orm" ) , Sy !( "models_cached" ) ] , vec ! [ Sy !( "CachedModel" ) ] ) ;
415389 let cached_model_syms = session. sync_odoo . get_symbol ( session. sync_odoo . config . odoo_path . as_ref ( ) . unwrap ( ) , & cached_model_tree, u32:: MAX ) ;
416- if cached_model_syms. first ( ) . is_some_and ( |s| Rc :: ptr_eq ( symbol, s) ) {
390+ if cached_model_syms. iter ( ) . any ( |s| Rc :: ptr_eq ( symbol, s) ) {
417391 return false ;
418392 }
419393
420394 }
421- if !sym . as_class_sym ( ) . inherits ( & base_model_syms[ 0 ] , & mut None ) {
395+ if !symbol . borrow ( ) . as_class_sym ( ) . inherits ( & base_model_syms[ 0 ] , & mut None ) {
422396 return false ;
423397 }
398+ let mut sym = symbol. borrow_mut ( ) ;
424399 sym. as_class_sym_mut ( ) . _model = Some ( ModelData :: new ( ) ) ;
425400 // Check if we have a _register = False
426401 let register = sym. get_symbol ( & ( vec ! [ ] , vec ! [ Sy !( "_register" ) ] ) , u32:: MAX ) ;
427402 if let Some ( register) = register. last ( ) {
428403 let loc_register = register. borrow ( ) ;
429- let register_evals = & loc_register. evaluations ( ) . unwrap ( ) ;
404+ let register_evals = loc_register. evaluations ( ) . unwrap ( ) ;
430405 if register_evals. len ( ) == 1 { //we don't handle multiple values
431- let eval = & register_evals[ 0 ] ;
432- let value = eval. follow_ref_and_get_value ( session, & mut None , diagnostics) ;
433- if value. is_some ( ) {
434- let value = value. unwrap ( ) ;
435- if let EvaluationValue :: CONSTANT ( Expr :: BooleanLiteral ( b) ) = value {
436- if !b. value {
437- return false ;
438- }
406+ let maybe_value = register_evals[ 0 ] . follow_ref_and_get_value ( session, & mut None , diagnostics) ;
407+ if let Some ( EvaluationValue :: CONSTANT ( Expr :: BooleanLiteral ( b) ) ) = maybe_value {
408+ if !b. value {
409+ return false ;
439410 }
440411 }
441412 }
442- return true ;
443413 }
444414 true
445415 }
0 commit comments